Phi*_*tor 4 c++ directx directx-12
我刚刚开始学习新的 DirectX 12 API。我想在 dx12 之上编写一种渲染引擎,并且在初始化期间我应该创建描述符堆。问题在于,此时我不知道我将来会创建多少资源视图。例如,如果我想包含一些需要渲染到纹理方法的后期处理效果,我必须为我渲染的纹理创建渲染目标视图。不过,这些 RTV 的数量可能会有所不同。那么如何创建足够大的描述符堆以应对各种情况呢?
有什么建议吗?
描述符堆的想法是让一个大的 gpu 可见,和一堆 cpu 可见。这是因为SetDescriptorHeaps
是一个代价高昂的操作,您不想在一帧中多次调用它。
您需要使用大 gpu 可见堆作为环形缓冲区,为要准备的当前绘制或调度分配空间,并从您拥有的各种 cpu 可见描述符中复制。您可以拥有任意数量的 cpu 可见描述符堆,它或多或少只是常规分配包装到 d3d 对象中。
副本没有任何生命周期保护,由 cpu 立即执行,注意不要翻转可能仍在 GPU 上使用的描述符。
我在这里谈论的是 SRV 和采样器。RTV 仅对 CPU 可见,您可以根据需要自由创建任意数量的描述符堆,如果您愿意,每个描述符一个,并且不太关心 d3d 对象开销,它对运行时没有性能影响。
归档时间: |
|
查看次数: |
2173 次 |
最近记录: |