gather4 (sm5 - asm)

收集将在双线性筛选操作中使用的四个纹素,并将其打包到单个寄存器中。 此指令仅适用于 2D 或 CubeMap 纹理,包括数组。 仅使用采样器的寻址模式,并使用任何 mip 棱锥图的顶层。

gather4[_aoffimmi (u,v) ] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler[.select_component]
说明
dest
[in]操作结果的地址。
srcAddress
[in]一组纹理坐标。
srcResource
[in]纹理寄存器。
srcSampler
[in]采样器寄存器。

备注

此指令的行为与 示例 指令类似,但不会生成筛选的示例。 有助于筛选的四个样本按逆时针顺序放置在 xyzw 中,从样本开始到查询位置的左下角。 这与以下位置 (u,v) 纹理坐标增量的点采样相同: (-、+) 、 (+、+) 、 (+、-) 、 (-,-) ,其中增量的幅度始终为纹素的半。

对于 CubeMap 纹理,当双线性足迹跨越边缘时,将使用来自相邻面的纹素。 角使用与 示例 指令相同的规则;也就是说,未知角被视为三个击中面角的平均值。

有适用于 gather4 的纹理格式限制,这些限制在格式列表中表示。

srcResource 上的重排允许在将返回的值写入目标之前任意重排。

srcSampler 上的.select_component选择源纹理的哪个组件 (r/g/b/a) 读取 4 个纹素。

对于具有 float32 分量的格式,如果要提取的值是规范化、非规范化、+-0 或 +-INF,则它将不更改地返回到着色器。 NaN 作为 NaN 返回,但 NaN 的确切位表示形式可能会更改。 对于 TextureCubes,缺少的第 4 个纹素的一些合成必须在角处进行,因此,对于合成纹素,返回的位不变将不适用,并且可以刷新反音符。

对于硬件实现,传统双线性筛选中的优化(直接检测纹素上的样本并跳过读取权重为 0 的纹素)无法通过此指令进行利用。 gather4 始终返回所有请求的纹素。

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

顶点 外壳 Geometry 像素 计算
x x x x x x

最小着色器模型

以下着色器模型中支持此指令:

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

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