首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Direct3D12 -哪个RootSignature优先?

Direct3D12 -哪个RootSignature优先?
EN

Stack Overflow用户
提问于 2021-02-16 19:01:09
回答 1查看 176关注 0票数 0

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

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

例如,在示例代码中,我在一个由着色器包含的.hlsli文件中包含了这一点:

代码语言:javascript
复制
    "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)"

在阴影中:

代码语言:javascript
复制
[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)) );

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-17 01:26:48

在PC上,如果您有“代码提供的”根签名和“着色提供的”根签名,则代码一优先。一般来说,你应该使用一种或另一种,而不是两者兼用。

对于DX12 on GitHub的DX12工具包,我使用这两种工具都违反了我刚才所说的,但这是有充分理由的。一般来说,对于‘新手’来说,“代码风格”的根签名似乎更容易理解,因此我在工具包中使用它,因为它主要用于学习项目、示例等。我也支持Xbox开发,其中最有力的建议是始终使用基于着色器的根签名。这是因为在Xbox上,着色器是“完全预编译的”,而根签名中的任何差异都会在运行时触发一个“重新编译”。如果我的代码和着色器签名不同步,运行时的Xbox版本会生成调试输出,所以我可以很容易地维护它。对大多数人来说不是这样。它还在代码和着色器表示法中提供了大量相同根sig的示例,这对于deved来说是一件好事,但对大多数项目来说可能不值得。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66230582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档