ld2dms (sm4.1 - asm)

从二维多样本纹理中读取单个样本。

ld2dms[_aoffimmi (u,v) ] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle], sampleIndex
说明
dest
[in]操作结果的地址。
srcAddress
[in]执行示例所需的纹理坐标。
srcResource
[in]纹理寄存器 (t#) ,它必须已声明用于标识要从中提取的纹理或缓冲区
sampleIndex
[in]将样本标识为从 srcResource 读取 (标量操作数) 。

备注

此指令是 示例 指令的简化替代方法。 它从指定的纹理中提取数据,而无需任何筛选 (例如使用提供的整数 srcAddresssampleIndex 的点采样) 。

srcAddress 以无符号整数的形式提供执行示例所需的纹理坐标集。 如果 srcAddress 在维度 -1) ] 中没有[0... (#texels]范围, 则 ld2dms 在资源格式存在的所有组件中始终返回 0,对于缺失的组件,默认值 (0,0,0,1.0f/0x00000001) 。

sampleIndex 不一定是文本。 无需在纹理资源上指定多样本计数,它适用于深度视图或模具视图。

希望对超出范围地址行为进行更灵活的控制的应用程序应改用 示例 指令,因为它遵循定义为采样器状态的地址包装/镜像/固定/边框行为。

对于 Texture2D,将忽略 srcAddress.b (后重排) 。 如果值在可用数组索引 [0... (数组 size-1) ] 的范围内, 则 ld2dms 在资源格式存在的所有组件中始终返回 0,对于缺失的组件,默认值为 (0,0,0,1.0f/0x00000001) 。

对于 Texture2D 数组, srcAddress.b (后重排) 提供数组索引。 Oherwise 它的行为与 Texture2D 相同。

srcAddress.a (后重排) 始终被忽略。 HLSL 编译器永远不会在那里输出任何内容。

srcResource 是一个纹理寄存器 (t#) ,它必须已声明 (22.3.11) ,标识要从中提取的纹理。

从没有绑定到它的 t# 提取将返回所有组件的 0。

地址偏移量

可选的 [_aoffimmi (u,v,w) ] 后缀 (地址偏移量为即时整数) 指示 ld2dm 的 纹理坐标将偏移一组提供的即时纹素空间整数常量值。 文本值是一组 4 位 2 的补数,具有整数范围 [-8,7]。

偏移量将添加到纹理坐标(纹素空间中)。

地址偏移不沿 Texture1D/2D 数组的数组轴应用。

对于 Texture1D,将忽略 _aoffimmi v,w 组件。

对于 Texture2D,将忽略 _aoffimmi w 组件。

由于 ld2dms 的纹理坐标是无符号整数,因此如果偏移量导致地址低于零,它将换行到一个大地址,并导致超出边界的访问,这就像 ld 在资源格式存在的所有组件中返回 0,而缺失组件的默认值 (0,0,0,1.0f/0x00000001) 。

示例编号

ld2dms 可用于任何资源。 ld2dms 的运行方式与 ld 相同,但 2D multsample 资源除外,方法是使用其他基于 0 的 () sampleIndex 操作数来标识要从资源读取哪个样本。

指定超过资源中样本数的 sampleIndex 的结果是未定义的,但不能返回设备上下文的地址空间之外的数据。

返回类型控件

ld2dms 返回的目标寄存器的数据格式与示例指令所述的相同方式确定。 它基于绑定到 srcResource 参数的格式 (t#) 。

示例 指令一样, ld2dms 的返回值是 4 向量,对于格式中不存在的组件,具有特定于格式的默认值。 srcResource 上的重排确定如何重排从纹理加载返回的 4 分量结果,然后 dest 上的 .mask 将确定更新 dest 中的哪些组件。

ld2dms 将 32 位浮点值读取到 32 位寄存器中时,位不会受到影响;也就是说,非正态值将保持非正态。 这与 示例 指令不同。

其他详细信息

由于没有与此指令关联的筛选,因此 LOD 偏差等概念不适用。 因此,没有 采样器 s# 参数。

限制

  • srcResource 必须是 t# 寄存器,而不是 TextureCube、Texture1D 或 Texture1DArray。 srcResource 不能是 ConstantBuffer,它不能绑定到 t# 寄存器。
  • 不允许在 srcResource 上进行相对寻址。
  • srcAddresssampleIndex 必须是临时 (r#/x#) 、常量 (cb#) 或输入 (v#) 寄存器。
  • dest 必须是临时 (r#/x#) 或输出 (o*#) 寄存器。

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

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

最小着色器模型

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

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

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