texldb - ps
有偏差的纹理加载指令。 此指令使用第四个元素 (.a 或 .w) 在采样之前对纹理采样级别进行偏差。
语法
texldb dst、src0、src1 |
---|
其中:
- dst 是目标寄存器。
- src0 是一个源寄存器,提供纹理样本的纹理坐标。 请参阅 纹理坐标寄存器。
- src1 标识 Sampler (Direct3D 9 asm-ps) (s#) ,其中 # 指定要采样的纹理采样器编号。 采样器与它关联的纹理和 由 D3DSAMPLERSTATETYPE 定义的采样器状态。
有关使用 texldb 时的限制,请参阅 texld - ps_2_0和上 一说明。
ps_2_0和ps_2_x
dst 必须是 临时注册 (r#) ,并且只允许使用 .xyzw 掩码 (默认掩码) 。
src0 必须是 纹理坐标寄存器 (t#) 或 临时寄存器 (r#) ,没有修饰符或重排。
src1 必须是 Sampler (Direct3D 9 asm-ps) ( s#) ,没有修饰符或重排。
如果在D3DPSHADERCAPS2_0) 中未 (设置D3DD3DPSHADERCAPS2_0_NODEPENDENTREADLIMIT上限位,则给定纹理指令 (texld、texldp、texldb、texldd) 可能依赖于最多第三个顺序。 一阶依赖纹理指令是一种纹理指令,其中任一:
- src0 是一个 临时寄存器 (r#) 。
- dst 以前是写的,现在又被写了。
二阶依赖纹理指令定义为纹理指令,该指令读取或写入 临时寄存器 (r#) ,其内容在执行纹理指令之前,可能间接) 依赖于 (第一顺序依赖纹理指令的结果。 (n 个) 从 (n - 1) 次序纹理指令派生。
ps_3_0
src1 必须是 Sampler (Direct3D 9 asm-ps) ( s#) ,没有修饰符。 src1 上允许重排,应用时,纹理查找结果会在写入到 dst 之前预先重排。
注解
像素着色器版本 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texldb | x | x | x | x | x |
texldb 通过 src0.w 中 (有符号) 值,以正常方式计算 mipmap 详细级别。 正偏差值将导致选择较小的 mipmap,反之亦然。 对于ps_2_0和ps_2_x,偏差值可以位于 [-3.0, +3.0] 范围内。 对于ps_3_0,偏差值可以位于 [-16.0, +15.0] 范围内。 这些范围之外的偏差值会产生未定义的结果。 采样器状态D3DSAMP_MIPMAPLODBIAS仍受遵循,texldb 偏差会添加到此位置,但基于每个像素。 计算有偏差的详细信息级别后,仍会遵循D3DSAMP_MAXMIPLEVEL并发生纹理样本。 texldb 后,src0 的内容不受影响, (除非 dst 是相同的寄存器) 。
src0 执行纹理样本所需的坐标数取决于 src1 的声明方式,以及 .w 组件。 采样器类型使用 dcl_samplerType (sm2、sm3 - ps asm) 声明。 如果 src1 声明为 2D 采样器,则 src0 必须包含 .xyw 坐标;如果 src1 声明为多维数据集采样器或卷采样器,则 src0 必须包含 .xyzw 坐标。 允许使用 .xyzw 坐标对 2D 纹理采样, (忽略 .z 坐标) 。
如果源纹理包含的组件少于 4 个,则默认值将放置在缺少的组件中。 默认值取决于纹理格式,如下表所示:
纹理格式 | 默认值 |
---|---|
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 |
相关主题