【问题标题】:Unbinding shader resources解除绑定着色器资源
【发布时间】:2015-04-21 21:58:44
【问题描述】:

如果您想在 directx11 中取消绑定着色器资源,我发现的所有代码都执行以下操作:

ID3D10ShaderResourceView* nullSRV[1] = {nullptr};
context->PSSetShaderResources(0, 1, &nullSRV);

为什么不简单地使用它?

context->PSSetShaderResources(0, 0, nullptr);

文档 (https://msdn.microsoft.com/en-us/library/windows/desktop/ff476473%28v=vs.85%29.aspx) 似乎支持它,两者之间真的有什么区别吗?

【问题讨论】:

  • 请注意,您并没有取消绑定所有着色器资源,只是第一个插槽。
  • 虽然我同意第二种形式会更好(甚至更好 - PSResetShaderResources() 或类似的东西),但不幸的是,该 MSDN 链接中没有任何内容表明它受支持。因为我相信很多人会尝试做你想做的事情,所以如果文档明确说明不允许无效代码以及解除资源绑定的正确方法是什么,那就太好了。 @Chuck Walbourn,你怎么看?

标签: directx directx-11


【解决方案1】:

在第一种情况下,您要解除绑定一个 SRV,从插槽 0 开始。在第二种情况下,您没有解除任何绑定,因为NumViews 为零。如果您想在第二种情况下解除绑定,则必须使用:

context->PSSetShaderResources(0, 1, nullptr);

但是,这会导致运行时崩溃:

D3D11 CORRUPTION: ID3D11DeviceContext::PSSetShaderResources: Third parameter corrupt or unexpectedly NULL. [ MISCELLANEOUS CORRUPTION #15: CORRUPTED_PARAMETER3]

这就是使用第一种形式的原因。

【讨论】:

    猜你喜欢
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 2012-12-27
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多