C++ D3DReflect不检测常量缓冲区

C++ D3DReflect不检测常量缓冲区,c++,directx,shader,hlsl,C++,Directx,Shader,Hlsl,因此,我试图通过反射从编译的着色器中获取常量缓冲区的数量。可悲的是,它没有按预期工作,我不知道为什么。 以下是如何在ID3DBlob中加载着色器代码: ID3DBlob* vertexBlob; HRESULT result = D3DReadFileToBlob(vertexShader.c_str(), &vertexBlob); 这就是我得到反射的方式: ComPtr<ID3D11ShaderReflection> reflection; HRESULT hr = D

因此,我试图通过反射从编译的着色器中获取常量缓冲区的数量。可悲的是,它没有按预期工作,我不知道为什么。 以下是如何在
ID3DBlob
中加载着色器代码:

ID3DBlob* vertexBlob;
HRESULT result = D3DReadFileToBlob(vertexShader.c_str(), &vertexBlob);
这就是我得到反射的方式:

ComPtr<ID3D11ShaderReflection> reflection;
HRESULT hr = D3DReflect(shader.code->GetBufferPointer(), shader.code->GetBufferSize(), IID_ID3D11ShaderReflection, reinterpret_cast<void**>(reflection.GetAddressOf()));

if (FAILED(hr)) {
    // SOMETHING WENT WRONG;
    return (nullptr);
}

D3D11_SHADER_DESC shaderDesc;
reflection->GetDesc(&shaderDesc);
float4 main(vertexInput input) : SV_POSITION
{
    return mul(float4(input.position, 1.0f), worldViewProj);
}

有人知道哪里可能出错吗?

由于着色器中没有使用常量缓冲区,因此在编译过程中可能会对其进行优化

暂时更改着色器,以确保使用该着色器,然后查看反射效果:

ComPtr<ID3D11ShaderReflection> reflection;
HRESULT hr = D3DReflect(shader.code->GetBufferPointer(), shader.code->GetBufferSize(), IID_ID3D11ShaderReflection, reinterpret_cast<void**>(reflection.GetAddressOf()));

if (FAILED(hr)) {
    // SOMETHING WENT WRONG;
    return (nullptr);
}

D3D11_SHADER_DESC shaderDesc;
reflection->GetDesc(&shaderDesc);
float4 main(vertexInput input) : SV_POSITION
{
    return mul(float4(input.position, 1.0f), worldViewProj);
}

由于在着色器中不使用常量缓冲区,因此可能会在编译过程中对其进行优化

暂时更改着色器,以确保使用该着色器,然后查看反射效果:

ComPtr<ID3D11ShaderReflection> reflection;
HRESULT hr = D3DReflect(shader.code->GetBufferPointer(), shader.code->GetBufferSize(), IID_ID3D11ShaderReflection, reinterpret_cast<void**>(reflection.GetAddressOf()));

if (FAILED(hr)) {
    // SOMETHING WENT WRONG;
    return (nullptr);
}

D3D11_SHADER_DESC shaderDesc;
reflection->GetDesc(&shaderDesc);
float4 main(vertexInput input) : SV_POSITION
{
    return mul(float4(input.position, 1.0f), worldViewProj);
}