我可以在执行时安全地更改着色器可见的 DescriptorHeap 的内容吗

问题描述

根据Descriptor Heaps Overview - Synchronization,更改执行中引用的描述符(通过 ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable)可能会引发竞争条件。
但是我可以安全地更改当前执行中未引用的描述符吗?引用描述符和非引用描述符都在同一个 DescriptorHeap 中,并且通过调用 ID3D12GraphicsCommandList::SetDescriptorHeaps 将堆设置为 CommandList。

enter image description here

解决方法

如果您可以保证在命令列表执行期间不会使用描述符堆中的位置,则完全有可能覆盖该位置。

例如,可以跟踪是否不再需要某个资源,然后将使用该资源的描述符位置标记为空闲(一旦 commandList 被处理,使用栅栏),然后使用这些先前的位置分配新的资源(您可以在运行不再使用该资源的较新 commandList 时执行此操作)。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...