HLSL 平铺资源公开
需要新的 Microsoft 高级着色器语言 (HLSL) 语法才能支持 着色器模型 5 中的平铺资源。
仅在支持平铺资源的设备上才允许使用新的 HLSL 语法。 下表中每个用于平铺资源的相关 HLSL 方法都接受一个 (反馈) 或两个 (夹,并按此顺序) 其他可选参数。 例如,Sample 方法是:
Sample(sampler, location [, offset [, clamp [, feedback] ] ])
Sample 方法的一个示例是 Texture2D.Sample(S,float,int,float,uint)。
offset、clamp 和 feedback 参数都是可选的。 你必须指定所需的所有可选参数,这与默认函数参数的 C ++ 规则一致。 例如,如果需要 feedback 状态,则需要向 Sample 显式提供 offset 和 clamp 参数,即使在逻辑上可能不需要它们。
clamp 参数是标量浮点值。 clamp=0.0f 的文本值表明 clamp 操作未执行。
feedback 参数是 uint 变量,可将其提供给内存访问查询内部 CheckAccessFullyMapped 函数。 不得修改或解释 feedback 参数的值;但是编译器不提供任何高级分析和诊断来检测是否修改了值。
以下是 CheckAccessFullyMapped 的语法:
bool CheckAccessFullyMapped(in uint FeedbackVar);
CheckAccessFullyMapped 会解释 FeedbackVar 的值,如果正在访问的所有数据已映射到资源中,则返回 true;否则,CheckAccessFullyMapped 返回 false。
如果存在 clamp 或 feedback 参数,则编译器将发出基本指令的变体。 例如,平铺资源的示例生成 sample_cl_s
指令。 如果既不指定 clamp 也不指定 feedback,则编译器发出基本指令,使得当前行为不发生变化。 clamp 值 0.0f 表示不执行 clamp;因此,驱动程序编译器可以进一步根据目标硬件定制指令。 如果 feedback 是指令中的 NULL 寄存器,则不使用 feedback;因此,驱动程序编译器可以进一步根据目标体系结构定制指令。
如果 HLSL 编译器推断出 clamp 为 0.0f 并且 feedback 未使用,则编译器发出相应的基本指令(例如,sample
而不是 sample_cl_s
)。
如果平铺资源访问包含多个构成字节代码指令(例如,对于结构化资源),则编译器通过 OR 操作聚合单个反馈值以生成最终反馈值。 因此,你会看到这种复杂访问的单个 feedback 值。
以下是更改为支持 feedback 和/或 clamp 的 HLSL 方法的摘要表。 这些都适用于所有维度的平铺和非平铺资源。 非平铺资源始终显示为完全映射。
HLSL 对象 | 具有 feedback 选项 (*) 的内部方法 - 也具有 clamp 选项 |
---|---|
[RW]Texture2D [RW]Texture2DArray TextureCUBE TextureCUBEArray |
Gather GatherRed GatherGreen GatherBlue GatherAlpha GatherCmp GatherCmpRed GatherCmpGreen GatherCmpBlue GatherCmpAlpha |
[RW]Texture1D [RW]Texture1DArray [RW]Texture2D [RW]Texture2DArray [RW]Texture3D TextureCUBE TextureCUBEArray |
Sample* SampleBias* SampleCmp* SampleCmpLevelZero SampleGrad* SampleLevel |
[RW]Texture1D [RW]Texture1DArray [RW]Texture2D Texture2DMS [RW]Texture2DArray Texture2DArrayMS [RW]Texture3D [RW]Buffer [RW]ByteAddressBuffer [RW]StructuredBuffer |
加载 |