【问题标题】:What is DirectX 12 equivalent of Vulkan's LoadOp and StoreOp?什么是 DirectX 12 等效于 Vulkan 的 LoadOp 和 StoreOp?
【发布时间】:2019-11-06 22:29:36
【问题描述】:

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

在 Vulkan 中,即使是 Metal,也提供了 LoadOp 和 StoreOp 来保证命令队列开始或完成执行时的缓冲区数据。但是,我在 D3D 12 中找不到类似的选项。

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

否则,它总是保证保存吗?如果有任何微软关于这方面的文章,请告诉我。

【问题讨论】:

    标签: directx directx-12


    【解决方案1】:

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

    【讨论】:

    • 我已经知道了。但是在某些驱动程序中,即使未绑定,它们在清除渲染目标时也不会保留深度模板缓冲区。这意味着 Direct3D 没有向 VGA 供应商指定有关它的标准。因此我想知道它在 D3D 12 中是否受到限制。无论如何,我搬到了 Vulkan。谢谢。
    猜你喜欢
    • 2018-11-27
    • 2016-02-03
    • 2012-03-31
    • 2016-10-26
    • 2019-04-16
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    相关资源
    最近更新 更多