Reflection DirectCompute D3DReflect GetConstantBufferByIndex始终返回空指针
我试图通过调用D3DCompile()或D3DCompile2()获取程序编译的计算着色器的反射信息 编译正常,由正确执行的代码确认 然后我调用D3DReflect以获得针对已编译代码的反射器 一旦有了反射器,我就调用reflector->GetDesc(&ShaderDesc) 这非常有效:ShaderDesc结构报告ConstantBuffers等于1,这是正确的 然后调用reflector->GetConstantBufferByIndex(0),它总是返回空指针 怎么了 我的环境:Windows 10完全更新,在NVidia Quadro K4200上安装DirectX11,驱动程序为24.21.14.1240,日期为2019年7月21日,D3DCompiler_47.dll,日期为2019年3月19日 编辑: 在着色器中,常量缓冲区的定义如下:Reflection DirectCompute D3DReflect GetConstantBufferByIndex始终返回空指针,reflection,directx-11,hlsl,directcompute,Reflection,Directx 11,Hlsl,Directcompute,我试图通过调用D3DCompile()或D3DCompile2()获取程序编译的计算着色器的反射信息 编译正常,由正确执行的代码确认 然后我调用D3DReflect以获得针对已编译代码的反射器 一旦有了反射器,我就调用reflector->GetDesc(&ShaderDesc) 这非常有效:ShaderDesc结构报告ConstantBuffers等于1,这是正确的 然后调用reflector->GetConstantBufferByIndex(0),它总是返回空指针 怎么了 我的环境:Win
cbuffer TImageParams : register(b0)
{
int2 RawImageSize; // Actual image size in RawImage
// More items....
};
亲切问候你能发布你的着色器还是复制案例的简单版本吗?@catflier编辑了这个问题,展示了常量缓冲区是如何定义的。没有什么特别的…如果还有一个小的最小的例子,它会有所帮助,因为目前我无法用我的版本复制。我已经尝试了一个最小的例子,它的工作如预期。这是我的完整应用程序,它不起作用。这是一个相当大的一个:在CPU端,它有67K代码行,其中6K是特定于GPU的。还有超过4K的着色器代码行。除了在StackOverflow上发布代码太长之外,我不允许公开代码。我不希望在这里得到解决方案,但我希望得到一些关于检查或尝试什么的建议。谢谢。如果改用reflect->GetResourceBindingDesc(),您是否也会遇到同样的问题?