sample_c (sm4 - asm)

执行比较筛选器。

sample_c[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource.r, srcSampler, srcReferenceValue
说明
dest
[in] 操作结果的地址。
srcAddress
[in] 一组纹理坐标。 有关详细信息,请参阅 sample 指令。
srcResource
[in] 纹理寄存器。 有关详细信息,请参阅 sample 指令。 必须是 .r 重排。
srcSampler
[in] 采样器寄存器。 有关详细信息,请参阅 sample 指令
srcReferenceValue
[in] 已选定单个分量的寄存器,用于比较。

备注

此指令的主要用途是为百分比渐近深入筛选提供构建基块。 sample_c 中的“c”表示比较

sample_c 的操作数与 sample 指令相同,只是有一个附加的 float32 源操作数 srcReferenceValue,它必须是已选定单个分量的寄存器或标量文本

srcResource 参数必须具有 .r (red) 重排。 sample_c 以独占方式在 red 分量上运行,并返回单个值。 srcResource 上的 .r 重排指示标量结果已复制到所有分量

操作顺序为 srcReferenceValue {ComparisonFunction} texel.R

当深度缓冲区设置为输入纹理时,深度值将显示在 red 分量中。

如果此指令与非 Texture1D/2D/2DArray/Cube/CubeArray 的资源一起使用,则会生成未定义的结果。

执行此指令时,采样硬件使用当前采样器的 ComparisonFunction 将 srcReferenceValue 与当前配置的纹理筛选器覆盖的每个筛选器“点击”位置(纹素)处的源资源的 Red 分量值进行比较,具体取决于 srcAddress 中提供的坐标

比较发生在 srcReferenceValue 量化为纹理格式的精度之后,与输出合并可见性测试中深度比较之前 z 量化为深度缓冲区精度的方式完全相同。 这包括对格式范围的限制(例如 UNORM 格式的 [0..1])。

源纹素的 Red 分量与量化 srcReferenceValue 进行比较。 对于从资源上脱落的纹素,Red 分量值是通过应用采样器中的地址模式(如果处于边框模式则为 BorderColorR)来确定的。 如果纹理格式为浮点,则比较遵循所有 D3D11 浮点比较规则。

通过的每个比较将返回 1.0f 作为纹素的 Red 分量值,未通过的每个比较将返回 0.0f 作为纹理的 Red 值。 然后,筛选将完全按照采样器状态的指定进行,仅在 Red 分量中运行,并将单个标量筛选结果返回到着色器,复制到所有过滤的 dest 分量

sample_c 的使用与所有其他常规用途筛选控件是正交的。 sample_c 与其他常规用途筛选器模式无缝配合工作。 sample_c 更改常规用途筛选器的行为,以便筛选的值由于比较结果而变为 1.0f 或 0.0f

从没有任何绑定的输入槽提取会为所有分量返回 0。

有关详细信息,请参阅 sample 指令。

此指令适用于以下着色器阶段:

顶点着色器 几何着色器 像素着色器
x

最小着色器模型

以下着色器模型中支持此函数。

着色器模型 支持
着色器模型 5
着色器模型 4.1
着色器模型 4
着色器模型 3 (DirectX HLSL)
着色器模型 2 (DirectX HLSL)
着色器模型 1 (DirectX HLSL)

着色器模型 4 程序集 (DirectX HLSL)