I'm new to MSFT and DirectX so please go easy on me..
If an hlsl shader uses the [RootSignature(SignatureName)]
attribute, will it be overridden by a root signature defined in code using ID3D12RootSignature
?
E.g. in sample code I have this in an .hlsli file which is included by a shader:
"RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT), " \
"CBV(b0, visibility = SHADER_VISIBILITY_VERTEX), " \
"CBV(b0, visibility = SHADER_VISIBILITY_PIXEL), " \
"DescriptorTable(SRV(t0, numDescriptors = 6), visibility = SHADER_VISIBILITY_PIXEL)," \
"DescriptorTable(SRV(t64, numDescriptors = 6), visibility = SHADER_VISIBILITY_PIXEL)," \
"RootConstants(b1, num32BitConstants = 2, visibility = SHADER_VISIBILITY_VERTEX), " \
"StaticSampler(s0, maxAnisotropy = 8, visibility = SHADER_VISIBILITY_PIXEL)," \
"StaticSampler(s1, visibility = SHADER_VISIBILITY_PIXEL," \
"addressU = TEXTURE_ADDRESS_CLAMP," \
"addressV = TEXTURE_ADDRESS_CLAMP," \
"addressW = TEXTURE_ADDRESS_CLAMP," \
"comparisonFunc = COMPARISON_GREATER_EQUAL," \
"filter = FILTER_MIN_MAG_LINEAR_MIP_POINT)"
And in the shader:
[RootSignature(ModelViewer_RootSig)]
VSOutput main(VSInput vsInput)
{
VSOutput vsOutput;
vsOutput.position = mul(modelToProjection, float4(vsInput.position, 1.0));
vsOutput.worldPos = vsInput.position;
vsOutput.texCoord = vsInput.texcoord0;
vsOutput.viewDir = vsInput.position - ViewerPos;
<etc>
Will this override or be overridden by a root signature created with something like the following:
ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1, pOutBlob->GetBufferPointer(), pOutBlob->GetBufferSize(), MY_IID_PPV_ARGS(&m_Signature)) );