| | | | | | | [文章信息] | | | 作者: | 姑苏飘雪 | | 时间: | 2004-05-24 | | 出处: | 天极Myhard | | 责任编辑: | 寒冬 | |
| [文章导读] | | | 今天在这里将对比一下NV40与R420技术特性,希望能让大家更详细了解这两款顶级图形芯片的体系架构。 | |
| |
|
| | | |
|
|
|
|
|
另外它也支持变化tile尺寸的功能,让显卡驱动程序可在指定的情境下选择最适合的大小。此外,每组顶点着色管线拥有两个ALUs单元,它执行并行处理指令:这些是矢量和标量ALUs单元,主要针对32bit浮点模式运算。同时凭借核心频率较高的优势,R420的多边形生成速度达到了7.8亿个/秒,而NV40最高只有6亿个/秒。
3、像素着色引擎
像素着色器(Pixel Shader,简称PS),与VS类似,同样是由DirectX 8.0率先引入PS版本1.0。在DirectX 9.0中,与VS相比,PS得到了更大程度的增强。DX9.0所引入的PS 2.0,与令很多游戏开发大师诟病的PS1.x相比,可谓脱胎换骨,不但大大提高可PS可以容纳的指令数量,并增加了高级效果所必需的算术运算指令。
更重要的是指令的执行方式发生了本质变化:PS2.0再也不是仅仅只能执行一些极其简单的纹理取址指令和颜色混合指令的简单逻辑阶段(stage)开关了,而是不折不扣的处理单元了,很大程度上解决了复杂像素着色程序带来的像素填充率降低的问题。而到了DirectX 9.0C中,PS则升级到了PS3.0。
从支持的指令数方面,Pixel Shader 3.0要比Pixel Shader 2.0复杂多了。Pixel Shader 3.0中所支持最小指令数从2.0 Extended的96条激增到了512条。虽然一个拥有如此多的指令的shader对提高运算速度是否有帮助仍然是有争论的问题,不过指令数量的增加无疑给使用者提供了更大弹性空间。
注意,最小指令数量定义了硬件所可以适应于shader模型的指令数量,而不是一个shader所必须用的最少的指令数。而且Pixe Shader 3.0中的像素着色程序的长度不再受限制,这样程序员们就可以根据自己的需要任意加长程序长度了。从而能够实现更复杂的特效,然后更能免除在程序调用上的资源浪费,而且能够用一个程序实现原来多个程序的功能,让效率得到明显增加。
除了增强对指令的支持外,PS3.0还引入了动态流/分支控制功能及预测算法(Predication)。
|
Pixel Shader版本 |
2.0 |
2.a |
2.b |
3.0 |
| 从属纹理限制 |
4 |
无限制 |
4 |
无限制 |
| 纹理指令限制 |
32 |
无限制 |
无限制 |
无限制 |
| Shader指令槽长度 |
32+64 |
512 |
512 |
>512 |
| Shader执行指令 |
32+64 |
512 |
512 |
>65535 |
| 代换寄存器 |
2+8 |
2+8 |
2+8 |
10 |
| 指令预测 |
不支持 |
支持 |
不支持 |
支持 |
| 临时寄存器 |
12 |
22 |
32 |
32 |
| 常量寄存器 |
32 |
32 |
32 |
224 |
| 指令任意代换 |
不支持 |
支持 |
不支持 |
支持 |
| 梯度指令(DDX/DDY) |
不支持 |
支持 |
不支持 |
支持 |
| 动态流控制深度 |
不支持 |
不支持 |
不支持 |
24 | 动态流控制的作用便是通过它来提升shader的执行效能。理论上来说,它可以避免执行不必要的shader,同时也通过跳过执行那些不必要的指令来减低GPU用于shader运算的时间。举个例子来说,开发者如果想利用着色引擎来实现一个多阴影渲染效果,此前开发者可能需要对每一个阴影都进行一次着色设计。
而如果利用动态分支控制功能的话,开发者只需要简单的写一段着色程序然后根据该场景中阴影的数量进行相应的设置便可以了,在一定程度上大大节省了程序开发的时间。而且Pixel Shader 3.0新增加的面寄存器(face register),主要用来存储当前像素的三角形和视点之间的位置数据信息。如果面寄存器存放的值大于零,就表示这个视点所在的三角形面向视点,否则就是背向视点。利用面寄存器的这个特性,结合Pixel Shader 3.0的动态分支,就能减少无效渲染、提高场景渲染性能。
|
|
|
|
|
|
|
|