非统一架构时代的GPU架构组件解读
上世纪的绝大多数显示加速芯片都不能称之为完整意义上的GPU,因为它们仅仅只有像素填充和纹理贴图的基本功能。而NVIDIA公司在1999年所发布的GeForce 256图形处理芯片则首次提出了GPU的概念。GPU所采用的核心技术有硬件T&L、立方环境材质贴图和顶点混合、纹理压缩和凹凸映射贴图、双重纹理四像素256位渲染引擎等,而硬件T&L(Transform and Lighting,多边形转换与光源处理)技术可以说是GPU问世的标志。
演示硬件几何和光影(T&L)转换的Demo
● 传统的固定渲染管线
渲染管线也称为渲染流水线,是显示芯片内部处理图形信号相互独立的的并行处理单元。在某种程度上可以把渲染管线比喻为工厂里面常见的各种生产流水线,工厂里的生产流水线是为了提高产品的生产能力和效率,而渲染管线则是提高显卡的工作能力和效率。
什么叫一条“像素渲染管线”?简单的说,传统的一条渲染管线是由包括Pixel Shader Unit(像素着色单元)+ TMU(纹理贴图单元) + ROP(光栅化引擎)三部分组成的。用公式表达可以简单写作:PS=PSU+TMU+ROP 。从功能上看,PSU完成像素处理,TMU负责纹理渲染,而ROP则负责像素的最终输出。所以,一条完整的像素管线意味着在一个时钟周期完成至少进行1个PS运算,并输出一次纹理。
● Shader(着色器)的引入
而GPU的下一次重大革新则是引入了Shader(着色器)。着色器替代了传统的固定渲染管线,可以实现3D图形学计算中的相关计算,由于其可编辑性,从而可以实现各种各样的图像效果而不用受显卡的固定渲染管线限制。这极大的提高了图像的画质。而从GeForce 3到GeForce 9,GPU的发展都是一直基于这种用于显卡硬件几何架构/渲染过程的Shader来进行的。
● Shader(着色器)的分类
早期的Shader(着色器)有两种, 一种是顶点着色器,称为Vertex Shader(OpenGL称为vertex program),取代固定渲染管线中的变换和光照部分,程序员可以自己控制顶点变换、光照等。另一种是像素着色器,称为Pixel Shader(OpenGL称为fragment program),取代固定渲染管线中的光栅化部分,程序员可以自己控制像素颜色和纹理采样等。
关于顶点,我们需要小小说明一下:所有3D场景的对象都是由顶点形成。一个顶点是X、Y、Z坐标形成的3D空间中的一点,多个顶点聚在一起(至少四个)可形成一个多边形,如三角形、立方体或更复杂的形状,将材质贴在其上可使该组件(或几个排好的组件)看起来更真实。上图的3D立方体就是由八个顶点所形成,使用大量顶点,可形成弧线形对象等较复杂的图像。
● GPU的像素着色单元和顶点着色单元
在图形处理中,最常见的像素都是由RGB(红绿蓝)三种颜色构成的,加上它们共有的信息说明(Alpha),总共是4个通道。而顶点数据一般是由XYZW四个坐标构成,这样也是4个通道。在3D图形进行渲染时,其实就是改变RGBA四个通道或者XYZW四个坐标的数值。为了一次性处理1个完整的像素渲染或几何转换,GPU的像素着色单元和顶点着色单元从一开始就被设计成为同时具备4次运算能力的算数逻辑运算器(ALU)。