texldp - ps

投影纹理加载指令。 此指令将输入纹理坐标除以采样前的第四个元素 (.a 或 .w) 。

语法

texldp dst、src0、src1

 

其中

有关使用 texldp 时的限制集,请参阅 texld

备注

在执行样本之前,texldp 对从 src0 读取的坐标执行投影。 每个纹理坐标除以 src0.w,然后对纹理进行采样。 texldp 完成后,src0 的内容不受影响, (除非 dst 是同一寄存器) 。 使用 texldp 的替代方法是在着色器中手动执行投影除法。 但是,在着色器代码中执行除法通常比由 texldp 指令执行时慢,因此请尽可能避免使用此类附加数学运算。

src0 执行纹理样本所需的坐标数取决于 src1 的声明方式以及 .w 分量。 使用 dcl_samplerType (sm2、sm3 - ps asm) 声明采样器类型。 如果 src1 声明为 2D 采样器,则 src0 必须包含 .xyw 坐标;如果 src1 声明为立方体采样器或卷采样器,则 src0 必须包含 .xyzw 坐标。 允许使用 .xyzw 坐标对 2D 纹理采样, () 忽略 .z 坐标。

如果源纹理包含的分量少于四个,则默认值将放置在缺失的组件中。 默认值取决于下表所示的纹理格式。

纹理格式 缺失组件的默认值
D3DFMT_R5G6B5、D3DFMT_R8G8B8、D3DFMT_L8、D3DFMT_L16、D3DFMT_R3G3B2、D3DFMT_CxV8U8、D3DFMT_L6V5U5 A = 1.0
D3DFMT_V8U8、D3DFMT_V16U16、D3DFMT_G16R16、D3DFMT_G16R16F、D3DFMT_G32R32F B = A = 1.0
D3DFMT_A8 R = G = B = 0.0
D3DFMT_R16F、D3DFMT_R32F G = B = A = 1.0
所有深度/模具格式 R = B = 0.0,A = 1.0

 

以下版本支持此指令:

像素着色器版本 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texldp x x x x x

 

ps_2_0和ps_2_x

dst 必须是 r#) (临时寄存器 ,并且仅允许使用默认掩码 (.xyzw 掩码) 。

src0 必须是 纹理坐标寄存器 (t#) 或 临时寄存器 (r#) ,没有修饰符或重排。

src1 必须是 (Direct3D 9 asm-ps) (s#) 的采样器,且无修饰符或重排。

如果未在 D3DPSHADERCAPS2_0) 中 (设置D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT cap 位,则给定的纹理指令 (texld、texldp、 texldb - pstexldd ) 可能最多依赖于三阶。 一阶依赖纹理指令是纹理指令,其中任一项:

  • src0 是临时 寄存器 (r#)
  • dst 以前是写的,现在又写了。

二阶依赖纹理指令定义为纹理指令,该指令可读取或写入临时 寄存器 (r#) ,其内容在执行纹理指令之前,可能间接 () 一阶依赖纹理指令的结果。 (n) 顺序依赖纹理指令派生自 (n - 1) 阶纹理指令。

ps_3_0

对于ps_3_0,src1 必须是 不带修饰符的取样器 (Direct3D 9 asm-ps) (s#) 。 src1 上允许重排,应用时,纹理查找结果会在写入 dst 之前预先重排。

像素着色器说明