我该如何解决这个问题?根签名与顶点着色器不匹配:

问题描述 投票:0回答:0

在添加渲染阴影的代码时,我遇到了一个问题。

在输出视图选择的调试中, 弹出以下错误信息:

enter image description here

这是我添加的着色器代码。

struct VS_LIGHTING_INPUT
{
    float3 position : POSITION;
    float3 normal : NORMAL;
};

struct VS_LIGHTING_OUTPUT
{
    float4 position : SV_POSITION;
    float3 positionW : POSITION;
    float3 normalW : NORMAL;
};

VS_LIGHTING_OUTPUT VSLighting(VS_LIGHTING_INPUT input)
{
    VS_LIGHTING_OUTPUT output;

    output.normalW = mul(input.normal, (float3x3)gmtxGameObject);
    output.positionW = (float3)mul(float4(input.position, 1.0f), gmtxGameObject);
    output.position = mul(mul(float4(output.positionW, 1.0f), gmtxView), gmtxProjection);

    return(output);
}

float4 PSLighting(VS_LIGHTING_OUTPUT input) : SV_TARGET
{
    input.normalW = normalize(input.normalW);
    float4 uvs[MAX_SHADOW_LIGHTS];
    float4 cIllumination = shadowLighting(input.positionW, input.normalW, false, uvs);

    //  return(cIllumination);
    return(float4(input.normalW * 0.5f + 0.5f, 1.0f));
}
//==================================================================================================

struct PS_DEPTH_OUTPUT
{
    float fzPosition : SV_Target;
    float fDepth : SV_Depth;
};

PS_DEPTH_OUTPUT PSDepthWriteShader(VS_LIGHTING_OUTPUT input)
{
    PS_DEPTH_OUTPUT output;

    output.fzPosition = input.position.z;
    output.fDepth = input.position.z;

    return(output);
}

//==================================================================================================
struct VS_SHADOW_MAP_OUTPUT
{
    float4 position : SV_POSITION;
    float3 positionW : POSITION;
    float3 normalW : NORMAL;

    float4 uvs[MAX_SHADOW_LIGHTS] : TEXCOORD0;
};

VS_SHADOW_MAP_OUTPUT VSShadowMapShadow(VS_LIGHTING_INPUT input)
{
    VS_SHADOW_MAP_OUTPUT output = (VS_SHADOW_MAP_OUTPUT)0;

    float4 positionW = mul(float4(input.position, 1.0f), gmtxGameObject);
    output.positionW = positionW.xyz;
    output.position = mul(mul(positionW, gmtxView), gmtxProjection);
    output.normalW = mul(float4(input.normal, 0.0f), gmtxGameObject).xyz;
    
    for (int i = 0; i < MAX_SHADOW_LIGHTS; i++)
    {
        if (gcbToLightSpaces[i].f4Position.w != 0.0f) output.uvs[i] = mul(positionW, gcbToLightSpaces[i].mtxToTexture);
    }

    return(output);
}

float4 PSShadowMapShadow(VS_SHADOW_MAP_OUTPUT input) : SV_TARGET
{
    float4 cIllumination = shadowLighting(input.positionW, normalize(input.normalW), true, input.uvs);

    return(cIllumination);
}

根签名设置如下

ID3D12RootSignature* CStage::CreateGraphicsRootSignature(ID3D12Device* pd3dDevice)
{
    ID3D12RootSignature* pd3dGraphicsRootSignature = NULL;

    D3D12_DESCRIPTOR_RANGE pd3dDescriptorRanges[8];

    pd3dDescriptorRanges[0].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[0].NumDescriptors = 1;
    pd3dDescriptorRanges[0].BaseShaderRegister = 6; //t6: gtxtAlbedoTexture
    pd3dDescriptorRanges[0].RegisterSpace = 0;
    pd3dDescriptorRanges[0].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;

    pd3dDescriptorRanges[1].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[1].NumDescriptors = 1;
    pd3dDescriptorRanges[1].BaseShaderRegister = 7; //t7: gtxtSpecularTexture
    pd3dDescriptorRanges[1].RegisterSpace = 0;
    pd3dDescriptorRanges[1].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;

    pd3dDescriptorRanges[2].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[2].NumDescriptors = 1;
    pd3dDescriptorRanges[2].BaseShaderRegister = 8; //t8: gtxtNormalTexture
    pd3dDescriptorRanges[2].RegisterSpace = 0;
    pd3dDescriptorRanges[2].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;

    pd3dDescriptorRanges[3].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[3].NumDescriptors = 1;
    pd3dDescriptorRanges[3].BaseShaderRegister = 9; //t9: gtxtMetallicTexture
    pd3dDescriptorRanges[3].RegisterSpace = 0;
    pd3dDescriptorRanges[3].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;

    pd3dDescriptorRanges[4].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[4].NumDescriptors = 1;
    pd3dDescriptorRanges[4].BaseShaderRegister = 10; //t10: gtxtEmissionTexture
    pd3dDescriptorRanges[4].RegisterSpace = 0;
    pd3dDescriptorRanges[4].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;

    pd3dDescriptorRanges[5].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[5].NumDescriptors = 1;
    pd3dDescriptorRanges[5].BaseShaderRegister = 11; //t11: gtxtEmissionTexture
    pd3dDescriptorRanges[5].RegisterSpace = 0;
    pd3dDescriptorRanges[5].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;

    pd3dDescriptorRanges[6].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[6].NumDescriptors = 1;
    pd3dDescriptorRanges[6].BaseShaderRegister = 12; //t12: gtxtEmissionTexture
    pd3dDescriptorRanges[6].RegisterSpace = 0;
    pd3dDescriptorRanges[6].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;

    pd3dDescriptorRanges[7].RangeType = D3D12_DESCRIPTOR_RANGE_TYPE_SRV;
    pd3dDescriptorRanges[7].NumDescriptors = MAX_DEPTH_TEXTURES;
    pd3dDescriptorRanges[7].BaseShaderRegister = 2; //Depth Buffer
    pd3dDescriptorRanges[7].RegisterSpace = 0;
    pd3dDescriptorRanges[7].OffsetInDescriptorsFromTableStart = D3D12_DESCRIPTOR_RANGE_OFFSET_APPEND;


    D3D12_ROOT_PARAMETER pd3dRootParameters[14];

    pd3dRootParameters[0].ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
    pd3dRootParameters[0].Descriptor.ShaderRegister = 1; //Camera
    pd3dRootParameters[0].Descriptor.RegisterSpace = 0;
    pd3dRootParameters[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;

    pd3dRootParameters[1].ParameterType = D3D12_ROOT_PARAMETER_TYPE_32BIT_CONSTANTS;
    pd3dRootParameters[1].Constants.Num32BitValues = 33;
    pd3dRootParameters[1].Constants.ShaderRegister = 2; //GameObject
    pd3dRootParameters[1].Constants.RegisterSpace = 0;
    pd3dRootParameters[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;

    pd3dRootParameters[2].ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
    pd3dRootParameters[2].Descriptor.ShaderRegister = 4; //Lights
    pd3dRootParameters[2].Descriptor.RegisterSpace = 0;
    pd3dRootParameters[2].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;


    pd3dRootParameters[3].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[3].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[3].DescriptorTable.pDescriptorRanges = &(pd3dDescriptorRanges[0]);
    pd3dRootParameters[3].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dRootParameters[4].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[4].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[4].DescriptorTable.pDescriptorRanges = &(pd3dDescriptorRanges[1]);
    pd3dRootParameters[4].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dRootParameters[5].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[5].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[5].DescriptorTable.pDescriptorRanges = &(pd3dDescriptorRanges[2]);
    pd3dRootParameters[5].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dRootParameters[6].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[6].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[6].DescriptorTable.pDescriptorRanges = &(pd3dDescriptorRanges[3]);
    pd3dRootParameters[6].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dRootParameters[7].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[7].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[7].DescriptorTable.pDescriptorRanges = &(pd3dDescriptorRanges[4]);
    pd3dRootParameters[7].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dRootParameters[8].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[8].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[8].DescriptorTable.pDescriptorRanges = &(pd3dDescriptorRanges[5]);
    pd3dRootParameters[8].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;


    pd3dRootParameters[9].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[9].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[9].DescriptorTable.pDescriptorRanges = &(pd3dDescriptorRanges[6]);
    pd3dRootParameters[9].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;





    pd3dRootParameters[10].ParameterType = D3D12_ROOT_PARAMETER_TYPE_DESCRIPTOR_TABLE;
    pd3dRootParameters[10].DescriptorTable.NumDescriptorRanges = 1;
    pd3dRootParameters[10].DescriptorTable.pDescriptorRanges = &pd3dDescriptorRanges[7]; //Depth`Buffer
    pd3dRootParameters[10].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dRootParameters[11].ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
    pd3dRootParameters[11].Descriptor.ShaderRegister = 7; //Skinned Bone Offsets
    pd3dRootParameters[11].Descriptor.RegisterSpace = 0;
    pd3dRootParameters[11].ShaderVisibility = D3D12_SHADER_VISIBILITY_VERTEX;

    pd3dRootParameters[12].ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
    pd3dRootParameters[12].Descriptor.ShaderRegister = 8; //Skinned Bone Transforms
    pd3dRootParameters[12].Descriptor.RegisterSpace = 0;
    pd3dRootParameters[12].ShaderVisibility = D3D12_SHADER_VISIBILITY_VERTEX;


    pd3dRootParameters[13].ParameterType = D3D12_ROOT_PARAMETER_TYPE_CBV;
    pd3dRootParameters[13].Descriptor.ShaderRegister = 3; //ToLight
    pd3dRootParameters[13].Descriptor.RegisterSpace = 0;
    pd3dRootParameters[13].ShaderVisibility = D3D12_SHADER_VISIBILITY_ALL;
    

    D3D12_STATIC_SAMPLER_DESC pd3dSamplerDescs[4];

    pd3dSamplerDescs[0].Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
    pd3dSamplerDescs[0].AddressU = D3D12_TEXTURE_ADDRESS_MODE_WRAP;
    pd3dSamplerDescs[0].AddressV = D3D12_TEXTURE_ADDRESS_MODE_WRAP;
    pd3dSamplerDescs[0].AddressW = D3D12_TEXTURE_ADDRESS_MODE_WRAP;
    pd3dSamplerDescs[0].MipLODBias = 0;
    pd3dSamplerDescs[0].MaxAnisotropy = 1;
    pd3dSamplerDescs[0].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS;
    pd3dSamplerDescs[0].MinLOD = 0;
    pd3dSamplerDescs[0].MaxLOD = D3D12_FLOAT32_MAX;
    pd3dSamplerDescs[0].ShaderRegister = 0;
    pd3dSamplerDescs[0].RegisterSpace = 0;
    pd3dSamplerDescs[0].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dSamplerDescs[1].Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
    pd3dSamplerDescs[1].AddressU = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
    pd3dSamplerDescs[1].AddressV = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
    pd3dSamplerDescs[1].AddressW = D3D12_TEXTURE_ADDRESS_MODE_CLAMP;
    pd3dSamplerDescs[1].MipLODBias = 0;
    pd3dSamplerDescs[1].MaxAnisotropy = 1;
    pd3dSamplerDescs[1].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS;
    pd3dSamplerDescs[1].MinLOD = 0;
    pd3dSamplerDescs[1].MaxLOD = D3D12_FLOAT32_MAX;
    pd3dSamplerDescs[1].ShaderRegister = 1;
    pd3dSamplerDescs[1].RegisterSpace = 0;
    pd3dSamplerDescs[1].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dSamplerDescs[2].Filter = D3D12_FILTER_COMPARISON_MIN_MAG_LINEAR_MIP_POINT;
    pd3dSamplerDescs[2].AddressU = D3D12_TEXTURE_ADDRESS_MODE_BORDER;
    pd3dSamplerDescs[2].AddressV = D3D12_TEXTURE_ADDRESS_MODE_BORDER;
    pd3dSamplerDescs[2].AddressW = D3D12_TEXTURE_ADDRESS_MODE_BORDER;
    pd3dSamplerDescs[2].MipLODBias = 0.0f;
    pd3dSamplerDescs[2].MaxAnisotropy = 1;
    pd3dSamplerDescs[2].ComparisonFunc = D3D12_COMPARISON_FUNC_LESS_EQUAL; //D3D12_COMPARISON_FUNC_LESS
    pd3dSamplerDescs[2].BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_WHITE;  //D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK;
    pd3dSamplerDescs[2].MinLOD = 0;
    pd3dSamplerDescs[2].MaxLOD = D3D12_FLOAT32_MAX;
    pd3dSamplerDescs[2].ShaderRegister = 2;//
    pd3dSamplerDescs[2].RegisterSpace = 0;
    pd3dSamplerDescs[2].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    pd3dSamplerDescs[3].Filter = D3D12_FILTER_MIN_MAG_MIP_LINEAR;
    pd3dSamplerDescs[3].AddressU = D3D12_TEXTURE_ADDRESS_MODE_BORDER;
    pd3dSamplerDescs[3].AddressV = D3D12_TEXTURE_ADDRESS_MODE_BORDER;
    pd3dSamplerDescs[3].AddressW = D3D12_TEXTURE_ADDRESS_MODE_BORDER;
    pd3dSamplerDescs[3].MipLODBias = 0.0f;
    pd3dSamplerDescs[3].MaxAnisotropy = 1;
    pd3dSamplerDescs[3].ComparisonFunc = D3D12_COMPARISON_FUNC_ALWAYS;
    pd3dSamplerDescs[3].BorderColor = D3D12_STATIC_BORDER_COLOR_OPAQUE_BLACK;
    pd3dSamplerDescs[3].MinLOD = 0;
    pd3dSamplerDescs[3].MaxLOD = D3D12_FLOAT32_MAX;
    pd3dSamplerDescs[3].ShaderRegister = 3;//
    pd3dSamplerDescs[3].RegisterSpace = 0;
    pd3dSamplerDescs[3].ShaderVisibility = D3D12_SHADER_VISIBILITY_PIXEL;

    D3D12_ROOT_SIGNATURE_FLAGS d3dRootSignatureFlags = D3D12_ROOT_SIGNATURE_FLAG_ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT | D3D12_ROOT_SIGNATURE_FLAG_DENY_HULL_SHADER_ROOT_ACCESS | D3D12_ROOT_SIGNATURE_FLAG_DENY_DOMAIN_SHADER_ROOT_ACCESS | D3D12_ROOT_SIGNATURE_FLAG_DENY_GEOMETRY_SHADER_ROOT_ACCESS;
    D3D12_ROOT_SIGNATURE_DESC d3dRootSignatureDesc;
    ::ZeroMemory(&d3dRootSignatureDesc, sizeof(D3D12_ROOT_SIGNATURE_DESC));
    d3dRootSignatureDesc.NumParameters = _countof(pd3dRootParameters);
    d3dRootSignatureDesc.pParameters = pd3dRootParameters;
    d3dRootSignatureDesc.NumStaticSamplers = _countof(pd3dSamplerDescs);
    d3dRootSignatureDesc.pStaticSamplers = pd3dSamplerDescs;
    d3dRootSignatureDesc.Flags = d3dRootSignatureFlags;

    ID3DBlob* pd3dSignatureBlob = NULL;
    ID3DBlob* pd3dErrorBlob = NULL;
    D3D12SerializeRootSignature(&d3dRootSignatureDesc, D3D_ROOT_SIGNATURE_VERSION_1, &pd3dSignatureBlob, &pd3dErrorBlob);
    pd3dDevice->CreateRootSignature(0, pd3dSignatureBlob->GetBufferPointer(), pd3dSignatureBlob->GetBufferSize(), __uuidof(ID3D12RootSignature), (void**)&pd3dGraphicsRootSignature);
    if (pd3dSignatureBlob) pd3dSignatureBlob->Release();
    if (pd3dErrorBlob) pd3dErrorBlob->Release();

    return(pd3dGraphicsRootSignature);
}

D3D12 错误:ID3D12Device::CreateGraphicsPipelineState:根签名与顶点着色器不匹配:着色器 CBV 描述符范围(BaseShaderRegister=6,NumDescriptors=1,RegisterSpace=0)在根签名中未完全绑定

我该如何解决这个错误?

我附上了项目。 请您在忙的时候检查一次。

https://kpuackr-my.sharepoint.com/:u:/g/personal/dbzho8383_tukorea_ac_kr/ES5uDcLONmVKk78-1opt2B0B8C-JYgRX9vz2jfmfKDfSjA?e=sy87Qh

我想要渲染阴影。

D3D12 错误:ID3D12Device::CreateGraphicsPipelineState:根签名与顶点着色器不匹配:着色器 CBV 描述符范围(BaseShaderRegister=6,NumDescriptors=1,RegisterSpace=0)在根签名中未完全绑定

我想解决这个错误。

c++ hlsl directx-12
© www.soinside.com 2019 - 2024. All rights reserved.