ld (sm4 - asm)

使用提供的整数地址从指定的缓冲区或纹理提取数据,无需任何筛选(例如点采样)。 源数据可以来自除 TextureCube 之外的任何资源类型。

ld[_aoffimmi(u,v,w)] dest[.mask], srcAddress[.swizzle], srcResource[.swizzle]
说明
dest
[in] 操作结果的地址。
srcAddress
[in] 执行 sample 所需的纹理坐标。
srcResource
[in] 一个必须声明的纹理寄存器 (t#),用于识别要从中提取数据的纹理或缓冲区。

备注

此指令是 sample 指令的简化替代指令。 与 sample 不同,ld 还能够从缓冲区提取数据。 ld 还可以从多样本资源(仅在象素着色器上)中提取数据。

srcAddress 以无符号整数的形式提供执行 sample 所需的纹理坐标集。 如果 srcAddress 超出 [0...(维度中的纹素数 -1)] 范围,则会调用越界行为,其中 ld 在 srcResource 格式的所有非缺失分量中返回 0,并为缺失分量返回默认值。 希望对超出范围的地址行为进行更灵活控制的应用程序应改用 sample 指令,因为它遵循定义为采样器状态的地址环绕/镜像/固定/边框行为。

srcAddress.a (POS-swizzle) 始终提供无符号整数 mipmap 级别。 如果该值超出 [0...(资源中的 miplevel 数-1)] 范围,则调用越界行为。 如果资源是缓冲区,不能有任何 mipmap,则会忽略 srcAddress.a

对于缓冲区和 texture1D(非数组),srcAddress.gb (POS-swizzle) 会被忽略。 对于 texture1D 数组和 texture2D,srcAddress.b (POS-swizzle) 会被忽略。

对于 texture1D 数组,srcAddress.g (POS-swizzle) 提供无符号整数形式的数组索引。 如果值超出可用数组索引 [0...(数组大小-1)] 的范围,则调用越界行为。

对于 texture2D 数组,srcAddress.b (POS-swizzle) 会提供数组索引,否则与 texture1D 具有相同的语义。

从没有任何绑定的 t# 提取会为所有分量返回 0。

地址偏移

可选的 [_aoffimmi(u,v,w)] 后缀(按立即整数进行的地址偏移)指示 ld 的纹理坐标将按一组提供的立即纹素空间整数常量值进行偏移。 文本值是一组 4 位 2 进制补码,整数范围为 [-8,7]。 此修饰符仅针对 texture1D/2D/3D(包括数组)定义,不针对缓冲区定义。

偏移将添加到纹素空间中相对于按 ld 访问的 miplevel 的纹理坐标。

地址偏移不会沿纹理 1D/2D 数组的数组轴应用。

对于 texture1D,_aoffimmi v,w 分量会被忽略。

对于 texture2D,_aoffimmi w 分量会被忽略。

由于 ld 的纹理坐标是无符号整数,因此如果偏移导致地址低于零,它将换行到一个大地址,导致越界访问。

返回类型控件

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

与 sample 指令一样,为 ld 返回的值是 4 向量,对于格式中不存在的分量,具有特定于格式的默认值。 srcResource 上的重排确定如何重排从纹理加载返回的 4 分量结果,之后 dest 上的 .mask 确定 dest 中的哪些分量会得到更新。

当 ld 将 32 位浮点值读入 32 位寄存器时,这些位保持不变;也就是说,非规范值仍然是非规范值。 这与 sample 指令不同。

其他详细信息

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

限制

  • srcResource 必须是 t# 寄存器,而不是 TextureCube。 srcResource 也不能是 constantbuffer,后者不能绑定到 t# 寄存器。
  • 不允许对 srcResource 进行相对寻址。
  • srcAddress 必须是临时 (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)