HLSL 平铺资源曝光
需要新的Microsoft高级着色器语言(HLSL)语法来支持 着色器模型 5中的平铺资源。
只有支持平铺资源的设备才允许使用新的 HLSL 语法。 下表中平铺资源的每个相关 HLSL 方法都接受一个(反馈)或两个(按此顺序固定和反馈)其他可选参数。 例如,示例 方法为:
Sample(sampler, location [, offset [, clamp [, feedback] ] ])
Sample 方法的一个示例是 Texture2D.Sample(S,float,int,float,uint)。
偏移量、固定和反馈参数是可选的。 必须根据需要指定所有可选参数,这与默认函数参数C++规则一致。 例如,如果需要反馈状态,则偏移和固定参数都需要显式提供给 示例,即使这些参数在逻辑上可能不需要。
固定参数是标量浮点值。 clamp=0.0f 的文本值指示未执行固定作。
反馈参数是一个 uint 变量,可用于内存访问查询内部 CheckAccessFullyMapped 函数。 不得修改或解释反馈参数的值;但是,编译器不提供任何高级分析和诊断来检测是否修改了值。
bool CheckAccessFullyMapped(in uint FeedbackVar):
CheckAccessFullyMapped 解释 FeedbackVar 的值,如果访问的所有数据都映射在资源中,则返回 true;否则,CheckAccessFullyMapped 返回 false。
如果存在固定或反馈参数,编译器将发出基本指令的变体。 例如,平铺资源的示例生成 sample_cl_s
指令。 如果未指定固定或反馈,编译器将发出基本指令,以便当前行为没有变化。 0.0f 的固定值表示不执行固定;因此,驱动程序编译器可以进一步定制目标硬件的说明。 如果反馈是指令中的 NULL 寄存器,则未使用反馈;因此,驱动程序编译器可以进一步定制目标体系结构的说明。
如果 HLSL 编译器推断固定为 0.0f 且反馈未使用,编译器将发出相应的基本指令(例如,sample
而不是 sample_cl_s
)。
如果平铺资源访问由多个构成字节代码指令组成,例如,对于结构化资源,编译器会通过 OR作聚合单个反馈值以生成最终反馈值。 因此,你会看到针对此类复杂访问的单个反馈值。
这是 HLSL 方法的摘要表,这些方法已更改为支持反馈和/或固定。 所有这些工作都适用于所有维度的平铺和非平铺资源。 非平铺资源始终显示为完全映射。