如何解决我可以在执行时安全地更改着色器可见的 DescriptorHeap 的内容吗
根据Descriptor Heaps Overview - Synchronization,更改执行中引用的描述符(通过 ID3D12GraphicsCommandList::SetGraphicsRootDescriptorTable)可能会引发竞争条件。
但是我可以安全地更改当前执行中未引用的描述符吗?引用描述符和非引用描述符都在同一个 DescriptorHeap 中,并且通过调用 ID3D12GraphicsCommandList::SetDescriptorHeaps 将堆设置为 CommandList。
解决方法
如果您可以保证在命令列表执行期间不会使用描述符堆中的位置,则完全有可能覆盖该位置。
例如,可以跟踪是否不再需要某个资源,然后将使用该资源的描述符位置标记为空闲(一旦 commandList 被处理,使用栅栏),然后使用这些先前的位置分配新的资源(您可以在运行不再使用该资源的较新 commandList 时执行此操作)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。