ps部分

ps_2_0

概览

  Instruction Set              
                 
  Name Description Instruction slots Setup Arithmetic Texture New  
  abs - ps 绝对值 1   x   x  
  add - ps 加法 1   x      
  cmp - ps Compare source to 0 1   x      
  crs - ps 叉积 2   x   x  
  dcl_samplerType (sm2, sm3 - ps asm) 为采样器声明贴图维数 0 x     x  
  dcl - (sm2, sm3 - ps asm) 声明顶点shader输出寄存器和像素shader输入寄存器之间的联合 0 x     x  
  def - ps 定义常量 0 x        
  dp2add - ps 2D点积之后加法运算 2   x   x  
  dp3 - ps 3D点积 1   x      
  dp4 - ps 4D点积 1   x      
  exp - ps 全精度的2的x次方 1   x   x  
  frc - ps 小数部分 1   x   x  
  log - ps 全精度的 log₂(x) 1   x   x  
  lrp - ps 线性插值 2   x      
  m3x2 - ps 3x2 乘法 2   x   x  
  m3x3 - ps 3x3 乘法 3   x   x  
  m3x4 - ps 3x4 乘法 4   x   x  
  m4x3 - ps 4x3 乘法 3   x   x  
  m4x4 - ps 4x4 乘法 4   x   x  
  mad - ps 乘法之后加法运算 1   x      
  max - ps 最大值 1   x   x  
  min - ps 最小值 1   x   x  
  mov - ps 赋值 1   x      
  mul - ps 乘法 1   x      
  nop - ps 无运算 1   x      
  nrm - ps 单位化 3   x   x  
  pow - ps 幂运算 3   x   x  
  ps 版本 0 x        
  rcp - ps 倒数 1   x   x  
  rsq - ps 平方根后倒数 1   x   x  
  sincos - ps sin和cos 8   x   x  
  sub - ps 减法 1   x      
  texkill - ps 中断像素渲染 1     x    
  texld - ps_2_0 and up 采样一张贴图 1     x x  
  texldb - ps 根据w部分进行对贴图的level-of-detail bias采样 1     x x  
  texldp - ps 根据w部分进行对贴图的投影划分采样 1     x x  
                 

部分函数细节

crs

语法

crs dst, src0, src1

叉积

算法

dest.x = src0.y * src1.z - src0.z * src1.y;
dest.y = src0.z * src1.x - src0.x * src1.z;
dest.z = src0.x * src1.y - src0.y * src1.x;

dcl_samplerType

语法

dcl_samplerType s#

声明一个像素shader采样器

·        _2d

·        _cube

·        _volume

示例

 
dcl_cube t0.rgb;  // Define a 3D texture map.
 
add r0, r0, t0;   // Perturb texture coordinates. 
texld r0, s0, r0; // Load r0 with a color sampled from stage0
                  //   at perturbed texture coordinates r0.
                  // This is a dependent texture read.

dp2add

语法

dp2add dst, src0, src1, src2.{x|y|z|w}

算法

 
dest = src0.r * src1.r + src0.g * src1.g + src2.replicate_swizzle
// The scalar result is replicated to the write mask components

nrm

语法

nrm dst, src

单位化一个3D向量

squareRootOfTheSum = (src0.x*src0.x + src0.y*src0.y +src0.z*src0.z)1/2;

算法

dest.x = src0.x * (1 / squareRootOfTheSum);
dest.y = src0.y * (1 / squareRootOfTheSum);
dest.z = src0.z * (1 / squareRootOfTheSum);
dest.w = src0.w * (1 / squareRootOfTheSum);

sincos

语法

ps_2_0 和 ps_2_x

sincos dst.{x|y|xy}, src0.{x|y|z|w}, src1, src2

ps_3_0

sincos dst.{x|y|xy}, src0.{x|y|z|w}

算法

ps_2_0 and ps_2_x

写入通道为.x

dest.x = cos(V)
dest.y is undefined when the instruction completes
dest.z is undefined when the instruction completes
dest.w is not touched by the instruction

写入通道为.y

dest.x is undefined when the instruction completes
dest.y = sin(V)
dest.z is undefined when the instruction completes
dest.w is not touched by the instruction

写入通道为.xy

dest.x = cos(V)
dest.y = sin(V)
dest.z is undefined when the instruction completes
dest.w is not touched by the instruction

ps_3_0

写入通道为.x

dest.x = cos(V)
dest.y is undefined when the instruction completes
dest.z is undefined when the instruction completes
dest.w is not touched by the instruction

写入通道为.y

dest.x is undefined when the instruction completes
dest.y = sin(V)
dest.z is undefined when the instruction completes
dest.w is not touched by the instruction

写入通道为.xy

dest.x = cos(V)
dest.y = sin(V)
dest.z is undefined when the instruction completes
dest.w is not touched by the instruction

示例角度制转弧度制

 
def c0, pi, 0.5, 2*pi, 1/(2*pi)
mad r0.x, input_angle, c0.w, c0.y
frc r0.x, r0.x
mad r0.x, r0.x, c0.z, -c0.x

vs部分

vs_2_0

概览

  Instruction Set              
                 
  Name Description Instruction slots Setup Arithmetic Flow control New  
  abs - vs 绝对值 1   x   x  
  add - vs 加法运算 1   x      
  call - vs 调用一个子程序 2     x x  
  callnz bool - vs 如果一个boolean寄存器不为0的话调用一个子程序 3     x x  
  crs - vs 叉积 2   x   x  
  dcl_usage input (sm1, sm2, sm3 - vs asm) 声明输入顶点寄存器(see Registers - vs_2_0) 0 x        
  def - vs 定义常量 0 x        
  defb - vs 定义一个 Boolean 常量 0 x     x  
  defi - vs 定义一个integer 常量 0 x     x  
  dp3 - vs 3D 点积 1   x      
  dp4 - vs 4D 点积 1   x      
  dst - vs 计算距离向量 1   x      
  else - vs else - vs block 1     x x  
  endif - vs endif - vs...else - vs block 1     x x  
  endloop - vs 结束一个循环 - vs block 2     x x  
  endrep - vs 结束一个 repeat block 2     x x  
  exp - vs 全精度计算2的幂 1   x      
  exp - vs 半精度计算2的幂 1   x      
  frc - vs 小数部分 1   x      
  if bool - vs if块 3     x x  
  label - vs Label 0     x x  
  lit - vs 局部光照计算 3   x      
  log - vs 全精度计算log₂(x) 1   x      
  logp - vs 半精度计算log₂(x) 1   x      
  loop - vs 循环 3     x x  
  lrp - vs 线性插值 2   x   x  
  m3x2 - vs 3x2 乘法 2   x      
  m3x3 - vs 3x3 乘法 3   x      
  m3x4 - vs 3x4 乘法 4   x      
  m4x3 - vs 4x3 乘法 3   x      
  m4x4 - vs 4x4 乘法 4   x      
  mad - vs 乘法之后加法运算 1   x      
  max - vs 最大值 1   x      
  min - vs 最小值 1   x      
  mov - vs 赋值 1   x      
  mova - vs 从浮点寄存器到地址寄存器(a0)移动数据  1   x   x  
  mul - vs 乘法 1   x      
  nop - vs 无运算 1   x      
  nrm - vs 单位化 3   x   x  
  pow - vs 幂运算 3   x   x  
  rcp - vs 倒数 1   x      
  rep - vs reapeat 3     x x  
  ret - vs 从主函数或子程序做return处理 1     x x  
  rsq - vs 子程序的结束 1   x      
  sge - vs 平方根的倒数 1   x      
  sgn - vs Sign 3   x   x  
  sincos - vs Sin和cos 8   x   x  
  slt - vs Less than compare 1   x      
  sub - vs 减法 1   x      
  vs 版本 0 x        
                 

部分函数细节

mova

语法

mova dst, src

dst必须是地址寄存器,a0

示例

将浮点数赋值到整数寄存器,转换要使用凑整函数

if(dest is an integer register)

{

int intSrc =RoundToNearest(src);

dest = intSrc;

}

else

{

dest = src;

}

在2_x或以上版本,地址寄存器是部分向量,写入任何通道都可以

mova a0.xz, r0

sge

语法

sgedst, src0, src1

逐通道比较 src0与src1,如果src0大于等于src1返回1否则返回0

算法

dest.x = (src0.x>= src1.x) ? 1.0f : 0.0f;

dest.y = (src0.y>= src1.y) ? 1.0f : 0.0f;

dest.z = (src0.z>= src1.z) ? 1.0f : 0.0f;

dest.w = (src0.w>= src1.w) ? 1.0f : 0.0f;

sgn

语法

sgn dst, src0, src1

返回src0的符号

src1, src2为临时寄存器保存中间计算过程,为未定义

算法

for each component in src0

{

if(src0.component < 0)

dest.component= -1;

else

if(src0.component == 0)

dest.component = 0;

else

dest.component = 1;

}

slt

语法

slt dst, src0, src1

与sge相反,逐通道比较src0与src1,如果src0小于src1返回1否则返回0

算法

dest.x = (src0.x < src1.x) ? 1.0f : 0.0f;
dest.y = (src0.y < src1.y) ? 1.0f : 0.0f;
dest.z = (src0.z < src1.z) ? 1.0f : 0.0f;
dest.w = (src0.w < src1.w) ? 1.0f : 0.0f;

-----wolf96   2017/1/3

Asm Shader Reference --- Shader Model 2.0 part的更多相关文章

  1. Asm Shader Reference --- Shader Model 2.x part

    ps部分 概览   Instruction Set                                       Name Description Instruction slots S ...

  2. Asm Shader Reference --- Shader Model 3.0 part

    ps部分 概览   Instruction Set                                       Name Description Instruction slots S ...

  3. Asm Shader Reference --- Shader Model 1 part

    ps部分 ps_1_1,ps_1_2,ps_1_3,ps_1_4 总览                   Instruction Set                               ...

  4. 微软的HLSL Shader Model 6.0 compiler要转向LLVM了,开源的节奏. Apple/Khronos都有各自计划

    So, Microsoft is making an opensource HLSL-to-almost-LLVM compiler, and Khronos is making an opensou ...

  5. Shader Model 3.0:Using Vertex Textures SM3:使用顶点纹理 (NVIDIA spec, 6800支持使用D3DFMT_R32F and D3DFMT_A32B32G32R32F的纹理格式实现Vertex Texture。)

    翻译者 周波 zhoubo22@hotmail.com 版权所有 Philipp Gerasimov Randima (Randy) Fernando Simon Green NVIDIA Corpo ...

  6. Unity3D for VR 学习(9): Unity Shader 光照模型 (illumination model)

    关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propa ...

  7. ePass1000 Full ActiveX Control Reference Manual Version 2.0

    ePass1000 Full ActiveX Control Reference Manual Version 2.0 Error Code Value Return Status Descripti ...

  8. caffe编译时候出现 undefined reference to `TIFFReadRGBAStrip@LIBTIFF_4.0'

    1.编译时候出现 make: * [.build_release/examples/siamese/convert_mnist_siamese_data.bin] Error 1 /usr/local ...

  9. Create a Basic Shader in Shader Forge

    [Create a Basic Shader in Shader Forge] 1.打开ShaderForge.Window-> Shader Forge.(打开速度较慢) 2.通过NewSha ...

随机推荐

  1. A-frame_02

    A-Frame 让我们能够仅仅通过几行HTML代码创建出可以运行在桌面, 虚拟眼镜, 以及手机上的VR场景. 而且因为这个框架是基于HTML的, 我们也可以像一般的HTML元素一样配合JavaScri ...

  2. JavaScript自定义方法实现trim()、Ltrim()、Rtrim()

    去除字符串两端的空格,是字符串处理非常常用的方法如何trim() .Ltrim() .Rtrim(),可惜的是javascript中无此方法,下面有个不错的自定义教程感兴趣的朋友可以参考下 去除字符串 ...

  3. ie6下 gif动画不动

    ie6下 gif动画不动 如果有onclick事件:在IE6中,点击a标签,onclick事件会先执行,其次是href下的动作,href执行后,默认会执行跳转动作(尽管href属性不一定是一个地址), ...

  4. UI设计的奥义

    个人觉得一个好的UI应该具备如下特点 1.符合人类认知行为 2.契合人体生物学 3.平滑,流畅 4.适当的交互会让你的应用更加成功 5.动态的内容才是招蜂引蝶的资本

  5. about Q&A in installing linux[centos6,7]

    keywords:grub1,grub2,gnome,kde, question describe:install centos7 by U disk,出现问题, 解决办法: install cent ...

  6. 【BZOJ】1015: [JSOI2008]星球大战starwar

    1015: [JSOI2008]星球大战starwar 题意:一个点数为N(1<= 40w),边数为M(1<=20w)的图,总共删除k个节点,问开始以及每次删除一个节点之后图的连通块数? ...

  7. tar + find

    将tar 和find 结合,选定目录下指定的文件类型进行打包解压: tar命令用语对文件进行归档以及恢复归档文件,"tar xzvf"命令用于释放<恢复>". ...

  8. 纯CSS3代码实现表格奇偶行异色,鼠标悬浮变色

    1.首先会用到<tr></tr>元素两个伪类,nth-child()和hover. 然后需要注意的是伪类都是通过冒号引用的,不是点号,即tr:hover{} 其次,CSS代码中 ...

  9. css3 图标上下移动动画

    @-webkit-keyframes bird{ 0% { -moz-transform: translate(0,0); -webkit-transform: translate(0,0); -o- ...

  10. Android编程中常用的PopupWindow和Dialog对话框

    注意:PopupWindow组件的使用问题,PopupWindow是一个阻塞对话框,如果你直接在Activity创建的方法中显示它,则会报错:android.view.WindowManager$Ba ...