Direct3D12 - 哪个 RootSignature 优先?

问题描述

我是 MSFT 和 DirectX 的新手,所以请放轻松。

如果 hlsl 着色器使用 [RootSignature(SignatureName)] 属性,它会被代码中使用 ID3D12RootSignature 定义的根签名覆盖吗?

例如在示例代码中,我将其放在着色器包含的 .hlsli 文件中:

    "RootFlags(ALLOW_INPUT_ASSEMBLER_INPUT_LAYOUT)," \
    "CBV(b0,visibility = SHADER_VISIBILITY_VERTEX),visibility = SHADER_VISIBILITY_PIXEL)," \
    "DescriptorTable(SRV(t0,numDescriptors = 6)," \
    "DescriptorTable(SRV(t64," \
    "RootConstants(b1,num32BitConstants = 2," \
    "StaticSampler(s0,maxAnisotropy = 8," \
    "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)"

在着色器中:

[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>

这会覆盖还是被使用以下内容创建的根签名覆盖: ASSERT_SUCCEEDED( g_Device->CreateRootSignature(1,pOutBlob->GetBufferPointer(),pOutBlob->GetBufferSize(),MY_IID_PPV_ARGS(&m_Signature)) );

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)