本发明涉及图形绘制,尤其涉及一种用于gpu前、后端着色器的顶点属性映射的方法及系统。
背景技术:
1、gpu(graphics processing unit,图形处理器)图形绘制过程包含一系列的顺序和步骤,即所谓的流水线,每个步骤完成各自的功能,最终完成图形的绘制。通常情况下,我们把gpu绘制流水线分为两大类:前端流水线(front stage)和后端流水线(back stage),前者包括输入装配(inputassembler)、顶点着色器(vertex shader)、曲面细分着色器(tesselation)、图形着色器(geometry shader),后者包含光栅化(rasterize)、像素着色器(pixel shader)、输出合并(output merge)以及流输出(stream out)等。同时我们也将着色器根据其在流水线的位置不同分为前端着色器和后端着色器,前者包括顶点着色器(vertex shader)、外壳着色器(hull shader)、域着色器(domain shader)和图形着色器(geometry shader),后者包括像素着色器(pixel shader)。整个流水线如图1所示,其中,前端着色器处理顶点或者顶点构成的基本图形(primitive),后端着色器需要处理每一帧中的所有像素。通常情况下,后者的处理数据量比前者大的多。因此,如何提高后端着色器工作效率成为gpu图形绘制速度的一个关键因素。
2、传统的图形绘制流水线中,前端着色器和后端着色器的顶点属性之间存在一一映射的关系。而在某些图形绘制应用中,前端着色器输出的顶点部分属性不被后端着色器用来计算像素颜色属性。当后端着色器没有使用前端着色器的全部输出时,可能存在以下问题:(1)浪费中间数据的存储空间;(2)多余无用数据插值操作;(3)浪费后端着色器的资源。
技术实现思路
1、本发明的目的之一是为了克服现有技术中的不足,针对现有技术中存在的gpu前端着色器和后端着色器在图形绘制过程中会浪费gpu的资源、影响图形绘制速度和效率的问题,提供一种用于gpu前、后端着色器的顶点属性映射的方法及系统。
2、为实现以上目的,本发明通过以下技术方案实现:
3、第一方面,本发明提供了一种用于gpu前、后端着色器的顶点属性映射的方法,所述方法包括:
4、step100:根据前端着色器的输出定义和后端着色器的输入定义之间的对应关系,为所述前端着色器的输出顶点属性计算在顶点中间数据缓存区中对应的地址,建立所述输出顶点属性与所述地址之间的第一映射关系;
5、step200:根据前端着色器的输出定义和后端着色器的输入定义之间的对应关系,为所述后端着色器的输入顶点属性在所述顶点中间数据缓存区中查找对应的地址,建立所述输入顶点属性与所述地址之间的第二映射关系;
6、step300:根据所述第一映射关系和所述第二映射关系对所述输入顶点属性进行存取处理。
7、在本技术的一个优选实施例中,step100具体包括:
8、step110:预先定义前端着色器的输出顶点属性和后端着色器的输入顶点属性,得到所述前端着色器的输出定义和所述后端着色器的输入定义;
9、step120:根据前端着色器的输出顶点属性是否能够作为后端着色器的输入顶点属性,决定所述输出顶点属性是否存储到顶点中间数据存储区;
10、step130:按照所述输出定义中多个输出顶点属性的顺序,逐个为输出顶点属性顺序分配所述顶点中间数据缓存区的地址;
11、step140:依据所述前端着色器的输出顶点属性及其对应的地址,建立第一映射关系。
12、在本技术的一个优选实施例中,step130具体包括:
13、step131:基于所述前端着色器的输出定义和所述后端着色器的输入定义之间的对应关系,按照所述各个输出顶点属性输出时的顺序,逐个判断输出顶点属性是否存在对应的输入顶点属性;若不存在对应的输入顶点属性,则执行step132;若存在对应的输入顶点属性,则执行step133;
14、step132:将该输出顶点属性的存储码记录为0,并继续为下一个输出顶点属性分配地址;
15、step133:根据该输出顶点属性中被对应的输入顶点属性激活的通道,记录该输出顶点属性对应的存储码;
16、step134:根据该输出顶点属性对应的存储码,在所述顶点中间数据缓存区中分配与存储码中记录的通道具有相同数量的地址。
17、在本技术的一个优选实施例中,在执行step134分配地址的过程中,从第一个地址开始顺序为顶点属性分配地址。
18、在本技术的一个优选实施例中,step300具体包括:
19、step310:根据所述第一映射关系,通过输出顶点属性的存储码判断是否需要存储该输出顶点属性;若所述存储码为0,则执行step320;若所述存储码不为0,则执行step330;
20、step320:丢弃该输出顶点属性;
21、step330:查询该输出顶点属性所激活的通道所对应的地址,并向所述顶点中间数据缓存区发送存储请求;
22、step340:根据存储请求,所述顶点中间数据缓存区将该输出顶点属性所激活的通道数据存储至对应的地址中;
23、step350:根据所述第二映射关系,获取输入顶点属性对应的输出顶点属性在所述顶点中间数据缓存区中所占用的地址;
24、step360:根据地址读取输入顶点属性对应的输出顶点属性,并对该输入顶点属性进行存取处理。
25、在本技术的一个优选实施例中,step200具体包括:
26、step210:基于所述前端着色器的输出定义和所述后端着色器的输入定义,根据所述后端着色器的输入顶点属性所对应的前端着色器的输出顶点属性,逐个查询后端着色器的输入顶点属性在所述顶点中间数据缓存区中的存储地址;
27、step220:基于各个输入顶点属性和对应的地址,建立第二映射关系。
28、第二方面,本发明提供了一种用于gpu前、后端着色器的顶点属性映射的系统,所述系统包括第一映射模块、第二映射模块和顶点处理光栅化模块;
29、所述第一映射模块用于根据前端着色器的输出定义和后端着色器的输入定义之间的对应关系,为所述前端着色器的输出顶点属性计算在顶点中间数据缓存区的地址,建立所述输出顶点属性与所述地址之间的第一映射关系;
30、所述第二映射模块用于根据前端着色器的输出定义和后端着色器的输入定义之间的对应关系,为所述后端着色器的输入顶点属性在所述顶点中间数据缓存区中查找对应的地址,建立所述输入顶点属性与所述地址之间的第二映射关系;
31、所述顶点处理光栅化模块用于根据所述第一映射关系和所述第二映射关系对所述输入顶点属性进行存取处理。
32、第三方面,本发明提供了一种gpu图形绘制流水线,所述流水线系统包括前端流水线、顶点中间数据缓存区、后端流水线、第一映射模块和第二映射模块;
33、所述第一映射模块连接在所述前端流水线中位于最后的前端着色器和所述顶点中间数据缓存区之间;
34、所述第二映射模块连接在所述后端流水线的光栅化模块和所述顶点中间数据缓存区之间;
35、所述顶点中间数据缓存区与所述光栅化模块连接;
36、所述第一映射模块用于根据前端着色器的输出定义和后端着色器的输入定义之间的对应关系,为所述前端着色器的输出顶点属性计算最后的前端着色器的输出顶点属性在所述顶点中间数据缓存区的地址,建立所述输出顶点属性与所述地址之间的第一映射关系;
37、所述第二映射模块用于根据前端着色器的输出定义和后端着色器的输入定义之间的对应关系,为所述后端着色器的输入顶点属性在所述顶点中间数据缓存区中查找对应的地址,建立所述输入顶点属性与所述地址之间的第二映射关系;
38、所述顶点处理光栅化模块用于根据所述第一映射关系和所述第二映射关系对所述输入顶点属性进行存取处理。
39、第四方面,本发明提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如第一方面所述的用于gpu前、后端着色器的顶点属性映射的方法。
40、第五方面,本发明提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,当其在计算机上运行时,使得计算机执行如第一方面所述的用于gpu前、后端着色器的顶点属性映射的方法。
41、本发明所公开的用于gpu前、后端着色器的顶点属性映射的方法及系统,能够节省作为顶点中间数据缓存区的顶点中间数据缓存区的存储空间,减少光栅化阶段和后端着色器的数据处理压力,有利于提高gpu图形绘制的速度和效率。