游戏缺少DirectX(directx)
directx
这样一组技术:它们旨在使基于Windows的计算机成为运行和显示具有丰富多媒体元素(例如全色图形、视频、3D动画和丰富音频)的应用程序的理想平台。DirectX包括安全和性能更新程序,以及许多涵盖所有技术的新功能。应用程序可以通过使用DirectXAPI来访问这些新功能。
简单来说DirectX就是为了弥补Windows系统对图形、声音处理能力的不足,最起码,你现在玩游戏如果DirectX没安装游戏就不能玩,或者是版本低也不可以
不要将GraphicsQueue中的ComputeTask跟专属的ComputeQueue中的ComputeTask重叠在一起(意思是并行执行?)
这个数值默认是3,也就意味着FPS不能高于2*RefershRate,如果显示器评率是60HZ,也就意味着我们的帧率不能超过120FPS
设置描述符:接下来,开发者需要为RootSignature中的每个资源绑定设置描述符。描述符是一个数据结构,包含了指向资源(如纹理、缓冲区等)的指针。这些描述符可以存储在描述符堆(DescriptorHeap)中,以便在运行时进行高效访问。
游戏缺少DirectX
如果我们希望异步ComputeTask与GraphicsTask能够很好的并行执行,就需要确保所有frames都使用同一个CBV/SRV/UAV/descriptorheap表示的ring-buffer(为什么?)
执行命令列表:最后,将命令列表提交给GPU以进行执行。在执行过程中,GPU将根据RootSignature中的描述符访问所需的资源,并根据Shader进行渲染或计算操作。
这种做*导致异步computequeue中存在孔洞(意思是在执行的时候会需要等待,导致不能真正做到并行?)
这种做法就会导致GPU处于闲置(不会执行上一帧的内容吗?),从而无法很好的实现CPU跟GPU之间的并行
除了有大量drawcall或者dispatchcall需要用到常量SRV/UAV的情况,不要将常量SRV/UAV直接放到rootsignature中。
DirectX官方下载
在具有相同或者相近drawcall数的时候,可以考虑对allocators进行重用(不相近的话就不能重用?)
当显存快要超过预算时,可以考虑在执行commandlist前后使用MakeResident/Evict做一下清理
在使用一个单独的computecommandqueue的时候,需要仔细考虑这种做法是否真的有帮助(意思是这种做法虽然在某些情况下可以有所收益,也会因为操作不当而出现性能下降?)