sample (sm4 - asm)
使用指定的地址和给定采样器标识的筛选模式从指定的元素/纹理中采样数据。
sample[_aoffimmi (u,v,w) ] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], srcSampler |
---|
项 | 说明 |
---|---|
dest |
[in]操作结果的地址。 |
srcAddress |
[in]一组纹理坐标。 有关详细信息,请参阅备注部分。 |
srcResource |
[in]纹理寄存器。 有关详细信息,请参阅备注部分。 |
srcSampler |
[in]采样器寄存器。 有关详细信息,请参阅备注部分。 |
注解
源数据可能来自除缓冲区以外的任何资源类型。
srcAddress 提供执行样本所需的纹理坐标集,作为引用纹理中规范化空间的浮点值。 地址环绕模式 (环绕/镜像/固定/边框等) 应用于 [0...1] 范围之外的纹理坐标,取自采样器状态 (s#) ,并在对纹理坐标应用任何地址偏移后应用。
srcResource 是一个纹理寄存器, (t#) 。 这只是纹理的占位符,包括要采样的资源的返回数据类型。 所有这些信息都在着色器序言中声明。 要采样的实际资源在 t#) 的槽 # (外部绑定到着色器。
srcSampler 是) (采样器寄存器。 这只是筛选控件集合的占位符,例如点与线性控件、误用控件和地址包装控件。
硬件执行采样所需的信息集拆分为两个正交部分。 首先,纹理寄存器提供源数据类型信息,包括有关纹理是否包含 SRGB 数据的信息。 它还引用正在采样的实际内存。 其次,采样器寄存器定义要应用的筛选模式。
数组资源
对于 Texture1D 数组, srcAddress g 组件 (POS-swizzle) 选择要从中提取的数组切片。 这始终被视为缩放浮点值,而不是标准纹理坐标的规范化空间,对值应用从圆角到最接近的偶数,然后对可用 BufferArray 范围进行固定。
对于 Texture2D 数组, srcAddress b 组件 (POS-swizzle) 选择要从中提取的数组切片,否则使用为 Texture1D 数组描述的相同语义。
地址偏移量
可选的 [_aoffimmi (u,v,w) ] 后缀 (按即时整数) 的地址偏移量指示样本的纹理坐标将由提供的一组直接纹素空间整数常量值偏移。 文本值是一组 4 位 2 的补数,其整数范围为 [-8,7]。 此修饰符针对所有资源(包括 Texture1D/2D 数组和 Texture3D)定义,但对于 TextureCube 未定义。
硬件可以利用即时知识,即通过一组示例指令对某个常见位置的纹素的某些占用空间进行遍历。 这可以使用 _aoffimmi (u,v,w) 传达。
偏移量将添加到纹理坐标中(纹素空间中相对于所访问的每个 miplevel)。 因此,即使纹理坐标作为规范化浮点值提供,偏移量也会应用纹素空间整数偏移量。
不会沿 Texture1D/2D 数组的数组轴应用地址偏移量。
对于 Texture1D,将忽略_aoffimmi v,w 组件。
对于 Texture2D,忽略_aoffimmi w 组件。
在对纹理坐标应用任何地址偏移后,将应用来自采样器状态 (s#) 的地址环绕模式 (包装/镜像/固定/边框等) 。
返回类型控件
示例返回到目标寄存器的数据格式由绑定到 srcResource 参数 (t#) 的资源格式 (DXGI_FORMAT*) 确定。 例如,如果指定的 t# 与格式为 DXGI_FORMAT_A8B8G8R8_UNORM_SRGB 的资源绑定,则采样操作会将采样的纹素从 gamma 2.0 转换为 1.0,应用筛选,结果将作为 [0...1] 范围内的浮点值写入目标寄存器。
对于格式) 中不存在的组件,返回的值是 4 向量 (具有特定于格式的默认值。 srcResource 上的重排决定如何重排从纹理样本/筛选器返回的 4 分量结果,之后 dest 上的 .mask 将确定更新 dest 中的哪些组件。
当 sample 将 32 位浮点值读取到 32 位寄存器中时,点采样 (无筛选) ,它可能会刷新也可能不刷新非规范值,但未修改数字。 如果点采样非正态值的不确定性是应用程序的问题,请使用 ld 指令,该指令保证读取 32 位浮点值时未修改。
LOD 计算
有关如何在确定 LOD 以进行筛选的过程中计算派生值的详细信息,请参阅 deriv_rtx 和 deriv_rty。 示例指令使用派生着色器指令使用的相同定义隐式计算纹理坐标上的导数。 这不适用于 sample_l 或 sample_d 说明。 对于这些说明,LOD 或衍生工具由应用程序直接提供。
对于 示例 指令,实现可以选择在 2x2 标记 (的所有 4 个像素之间共享相同的 LOD 计算,但不能) 更大的区域,或执行每像素 LOD 计算。
其他详细信息
对于 Buffer & Texture1D,将忽略 srcAddress .gba 组件 (POS-swizzle) 。 对于 Texture1D 数组,将忽略 srcAddress .ba 组件 (POS-swizzle) 。 对于 Texture2D, 将忽略 srcAddress .一个组件 (POS-swizzle) 。
从没有任何绑定的输入槽提取将为所有组件返回 0。
限制
- srcResource 必须是 t# 寄存器。 srcResource 不能是 ConstantBuffer,它不能绑定到 t# 寄存器。
- srcSampler 必须是 s# 寄存器。
- 不允许在 srcResource 或 srcSampler 上进行相对寻址。
- srcAddress 必须是临时 (r#/x#) 、constantBuffer (cb#) 、输入 (v#) 寄存器或 () 的即时值。
- dest 必须是临时 (r#/x#) 或输出 (o*#) 寄存器。
- TextureCubes 不允许_aoffimmi (u、v、w) 。
此指令适用于以下着色器阶段:
顶点着色器 | 几何着色器 | 像素着色器 |
---|---|---|
x |
最小着色器模型
以下着色器模型中支持此函数。
着色器模型 | 支持 |
---|---|
着色器模型 5 | 是 |
着色器模型 4.1 | 是 |
着色器模型 4 | 是 |
着色器模型 3 (DirectX HLSL) | 否 |
着色器模型 2 (DirectX HLSL) | 否 |
着色器模型 1 (DirectX HLSL) | 否 |