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 在代码中被引用并且没有被优化去除,问题就解决了。
我正在学习 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 在代码中被引用并且没有被优化去除,问题就解决了。