Asm Shader Reference --- Shader Model 2 part

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

ps_2_x

概览

  Instruction Set                
                   
  Name Description Instruction slots Setup Arithmetic Texture Flow control New  
  abs - ps 绝对值 1   x        
  add - ps 加法运算 1   x        
  break - ps 跳出一个循环 1       x x  
  break_comp - ps 通过一个比较跳出循环 3       x x  
  breakp - ps 基于一个断言跳出循环 3       x x  
  call - ps 调用一个子程序 2       x x  
  callnz bool - ps 如果一个boolean寄存器不为0的话调用一个子程序 3       x x  
  callnz pred - ps 如果一个predicate寄存器不为0的话调用一个子程序 3       x x  
  cmp - ps 以0为比较赋值 1   x        
  crs - ps 叉积 2   x        
  dcl_samplerType (sm2, sm3 - ps asm) 为采样器声明贴图维数 0 x          
  dcl - (sm2, sm3 - ps asm) 声明顶点shader输出寄存器和像素shader输入寄存器之间的联合 0 x          
  def - ps 定义常量 0 x          
  defb - ps 定义一个 Boolean 常量 0 x       x  
  defi - ps 定义一个integer 常量 0 x       x  
  dp2add - ps 2D 点积之后加法运算 2   x        
  dp3 - ps 3D 点积 1   x        
  dp4 - ps 4D 点积 1   x        
  dsx - ps 改变x方向的比率 2   x     x  
  dsy - ps 改变y方向的比率 2   x     x  
  else - ps else块 1       x x  
  endif - ps if结束 1       x x  
  endrep - ps 循环结束 2       x x  
  exp - ps 全精度计算2的幂 1   x        
  frc - ps 小数部分 1   x        
  if bool - ps if块 3       x x  
  if_comp - ps 比较形式的if 3       x x  
  if pred - ps 断言形式的if 3       x x  
  label - ps 标签 0       x x  
  log - ps 全精度计算log?(x) 1   x        
  lrp - ps 线性插值 2   x        
  m3x2 - ps 3x2 乘法 2   x        
  m3x3 - ps 3x3 乘法 3   x        
  m3x4 - ps 3x4 乘法 4   x        
  m4x3 - ps 4x3 乘法 3   x        
  m4x4 - ps 4x4 乘法 4   x        
  mad - ps 乘法之后加法运算 1   x        
  max - ps 最大值 1   x        
  min - ps 最小值 1   x        
  mov - ps 赋值 1   x        
  mul - ps 乘法 1   x        
  nop - ps 无运算 1   x        
  nrm - ps 单位化 3   x        
  pow - ps 幂运算 3   x        
  ps 版本 0 x          
  rcp - ps 倒数 1   x        
  rep - ps 循环 3       x x  
  ret - ps 子程序的结束 1       x x  
  rsq - ps 平方根的倒数 1   x        
  setp_comp 设置断言寄存器 1       x x  
  sincos - ps Sin和cos 8   x        
  sub - ps 减法运算 1   x        
  texkill - ps 中断像素渲染 See note 1     x      
  texld - ps_2_0 and up 采样一个贴图 See note 2     x      
  texldb - ps 根据w部分进行对贴图的level-of-detail bias采样 See note 3     x      
  texldd - ps 用户提供一个剃度值来采样贴图 3     x   x  
  texldp - ps 根据w部分进行对贴图的投影划分采样 See note 4     x      
                   

部分函数细节

endrep

语法

endrep

示例

rep i2

add r0, r0, c0

endrep

if bool

语法

if bool

示例

defb b3, true

if b3

// Instructions to run if b3 is nonzero

else

// Instructions to run otherwise

endif

if_comp

语法

if_comp src0, src1

_comp为


Syntax


Comparison


_gt


大于


_lt


小于


_ge


大于等于


_le


小于等于


_eq


等于


_ne


不等于

示例

if_lt r3.x, r4.y

// Instructions to run if r3.x < r4.y

else

// Instructions to run otherwise

endif

rep

语法

rep i#

循环

i#.x范围为[0, 255]

示例

rep i2

add r0, r0, c0

endrep

-----wolf96   2017/1/3

时间: 2024-12-05 11:28:00

Asm Shader Reference --- Shader Model 2 part的相关文章

Asm Shader Reference --- Shader Model 1 part

ps部分 ps_1_1,ps_1_2,ps_1_3,ps_1_4 总览                   Instruction Set                               版本   指令槽 1_1 1_2 1_3 1_4   ps 版本号 0 x x x x   常数指令     1_1 1_2 1_3 1_4   def - ps 定义常数 0 x x x x   相位指令     1_1 1_2 1_3 1_4   phase - ps 在相位1与相位2之间转换

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

关于光照模型 所谓模型,一般是由学术算法发起, 经过大量实际数据验证而成的可靠公式 现在还记得2009年做TD-SCDMA移动通信算法的时候,曾经看过自由空间传播模型(Free space propagation Model),目的为了得出移动信号的传播损耗.当时是基于普通的PC实时运算,非常非常耗时–如北京五环内的传播模型渲染GIS图用了超过20分钟. 光照模型来源有2类: 一类是基于学术论文的算法,如Lambert模型.Phong模型. 另一类基于算法的变种–在实际生产实践中修正得到的模型,

Create a Basic Shader in Shader Forge

[Create a Basic Shader in Shader Forge] 1.打开ShaderForge.Window-> Shader Forge.(打开速度较慢) 2.通过NewShader按钮创建一个新Shader. 3.左上角Compile Shader会显示当前Shader的状态. 4.中央的面板显示Shader Forge的逻辑图. 5.在右侧,是一系列的可选对象,如Arithmetic.Properties.Constant Vector等. 6.创建完Shader后,在pr

【Unity Shader编程】之十四 边缘发光Shader(Rim Shader)的两种实现形态

本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://blog.csdn.net/poem_qianmo/article/details/51764028 作者:毛星云(浅墨)    微博:http://weibo.com/u/1723155442 本文工程使用的Unity3D版本: 5.2.1  这篇文章主要讲解了如何在Unity3D中分别使用Surface Shader和Vertex & Fragment Shader来编写边缘发光Shader. 一.最终实现的效果

【Unity Shader】Shader纹理映射的例子

将漫反射的颜色改为从纹理贴图中获取,逐像素计算. Shader "Custom/11-Texture" { // BlinnPhong光照模型 Properties{ //_Diffuse("Diffuse Color", Color) = (1,1,1,1) // 可在编辑器面板定义材质自身色彩 _MainTex("Main Tex",2D) = "white"{} // 纹理贴图,默认是一张白色贴图 _Color(&quo

UnityShader之固定管线Fixed Function Shader【Shader资料3】

Fixed function shader简介:  属于固定渲染管线 Shader, 基本用于高级Shader在老显卡无法显示时的情况.使用的是ShaderLab语言,语法与微软的FX files 或者NVIDIA的 CgFX类似. 1.使用固定管线来显示单一的颜色 Shader "Custom/1_1color" { // 属性 Properties { //定义一个颜色 _Color ("Main Color", Color) = (1,0.5,0.5,1) }

UnityShader之顶点片段着色器Vertex and Fragment Shader【Shader资料】

顶点片段着色器 V&F Shader:英文全称Vertex and Fragment Shader,最强大的Shader类型,也是我们在使用ShaderLab中的重点部分,属于可编程管线,使用的是CG/HLSL语法.分为vertex顶点部分和Fragment像素部分. 本篇的末尾讲述顶点函数传入的结构体类型的参数appdata_base. Shader "Custom/Exam1" { Properties { _MainTex ("Texture", 2D

Android 人脸特征点检测(主动形状模型) ASM Demo (Active Shape Model on Android)

目前Android平台上进行人脸特征识别非常火爆,本人研究生期间一直从事人脸特征的处理,所以曾经用过一段ASM(主动形状模型)提取人脸基础特征点,所以这里采用JNI的方式将ASM在Android平台上进行了实现,同时在本应用实例中,给出了几个其他的图像处理的示例. 由于ASM (主动形状模型,Active Shape Model)的核心算法比较复杂,所以这里不进行算法介绍,我之前写过一篇详细的算法介绍和公式推导,有兴趣的朋友可以参考下面的连接: ASM(主动形状模型)算法详解 接下来介绍本应用的

odoo Reference 选择model 然后选择record

class ActivityRules(models.Model): _description = '活动规则' _name = 'activity.rules' # 值越小优先级越高 rank = fields.Integer(string='折扣优先级') rule = fields.Reference(selection='_select_rules') @api.model def _select_rules(self): records = self.env['ir.model'].s