本發(fā)明涉及3D圖像顯示技術(shù)領(lǐng)域,尤其涉及一種GPU顯示列表中顯存塊的分配方法及裝置。
背景技術(shù):
OpenGL(Open Graphics Library,開放圖形接口)為定義了一個跨編程語言、跨平臺的編程接口規(guī)格的專業(yè)的圖形程序接口,它用于三維或二維圖像,是一個功能強大、調(diào)用方便的底層圖形庫。Mesa 3D是一個在開源軟件許可協(xié)議MIT許可證下開放源代碼的三維計算機圖形庫,以開源形式實現(xiàn)了OpenGL的應(yīng)用程序接口。
OpenGL顯示列表是由一組預(yù)先存儲起來的留待以后調(diào)用的OpenGL函數(shù)語句組成的,當調(diào)用這張顯示列表時就依次執(zhí)行表中所列出的函數(shù)語句。用Mesa3D內(nèi)的函數(shù)序列來表示,即glGenList/glNewList/glEndList/glCallList。顯示列表對于頂點屬性的管理機制是:當執(zhí)行g(shù)lNewList時,執(zhí)行alloc_vertex_store,預(yù)分配大小為VBO_SAVE_BUFFER_SIZE×sizeof(GLfloat)的空白VRAM(Video Random Access Memory,顯存)空間,稱為buffer0(緩沖區(qū)0)。在顯示列表機制下,glDrawArrays只執(zhí)行一次,目的是將所有的頂點屬性寫入buffer0。預(yù)留顯存緩沖區(qū)大小(VBO_SAVE_BUFFER_SIZE)的初值是8×1024,buffer0只能存放8×1024/3=2730個頂點屬性。
以測試函數(shù)svPerf為例,需要寫入1964116個三角形×每個三角形3個頂點×每個頂點3種頂點屬性(位置、法線、顏色)=17677044個頂點屬性,因此 buffer0是遠遠不夠存放這些頂點屬性的。當buffer0溢出后,顯示列表會繼續(xù)分配大小為VBO_SAVE_BUFFER_SIZE×sizeof(GLfloat)的buffer1、buffer2、buffer3……等等,直到所有頂點屬性都寫入VRAM。由上可計算出,顯示列表共需17677044/2730=6475個buffer??梢姡攇lDrawArrays執(zhí)行完時,所有的頂點屬性已經(jīng)存入VRAM,但是分散在6475個buffer中。
svPerfGL每幀的渲染是通過執(zhí)行g(shù)lCallList實現(xiàn)的,顯示列表保存了所有需要執(zhí)行的OpenGL函數(shù),glCallList將執(zhí)行vbo_save_playback_vertex_list來實現(xiàn)渲染,17677044個頂點屬性分散在6475個buffer中,各個buffer并不連續(xù),因此每一幀調(diào)用的glCallList函數(shù)需要執(zhí)行6475次vbo_save_playback_vertex_list,也就是將一幀3D圖像切割為6475個模塊依次畫出來。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)中至少存在如下技術(shù)問題:
由于顯存中預(yù)留顯存緩沖區(qū)大小是固定的,每個緩沖區(qū)只能存放2730個頂點屬性,對于特別復(fù)雜的3D圖像來說,在進行3D顯示時,顯示列表中需要寫入的頂點屬性個數(shù)很多,需要分配多個緩沖區(qū)。相對應(yīng)地,需要將該3D圖像分成多個模塊依次畫出來,而該過程涉及的數(shù)據(jù)準備和狀態(tài)管理等操作都需要CPU(Central Processing Unit,中央處理器)來做,從而造成CPU的占用率很高,而GPU(Graphic Processing Unit,圖形處理器)的處理速度很低。
技術(shù)實現(xiàn)要素:
本發(fā)明提供的GPU顯示列表中顯存塊的分配方法及裝置,能夠提高3D顯示時GPU的處理速度,降低CPU的占用率。
第一方面,本發(fā)明提供一種GPU顯示列表中顯存塊的分配方法,包括:
查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示 列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小;
根據(jù)所述顯示列表中的頂點數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,確定所需的緩沖區(qū)數(shù)量;
根據(jù)所述緩沖區(qū)數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,進行顯存塊的分配。
第二方面,本發(fā)明提供一種GPU顯示列表中顯存塊的分配裝置,包括:
查表單元,用于查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大??;
確定單元,用于根據(jù)所述顯示列表中的頂點數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,確定所需的緩沖區(qū)數(shù)量;
分配單元,用于根據(jù)所述緩沖區(qū)數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,進行顯存塊的分配。
本發(fā)明實施例提供的GPU顯示列表中顯存塊的分配方法及裝置,通過查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,并確定所需的緩沖區(qū)數(shù)量,根據(jù)緩沖區(qū)數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,進行顯存塊的分配。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)頂點數(shù)量動態(tài)地調(diào)整3D顯示時預(yù)留顯存緩沖區(qū)大小和緩沖區(qū)數(shù)量,從而協(xié)調(diào)GPU與CPU的工作負擔,提高3D顯示時GPU的處理速度,降低CPU的占用率。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡單地介紹,顯而易見地,下面描 述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明GPU顯示列表中顯存塊的分配方法實施例一的流程圖;
圖2為本發(fā)明GPU顯示列表中顯存塊的分配方法實施例二的流程圖;
圖3為本發(fā)明GPU顯示列表中顯存塊的分配裝置實施例一的結(jié)構(gòu)示意圖;
圖4為本發(fā)明GPU顯示列表中顯存塊的分配裝置實施例二的結(jié)構(gòu)示意圖。
具體實施方式
為使本發(fā)明實施例的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明提供一種GPU顯示列表中顯存塊的分配方法,圖1為本發(fā)明GPU顯示列表中顯存塊的分配方法實施例一的流程圖,如圖1所示,本實施例的方法包括:
S11、查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大??;
S12、根據(jù)所述顯示列表中的頂點數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,確定所需的緩沖區(qū)數(shù)量;
S13、根據(jù)所述緩沖區(qū)數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,進行顯存塊的分配。
本發(fā)明實施例提供的GPU顯示列表中顯存塊的分配方法,通過查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示列表中的頂點數(shù) 量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,并確定所需的緩沖區(qū)數(shù)量,根據(jù)緩沖區(qū)數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,進行顯存塊的分配。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)頂點數(shù)量動態(tài)地調(diào)整3D顯示時預(yù)留顯存緩沖區(qū)大小和緩沖區(qū)數(shù)量,從而協(xié)調(diào)GPU與CPU的工作負擔,提高3D顯示時GPU的處理速度,降低CPU的占用率。
本發(fā)明實施例還提供一種GPU顯示列表中顯存塊的分配方法,圖2為本發(fā)明GPU顯示列表中顯存塊的分配方法實施例二的流程圖,如圖2所示,本實施例的方法包括:
S21、測試確定每個頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,其中,按照所述最優(yōu)預(yù)留顯存緩沖區(qū)大小進行3D顯示時,GPU占用率達到100%,CPU占用率趨于15%。
例如,按照測試程序./svPerfGL-i../../trisNormsColors-512.nc-w 1280-h 1024-2-v-r-t 180進行測試,頂點規(guī)模為: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占用率以及所需的緩沖區(qū)數(shù)量,當GPU占用率達到100%,CPU占用率趨于15%,且緩沖區(qū)數(shù)量較少時,對應(yīng)的VBO_SAVE_BUFFER_SIZE的取值為最優(yōu)。
根據(jù)上述測試結(jié)果,可以看出,當頂點屬性規(guī)模為17677044時,VBO_SAVE_BUFFER_SIZE的最優(yōu)值為512×1024。
按照上述類似的方法,分別測試確定不同頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小。
S22、根據(jù)每個頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,建立頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表。
根據(jù)測試結(jié)果可以發(fā)現(xiàn),位于同一數(shù)量區(qū)間的多個頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小可能相同,因此,為了使得對應(yīng)關(guān)系表更加簡化,節(jié)省存儲空間,可以建立頂點數(shù)量區(qū)間與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,不同頂點數(shù)量區(qū)間對應(yīng)不同的最優(yōu)預(yù)留顯存緩沖區(qū)大小。
具體地,所建立的頂點數(shù)量區(qū)間與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表如下所示:
S23、查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小。
對于頂點規(guī)模為1964116個三角形×每個三角形3個頂點×每個頂點3種頂點屬性(位置、法線、顏色)=17677044個頂點屬性來說,查表可得最優(yōu)預(yù)留顯存緩沖區(qū)大小為512×1024。
S24、將所述顯示列表中的頂點數(shù)量除以與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,得到的結(jié)果乘以3后向上取整,作為所需的緩沖區(qū)數(shù)量。
對于頂點規(guī)模為1964116個三角形×每個三角形3個頂點×每個頂點3種頂點屬性(位置、法線、顏色)=17677044個頂點屬性來說,查表可得最優(yōu)預(yù)留顯存緩沖區(qū)大小為512×1024,所需的緩沖區(qū)數(shù)量為3×17677044/(512×1024), 得到的結(jié)果向上取值為102,即所需的緩沖區(qū)數(shù)量為102個。
S25、在所述顯存塊中分配與所述緩沖區(qū)數(shù)量相等個數(shù)的緩沖區(qū),每個緩沖區(qū)的大小為與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小。
對于頂點規(guī)模為1964116個三角形×每個三角形3個頂點×每個頂點3種頂點屬性(位置、法線、顏色)=17677044個頂點屬性來說,在所述顯存塊中分配102個緩沖區(qū),每個緩沖區(qū)的大小為512×1024。
按照現(xiàn)有技術(shù)中預(yù)留顯存緩沖區(qū)大小為固定值8×1024,在進行3D顯示時,CPU占用率為139%~144%,GPU占用率為20%,幀率為8.25frames/sec;
按照本發(fā)明實施例提供的GPU顯示列表中顯存塊的分配方法,查找得到最優(yōu)預(yù)留顯存緩沖區(qū)大小為512×1024,在進行3D顯示時,CPU占用率為13.0%~33.9%,GPU占用率為100%,幀率為43.33frames/sec,相對于現(xiàn)有技術(shù)來說,GPU的占用率和處理速度得到大幅提高,CPU的占用率降低,實現(xiàn)了CPU與GPU工作負擔的協(xié)調(diào)和平衡。
本發(fā)明實施例提供一種GPU顯示列表中顯存塊的分配裝置,圖3為本發(fā)明GPU顯示列表中顯存塊的分配裝置實施例一的結(jié)構(gòu)示意圖,如圖3所示,本實施例的裝置包括:
查表單元11,用于查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大??;
確定單元12,用于根據(jù)所述顯示列表中的頂點數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,確定所需的緩沖區(qū)數(shù)量;
分配單元13,用于根據(jù)所述緩沖區(qū)數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,進行顯存塊的分配。
本發(fā)明實施例提供的GPU顯示列表中顯存塊的分配裝置,通過查找頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表,確定與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,并確定所需的緩沖區(qū)數(shù)量,根據(jù)緩沖區(qū)數(shù)量以及與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,進行顯存塊的分配。與現(xiàn)有技術(shù)相比,本發(fā)明能夠根據(jù)頂點數(shù)量動態(tài)地調(diào)整3D顯示時預(yù)留顯存緩沖區(qū)大小和緩沖區(qū)數(shù)量,從而協(xié)調(diào)GPU與CPU的工作負擔,提高3D顯示時GPU的處理速度,降低CPU的占用率。
圖4為本發(fā)明GPU顯示列表中顯存塊的分配裝置實施例二的結(jié)構(gòu)示意圖,如圖4所示,本實施例的裝置在圖3所示裝置結(jié)構(gòu)的基礎(chǔ)上,進一步地,所述GPU顯示列表中顯存塊的分配裝置還可以包括:
測試單元14,用于測試確定每個頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,其中,按照所述最優(yōu)預(yù)留顯存緩沖區(qū)大小進行3D顯示時,GPU占用率達到100%,CPU占用率趨于15%;
具體地,綜合考慮CPU占用率、GPU占用率以及所需的緩沖區(qū)數(shù)量,當GPU占用率達到100%,CPU占用率趨于15%,且緩沖區(qū)數(shù)量較少時,對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小的取值為最優(yōu)。
建立單元15,用于根據(jù)每個頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,建立頂點數(shù)量與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表。
可選地,所述建立單元15,用于根據(jù)每個頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,建立頂點數(shù)量區(qū)間與最優(yōu)預(yù)留顯存緩沖區(qū)大小之間的對應(yīng)關(guān)系表。
可選地,所述確定單元12,用于將所述顯示列表中的頂點數(shù)量除以與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小,得到的結(jié)果乘以3后向上 取整,作為所需的緩沖區(qū)數(shù)量。
可選地,所述分配單元13,用于在所述顯存塊中分配與所述緩沖區(qū)數(shù)量相等個數(shù)的緩沖區(qū),每個緩沖區(qū)的大小為與顯示列表中的頂點數(shù)量對應(yīng)的最優(yōu)預(yù)留顯存緩沖區(qū)大小。
本發(fā)明實施例GPU顯示列表中顯存塊的分配方法及裝置,可以適用于在3D圖像顯示時進行GPU顯示列表中顯存塊的分配,但不僅限于此。
本領(lǐng)域普通技術(shù)人員可以理解實現(xiàn)上述實施例方法中的全部或部分流程,是可以通過計算機程序來指令相關(guān)的硬件來完成,所述的程序可存儲于一計算機可讀取存儲介質(zhì)中,該程序在執(zhí)行時,可包括如上述各方法的實施例的流程。其中,所述的存儲介質(zhì)可為磁碟、光盤、只讀存儲記憶體(Read-Only Memory,ROM)或隨機存儲記憶體(Random Access Memory,RAM)等。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到的變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)該以權(quán)利要求的保護范圍為準。