ps部分
概览
Instruction Set | |||||||||
Name | Description | Instruction slots | Setup | Arithmetic | Texture | Flow control | New | ||
绝对值 | 1 | x | |||||||
加法运算 | 1 | x | |||||||
跳出一个循环 | 1 | x | |||||||
通过一个比较跳出循环 | 3 | x | |||||||
基于一个断言跳出循环 | 3 | x | |||||||
调用一个子程序 | 2 | x | |||||||
如果一个boolean寄存器不为0的话调用一个子程序 | 3 | x | |||||||
如果一个predicate寄存器不为0的话调用一个子程序 | 3 | x | |||||||
以0为比较赋值 | 1 | x | |||||||
叉积 | 2 | x | |||||||
为采样器声明贴图维数 | 0 | x | |||||||
声明输入输出寄存器 | 0 | x | x | ||||||
定义常量 | 0 | x | |||||||
定义一个 Boolean 常量 | 0 | x | |||||||
定义一个integer 常量 | 0 | x | |||||||
2D 点积之后加法运算 | 2 | x | |||||||
3D 点积 | 1 | x | |||||||
4D 点积 | 1 | x | |||||||
改变x方向的比率 | 2 | x | |||||||
改变y方向的比率 | 2 | x | |||||||
else块 | 1 | x | |||||||
if结束 | 1 | x | |||||||
结束loop | 2 | x | x | ||||||
结束repeat | 2 | x | |||||||
全精度计算2的幂 | 1 | x | |||||||
小数部分 | 1 | x | |||||||
if块 | 3 | x | |||||||
比较形式的if | 3 | x | |||||||
断言形式的if | 3 | x | |||||||
标签 | 0 | x | |||||||
全精度计算log₂(x) | 1 | x | |||||||
循环 | 3 | x | x | ||||||
线性插值 | 2 | x | |||||||
3x2 乘法 | 2 | x | |||||||
3x3 乘法 | 3 | x | |||||||
3x4 乘法 | 4 | x | |||||||
4x3 乘法 | 3 | x | |||||||
4x4 乘法 | 4 | x | |||||||
乘法之后加法运算 | 1 | x | |||||||
最大值 | 1 | x | |||||||
最小值 | 1 | x | |||||||
赋值 | 1 | x | |||||||
乘法 | 1 | x | |||||||
无运算 | 1 | x | |||||||
单位化 | 3 | x | |||||||
幂运算 | 3 | x | |||||||
版本 | 0 | x | |||||||
倒数 | 1 | x | |||||||
循环 | 3 | x | |||||||
对主函数或子程序做return处理 | 1 | x | |||||||
平方根的倒数 | 1 | x | |||||||
设置断言寄存器 | 1 | x | |||||||
Sin和cos | 8 | x | |||||||
减法运算 | 1 | x | |||||||
中断像素渲染 | 2 | x | |||||||
采样一个贴图 | See note 1 | x | |||||||
根据w部分进行对贴图的level-of-detail bias采样 | 6 | x | |||||||
根据来自w通道的level-of-detail来采样图片 | See note 2 | x | x | ||||||
用户提供一个剃度值来采样贴图 | 3 | x | |||||||
根据w部分进行对贴图的投影划分采样 | See note 3 | x | |||||||
部分函数细节
dcl_semantics (sm3 - ps asm)
语法
dcl_semantics [_centroid] dst[.write_mask]
示例
ps_3_0
; Declaring inputs
dcl_normal v0.xyz
dcl_blendweight v0.w ; Must be same reg# as normal,matching vshader packing
dcl_texcoord1 v1.y ; Mask can be any subset of mask from vshader semantic
dcl_texcoord0 v1.zw; Has to be same reg# as texcoord1, to match vshader
; Declaring samplers
dcl_2d s0
dcl_2d s1
def c0, 0, 0, 0, 0
mov r0.x, v1.y ; texcoord1
mov r0.y, c0
texld r0, r0, s0
texld r1, v1.zw, s1
...
(output regs in ps_3_0 are same as ps_2_0: oC0-oC3,oDepth)
texldl - ps
语法
texldl dst, src0, src1
用于mipmap处理
算法
在mipmap滤波方式为linear时
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;
}
}
vs部分
概览
Instruction Set | |||||||||
Name | Description | Instruction slots | Setup | Arithmetic | Texture | Flow control | New | ||
绝对值 | 1 | x | |||||||
加法运算 | 1 | x | |||||||
跳出一个循环 - vs...endloop - vs 或者 rep...endrep 块 | 1 | x | |||||||
通过一个比较跳出循环 - vs...endloop - vs or rep...endrep block, with a comparison | 3 | x | |||||||
跳出一个循环 - vs...endloop - vs 或 rep...endrep 块, 基于一个断言 | 3 | x | |||||||
调用一个子程序 | 2 | x | |||||||
如果一个boolean寄存器不为0的话调用一个子程序 | 3 | x | |||||||
如果一个predicate寄存器不为0的话调用一个子程序 | 3 | x | |||||||
叉积 | 2 | x | |||||||
为采样器声明贴图维数 | 0 | x | |||||||
为采样器声明贴图维数 | 0 | x | x | ||||||
定义常量 | 0 | x | |||||||
定义一个 Boolean 常量 | 0 | x | |||||||
定义一个integer 常量 | 0 | x | |||||||
3D 点积 | 1 | x | |||||||
4D 点积 | 1 | x | |||||||
计算距离向量 | 1 | x | |||||||
1 | x | ||||||||
结束if - vs...else - vs block | 1 | x | |||||||
2 | x | ||||||||
结束 repeat 块 | 2 | x | |||||||
全精度计算2的幂 | 1 | x | |||||||
半精度计算2的幂 | 1 | x | |||||||
小数部分 | 1 | x | |||||||
3 | x | ||||||||
3 | x | ||||||||
3 | x | ||||||||
标签 | 0 | x | |||||||
局部光照计算 | 3 | x | |||||||
全精度计算log₂(x) | 1 | x | |||||||
半精度计算log₂(x) | 1 | x | |||||||
循环 | 3 | x | |||||||
线性插值 | 2 | x | |||||||
3x2 乘法 | 2 | x | |||||||
3x3 乘法 | 3 | x | |||||||
3x4 乘法 | 4 | x | |||||||
4x3 乘法 | 3 | x | |||||||
4x4 乘法 | 4 | x | |||||||
乘法之后加法运算 | 1 | x | |||||||
最大值 | 1 | x | |||||||
最小值 | 1 | x | |||||||
赋值 | 1 | x | |||||||
从浮点寄存器到地址寄存器(a0)移动数据 | 1 | x | |||||||
乘法 | 1 | x | |||||||
无运算 | 1 | x | |||||||
单位化 | 3 | x | |||||||
幂运算 | 3 | x | |||||||
倒数 | 1 | x | |||||||
循环 | 3 | x | |||||||
对主函数或子程序做return处理 | 1 | x | |||||||
平方根的倒数 | 1 | x | |||||||
设置断言寄存器 | 1 | x | |||||||
大于等于比较 | 1 | x | |||||||
返回符号 | 3 | x | |||||||
Sin和cos | 8 | x | |||||||
小于比较 | 1 | x | |||||||
减法 | 1 | x | |||||||
根据用户可调level-of-detail载入贴图 | See note 1 | x | x | ||||||
版本 | 0 | x | |||||||
---wolf96 2017/1/3