【问题标题】:GetResourceBindingDescByName in DirectX 11 can only get the first cbufferDirectX 11中的GetResourceBindingDescByName只能获取第一个cbuffer
【发布时间】:2016-06-21 09:40:37
【问题描述】:

我正在学习 DirectX 11 并已达到基本的 HLSL 部分。我想在顶点着色器中使用多个常量缓冲区,所以我需要为VSSetConstantBuffers 找到正确的StartSlot。我在谷歌上搜索,发现有人建议使用GetResourceBindingDescByName

我试过GetResourceBindingDescByName,但发现它只能为第一个cbuffer得到正确的StartSlot。例如,在我的顶点着色器中:

cbuffer Test1
{
    float4 a;
};

cbuffer Test2
{
    float4 b;
};

现在GetResourceBindingDescByName("Test1", &bind_desc) 可以正常工作,但GetResourceBindingDescByName("Test2", &bind_desc) 将失败(返回E_INVAILDARG)。

谁能帮帮我?

【问题讨论】:

  • 你的着色器中是否使用了 b?它可能已被优化条带化。
  • 谢谢。我只是在我的着色器中使用 a 。我在着色器代码中添加了对 b 的引用,问题就解决了。您能回答这个问题,以便我将其标记为该问题的答案吗?

标签: directx shader directx-11 hlsl


【解决方案1】:

反射仅包含着色器使用的符号。正如 cmets 中所确认的,b 没有被使用,一旦 b 在代码中被引用,问题就解决了,而不是通过优化去除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多