【问题标题】:Can I shader link the same HLSL function twice with different resource bindings?我可以着色器使用不同的资源绑定两次链接相同的 HLSL 函数吗?
【发布时间】:2016-08-25 08:22:09
【问题描述】:

假设我有以下内容:

Texture2D texture : register(t0);
SamplerState sampler : register(s0);

export float4 Sample(float2 uv) { return texture.Sample(sampler, uv); }

export float4 Multiply(float4 lhs, float4 rhs) { return lhs * rhs; }

我可以使用这样的着色器库和着色器链接来实现Multiply(Sample_0(uv), Sample_1(uv)),其中Sample_n 是重新映射为使用纹理和采样器寄存器nSample 方法的一个实例(因此每个调用都对自己的纹理进行采样)?

问题在于 API 在 ID3D11ModuleInstance 上公开了资源重新映射,但 ID3D11FunctionLinkingGraph::CallFunction 函数将 ID3D11Module 作为参数,所以我看不出两个不同的调用如何与两个不同的模块实例相关联相同的模块,但有不同的重映射。

【问题讨论】:

    标签: hlsl direct3d11


    【解决方案1】:

    是的,你可以。

    CallFunction 仅将 ID3D11Module 用于函数签名(验证目的),但它还采用可选的 pModuleInstanceNamespace,它允许您指定将链接到的特定模块实例命名空间。

    在您调用 Link 之前,FLG 接口实际上不会链接到特定的模块实例。此时,它链接到已添加到链接器的模块实例。

    这样,一个 FLG 可以在不同的场景下链接到不同的模块实例。

    此外,模块实例不需要在图构建之前创建和设置。

    【讨论】:

      猜你喜欢
      • 2016-03-23
      • 2014-06-29
      • 2017-05-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-17
      • 2017-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多