● 利用Computer Shader做图形后处理
GPU是图形处理器,以往的GPU通用计算需要程序员先将资料伪装成GPU可识别的图像,再将GPU输出的图像转换为想要的结果,而通过DX11中的Compute Shader通用计算,任意类型的数据(即使是非图形数据)都可以直接进行计算,而且不受图形渲染流程的束缚,可以随时写入写出,GPU通用计算的效能提高了很多。
由于GPU的浮点运算能力非常强大,支持GPU进行通用计算的技术发展势头很快,NVIDIA和AMD分别有CUDA和Stream技术,以前两家是各自为战,如今微软也看到了GPU通用计算的曙光,在DX11中加入了Compute Shader这一技术,意在统一当前的通用计算技术。你可以认为Compute Shader标准就是微软提出的OPEN CL。
Compute Shader技术是微软DirectX 11 API新加入的特性,在Compute Shader的帮助下,程序员可直接将GPU作为并行处理器加以利用,GPU将不仅具有3D渲染能力,也具有其他的运算能力,也就是我们说的GPGPU的概念和物理加速运算。多线程处理技术使游戏更好地利用系统的多个核心。
Compute Shader图形流水线
Compute Shader主要特性包括线程间数据通信、一整套随机访问和流式I/O操作基本单元等,能加快和简化图像和后期处理效果等已有技术,也为DX11级硬件的新技术做好了准备,对于游戏和应用程序开发有着很重大的意义。
在DirectX 11以及CS的帮助下,游戏开发者便可以越过复杂的数据结构,并在这些数据结构中运行更多的通用算法。与其他完整的可编程的DX10和DX11管线阶段一样,CS将会共享一套物质资源(也就是着色处理器)。
利用Compute Shader技术运算图形景深
在硬件支持Compute Shader之后,相应的硬件必须要比当代硬件更加灵活,因为在运行CS代码的时候,硬件必须支持随机读写、不规则列阵(而不是简单的流体或者固定大小的2D列阵)、多重输出、可根据程序员的需要直接调用个别或多个线程、32k大小的共享寄存空间和线程组管理系统、粒数据指令集、同步建构以及可执行无序IO运算的能力。
Compute Shader可发挥的地方很多,游戏中可以使用GPU进行光线追踪、A-Buffer采样抗锯齿、物理特效、人工智能AI等游戏特效运算。在游戏之外,程序员也可以利用CS架构进行图像处理、后处理(Post Process)等。
计算机体系结构的基本原理是,任何软件能够实现的,硬件都能够实现,相反也成立,这被成为硬件软件等效原理。这一原理只是功能等效,性能来说,良好优化和设计的硬件通常要比同样水平的软件快很多,同样开发周期长,开发成本也要高不少。体系结构研究的重点就是从需要出发,寻求最佳的软硬件平衡点,在一定的成本约束下,获得最高的性能。
Compute Shader技术用作运算图形景深等后处理,标志着传统的ROP单元已经慢慢失去了专用功能化单元的至高地位。而GPU去功能化的进程将因为Compute Shader技术的出现大大加速。未来的GPU中,Shader将成为主要甚至是唯一的处理单元,而ROP和TMU甚至是现在正被抬得很高的Tessellation单元,都有可能逐渐消失,最终被Shader单元替代。