Vertex Shaders汇编语言编程模型.doc

  1. 1、本文档共28页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Vertex Shaders汇编语言编程模型

Vertex Shaders汇编语言编程模型 文章出处:/course/3_program/game91408.html 学习了顶点处理,你就知道固定功能流水线怎么将顶点从模型空间坐标系统转化到屏幕空间坐标系统。虽然固定功能流水线也可以通过设置渲染状态和参数来改变最终输出的结果,但是它的整体功能还是受限。当我们想实现一个外来的光照模型,外来的Fog或者点大小计算方式,等等,我们可能就放弃使用固定功能流水线,转而使用CPU来实现这些计算。 使用vertex shaders,它用一段小程序替换固定功能处理。这段小程序的输入是模型空间的顶点,输出齐次剪裁空间的顶点,并且还携带一些信息,如:per-vertex diffuse 和 specualr,雾,透明度,纹理坐标和点大小。 这一节我们将先讲述vertex shaders的汇编语言编程模型。 Vertex Shader Arichitecture Direct3D对于不同的图形处理器有不同的vertex shaders架构版本。每个版本都有不同数目和类型的寄存器和不同的指令集。一般情况,高版本一般是低版本的衍生品,提供了更多的指令和更少限制。我们将先看完整的1.1版本,然后讨论各个版本在上面的增量。 DirectX 9.0c 支持的vertex shader版本包括1.1,2.0,2.x和3.0。 这些版本的汇编语言的语法标志是:vs_1_1, vs_2_0, vs_2_x和vs_3_0。在老的SDK和文档里面,你也许会看到vs_2_a和vs_2_b,他们已经融合到了vs_2_x版本里面了。当你安装SDK的时候,vertex shader的特殊版本也将会安装,如vs_2_sw和vs_3_sw,这两个版本只用于软件处理,专门用于做模拟和调试之用。shader的软件版本实现了2.0和3.0架构所有的功能,并且大部分的shader验证将被放开。 shader 版本 vs_1_1 vs_2_0 vs_2_x vs_3_0 指令数目 128 256 =256 =512 所有的架构都共享一个公共的执行模型。执行程序称做shader,它在每个顶点上执行一次。shader包含一个或多个指令,每个指令由一个操作码与0个或多个操作数组成的。shader可以访问五组不同的寄存器:顶点数据的input寄存器,渲染参数的const寄存器,用于查询const寄存器的地址寄存器,存储临时数据的临时寄存器,采样纹理的采样寄存器,shader输出结果的ouput寄存器。不同类型寄存器的数目如下表。 Version a0 aL bn cn in on p0 rn sn vn vs_1_1 1 0 0 =96 0 13 0 12 0 16 vs_2_0 1 1 16 =256 16 13 0 12 0 16 vs_2_x 1 1 16 =256 16 13 1 =12 0 16 vs_3_0 1 1 16 =256 16 12 1 32 4 16 每个临时寄存器都存储一个四维的向量值,大多数指令都是在四维向量上进行操作。每个值都是一个浮点值,一般有6个小数数字。指令一般是通用算术运算,如加,乘和一般的向量计算(点积,向量矩阵乘法)。跟一般的CPU不一样的是,低版本的shader一般不支持流控制,以便于shader更加简单和容易硬件加速。 input 寄存器 顶点组件通过合适的顶点声明映射到对应的semantics上。semantics使用dcl_usage指令与shader的输入寄存器关联。输入寄存器是只读的,只能用作顶点shader指令的数据源。虽然不同的操作数能应用到不同的修饰符,每个指令只能引用一个input regesiter。 const 寄存器和地址寄存器 不随着每个顶点变化的参数可以存放在const 寄存器。所有的shader版本都支持浮点const,整数const , bool const只能用在2.0以上的shader版本。每个指令一次只能访问一个const 寄存器,但是不同的源操作数可以访问带有修饰符的同一个const寄存器。 const寄存器值在shader 里面一般是通过def, defb和defi指令定义的,它也能来自于设备,通过方法:SetVertexShaderConstantF, SetVertexShaderConstantB 和 SetVertexShaderConstantI。你可以认为通过shader指令定义的值为local const,而通过设备方法定义的const为global const。 地址寄存器是一个带符号的整数,记录了距离base const寄

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档