3.1 GPU管线概述(GPU Pipeline Overview)
GPU负责几何阶段和光栅化阶段的工作。这些工作又可以划分为多种可编程,不可编程可配置,不可编程不可配置的阶段。其中,顶点着色阶段是完全可编程的,可以用来实现模型变换,视口变换,顶点着色,投影等,几何着色阶段是可选的,完全可编程的,可以用来实现逐图元操作,比如增加,或者减少图元。裁剪,屏幕映射,三角形设置,三角形遍历阶段是固定阶段,不可编程。逐片元着色阶段是完全可编程的。合并阶段是可配置的。
3..2 可编程着色阶段(The Programmable Shader Stage)
draw call 调用图形API绘制一组图元后图形管线就开始执行了。每个可编程着色阶段都有两种输入,uniform input: 在一个draw call中,值是不变的。varying input: 存储每个顶点或片元各自的数据。texture 是一种特殊的uniform input,它可以看作是一组很大的数据,但数据不一定只能包含颜色信息。虽然shader 的输入有各种类型,但输入却有严格的格式。虚拟机为不同的输入和输入提供了特定的寄存器。uniform input 使用constant registers 或constant buffer,因为他们的值在一次draw call中,是不会变化的。虚拟机还有通用的临时寄存器。所有类型的寄存器可以类似数组一样,通过索引访问。
使用统一的指令能够提高现代GPU的效率。标量,矢量的计算也是很快的。倒数,平方根,正弦,余弦,幂运算,对数,tend就慢很多。textur