texldl - ps

使用特定采样器对纹理采样。 要采样的特定 mipmap 细节级别必须指定为纹理坐标的第四个组件。

语法

texldl dst、src0、src1

 

其中:

  • dst 是目标寄存器。
  • src0 是一个源寄存器,它为纹理样本提供纹理坐标。 请参阅 纹理坐标寄存器
  • src1 标识源采样器寄存器 (s#) ,其中 # 指定要采样的纹理采样器编号。 采样器已将 D3DSAMPLERSTATETYPE 枚举定义的纹理和控件状态关联 (例如,D3DSAMP_MINFILTER) 。

备注

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

 

texldl 在 src1 引用的采样器阶段查找纹理集。 详细信息级别是从 src0.w 中选择的。 此值可以为负值,在这种情况下,选择的详细信息级别是使用 MAGFILTER 的最大地图) (第 0 个。 由于 src0.w 是浮点值,因此,如果 MIPFILTER 是两个 mip 级别之间的线性) ,则使用小数值来内插 (。 采样器表示遵循 MIPMAPLODBIAS 和 MAXMIPLEVEL。 有关采样器状态的详细信息,请参阅 D3DSAMPLERSTATETYPE

如果着色器程序从没有纹理集的采样器中采样,则会在目标寄存器中获取 0001。

下面是参考设备遵循的粗略算法:

LOD = src0.w + LODBIAS;
if (LOD <= 0 )
{
   LOD = 0;
   Filter = MagFilter;
   tex = Lookup( MAX(MAXMIPLEVEL, LOD), Filter );
}
else
{
   Filter = MinFilter;
   LOD = MAX( MAXMIPLEVEL, LOD );
   tex = Lookup( Floor(LOD), Filter );
   if( MipFilter == LINEAR )
   {
      tex1 = Lookup( Ceil(LOD), Filter );                        
      tex = (1 - frac(src0.w))*tex + frac(src0.w)*tex1;
   }
}

限制:

  • 纹理坐标不应按纹理大小缩放。
  • dst 必须是 r#) (临时寄存器
  • dst 可以接受写掩码。 请参阅 目标寄存器写入掩码
  • 缺失组件的默认值为 0 或 1,具体取决于纹理格式。
  • src1 必须是 Direct3D 9 asm-ps) ( (s#) 的采样器。 src1 不得使用否定修饰符 (请参阅 目标寄存器写入掩码) 。 src1 可以使用重排 (请参阅 源寄存器重排) ,这是在采样后应用,但在写入掩码之前 (请参阅目标寄存器写入掩码) 。 采样器必须在着色器开头使用 dcl_samplerType (sm2、sm3 - ps asm) ) 声明 (。
  • 执行纹理采样所需的坐标数取决于如何声明采样器。 如果声明为立方体,则需要三分量纹理坐标 (.rgb) 。 验证强制为tex_ldl提供的坐标对于为采样器声明的纹理维度足够。 但是,不能保证应用程序实际通过 API) 设置纹理 (,其尺寸等于为采样器声明的维度。 在这种情况下,运行时将尝试检测可能仅在调试) (不匹配项。 将允许采样尺寸小于纹理坐标中存在的纹理,并假定忽略额外的纹理坐标分量。 相反,对尺寸多于纹理坐标中尺寸的纹理进行采样是非法的。
  • 如果 src0 (纹理坐标) 为 临时寄存器,则上述) 查找 (所需的组件必须已事先编写。
  • 采样无符号 RGB 纹理将导致浮点值介于 0.0 和 1.0 之间。
  • 采样有符号纹理将导致浮点值介于 -1.0 到 1.0 之间。
  • 采样浮点纹理时,Float16 表示数据的范围将MAX_FLOAT16。 Float32 表示将使用管道的最大范围。 未定义任一范围外的采样。
  • 没有依赖性读取限制。

像素着色器说明