本部分列出了可包含在 指令令牌的前 16 位(0 - 15)中的着色器作代码。 以下各节描述了对应于作代码的说明的令牌格式。
语法
typedef enum _D3DSHADER_INSTRUCTION_OPCODE_TYPE {
D3DSIO_NOP,
D3DSIO_MOV,
D3DSIO_ADD,
D3DSIO_SUB,
D3DSIO_MAD,
D3DSIO_MUL,
D3DSIO_RCP,
D3DSIO_RSQ,
D3DSIO_DP3,
D3DSIO_DP4,
D3DSIO_MIN,
D3DSIO_MAX,
D3DSIO_SLT,
D3DSIO_SGE,
D3DSIO_EXP,
D3DSIO_LOG,
D3DSIO_LIT,
D3DSIO_DST,
D3DSIO_LRP,
D3DSIO_FRC,
D3DSIO_M4x4,
D3DSIO_M4x3,
D3DSIO_M3x4,
D3DSIO_M3x3,
D3DSIO_M3x2,
D3DSIO_CALL,
D3DSIO_CALLNZ,
D3DSIO_LOOP,
D3DSIO_RET,
D3DSIO_ENDLOOP,
D3DSIO_LABEL,
D3DSIO_DCL,
D3DSIO_POW,
D3DSIO_CRS,
D3DSIO_SGN,
D3DSIO_ABS,
D3DSIO_NRM,
D3DSIO_SINCOS,
D3DSIO_REP,
D3DSIO_ENDREP,
D3DSIO_IF,
D3DSIO_IFC,
D3DSIO_ELSE,
D3DSIO_ENDIF,
D3DSIO_BREAK,
D3DSIO_BREAKC,
D3DSIO_MOVA,
D3DSIO_DEFB,
D3DSIO_DEFI,
D3DSIO_TEXCOORD,
D3DSIO_TEXKILL,
D3DSIO_TEX,
D3DSIO_TEXBEM,
D3DSIO_TEXBEML,
D3DSIO_TEXREG2AR,
D3DSIO_TEXREG2GB,
D3DSIO_TEXM3x2PAD,
D3DSIO_TEXM3x2TEX,
D3DSIO_TEXM3x3PAD,
D3DSIO_TEXM3x3TEX,
D3DSIO_RESERVED0,
D3DSIO_TEXM3x3SPEC,
D3DSIO_TEXM3x3VSPEC,
D3DSIO_EXPP,
D3DSIO_LOGP,
D3DSIO_CND,
D3DSIO_DEF,
D3DSIO_TEXREG2RGB,
D3DSIO_TEXDP3TEX,
D3DSIO_TEXM3x2DEPTH,
D3DSIO_TEXDP3,
D3DSIO_TEXM3x3,
D3DSIO_TEXDEPTH,
D3DSIO_CMP,
D3DSIO_BEM,
D3DSIO_DP2ADD,
D3DSIO_DSX,
D3DSIO_DSY,
D3DSIO_TEXLDD,
D3DSIO_SETP,
D3DSIO_TEXLDL,
D3DSIO_BREAKP,
D3DSIO_PHASE,
D3DSIO_COMMENT,
D3DSIO_END,
D3DSIO_FORCE_DWORD
} D3DSHADER_INSTRUCTION_OPCODE_TYPE;
常数
D3DSIO_NOP NOP 指令执行 no-op或无作。 格式 包含D3DSIO_NOP的 指令令牌。 |
D3DSIO_MOV MOV 指令在寄存器之间移动数据。 格式 包含D3DSIO_MOV的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 注释 可用于浮点数据以及更新地址寄存器。 用于更新地址寄存器时,这些值将使用舍入转换为最接近的浮点。 |
D3DSIO_ADD ADD 指令添加两个源向量,并将结果存储在目标中。 格式 包含D3DSIO_ADD的 指令令牌。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_SUB SUB 指令减去两个源向量,并将结果存储在目标中。 格式 包含D3DSIO_SUB的指令令牌 。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_MAD MAD 指令将第一个和第二个源相乘,并添加第三个源。 格式 包含D3DSIO_MAD的指令令牌 。 指令长度为 4。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 第三个源参数令牌。 |
D3DSIO_MUL MUL 指令将两个源向量相乘,并将结果存储在目标中。 格式 包含D3DSIO_MUL的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_RCP RCP 指令计算源的倒数,并将结果存储在目标中。 格式 包含D3DSIO_RCP的指令令牌 。 指令长度为 2。 目标参数令牌。 源参数令牌。 需要显式使用复制重排,即 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效项)必须指定。 |
D3DSIO_RSQ RSQ 指令计算源的倒数平方根,并将结果存储在目标中。 格式 包含D3DSIO_RSQ的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 需要显式使用复制重排,即 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效项)必须指定。 |
D3DSIO_DP3 DP3 指令计算源寄存器的三分量(RGB)点积,并将结果存储在目标中。 格式 包含D3DSIO_DP3的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_DP4 DP4 指令计算源寄存器的四分量(RGBA)点积,并将结果存储在目标中。 格式 包含D3DSIO_DP4的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_MIN MIN 指令确定源的最小值,并将最小源存储在目标中。 格式 包含D3DSIO_MIN的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_MAX MAX 指令确定源的最大值,并将最大源存储在目标中。 格式 包含D3DSIO_MAX的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_SLT SLT 指令确定第一个源是否小于第二个源,并将符号(1.0f for TRUE 和 0.0f for FALSE)存储在目标中。 格式 包含D3DSIO_SLT的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_SGE SGE 指令确定第一个源是否大于或等于第二个源,并将符号(1.0f for TRUE 和 0.0f for FALSE)存储在目标中。 格式 包含D3DSIO_SGE的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_EXP EXP 指令提供全精度指数 2x。 格式 包含D3DSIO_EXP的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 需要显式使用复制重排,即 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效项)必须指定。 注释 EXP 指令至少提供 21 位精度。 |
D3DSIO_LOG LOG 指令计算全精度对数(x)。 格式 包含D3DSIO_LOG的指令令牌 。 指令长度为 2。 目标参数令牌。 源参数令牌。 源参数令牌需要显式使用复制重排,即必须指定 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效组件)。 注释 LOG 指令提供至少 21 位精度。 |
D3DSIO_LIT LIT 指令通过计算两个点产品和指数中的照明系数,为照明提供部分支持。 格式 包含D3DSIO_LIT的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 注释 在评估目标 Y 组件时,可以接受精度降低的算术(以写入掩码为单位)。 实现必须至少支持电源参数中的八个分数位。 点乘以规范化向量计算,固定限制 -128 为 128。 错误应对应于 LOGP 和 EXPP 组合,或者对于 8 位颜色组件,误差不超过至少一个有效位(LSB)。 |
D3DSIO_DST DST 指令计算距离向量,并将结果存储在目标中。 格式 包含D3DSIO_DST的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_LRP LRP 指令按第一个源中指定的比例在第二和第三个源之间线性内插,并将结果存储在目标中。 格式 包含D3DSIO_LRP的 指令令牌。 指令长度为 4。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 第三个源参数令牌 注释 LRP 指令可用于浮点数据或整数数据。 当 LRP 指令用于更新整数寄存器时,将使用舍入将值从浮点转换为最接近的整数。 LRP 指令必须用于更新地址寄存器。 |
D3DSIO_FRC FRC 指令返回每个输入组件的分数部分。 格式 包含D3DSIO_FRC的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 注释 结果的每个组件都在 0.0 到 1.0 之间。 对于版本顶点或像素版本 1_1,允许的写入掩码为 Y 和 XY(不允许 X)。 |
D3DSIO_M4x4 M4x4 指令计算 4 分量矢量和 4x4 矩阵的乘积,并将结果存储在目标中。 格式 包含D3DSIO_M4x4的指令令牌 。 指令长度为 3。 目标参数令牌。 需要 XYZW 掩码。 首先 源参数令牌。 第二个源参数令牌。 重排组件和否定修饰符无效。 |
D3DSIO_M4x3 M4x3 指令计算 4 分量向量和 4x3 矩阵的乘积,并将结果存储在目标中。 格式 包含D3DSIO_M4x3的 指令令牌。 指令长度为 3。 目标参数令牌。 需要 XYZ 掩码。 首先 源参数令牌。 第二个源参数令牌。 重排组件和否定修饰符无效。 |
D3DSIO_M3x4 M3x4 指令计算 3 分量向量和 3x4 矩阵的乘积,并将结果存储在目标中。 格式 包含D3DSIO_M3x4的 指令令牌。 指令长度为 3。 目标参数令牌。 需要 XYZW 掩码。 首先 源参数令牌。 第二个源参数令牌。 重排组件和否定修饰符无效。 |
D3DSIO_M3x3 M3x3 指令计算 3 分量向量和 3x3 矩阵的乘积,并将结果存储在目标中。 格式 包含D3DSIO_M3x3的指令令牌 。 指令长度为 3。 目标参数令牌。 需要 XYZ 掩码。 首先 源参数令牌。 第二个源参数令牌。 重排组件和否定修饰符无效。 |
D3DSIO_M3x2 M3x2 指令计算 3 分量向量和 3x2 矩阵的乘积,并将结果存储在目标中。 格式 包含D3DSIO_M3x2的指令令牌 。 指令长度为 3。 目标参数令牌。 需要 XY 掩码。 首先 源参数令牌。 第二个源参数令牌。 重排组件和否定修饰符无效。 |
D3DSIO_CALL CALL 指令对标有标签索引的指令执行函数调用。 格式 包含D3DSIO_CALL的指令令牌 。 标签令牌(使用D3DSPR_LABEL 注册类型源参数令牌)。 |
D3DSIO_CALLNZ CALLNZ 指令对标签索引标记的指令执行条件调用(如果不是零)。 格式 包含D3DSIO_CALLNZ的指令令牌 。 标签令牌(使用D3DSPR_LABEL 注册类型源参数令牌)。 使用D3DSPR_CONSTBOOL注册类型 源参数令牌。 |
D3DSIO_LOOP LOOP 指令开始 循环...ENDLOOP 块。 格式 包含D3DSIO_LOOP的指令令牌 。 首先使用D3DSPR_LOOP 寄存器类型源参数令牌。 X 组件指定迭代计数;Y 组件指定当前循环计数器寄存器的初始值;和 Z 组件指定当前循环计数器寄存器的增量。 此寄存器需要显式使用复制重排,即。必须指定 XYZW (RGBA) 组件掩码。 注释 循环指令中只能使用整数寄存器。 LOOP 指令用于迭代,并支持可用于为常量数组编制索引的自动递增循环计数器寄存器。 嵌套时,每当使用循环计数器寄存器时,它都引用当前循环。 |
D3DSIO_RET RET 指令从子例程返回或标记主函数的末尾。 格式 包含D3DSIO_RET的 指令令牌。 注释 如果着色器不包含子例程,则使用主程序末尾的 RET 是可选的。 |
D3DSIO_ENDLOOP ENDLOOP 指令标记 LOOP 块的末尾。 格式 包含D3DSIO_ENDLOOP的指令令牌 。 |
D3DSIO_LABEL LABEL 指令使用标签索引标记下一个指令。 格式 包含D3DSIO_LABEL的指令令牌 。 使用D3DSPR_LABEL 寄存器类型 和寄存器号 源参数令牌。 |
D3DSIO_DCL 指定 DCL 指令令牌。 |
D3DSIO_POW POW 指令计算完全精度(第一个源)第二个源,并将结果存储在目标中。 格式 包含D3DSIO_POW的 指令令牌。 指令长度为 3。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 注释 这两个源都需要显式使用复制重排,即 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效项)必须指定。 POW 指令提供至少 15 位精度。 |
D3DSIO_CRS CRS 指令使用右侧规则计算跨积。 格式 包含D3DSIO_CRS的 指令令牌。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_SGN SGN 指令确定源的符号,并将符号(-1 为负数、0 为 0 和 1 表示正)存储在目标中。 格式 包含D3DSIO_SGN的 指令令牌。 指令长度为 4。 目标参数令牌。 首先 源参数令牌。 使用D3DSPR_TEMP 寄存器类型的第二个源参数令牌。 使用D3DSPR_TEMP寄存器类型的第三个源参数令牌。 注释 第二个和第三个源可用作临时寄存器。 |
D3DSIO_ABS ABS 指令计算源的绝对值,并将结果存储在目标中。 格式 包含D3DSIO_ABS的 指令令牌。 目标参数令牌。 源参数令牌。 |
D3DSIO_NRM NRM 指令规范化 4D 向量。 格式 包含D3DSIO_NRM的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 |
D3DSIO_SINCOS SINCOS 指令 计算源的正弦和余弦值。 |
D3DSIO_REP REP 指令启动 REPEAT...ENDREP 块。 格式 包含D3DSIO_REP的 指令令牌。 使用D3DSPR_CONSTINT 寄存器类型源参数令牌。 X 组件指定迭代计数。 注释 只能在 REP 指令中使用整数寄存器。 |
D3DSIO_ENDREP ENDREP 指令标记 REP 块的末尾。 格式 包含D3DSIO_ENDREP的 指令令牌。 |
D3DSIO_IF IF 指令开始 IF 块。 格式 包含D3DSIO_IF的 指令令牌。 使用D3DSPR_CONSTBOOL 寄存器类型源参数令牌。 注释 如果源布尔寄存器为 TRUE,则执行由 IF 语句括起来的代码以及匹配的 ELSE (如果未使用 ELSE,则 ENDIF);否则,执行将传递给由 ELSE-ENDIF 语句(存在 ELSEELSE 存在)或 IF 块之外的代码(ELSE 不存在)。 |
D3DSIO_IFC IFC 指令使用比较开始 IF 块。 格式 包含D3DSIO_IFC的 指令令牌。 首先 源参数令牌。 第二个源参数令牌。 注释 IFC 指令会根据源之间的比较跳过代码块。 这两个源都需要显式使用复制重排,即 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效项)必须指定。 如果所有源组件之间的比较为 TRUE,则执行 IF 语句和匹配的 ELSE 指令(如果未使用 ELSE),则执行匹配的 ELSE 指令(或 ENDIF 指令);否则,执行将传递给由 ELSE-ENDIF 语句(存在 ELSEELSE 存在)或 IF 块(ELSE 不存在)括起来的代码。 |
D3DSIO_ELSE ELSE 指令启动 ELSE 块。 格式 包含D3DSIO_ELSE的 指令令牌。 注释 如果相应 IF 指令中的源布尔寄存器为 true,则由 IF 包含的代码和执行匹配的 else ELSE,否则执行将传递给由 else ELSE 和 ENDIF 指令括起来的代码。 |
D3DSIO_ENDIF ENDIF 指令结束 IF...ELSE 块。 格式 包含D3DSIO_ENDIF的 指令令牌。 |
D3DSIO_BREAK BREAK 指令在最近的 endloop 或 endrep 处中断当前循环。 格式 包含D3DSIO_BREAK的 指令令牌。 |
D3DSIO_BREAKC BREAKC 指令根据两个源之间的比较条件,在最近的 endloop 或 endrep 处中断当前循环。 格式 包含D3DSIO_BREAKC的指令令牌 。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_MOVA MOVA 指令将数据从浮点寄存器移动到整数寄存器。 格式 包含D3DSIO_MOVA的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 注释 这些值使用舍入转换为最接近的浮点。 地址寄存器是唯一允许的目标寄存器。 |
D3DSIO_DEFB DEFB 指令定义布尔常量值,应在着色器设置为设备时加载该值。 此指令可用于顶点着色器 2_0 及更高版本。 由当前顶点着色器设置的布尔常量优先于由D3DDP2OP_SETVERTEXSHADERCONSTB作设置的常量。 格式 包含D3DSIO_DEFB的 指令令牌。 指令长度为 2。 目标参数令牌。 寄存器类型 必须D3DSPR_CONSTBOOL。 DWORD 标记包含布尔值,其中非零表示 true;零表示 FALSE。 |
D3DSIO_DEFI DEFI 指令定义整数常量值,应在着色器设置为设备时加载该值。 由当前顶点着色器设置的常量优先于由D3DDP2OP_SETVERTEXSHADERCONSTI作设置的常量。 格式 包含D3DSIO_DEFI的 指令令牌。 指令长度为 5。 目标参数令牌。 寄存器类型 必须D3DSPR_CONSTINT。 4 DWORD 令牌包含四个 32 位带符号整数。 |
D3DSIO_TEXCOORD TEXCOORD 指令将纹理坐标数据(UVW1)复制为颜色数据(RGBA)。 格式 包含D3DSIO_TEXCOORD的 指令令牌。 目标参数令牌。 源参数令牌。 源参数令牌仅适用于像素着色器版本 1_4。 注释 texcoord 和 texcrd 汇编程序指令都使用D3DSIO_TEXCOORD作代码。 texcoord 指令适用于像素着色器版本 1_0 到 1_3;它具有一个目标参数令牌,并且没有与其关联的源参数令牌。 texcrd 指令适用于像素着色器版本 1_4;它具有一个目标参数令牌和一个与其关联的源参数令牌。 |
D3DSIO_TEXKILL 如果纹理坐标的前三个组件(UVW)中的任何一个小于零,TEXKILL 指令将取消当前像素的呈现。 格式 包含D3DSIO_TEXKILL的指令令牌 。 目标参数令牌(行为类似于源令牌)。 注释 如果目标令牌的任何组件小于零,请终止像素着色器并丢弃输出。 以下功能适用于目标令牌:
|
D3DSIO_TEX TEX 指令使用从源纹理采样的颜色数据(RGBA)加载目标。 格式 包含D3DSIO_TEX的 指令令牌。 使用D3DSPR_PREDICATE 寄存器类型目标参数令牌。 以下源令牌仅适用于像素着色器版本 1_4 及更高版本: - 首先 源参数标记 提供纹理样本的纹理坐标。 - 使用D3DSPR_SAMPLER 寄存器类型的第二个源参数令牌。 第二个源参数标记标识要采样的纹理采样器编号。 注释 tex 和 texld 汇编程序指令都使用D3DSIO_TEX作代码。 tex 指令适用于像素着色器版本 1_0 到 1_3;它具有一个目标参数令牌,并且没有与其关联的源参数令牌。 texld 指令适用于像素着色器版本 1_4 及更高版本;它具有一个目标参数令牌和两个与之关联的源参数令牌。 |
D3DSIO_TEXBEM TEXBEM 指令通过使用地址扰动数据(U、V)和二维凹凸环境矩阵修改目标寄存器的纹理地址数据来应用凹凸环境映射转换。 格式 包含D3DSIO_TEXBEM的指令令牌 。 目标参数令牌。 源参数令牌。 |
D3DSIO_TEXBEML TEXBEML 指令应用具有亮度更正的凹凸环境地图转换。 格式 包含D3DSIO_TEXBEML的 指令令牌。 目标参数令牌。 源参数令牌。 注释 使用地址扰动数据(U.V)、二维凹凸环境矩阵和亮度,通过修改目标寄存器的纹理地址数据(U.V)、2D 凸起环境矩阵和亮度来实现的凸起环境映射转换。 |
D3DSIO_TEXREG2AR TEXREG2AR指令将源的 alpha 和红色分量解释为纹理地址数据(U,V),以便对对应于目标寄存器号的阶段中的纹理采样。 结果存储在目标中。 格式 包含D3DSIO_TEXREG2AR的 指令令牌。 目标参数令牌。 源参数令牌。 注释 TEXREG2AR指令对于颜色空间重新映射作非常有用。 它支持二维(二维)坐标。 源寄存器必须使用未签名的数据;如果源寄存器使用已签名或混合数据,则作将生成无效的结果。 |
D3DSIO_TEXREG2GB TEXREG2GB指令将源的绿色和蓝色组件解释为纹理地址数据(U,V),以便对对应于目标寄存器号的阶段的纹理采样。 结果存储在目标中。 格式 包含D3DSIO_TEXREG2GB的指令令牌 。 目标参数令牌。 源参数令牌。 注释 TEXREG2GB指令可用于颜色空间重新映射作。 它支持二维(二维)坐标。 源寄存器必须使用未签名的数据;如果源寄存器使用已签名或混合数据,则作将生成无效的结果。 |
D3DSIO_TEXM3x2PAD TEXM3x2PAD 指令执行双行矩阵乘法的第一行乘法。 格式 包含D3DSIO_TEXM3x2PAD的 指令令牌。 目标参数令牌。 源参数令牌。 注释 TEXM3x2PAD 指令本身不能使用;它必须与 TEXM3x2TEX 或 TEXM3x2DEPTH 指令结合使用。 |
D3DSIO_TEXM3x2TEX TEXM3x2TEX 指令执行 3x2 矩阵乘法的最后一行,并在纹理查找中使用结果。 格式 包含D3DSIO_TEXM3x2TEX的指令令牌 。 目标参数令牌。 源参数令牌。 注释 TEXM3x2TEX 指令必须与 TEXM3x2PAD 指令一起使用。 |
D3DSIO_TEXM3x3PAD TEXM3x3PAD 指令执行三行矩阵相乘的第一行或第二行乘法。 格式 包含D3DSIO_TEXM3x3PAD的 指令令牌。 目标参数令牌。 源参数令牌。 注释 TEXM3x3PAD 指令本身不能使用;它必须与 TEXM3x3 指令、TEXM3x3SPEC 指令、TEXM3x3VSPEC 指令或 TEXM3x3TEX 指令结合使用。 |
D3DSIO_TEXM3x3TEX TEXM3x3TEX 指令执行 3x3 矩阵相乘,并在纹理查找中使用结果。 格式 包含D3DSIO_TEXM3x3TEX的 指令令牌。 目标参数令牌。 源参数令牌。 注释 TEXM3x3TEX 指令必须与两个 TEXM3x3PAD 指令一起使用。 它用作表示 3x3 矩阵乘法运算的三个指令中的最后一个,后跟纹理查找。 3x3 矩阵由第三个纹理阶段和前两个纹理阶段的纹理坐标组成。 生成的三分量矢量(U,V,W)用于对阶段 3 中的纹理进行采样。 将忽略分配给上述两个纹理阶段的任何纹理。 3x3 矩阵乘法通常用于将正向量定向到呈现表面的正确正切空间。 |
D3DSIO_RESERVED0 此说明保留供内部使用。 |
D3DSIO_TEXM3x3SPEC TEXM3x3SPEC 指令执行 3x3 矩阵相乘,并在纹理查找中使用结果。 用于反射和环境映射。 格式 包含D3DSIO_TEXM3x3SPEC的 指令令牌。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 注释 TEXM3x3SPEC 指令必须与两个 TEXM3x3PAD 指令一起使用。 此指令集可用于反射和环境映射。 TEXM3x3SPEC 指令执行 3x3 矩阵乘法的最后一行,使用生成的向量作为法向量来反射眼光向量,然后使用反射向量执行纹理查找。 着色器从常量寄存器中读取眼光矢量。 3x3 矩阵乘法通常用于将正向量定向到呈现表面的正确正切空间。 3x3 矩阵由第三个纹理阶段和前两个纹理阶段的纹理坐标组成。 生成的后反射向量(U,V,W)用于对最终纹理阶段的纹理采样。 将忽略分配给上述两个纹理阶段的任何纹理。 |
D3DSIO_TEXM3x3VSPEC TEXM3x3VSPEC 指令执行 3x3 矩阵相乘,并在纹理查找中使用结果。 格式 包含D3DSIO_TEXM3x3VSPEC的 指令令牌。 目标参数令牌。 源参数令牌。 注释 TEXM3x3VSPEC 指令必须与两个 TEXM3x3PAD 指令一起使用。 此指令集可用于视光矢量不常的反射和环境映射。 如果眼光矢量为常量,则 TEXM3x3SPEC 指令执行相同的矩阵乘法和纹理查找。 TEXM3x3VSPEC 指令执行 3x3 矩阵乘法运算的最后一行,将生成的向量解释为普通向量以反映眼光矢量,然后使用反射向量作为纹理查找的纹理地址。 它的工作方式就像 TEXM3X3SPEC一样,只是眼光矢量是从纹理坐标的第四个组成部分中获取的。 3x3 矩阵乘法通常用于将正向量定向到呈现表面的正确正切空间。 3x3 矩阵由第三个纹理阶段和前两个纹理阶段的纹理坐标组成。 生成的后反射矢量 (UVW) 用于对阶段 3 中的纹理进行采样。 将忽略分配给上述两个纹理阶段的任何纹理。 |
D3DSIO_EXPP EXPP 指令提供部分精度指数 2x。 格式 包含D3DSIO_EXPP的指令令牌 。 指令长度为 2。 目标参数令牌。 源参数令牌。 需要显式使用复制重排,即 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效项)必须指定。 注释 EXPP 指令提供至少 10 位精度。 |
D3DSIO_LOGP LOGP 指令计算部分精度对数(x)。 格式 包含D3DSIO_LOGP的 指令令牌。 指令长度为 2。 目标参数令牌。 源参数令牌。 需要显式使用复制重排,即 X、Y、Z 或 W 重排组件(或 R、G、B 或 A 等效项)必须指定。 注释 LOGP 指令提供至少 10 位精度。 |
D3DSIO_CND CND 指令根据第一个源大于 0.5 在第二个源和第三个源之间进行选择,并将结果存储在目标中。 格式 包含D3DSIO_CND的 指令令牌。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 第三个源参数令牌。 |
D3DSIO_DEF DEF 指令定义常量值,应在着色器设置为设备时加载该值。 此指令可用于所有顶点着色器版本。 由当前顶点着色器设置的常量优先于由D3DDP2OP_SETVERTEXSHADERCONST作设置的常量。 格式 包含D3DSIO_DEF的 指令令牌。 指令长度为 5。 目标参数令牌。 寄存器类型 必须是D3DSPR_CONST、D3DSPR_CONST2、D3DSPR_CONST3或D3DSPR_CONST4。 4 个 DWORD 令牌。 4D 浮点数或 4D 整数。 |
D3DSIO_TEXREG2RGB TEXREG2RGB指令将源的红色、绿色和蓝色(RGB)颜色组件解释为纹理地址数据(U,V,W),以便对对应于目标寄存器号的阶段的纹理采样。 结果存储在目标中。 格式 包含D3DSIO_TEXREG2RGB的 指令令牌。 目标参数令牌。 源参数令牌。 注释 TEXREG2RGB指令对于颜色空间重新映射作非常有用。 它支持二维(二维)和三维(三维)坐标。 它可以像 TEXREG2AR 指令一样使用,也可以 TEXREG2GB 指令重新映射二维数据。 但是,TEXREG2RGB指令还支持三维数据,以便它可以与多维数据集地图和三维卷纹理一起使用。 |
D3DSIO_TEXDP3TEX TEXDP3TEX指令执行三分量点积,并使用结果执行一维纹理查找。 格式 包含D3DSIO_TEXDP3TEX的 指令令牌。 目标参数令牌。 源参数令牌。 |
D3DSIO_TEXM3x2DEPTH TEXM3x2DEPTH 指令计算要用于像素深度测试的深度值。 格式 包含D3DSIO_TEXM3x2DEPTH的 指令令牌。 目标参数令牌。 源参数令牌。 注释 TEXM3x2DEPTH 指令必须与 TEXM3x2PAD 指令一起使用。 |
D3DSIO_TEXDP3 TEXDP3 指令在纹理寄存器号中的数据与对应于目标寄存器号的纹理坐标集之间执行三分量的点积。 格式 包含D3DSIO_TEXDP3的指令令牌 。 目标参数令牌。 源参数令牌。 |
D3DSIO_TEXM3x3 当与两 TEXM3x3PAD 指令结合使用时,TEXM3x3 指令执行 3x3 矩阵相乘。 格式 包含D3DSIO_TEXM3x3的指令令牌 。 目标参数令牌。 源参数令牌。 注释 TEXM3x3 指令必须与两个 TEXM3X3PAD 指令一起使用。 它用作表示 3x3 矩阵乘法运算的三个指令中的最后一个。 3x3 矩阵由第三个纹理阶段的纹理坐标和前面的两个纹理阶段组成。 将忽略分配给这三个纹理阶段中的任何一个纹理。 TEXM3x3 指令与 TEXM3x3TEX 指令相同,无需纹理查找。 |
D3DSIO_TEXDEPTH TEXDEPTH 指令计算要在像素深度缓冲区比较测试中使用的深度值。 格式 包含D3DSIO_TEXDEPTH的 指令令牌。 目标参数令牌。 |
D3DSIO_CMP CMP 指令根据第一个源大于或等于零在第二和第三个源之间进行选择,并将结果存储在目标中。 每个通道的比较完成。 格式 包含D3DSIO_CMP的 指令令牌。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 第三个源参数令牌。 |
D3DSIO_BEM BEM 指令应用颠簸的环境映射转换。 格式 包含D3DSIO_BEM的 指令令牌。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 |
D3DSIO_DP2ADD DP2ADD 指令执行二维点产品和标量添加,并将结果存储在目标中。 格式 包含D3DSIO_DP2ADD的 指令令牌。 指令长度为 4。 目标参数令牌。 首先 源参数令牌。 第二个源参数令牌。 第三个源参数令牌。 |
D3DSIO_DSX DSX 指令将计算源在 x 方向的更改速率,并将结果存储在目标中。 格式 包含D3DSIO_DSX的 指令令牌。 指令长度为 2。 目标参数令牌。 接受所有写入掩码。 源参数令牌。 接受所有重排。 注释 DSX 指令始终根据寄存器的当前内容(以像素为单位)计算渐变,无论由于流控制还是由于基元边缘而处于活动状态。 这些像素在锁定步骤中执行。 |
D3DSIO_DSY DSY 指令以 y 方向计算源的更改率,并将结果存储在目标中。 格式 包含D3DSIO_DSY的 指令令牌。 指令长度为 2。 目标参数令牌。 接受所有写入掩码。 源参数令牌。 接受所有重排。 注释 DSY 指令始终计算寄存器的当前内容(以像素为单位)的渐变,无论像素是由于流控制还是由于基元边缘而处于活动状态。 这些像素在锁定步骤中执行。 |
D3DSIO_TEXLDD TEXLDD 指令使用第一个源标记中的纹理坐标、第二个源标记指定的采样器以及第三和第四个源标记中的渐变(DSX 和 DSY)对纹理采样。 格式 包含D3DSIO_TEXLDD的 指令令牌。 指令长度为 5。 目标参数令牌。 接受所有写入掩码。 首先 源参数令牌。 必须使用D3DSPR_SAMPLER 寄存器类型的第二个源参数标记。 支持的采样器状态为D3DSAMP_MAXMIPLEVEL和D3DSAMP_MIPMAPLODBIAS。 注释 所有源都支持任意重排。 所有写入掩码在目标上均有效。 |
D3DSIO_SETP SETP 指令设置谓词寄存器。 格式 包含D3DSIO_SETP的 指令令牌。 指令长度为 3。 使用D3DSPR_PREDICATE 寄存器类型目标参数令牌。 需要写入掩码。 首先 源参数令牌。 必须指定重排组件。 第二个源参数令牌。 必须指定重排组件。 注释 对于可以根据目标写入掩码写入的每个通道,保存源的相应通道之间的比较作的布尔结果(在解析源修饰符重排后)。 |
D3DSIO_TEXLDL TEXLDL 指令使用提供的纹理坐标对特定采样器中的纹理采样。 采样的特定细节级别(LOD)必须指定为纹理坐标的第四个(W)组件。 格式 包含D3DSIO_TEXLDL的 指令令牌。 指令长度为 3。 使用D3DSPR_PREDICATE 寄存器类型目标参数令牌。 首先 源参数标记 提供纹理样本的纹理坐标。 使用D3DSPR_SAMPLER 寄存器类型的第二个源参数令牌。 标识要采样的纹理采样器编号。 无法指定反门源修饰符。 可以指定重排。 采样器编号必须在着色器的开头声明。 注释 目标令牌写入掩码缺失组件的默认值为 0 或 1,具体取决于纹理格式。 执行纹理样本所需的坐标数取决于采样器编号的声明方式。 如果它声明为多维数据集,则需要 3 分量的纹理坐标(RGB)。 验证强制要求提供给 纹 的坐标足以满足为采样器声明的纹理维度。 采样尺寸低于纹理坐标中的纹理有效。 相反,采样维度高于纹理坐标中存在的纹理无效。 采样无符号 RGB 纹理会导致浮点值从 0.0 到 1.0。 采样带符号纹理会导致浮点值从 -1.0 到 1.0。 采样浮点纹理会导致 Float16 保留到MAX_FLOAT16范围,或者将 Float32 保存到管道的最大范围。 |
D3DSIO_BREAKP BREAK PRED 指令在最接近的 endloop 或 endrep 处中断当前循环,方法是使用谓词寄存器的一个组件作为条件来确定是否执行指令。 格式 包含D3DSIO_BREAKP的 指令令牌。 源参数令牌 使用D3DSPR_PREDICATE 注册类型 复制重排(每个通道使用相同的源组件)。 允许在位 27:24 中使用 NOT (0xd) 源修饰符。 |
D3DSIO_PHASE 仅适用于像素着色器版本 1_4。 PHASE 指令标记像素着色器版本 1 和 2 之间的转换。 如果没有阶段指令,则整个着色器将像第 2 阶段着色器一样运行。 格式 包含D3DSIO_PHASE的指令令牌 。 注释 阶段指令之前发生的着色器指令是阶段 1 指令。 所有其他指令都是阶段 2 指令。 通过为指令提供两个阶段,每个着色器的最大指令数将增加。 临时寄存器的 alpha 分量不会在整个阶段转换中保留。 换句话说,在阶段指令之后,必须重新初始化 alpha 组件。 |
D3DSIO_COMMENT 指定 注释标记。 |
D3DSIO_END 指定 结束标记。 |
D3DSIO_FORCE_DWORD 强制 32 位大小。 |
要求
要求 | 价值 |
---|---|
最低支持的客户端 | 在 Windows Vista 和更高版本的 Windows作系统中可用。 |
标头 | d3d9types.h |