一 目前最新的可编程图形硬件已经具备了如下功能:
1 支持vertex programmability 和fragment programmability
2 支持IEEE32 位浮点运算
3 支持4 元向量,4 阶矩阵计算
4 提供分支指令,支持循环控制语句
5 具有高带宽的内存传输能力(>27.1GB/s)
6 支持1D、2D、3D 纹理像素查询和使用,且速度极快
7 支持绘制到纹理功能(Render to Texture,RTT)
二、GPU和CPU
nGPU 具有高并行结构(highly parallel structure),所以GPU 在处理图形数据和复杂算法方面拥有比CPU 更高的效率
![](http://hi.csdn.net/attachment/201202/7/0_1328606727VqUH.gif)
gPU 采用流式并行计算模式,可对每个数据进行独立的并行计算(流内任意元素的计算不依赖于其它同类型数据)
![](http://hi.csdn.net/attachment/201202/7/0_1328606816TyFG.gif)
CPU 和GPU 上的代码比较:提取2D 图像上每个像素点的颜色值
三、GPU 图形绘制管线
图形绘制管线可分为三个主要阶段
–应用程序阶段,使用高级编程语言(C、C++、JAVA 等)进行开发,主要和CPU、内存打交道,诸如碰撞检测、场景图建立、空间八叉树更新、视锥裁剪等经典算法都在此阶段执行
–几何阶段,主要负责顶点坐标变换、光照、裁剪、投影以及屏幕映射,该阶段基于GPU 进行运算,在该阶段的末端得到了经过变换和投影之后的顶点坐标、颜色、以及纹理坐标
–光栅阶段,基于几何阶段的输出数据,为像素(Pixel)正确配色,以便绘制完整图像,,每个像素的信息存储在颜色缓冲器(color buffer 或者frame buffer)中
![](http://hi.csdn.net/attachment/201202/7/0_1328606919h3Cv.gif)
四、Shade Language(着色语言)
shader language 被定位为高级语言,如,GLSL 的全称是“High Level ShadingLanguage”,Cg 语言的全称为“C for Graphic”,并且这两种shader language 的语法设计非常类似于C 语言。
高级语言的一个重要特性是“独立于硬件”,但是目前shader language 完全依赖于GPU 构架,
任意一种shader language 都必须基于图形硬件,所以GPU 编程技术的发展本质上还是图形硬件的发展。在shader language存在之前,展示基于图形硬件的编程能力只能靠低级的汇编语言。
使用shader language 编写的程序称之为shader program(着色程序)。着色程序分为两类:
–vertex shader program(顶点着色程序,运行在顶点处理器上)
–fragment shader program(片断着色程序,运行在片段处理器上)
![](http://hi.csdn.net/attachment/201202/7/0_1328607015jOXR.gif)
Vertex Shader Program
顶点着色程序从GPU 前端模块(寄存器)中提取图元信息(顶点位置、法向量、纹理坐标等),并完成顶点坐标空间转换、法向量空间转换、光照计算等操作,最后将计算好的数据传送到指定寄存器中;
然后片断着色程序从中获取需要的数据,通常为“纹理坐标、光照信息等”,并根据这些信息以及从应用程序传递的纹理信息(如果有的话)进行每个片断的颜色计算,最后将处理后的数据送光栅操作模块。
![](http://hi.csdn.net/attachment/201202/7/0_13286070897pq2.gif)
Fragment Shader Program
片断就是所有的三维顶点在光栅化之后的数据集合,这些数据还没有经过深度值比较
片断着色程序对每个片断进行独立的颜色计算,最后输出颜色值的就是该片段最终显示的颜色。可以这样说,顶点着色程序主要进行几何方面的运算,而片段着色程序主要针对最终的颜色值进行计算。
Shader language 目前有3 种主流语言:
–基于OpenGL 的GLSL(OpenGLShading Language,也称为GLslang)
–基于Direct3D 的HLSL(High Level ShadingLanguage)语言,
–NVIDIA 公司的Cg (C for Graphic)语言。