GPU显示列表中显存块的分配方法及装置与流程

文档序号:12603815阅读:517来源:国知局
GPU显示列表中显存块的分配方法及装置与流程

本发明涉及3D图像显示技术领域,尤其涉及一种GPU显示列表中显存块的分配方法及装置。



背景技术:

OpenGL(Open Graphics Library,开放图形接口)为定义了一个跨编程语言、跨平台的编程接口规格的专业的图形程序接口,它用于三维或二维图像,是一个功能强大、调用方便的底层图形库。Mesa 3D是一个在开源软件许可协议MIT许可证下开放源代码的三维计算机图形库,以开源形式实现了OpenGL的应用程序接口。

OpenGL显示列表是由一组预先存储起来的留待以后调用的OpenGL函数语句组成的,当调用这张显示列表时就依次执行表中所列出的函数语句。用Mesa3D内的函数序列来表示,即glGenList/glNewList/glEndList/glCallList。显示列表对于顶点属性的管理机制是:当执行glNewList时,执行alloc_vertex_store,预分配大小为VBO_SAVE_BUFFER_SIZE×sizeof(GLfloat)的空白VRAM(Video Random Access Memory,显存)空间,称为buffer0(缓冲区0)。在显示列表机制下,glDrawArrays只执行一次,目的是将所有的顶点属性写入buffer0。预留显存缓冲区大小(VBO_SAVE_BUFFER_SIZE)的初值是8×1024,buffer0只能存放8×1024/3=2730个顶点属性。

以测试函数svPerf为例,需要写入1964116个三角形×每个三角形3个顶点×每个顶点3种顶点属性(位置、法线、颜色)=17677044个顶点属性,因此 buffer0是远远不够存放这些顶点属性的。当buffer0溢出后,显示列表会继续分配大小为VBO_SAVE_BUFFER_SIZE×sizeof(GLfloat)的buffer1、buffer2、buffer3……等等,直到所有顶点属性都写入VRAM。由上可计算出,显示列表共需17677044/2730=6475个buffer。可见,当glDrawArrays执行完时,所有的顶点属性已经存入VRAM,但是分散在6475个buffer中。

svPerfGL每帧的渲染是通过执行glCallList实现的,显示列表保存了所有需要执行的OpenGL函数,glCallList将执行vbo_save_playback_vertex_list来实现渲染,17677044个顶点属性分散在6475个buffer中,各个buffer并不连续,因此每一帧调用的glCallList函数需要执行6475次vbo_save_playback_vertex_list,也就是将一帧3D图像切割为6475个模块依次画出来。

在实现本发明的过程中,发明人发现现有技术中至少存在如下技术问题:

由于显存中预留显存缓冲区大小是固定的,每个缓冲区只能存放2730个顶点属性,对于特别复杂的3D图像来说,在进行3D显示时,显示列表中需要写入的顶点属性个数很多,需要分配多个缓冲区。相对应地,需要将该3D图像分成多个模块依次画出来,而该过程涉及的数据准备和状态管理等操作都需要CPU(Central Processing Unit,中央处理器)来做,从而造成CPU的占用率很高,而GPU(Graphic Processing Unit,图形处理器)的处理速度很低。



技术实现要素:

本发明提供的GPU显示列表中显存块的分配方法及装置,能够提高3D显示时GPU的处理速度,降低CPU的占用率。

第一方面,本发明提供一种GPU显示列表中显存块的分配方法,包括:

查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示 列表中的顶点数量对应的最优预留显存缓冲区大小;

根据所述显示列表中的顶点数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,确定所需的缓冲区数量;

根据所述缓冲区数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,进行显存块的分配。

第二方面,本发明提供一种GPU显示列表中显存块的分配装置,包括:

查表单元,用于查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示列表中的顶点数量对应的最优预留显存缓冲区大小;

确定单元,用于根据所述显示列表中的顶点数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,确定所需的缓冲区数量;

分配单元,用于根据所述缓冲区数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,进行显存块的分配。

本发明实施例提供的GPU显示列表中显存块的分配方法及装置,通过查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示列表中的顶点数量对应的最优预留显存缓冲区大小,并确定所需的缓冲区数量,根据缓冲区数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,进行显存块的分配。与现有技术相比,本发明能够根据顶点数量动态地调整3D显示时预留显存缓冲区大小和缓冲区数量,从而协调GPU与CPU的工作负担,提高3D显示时GPU的处理速度,降低CPU的占用率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描 述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明GPU显示列表中显存块的分配方法实施例一的流程图;

图2为本发明GPU显示列表中显存块的分配方法实施例二的流程图;

图3为本发明GPU显示列表中显存块的分配装置实施例一的结构示意图;

图4为本发明GPU显示列表中显存块的分配装置实施例二的结构示意图。

具体实施方式

为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

本发明提供一种GPU显示列表中显存块的分配方法,图1为本发明GPU显示列表中显存块的分配方法实施例一的流程图,如图1所示,本实施例的方法包括:

S11、查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示列表中的顶点数量对应的最优预留显存缓冲区大小;

S12、根据所述显示列表中的顶点数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,确定所需的缓冲区数量;

S13、根据所述缓冲区数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,进行显存块的分配。

本发明实施例提供的GPU显示列表中显存块的分配方法,通过查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示列表中的顶点数 量对应的最优预留显存缓冲区大小,并确定所需的缓冲区数量,根据缓冲区数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,进行显存块的分配。与现有技术相比,本发明能够根据顶点数量动态地调整3D显示时预留显存缓冲区大小和缓冲区数量,从而协调GPU与CPU的工作负担,提高3D显示时GPU的处理速度,降低CPU的占用率。

本发明实施例还提供一种GPU显示列表中显存块的分配方法,图2为本发明GPU显示列表中显存块的分配方法实施例二的流程图,如图2所示,本实施例的方法包括:

S21、测试确定每个顶点数量对应的最优预留显存缓冲区大小,其中,按照所述最优预留显存缓冲区大小进行3D显示时,GPU占用率达到100%,CPU占用率趋于15%。

例如,按照测试程序./svPerfGL-i../../trisNormsColors-512.nc-w 1280-h 1024-2-v-r-t 180进行测试,顶点规模为:1964116个三角形×每个三角形3个顶点×每个顶点3种顶点属性(位置、法线、颜色)=17677044个顶点属性。

当VBO_SAVE_BUFFER_SIZE=8×1024时,CPU占用率为139%~144%,GPU占用率为20%,帧率为8.25frames/sec;

当VBO_SAVE_BUFFER_SIZE=128×1024时,CPU占用率为36.7%~56.1%,GPU占用率为100%,帧率为43.30frames/sec;

当VBO_SAVE_BUFFER_SIZE=256×1024时,CPU占用率为20.0%~42.3%,GPU占用率为100%,帧率为43.33frames/sec;

当VBO_SAVE_BUFFER_SIZE=512×1024时,CPU占用率为13.0%~33.9%,GPU占用率为100%,帧率为43.33frames/sec;

当VBO_SAVE_BUFFER_SIZE=1024×1024时,CPU占用率为9.9%~32.0%,GPU占用率为100%,帧率为43.27frames/sec;

当VBO_SAVE_BUFFER_SIZE=2×1024×1024时,CPU占用率为10.0%~28.0%,GPU占用率为100%,帧率为43.34frames/sec;

当VBO_SAVE_BUFFER_SIZE=32×1024×1024时,CPU占用率为7.6%~22.0%,GPU占用率为100%,帧率为43.09frames/sec。

综合考虑CPU占用率、GPU占用率以及所需的缓冲区数量,当GPU占用率达到100%,CPU占用率趋于15%,且缓冲区数量较少时,对应的VBO_SAVE_BUFFER_SIZE的取值为最优。

根据上述测试结果,可以看出,当顶点属性规模为17677044时,VBO_SAVE_BUFFER_SIZE的最优值为512×1024。

按照上述类似的方法,分别测试确定不同顶点数量对应的最优预留显存缓冲区大小。

S22、根据每个顶点数量对应的最优预留显存缓冲区大小,建立顶点数量与最优预留显存缓冲区大小之间的对应关系表。

根据测试结果可以发现,位于同一数量区间的多个顶点数量对应的最优预留显存缓冲区大小可能相同,因此,为了使得对应关系表更加简化,节省存储空间,可以建立顶点数量区间与最优预留显存缓冲区大小之间的对应关系表,不同顶点数量区间对应不同的最优预留显存缓冲区大小。

具体地,所建立的顶点数量区间与最优预留显存缓冲区大小之间的对应关系表如下所示:

S23、查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示列表中的顶点数量对应的最优预留显存缓冲区大小。

对于顶点规模为1964116个三角形×每个三角形3个顶点×每个顶点3种顶点属性(位置、法线、颜色)=17677044个顶点属性来说,查表可得最优预留显存缓冲区大小为512×1024。

S24、将所述显示列表中的顶点数量除以与显示列表中的顶点数量对应的最优预留显存缓冲区大小,得到的结果乘以3后向上取整,作为所需的缓冲区数量。

对于顶点规模为1964116个三角形×每个三角形3个顶点×每个顶点3种顶点属性(位置、法线、颜色)=17677044个顶点属性来说,查表可得最优预留显存缓冲区大小为512×1024,所需的缓冲区数量为3×17677044/(512×1024), 得到的结果向上取值为102,即所需的缓冲区数量为102个。

S25、在所述显存块中分配与所述缓冲区数量相等个数的缓冲区,每个缓冲区的大小为与显示列表中的顶点数量对应的最优预留显存缓冲区大小。

对于顶点规模为1964116个三角形×每个三角形3个顶点×每个顶点3种顶点属性(位置、法线、颜色)=17677044个顶点属性来说,在所述显存块中分配102个缓冲区,每个缓冲区的大小为512×1024。

按照现有技术中预留显存缓冲区大小为固定值8×1024,在进行3D显示时,CPU占用率为139%~144%,GPU占用率为20%,帧率为8.25frames/sec;

按照本发明实施例提供的GPU显示列表中显存块的分配方法,查找得到最优预留显存缓冲区大小为512×1024,在进行3D显示时,CPU占用率为13.0%~33.9%,GPU占用率为100%,帧率为43.33frames/sec,相对于现有技术来说,GPU的占用率和处理速度得到大幅提高,CPU的占用率降低,实现了CPU与GPU工作负担的协调和平衡。

本发明实施例提供一种GPU显示列表中显存块的分配装置,图3为本发明GPU显示列表中显存块的分配装置实施例一的结构示意图,如图3所示,本实施例的装置包括:

查表单元11,用于查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示列表中的顶点数量对应的最优预留显存缓冲区大小;

确定单元12,用于根据所述显示列表中的顶点数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,确定所需的缓冲区数量;

分配单元13,用于根据所述缓冲区数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,进行显存块的分配。

本发明实施例提供的GPU显示列表中显存块的分配装置,通过查找顶点数量与最优预留显存缓冲区大小之间的对应关系表,确定与显示列表中的顶点数量对应的最优预留显存缓冲区大小,并确定所需的缓冲区数量,根据缓冲区数量以及与显示列表中的顶点数量对应的最优预留显存缓冲区大小,进行显存块的分配。与现有技术相比,本发明能够根据顶点数量动态地调整3D显示时预留显存缓冲区大小和缓冲区数量,从而协调GPU与CPU的工作负担,提高3D显示时GPU的处理速度,降低CPU的占用率。

图4为本发明GPU显示列表中显存块的分配装置实施例二的结构示意图,如图4所示,本实施例的装置在图3所示装置结构的基础上,进一步地,所述GPU显示列表中显存块的分配装置还可以包括:

测试单元14,用于测试确定每个顶点数量对应的最优预留显存缓冲区大小,其中,按照所述最优预留显存缓冲区大小进行3D显示时,GPU占用率达到100%,CPU占用率趋于15%;

具体地,综合考虑CPU占用率、GPU占用率以及所需的缓冲区数量,当GPU占用率达到100%,CPU占用率趋于15%,且缓冲区数量较少时,对应的最优预留显存缓冲区大小的取值为最优。

建立单元15,用于根据每个顶点数量对应的最优预留显存缓冲区大小,建立顶点数量与最优预留显存缓冲区大小之间的对应关系表。

可选地,所述建立单元15,用于根据每个顶点数量对应的最优预留显存缓冲区大小,建立顶点数量区间与最优预留显存缓冲区大小之间的对应关系表。

可选地,所述确定单元12,用于将所述显示列表中的顶点数量除以与显示列表中的顶点数量对应的最优预留显存缓冲区大小,得到的结果乘以3后向上 取整,作为所需的缓冲区数量。

可选地,所述分配单元13,用于在所述显存块中分配与所述缓冲区数量相等个数的缓冲区,每个缓冲区的大小为与显示列表中的顶点数量对应的最优预留显存缓冲区大小。

本发明实施例GPU显示列表中显存块的分配方法及装置,可以适用于在3D图像显示时进行GPU显示列表中显存块的分配,但不仅限于此。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1