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

时间:2016-06-20 10:45:24

标签: directx shader directx-11 hlsl

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

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

cbuffer Test1
{
    float4 a;
};

cbuffer Test2
{
    float4 b;
};

现在GetResourceBindingDescByName("Test1", &bind_desc)正常运行,但GetResourceBindingDescByName("Test2", &bind_desc)将失败(返回E_INVAILDARG)。

有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

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