texcrd - ps

将源纹理坐标迭代器寄存器中的纹理坐标数据作为目标寄存器中的颜色数据复制。

语法

texcrd dst, src

 

其中

  • dst 是目标寄存器。
  • src 是源寄存器。

备注

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

 

本指令将坐标数据解释为 RGBA) (颜色数据。

此指令未对纹理进行采样。 仅此纹理阶段上设置的纹理坐标是相关的。

使用 texcrd 时,请记住以下有关如何将数据从源寄存器复制到目标寄存器的详细信息。 源纹理坐标寄存器 (t#) 保存数据范围 [-D3DCAPS9.MaxTextureRepeat,D3DCAPS9。MaxTextureRepeat],而目标寄存器 (r#) 只能保存 (可能较小的) 范围 [-D3DCAPS9.PixelShader1xMaxValue、D3DCAPS9。PixelShader1xMaxValue]。 请注意,对于像素着色器版本 1_4,D3DCAPS9。PixelShader1xMaxValue 必须至少为 8。 在固定目标寄存器范围外源数据的过程中,texcrd 指令在不同硬件上的行为可能会有所不同。 市场上的第一个像素着色器版本 1_4 硬件将对超出范围的值执行特殊的固定。 此固定器旨在生成一个可以放入目标寄存器的数字,但也为了保留超出范围数据的纹理寻址行为 (如果随后将数据用于纹理采样,请参阅 D3DTEXTUREADDRESS) 。 但是,来自不同制造商的新硬件可能不会表现出此行为,并且可能只是将数据切碎以适应目标寄存器范围。 因此,使用像素着色器版本 1_4 texcrd 时,最安全的做法是仅向已在 [-8,8] 范围内的像素着色器提供纹理坐标数据,以便不依赖硬件固定方式。

与texcoord_不同,texcrd 不会将值固定在 0 和 1 之间。

使用 texcrd 的规则:

  1. 相同的 .xyz 或 .xyw 修饰符必须应用于 texcrd 或 texld 指令中的单个 t (n) 寄存器的每次读取。
  2. 在所有情况下,texcrd 的第四个通道结果都是未设置/未定义的。
  3. 对于xyw_dw情况,第三个通道未设置/未定义。

示例

下面显示了 texcrd 允许的完整语法,其中考虑了所有有效的源修饰符/选择器和目标写入掩码组合。 请注意,.rgba 和 .xyzw 表示法可以互换使用。

将纹理坐标迭代器寄存器的前三个通道 t (n) 复制到 r (m) 。 r (m) 的第四个通道未初始化。

texcrd  r(m).rgb, t(n).xyz  

// Produces the same result as the previous instruction
texcrd  r(m).rgb, t(n)

将 t (n) 的第一个、第二个和第四个组件放入 r (m) 的前三个通道中。 r (m) 的第四个通道未初始化。

texcrd  r(m).rgb, t(n).xyw

下面是使用 _dw 修饰符的投影除法示例。

此示例将 x/w 和 y/w 从 t (n) 复制到 r (m) 的前两个通道。 r (m) 的第三个和第四个通道未初始化。 以前写入 r (m) 的第三个通道的任何数据都将丢失。 第四个通道 r (m) 中的数据因相位标记而丢失。 对于版本 1_4,将忽略D3DTTFF_PROJECTED标志。

texcrd  r(m).rg,  t(n)_dw.xyw

像素着色器说明