• Asm Shader Reference --- Shader Model 2.0 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

    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

  • 相关阅读:
    mysql对字段分割内容查询
    vue相关报错
    java多线程面试题
    java的消息队列
    电子商务大数据平台实训系统业务数据仓库总结
    电子商务大数据平台实训用户行为数仓业务总结
    电子商务大数据平台实训第一阶段总结
    Java 并发基础常见面试题总结
    window 平台 安装MongoDB
    java知识汇总(第六天)
  • 原文地址:https://www.cnblogs.com/zhanlang96/p/6243732.html
Copyright © 2020-2023  润新知