中文第一计算机图形学社区OpenGPU 版权所有2007-2018

 找回密码
 注册

扫一扫,访问微社区

搜索
查看: 2519|回复: 4

请教关于在D3D12中Descriptor的使用

[复制链接]
发表于 2017-7-26 21:01:25 | 显示全部楼层 |阅读模式
我跟了一下 Klay 的代码,在使用 Sampler 的时候,Sampler 的 Descriptor 是创建在 D3D12ShaderObject 对象中的。
在渲染时切换 Shader 之后就需要重新 SetDescriptor ,因为每个 D3D12ShaderObject 都有自己的 Sampler Heap。

可是我在看 MSDN 的时候其中有一段是这么说的:

Switching heapsIt is acceptable for an application to switch heaps within the same command list or in different ones using the SetDescriptorHeaps and Reset APIs.  On some hardware, this can be an expensive operation, requiring a GPU stall to flush all work that depends on the currently bound descriptor heap.  As a result, if descriptor heaps must be changed, applications should try to do so when the GPU workload is relatively light, perhaps limiting changes to the start of a command list.

https://msdn.microsoft.com/en-us/library/mt709128(v=vs.85).aspx

在网上也发现别人说过切换 Heap 代价很大
https://www.gamedev.net/forums/topic/676777-d3d12-what-is-the-benefit-of-descriptor-table-ranges/

我想问的是,这个代价到底有多大?Klay 现在的做法是临时先凑合能用还是说这个开销根本没有什么可担心的?
相比 Klay 的做法,如果在渲染前把所需要的 Sampler 全都 Create/Copy 到 Heap 中哪个代价更大呢?
发表于 2017-7-27 01:24:35 | 显示全部楼层
是临时凑活的方案。切换的开销还是挺大的。
 楼主| 发表于 2017-7-27 01:54:39 | 显示全部楼层
gongminmin 发表于 2017-7-27 01:24
是临时凑活的方案。切换的开销还是挺大的。

也就是在一次 ExecuteCommandList 中能不换就不换,是吧
发表于 2017-7-27 12:28:57 | 显示全部楼层
Phantom 发表于 2017-7-27 01:54
也就是在一次 ExecuteCommandList 中能不换就不换,是吧

发表于 2018-10-24 09:00:04 | 显示全部楼层
顶!!!!!!!












本站发布红包,见者有份!

每人每天都可免费领取一次!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|关于我们|小黑屋|Archiver|手机版|中文第一计算机图形学社区OpenGPU

GMT+8, 2019-1-18 08:27 , Processed in 0.039280 second(s), 19 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表