DirectX 11中的GetResourceBindingDescByName只能获取第一个cbuffer

GetResourceBindingDescByName in DirectX 11 can only get the first cbuffer

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

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

cbuffer Test1
{
    float4 a;
};

cbuffer Test2
{
    float4 b;
};

现在 GetResourceBindingDescByName("Test1", &bind_desc) 可以正常工作,但是 GetResourceBindingDescByName("Test2", &bind_desc) 会失败 (return E_INVAILDARG)。

谁能帮帮我?

反射仅包含着色器使用的符号。正如评论中所确认的那样,b 没有被使用,一旦 b 在代码中被引用并且没有被优化去除,问题就解决了。