gpt4 book ai didi

c++ - DirectX 12 - 描述符堆

转载 作者:搜寻专家 更新时间:2023-10-31 02:16:11 24 4
gpt4 key购买 nike

我刚刚开始学习新的 DirectX 12 API。我想在 dx12 之上编写某种渲染引擎,并且在初始化期间我应该创建描述符堆。这样做的问题是,此时我不知道将来会创建多少资源 View 。例如如果我想包括一些需要渲染到纹理方法的后期处理效果,我必须为我要渲染到的纹理创建渲染目标 View 。这些 RTV 的数量可能会有所不同。那么如何创建足够大的描述符堆来应对各种情况呢?

有什么建议吗?

最佳答案

描述符堆的想法是让一个大的 gpu 可见,以及一堆 cpu 可见。这是因为 SetDescriptorHeaps 是一项开销很大的操作,您不希望在一帧中调用它超过一次或两次。

您需要使用大的 gpu 可见堆作为环形缓冲区,为您要准备的当前绘制或分派(dispatch)分配空间,并从您拥有的各种 cpu 可见描述符中进行复制。您可以拥有任意数量的 cpu 可见描述符堆,它或多或少只是将常规分配包装到 d3d 对象中。

拷贝没有任何生命周期保护,由 CPU 立即执行,注意不要翻转可能仍在 GPU 上使用的描述符。

我在这里谈论的是 SRV 和采样器。 RTV 仅对 CPU 可见,您可以根据需要自由创建任意数量的描述符堆,如果您愿意,每个描述符一个,并且不太关心 d3d 对象开销,它不会对运行时产生性能影响。

关于c++ - DirectX 12 - 描述符堆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37277332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com