texldl - vs

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

语法

texldl dst、src0、src1

 

其中:

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

备注

顶点着色器版本 1_1 2_0 2_x 2_sw 3_0 3_sw
texldl x x

 

texldl 在 src1 引用的采样器阶段查找纹理集。 详细信息级别是从 src0.w 中选择的。 此值可以为负值,在这种情况下,选择的详细信息级别为“第 0 个”, (MAGFILTER 的最大地图) 。 由于 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-vs) (s#) (采样器。 src1 不能使用否定修饰符。 src1 可以使用重排,在采用写入掩码之前在采样后应用。 采样器必须已在着色器开头使用 dcl_samplerType (sm3 - vs asm) ) (声明。
  • 执行纹理采样所需的坐标数取决于如何声明采样器。 如果声明为立方体,则需要三分量纹理坐标 (.rgb) 。 验证强制向 texldl 提供的坐标对于为采样器声明的纹理维度足够。 但是,不能保证应用程序实际通过 API) 设置纹理 (,其尺寸等于为采样器声明的维度。 在这种情况下,运行时将尝试检测可能仅在调试) (不匹配项。 将允许对尺寸小于纹理坐标中维度的纹理采样,并假定忽略额外的纹理坐标分量。 相反,不允许对尺寸大于纹理坐标中尺寸的纹理进行采样。
  • 如果 src0 (纹理坐标) 是 临时寄存器 (r#) ,则上述查找 (所需的组件必须事先编写) 。
  • 采样无符号 RGB 纹理将导致浮点值介于 0.0 和 1.0 之间。
  • 采样有符号纹理将导致浮点值介于 -1.0 到 1.0 之间。
  • 采样浮点纹理时,Float16 表示数据的范围将在MAX_FLOAT16范围内。 Float32 表示将使用管道的最大范围。 未定义任一范围外的采样。
  • 没有依赖性读取限制。

顶点着色器说明