什么是 Vulkan 的 LoadOp 和 StoreOp 的 DirectX 12 等效项?

What is DirectX 12 equivalent of Vulkan's LoadOp and StoreOp?

在许多 D3D 12 教程和书籍中,清除渲染目标视图时只清除深度模板缓冲区。这是大多数情况,但我遇到了特殊情况,我想知道即使清除了另一个缓冲区,是否还保留了缓冲区数据的数据。比如清除render target时是否保留了depth stencil buffer的数据。

在Vulkan中,Metal也提供了LoadOp和StoreOp来保证command queue开始或者执行结束时的buffer数据。但是,我在 D3D 12 中找不到类似的选项。

据我所知,在历史上,D3D不保证清除时的缓冲区数据。对吗?

不然,是不是总能保全?如果微软有这方面的文章,请告诉我。

您可以使用'ID3D12GraphicsCommandList::ClearRenderTargetView' 清除单个渲染目标。所有其他缓冲区保持不变。 'ID3D12GraphicsCommandList::ClearDepthStencilView' 可用于清除深度 and/or 模板。如果您不想清除它们,可以将 nullptr 传递给 depth 或 stencil。 还有一个 'ClearUnorderedAccessViewFloat/Int' 用于非渲染目标