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 表示将使用管道的最大范围。 未定义任一范围外的采样。
- 没有依赖性读取限制。
相关主题