论文部分内容阅读
图形硬件技术已经进入了可编程的时代。可编程图形处理器允许用户编写运行在其上的顶点着色程序与片断着色程序,取代内置的固定功能渲染流水线,实现定制的渲染算法。随着硬件能力的不断加强,可编程图形处理器的应用领域在不断扩大。除了可以用于实时渲染,可编程图形处理器在非实时渲染与科学计算领域也在获得了广泛的应用。 可编程图形处理器支持两种开发语言,即低级着色语言(LLSL)与高级着色语言(HLSL)。低级着色语言类似于汇编语言,可以充分利用硬件能力以编写出高性能的着色程序,但是过于依赖硬件平台,而且难学难用。高级着色语言则具有平台独立、易于使用、开发资源丰富等优点,正在快速成为图形开发者的首选。目前高级着色语言主要有三种,即Cg、DirectX HLSL与OpenGL glslang。其中glslang由于OpenGL的广泛应用性与开放性而具有重要的实践与理论价值。 本文的研究对象是OpenGL glslang及其优化编译技术。我们实现了一个可以将glslang着色程序编译为OpenGL LLSL着色程序的优化编译器gcx(Graphics Compiler X)。 本文分为两部分。第一部分在介绍可编程处理器及低级着色语言的基础上,重点研究了OpenGL平台上的高级着色语言glslang。第二部分研究了实现glslang编译器的相关技术,重点是后端优化编译技术。Gcx支持两类后端,一类不支持转移指令,另一类支持转移指令,但两者都缺乏一般微处理所具有的例如逻辑指令、存储器间接访问等特性。为此,gcx使用了诸如合并分支执行结果、循环展开、过程集成等方法来克服这些困难。 可编程图形处理器与高级着色语言仍然处于快速发展之中。一方面可编程图形处理器在向着通用流处理器方向发展,另一方面高级着色语言也在向着通用流编程语言方向发展。对作为高级着色语言重要一员的glslang及其优化编译技术的研究也因此具有重要的意义。