|
作为对抗G70的武器,R520有什么过人之处呢?我们先看看下面的图表,这个图显示了R520的结构情况。

从上图可以看出,R520的Vertex Shader和R420的Vertex Shader结构非常类似,采用的是128位向量ALU+32位标量ALU搭配的方式,每个周期各vertex shader能完成两条vertex shader指令,是全世界第一枚能每秒完成100亿条Vertex Shader指令的GPU;8个vertex shader每个周期一共能完成两个顶点的转换(即T&L里的Transformantion)操作。
和R420不同的是,新的R520由于引入了shader model 3.0,Vertex shader也因此支持VS 3.0,包括像分支、循环、子程序等动态流控制指令都获得了支持,每条vertex shader程序长度可以长达1024条指令,加上动态流控制后程序的长度就可以看作是几乎没有限制的。

根据我们昨天的报道应该可以确定Radeon X1800不具备Vertex Texture fetch(顶点纹理拾取)技术。但是这项技术是Vertex Shader 3.0必须予以遵循的功能。ATI如何应对这个问题呢?对此ATI表示,在微软的VS 3.0规范中,只要Vertex Texture Fetch功能位被设置为具备即可,具体的纹理格式并没有做出要求。ATI更指出,如果想在非一体化着色器体系结构的GPU上实现VTF的话,是需要非常多的管芯空间来放置纹理cache,为了优先确保Pixel Shader方面的性能,因此ATI采取了一个折衷的方案:Render to Vertex Buffer(渲染至顶点缓存,R2VB)。
由于Shader Model 3.0的Pixel Shader都能输出包含4个FP32分量的128位浮点格式数据,这些数据都可以存放到4字符编码(FOURCC)的顶点缓存(存放顶点格式数据的地方),然后直接作为顶点数据传输给顶点着色器,以此来实现Pre-Displacement Mapping。
不过和真正的Vertex Texture Fetch相比,R2VB可能就比较缺乏灵活性了。VTF中的纹理在VS内都是可以很快地作动态取样,顶点数据可以实现动态变更,更容易地加入几何LOD。
而Pre-Displacement Mapping的物理数据要发生改变的话,整个渲染过程也要随之配合变动,因此ATI也承认在R2VB不能和N-patch一起使用。
介绍了顶点着色引擎后,自然也要提到像素着色引擎(Pixel Shader)。
Radeon X1000系列的Pixel Shader与R420的区别并不大,所不同的是,增加了一个分支单元,并且计算精度从原来的FP24提升到了Shader Model 3.0要求的FP32。
我们比较了R520和G70的Pixel Shader。可以看出G70拥有两个能运行MADD指令的4D ALU,这两个ALU都能以4D、1D/3D或者2D/2D的方式完成指令,在运算能力上要强于R520。此外,G70的ALU1还能够免费地执行一条FP16的nrm指令,nrm指令是用于计算法线的,对于Unreal Engine3中大量使用Normal Mapping计算有明显的加速作用。
但是和R520相比,G70又存在一个不足,那就是ALU1兼负了纹理寻址计算(例如纹理坐标透视纠正的计算),在遇到纹理操作的时候,ALU1就不能自行像素着色器指令转而执行纹理操作指令,只剩下ALU2能够跑像素着色器指令。不过现在的游戏程序中,纹理操作的指令数量基本上都是低于像素着色器指令的数量,因此NVIDIA这样的设计也不算什么大过失。 |