GPU 图形计算综述 (三):可编程管线 (Programmable Pipeline)
2000年左右,微软在DirectX 8.0中首次提出了Shader Model 1.0和顶点着色器(Vertex Shader)的概念,标志着可编程管线时代的来临。随后,在DirectX 9.0中推出了Shader Model 2.0和像素着色器(Pixel Shader)(注:OpenGL中描述为Fragment Shader,片元着色器)。
图1是Direct3D 11.0的图形管线示意图,其中蓝色方框表示可编程着色器,橙色方框表示固定功能模块。
图1:可编程管线示意图 (Direct3D 11.0 Graphics Pipeline)
可编程着色器定义了一组指令集和语法,开发者可以自行设计和实现更多更复杂的算法,灵活性大大增强,不仅显著的提升了渲染画面的真实感,并推动GPU的发展进入快车道。毫不夸张的说,可编程着色器的推出,开启了一个崭新的时代。
随后,各种类型的可编程着色器相继推出,将GPU和图形领域推向了一个又一个新的高度。下表中简要列出了可编程着色器的发展脉络:
表1:可编程着色器的发展
可编程着色器 | 图形API版本 | 推出时间 |
Vertex Shaders | DirectX 8.0 / OpenGL 1.4 | 2000 |
Fragment Shaders/Pixel Shaders | DirectX 9.0 / OpenGL 2.0 | 2001-2004 |
Unified Shader Architecture | DirectX 10.0 / OpenGL 3.3 | 2006 |
Geometry Shaders | DirectX 10 / OpenGL 3.2 | 2006 |
Tessellation Shaders | DirectX 11 / OpenGL 4.0 | 2009 |
Compute Shaders | DirectX 11 / OpenGL 4.0 | 2009 |
Ray Tracing Shaders | DirectX 12 / Vulkan extension | 2018 |
Mesh Shaders | DirectX 12 Ultimate / Vulkan extension | 2018-2020 |
Neural Shaders | Ongoing | 2025 |
可编程管线极大促进了GPU硬件的发展速度。2006年前后,英伟达旗舰版GPU所包含的晶体管数量,已经超过了同时代英特尔旗舰版CPU的晶体管数量。GPU不再仅仅是CPU的协处理器,而开始与CPU并驾齐驱。
事物往往存在两面性,可编程着色器的高度灵活性同时也带来一定的复杂性,提高了图形编程的门槛。