首页 快讯 正文

kmd(km的全称)

wx头像 wx 2024-01-10 05:25:18 6
...

  翻译:赵菁菁(轩语轩缘)

  审校:李笑达(DDBC4747)

  这篇文章着眼于一些有趣点,可以帮助到id软件的DOOM® Vulkan?工作,从AMD的游戏团队的角度,传递一些可以帮助大家利用Vulkan工作的小贴士。

  个人动机

  DOOM正确结合了混合的正向和延迟图形管线,这让DOOM在受GPU约束时也能够经得住高帧率。此外DOOM还支持4:3长宽比。kmd我知道Vulkan能让我以垂直同步的160 Hz玩这个游戏,不会在我的CRT TV上丢失帧,为的是最终体验低延迟的、无抖动的完美运动。所以我抓住机会,实现这一目标,并得到了最终的奖励,在使用基于Radeon? Fury X的自定义OnGUI显示设置开发箱的情况下(如上图),能够玩通游戏。

  再次感谢Billy Khan,Robert Duffy,和招待我们帮助现场的id软件,和Axel Gneiting,Jean Geffroy,以及Tiago Sousa,在DOOM为Vulkan开辟出了非常好的道路。

  为什么为PC游戏选择Vulkankmd

  Axel Gneiting在DSOGaming DOOM 技术面试中的回复强调了以下重点:

  “在工具方面,目前在RenderDoc中对于Vulkan有很好的支持,涵盖了我们大多数调试的需要。我们选择Vulkan,因为它使我们能够支持Windows 7和Windows 8,这两款操作系统仍占有非常大的市场份额,而且Vulkan将®淘汰DirectX 12。最重要的是,Vulkan有一种扩展机制,允许我们与GPU厂商密切合作,为每个硬件做特定的优化。”

  各种通用的AMD Vulkan扩展很快为DOOM完成了特定的优化。关于AMD工作包括:首先与ID软件配合工作,了解他们的需求,书写扩展说明书,为了GLSL到SPIR-V的转移,得到那些扩展的原型glslangValidator.exe支持(之后发送pull请求来并入公共工具),着色器编译器和驱动团队的实现,最后是驱动程序QA团队的测试工作。

  Vulkan如何适用于AMD驱动程序栈

  我们经常谈论在AMD的驱动程序栈中,Vulkan和DirectX 12都是最高级的API,要想理解为什么,最好的方式就是看看它们在驱动程序中都是如何实现的。Windows®上的图形驱动程序栈分为三个主要组成部分:

AMD内核模式驱动(KMD)——执行来自WDDM(Windows显示驱动模型)的命令,直接与GPU相互作用。

微软的层(WDDM)——代表OS控制内存管理和调度决策。

AMD用户模式驱动(UMD)——一个DLL,实现了API,为WDDM提供指令。

  用户模型驱动由两层实现:

平台抽象库(PAL) ——Mantle 的直接进化版本,为DirectX 12, Mantle, 和 Vulkan提供了一个共享源后端。

kmd(km的全称)

可安装客户驱动程序(ICD)——这是对于PAL的简单包装,它实现了特定的图形API。

  驱动栈的另一个主要部分就是编译器管线,管线有以下几层:

AMD-IL到GCN二进制码——AMD-IL是优化的AMD的中间语言,到GCN机器码。

DXASM/SPIR-V 到AMD-IL——DirectX 12和Vulkan着色器输入都缩减到AMD-IL,并被迫打入相同编译器内。

  因为DirectX 12,Vulkan和Mantle都是很清晰的API,它们自然适合在一起。驱动程序和编译器中的优化在API间共享。Vulkan与DirectX12背道而驰的重点在于:Vulkan官方上支持扩展。在硬件特征在各供应商间变得常见之前、在硬件特征达到最低标准(能够让它们在API中重新作为核心特征被引入)之前,暴露这些特征成为可能了。

  作为AMD内部开发者和其他团队间的接口,我的Vulkan扩展请求列表严重受到游戏开发者要求的影响。所有这些开发者会发推特进行评论,发表在GDC Presentation中的记录、电子邮件,我们可以收集到更多内容,了解内容的重要性。启用DOOM的工作是Vulkan的开始,在后台我们都忙于下一轮的扩展和改进。

  针对Vulkan的小贴士

  对于一些开发者来说,有了Windows 7的支持,Vulkan让我们在引擎设计中有前进的机会,而且无需局限于技术,这种技术可以在Direct3D 11的向后兼容性?路径中实现。例如Vulkan,通过分解出资源的绑定,是可能优化到每个指令缓冲区的起始位置的:“绑定一切”作为一个描述符集,当索引需要在每次绘制或每次调度特殊化时,使用推动常量提供索引(见Vulkan快速路径Presentation)。对于事件也一样,通过交叉独立工作,有可能在从属绘制或调度上避免GPU资源枯竭。Vulkan提供了可表达性来以高效的方法利用硬件。

  对现有的、早期就已经从®OpenGL或Direct3D 11迁移的引擎来讲,确保最优性能的最重要的事情如下。

  资源的池分配

  我在《Vulkan设备内存》博客中有详细介绍,在任何到Vulkan端口的早期步骤都是建立资源分配,确保让成群的较小的资源在适当的内存堆中“汇集”进入较大的分配。这对于资源的别名内存(alias memory)来说也是一个机会,不会同时使用别名内存,目的是降低总的DEVICE_LOCAL内存预算。Windows上的Vulkan vkallocatememory()分配在AMD中的驱动是WDDM分配,所以限制那些分配的数量是很重要的,避免在运行时在初始化后进行分配也很重要。自从Fiji 和 Tonga的GPU出现后,也可以通过图形队列将非块压缩格式的图片从HOST_VISIBLE拷贝到DEVICE_LOCAL,进而利用硬件德尔塔颜色压缩。

  并行指令缓冲区记录

  在确保高绘制次数的应用程序保持GPU受限中, 多个指令缓冲区记录保持并行是第一步,而且可能还有降低延迟的副作用。在CPU上保持并行可以让DOOM达到如此高的帧率。并行命令缓冲区记录相对简单,每并行记录线程至少设置一个指令池。

  异步计算支持

  异步计算的优势是它能够利用时间,否则由于固定功能限制,GPU在这段时间会闲置下来,应用程序还有可能会等待GPU为从属通道耗尽资源。性能改进因工作量的不同而变化,但在DOOM中,经常看到大约只在50%的帧上利用了异步计算,7%的整体帧性能会增加。开始结合异步计算的最佳时机是绘制几何图形时。

  异步计算的计划最好尽早完成。设计早期的一件事是图像资源的vk_sharing_mode_exclusive,这意味着任意一次只有一个队列拥有资源访问通道。这使得在渲染目标上维护DCC和已上传的非块压缩采样的图像使用的是图形队列。我看过一个3%的整体帧提升,能够让独占共享的收益比异步计算的收益高。使用独占共享需要在两个队列上复制图像势垒来实现独占所有权转移。最好早早把它计划和纳入到游戏图形的抽象/可移植性层,因为以后改进可能会很复杂。

  优化信号量和Presentation

  这一步骤包括打开GPUView,禁用垂直同步验证游戏可以充分填补GPU工作,无需管线气泡确认Presentation是完全管线的。在带有AMD的驱动程序的Windows上,最好是从异步计算队列进行Presentation。对于延迟来讲,安排游戏管线让它们只在图形队列中运行也很重要,之后经过Presentation将帧的工作过渡到异步计算队列,无需切换回图形队列来处理更多的帧(因为那会在相同队列上带来大量的延迟,其中有两帧争取时间)。

  Vulkan上Presentation的最优路径由此开始:当选择垂直同步时(或vk_present_mode_fifo_khr),请求一个2-deep的交换链来减少延迟时。请务必把vkacquirenextimagekhr()调用在帧中放置得尽可能晚,因为这个调用可能根据Vulkan标准阻塞。我建议把指令缓冲区拆分,这样一来Acquire可以恰好在记录部分之前完成,这一部分首先写入捕获的图像。只有两个信号需要连接Presentation。第一个传入Acquire调用,并设置为指令缓冲区的Wait信号量,在该缓冲区中图像存储到Acquired图像中。第二个设置为相同指令缓冲区的Signal信号量,然后设置为vkqueuepresentkhr()调用的输入。还记得在Vulkan中,规格说明书允许Acquire随机返回图像索引,所以即使用FIFO 2-deep交换链,应用程序也不能采取循环顺序(例如窗口化呈现可以位块传输,使同一图像索引准备好并且再下一个Acquire处返回)。

  测试

kmd(km的全称)

  由于Vulkan把很多曾经是驱动程序的工作交到了开发者手中,在开发过程中尽早测试每个硬件厂商是很重要的。同样,积极地在不同的主要芯片和内存配置上测试也是非常重要的。例如:如果2 GB的GPU是游戏的最小规格配置的话,一定要用满足该配置的设备测试。对于AMD CPU,最好是至少要在第二代(例如,R9 390)和第三代(如Radeon 380和Fury X),以及最新的第四代的GCN部分(如RX 480)上测试。

  Timothy Lottes是AMD开发者技术组成员。第三方网站的链接提供了方便,除非明确表示,AMD公司对这些链接网站的内容不负责,也不表示认可。

  点击一下

  立即阅读近期热文

厚积薄发 | 游戏引擎十年技术点滴

Unity Resources资源打包以及加载(一)

西川善司《神秘海域》的图形分析(上篇)

西川善司《神秘海域》的图形分析(下篇)

……

添加小编微信,发送“程序”,可享双重福利

1.加入GAD程序猿交流基地

获取行业干货资讯

观看大牛分享直播

2.直接领取60G独家程序资料库

内含

腾讯内部分享、文章教程、视频教程等

全套资料

↓长按添加小编GAD-沫沫↓

本文地址:https://www.changhecl.com/453480.html

标签列表

退出请按Esc键