● 认识GPU浮点计算精度
DirectX 9.0时代提出的Shader Model 2.0最重要的一点改进是增加对浮点数据的处理功能,以前GPU只能对整数进行处理,改进后提高渲染精度,使最终处理的色彩格式达到电影级别。Shader Model 2.0时代突破了以前限制PC图形图象质量在数学上的精度障碍,它的每条渲染流水线都升级为128位浮点颜色,让游戏程序设计师们更容易更轻松的创造出更漂亮的效果,让程序员编程更容易。而从通用性方面理解,支持浮点运算让GPU已经具备了通用计算的基础,这一点是至关重要的。
如果说DirectX 8中的Shader单元还是个简单尝试的话,DirectX 9中的Shader则成为了标准配置。除了版本升级到2.0外,DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消,在较低DirectX版本游戏运行时会使用VS单元模拟执行硬件T&L单元的功能。
浮点处理器能够统一执行多种任务
后来统一渲染架构提出进一步提高了着色器的运算效率,Pixel Shader(像素着色器)、Vertex Shader(顶点着色器)和Geometry Shader(几何着色器),三种具体的硬件逻辑被整合为一个全功能的着色器Shader。程序员不必为了两种结构不同的着色器分别编写程序,GPU内部的可编程单元被抽象为浮点处理器(Floating Point Processor)。
一个浮点数a由两个数m和e来表示:a = m × be。在任意一个这样的系统中,我们选择一个基数b(记数系统的基)和精度p(即使用多少位来存储)。m(即尾数)是形如±d.ddd...ddd的p位数(每一位是一个介于0到b-1之间的整数,包括0和b