我可以使用不同的资源绑定着色器链接相同的HLSL函数两次吗?

时间:2016-08-24 23:21:05

标签: hlsl direct3d11

说我有以下内容:

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是重新映射的Sample方法的实例,以使用纹理和采样器寄存器n (所以每次调用都会采样自己的纹理)?

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

1 个答案:

答案 0 :(得分:3)

是的,你可以。

CallFunction只需要ID3D11Module用于函数签名(验证目的),但它还需要一个可选的pModuleInstanceNamespace,它允许您指定要链接到的特定模块实例名称空间。

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

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

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