本發(fā)明涉及計算機程序和系統(tǒng)領(lǐng)域,并且更具體地涉及用于管理多個圖形卡的方法、系統(tǒng)和程序。
背景技術(shù):
用于渲染三維(3d)場景的計算機圖形技術(shù)目的在于在諸如計算機屏幕、電視、投影儀等顯示設(shè)備上繪制3d場景。渲染3d場景也被稱為3d渲染。
用于3d渲染的計算機圖形技術(shù)依賴于彼此交互的硬件和軟件部件,并且這些部件形成專用于3d渲染的架構(gòu)。該架構(gòu)的主要硬件部件是圖形卡(gc),圖形卡是被設(shè)計為使得一些類型的計算更快的加速器。gc專門用于圖形計算,諸如將三角形轉(zhuǎn)換成像素。gc包括一個或多個圖形處理單元(gpu);gpu是執(zhí)行g(shù)c的圖形計算的芯片。gc可以連接到顯示3d渲染的結(jié)果的一個或若干顯示設(shè)備。通過圖形庫(gl)將gc和gpu的指令發(fā)送給監(jiān)視器,所述圖形庫是被設(shè)計為幫助渲染計算機圖形的計算機程序庫。gl由托管gc的計算機的中央處理單元(cpu)執(zhí)行(或運行)。兩個最著名的gl是
多gc渲染是應(yīng)用程序使用插入在同一主板上的若干gc來渲染場景的能力。盡管多gc原理是最近的,但只有少數(shù)應(yīng)用程序使用它,因為它涉及re框架中的很多復(fù)雜性。
有兩種常見的技術(shù)來實現(xiàn)多圖形卡渲染。兩者都依賴于圖形驅(qū)動器工作而不是依賴于渲染引擎框架。第一個技術(shù)使用由nvidiatm開發(fā)的slitm或由amdtm開發(fā)的crossfiretm。基本上,當應(yīng)用程序的re正在渲染一個幀時,re使用gl,好像計算機內(nèi)部只有一個gc一樣。re不知道有若干gc。gd接收命令并將其傳播到gc。這在圖1上被圖示,圖1示出具有兩個gc的計算機的示例,其中一個gc渲染屏幕的上部分,并且第二gc渲染底部分。re從應(yīng)用程序接收命令,該命令被轉(zhuǎn)化成由gl接收的gr(例如,緩沖、貼圖等),gl又為一個gc發(fā)送命令。管理兩個卡(gc1,gc2)的gd使用slitm/crossfiretm技術(shù)為兩個gc創(chuàng)建命令,以使每個gc(gc1的gpu1,gc2的gpu2)的每個gpu都知道要處理什么信息。
第二個技術(shù)基于第一個,并且被稱為mosaic模式。mosaic模式描述以較高分辨率、使用顯示驅(qū)動器來渲染以將結(jié)果傳播到多個屏幕的能力。mosaic模式與上述第一個技術(shù)的組合為每個gc提供處理單獨的顯示的能力。
這第一個和第二個技術(shù)主要用于游戲應(yīng)用程序中以提高性能或用于飛行模擬器中來以合理性能輸出到多于一個顯示器。
除了這兩個技術(shù)之外,另一個技術(shù)通過由gl暴露渲染特征來提供具體的多gc。然而,該技術(shù)是實驗性的,并且未被硬件和軟件制造商利用。
多gc渲染的這些技術(shù)受若干缺點的影響。第一個是它們受限于具體場景:mosaic模式用于多屏渲染,而slitm/crossfiretm用于視頻游戲。實際上,這些技術(shù)依賴于向gc分派命令的gd能力;然而,gd不是每次都知道用于執(zhí)行分派所需的所有信息,使得這些解決方案適用于應(yīng)用程序開發(fā)者所保留的少數(shù)場景。例如,在未保留場景中,僅僅使用一個gc;應(yīng)用程序不能受益于其它gc的計算資源。
另一個限制是這些技術(shù)限制于經(jīng)渲染的3d場景上的一個視點。因此,不可能利用gpu的計算資源來并行計算若干視點,而利用gpu的計算資源來并行計算若干視點在視點改變時將改善3d場景的顯示速度。
進一步的限制是不可能向特定gc尋址特定命令,并且不可能將該特定命令暴露給re。如上所解釋的,re不知道有若干gc。
在該背景下,仍然需要對多個gc的改進的管理。值得注意的是,多個gc允許在若干顯示設(shè)備上用多個視點渲染3d場景。
技術(shù)實現(xiàn)要素:
因此提供一種用于管理多個圖形卡的計算機實現(xiàn)的方法。圖形卡包括一個或多個圖形處理單元。該方法包括:在渲染引擎中加載場景,該場景包括將用于渲染場景的視圖的至少一個圖形數(shù)據(jù);為至少一個圖形數(shù)據(jù)的圖形資源創(chuàng)建抽象圖形資源,抽象圖形資源存儲用于圖形卡中的至少一個的圖形資源的標識符;在所述至少一個圖形卡上復(fù)制至少一個圖形數(shù)據(jù)的所述圖形資源;向渲染引擎提供對抽象圖形資源的訪問以用于處理所述圖形資源。
該方法可以包括以下中的一個或多個:
-渲染引擎包括至少兩個邏輯層,上層向應(yīng)用程序提供對渲染引擎的訪問,并且下層向渲染引擎提供對圖形庫的訪問,并且其中抽象圖形資源的創(chuàng)建由包括在上層和最低層之間的抽象層執(zhí)行;
-在抽象圖形資源的創(chuàng)建之前:在圖形庫上由下層訪問用于圖形卡中的至少一個的圖形資源的標識符;以及向抽象層提供所訪問的標識符;
-創(chuàng)建的抽象圖形資源存儲圖形資源的標識符和圖形卡中的至少一個的標識符;
-創(chuàng)建抽象圖形資源的步驟進一步包括:在表中存儲抽象圖形資源;并且其中向渲染引擎提供訪問的步驟包括向渲染引擎提供對存儲抽象圖形資源的表的訪問,以用于處理所述圖形資源;
-接收將對所述圖形資源執(zhí)行的圖形庫動作,該動作是訪問渲染引擎的應(yīng)用程序所需要的;識別為所述圖形資源創(chuàng)建的抽象圖形資源;檢索用于圖形卡中的至少一個的圖形資源的標識符;以及訪問圖形資源并對圖形資源執(zhí)行圖形庫動作;
-接收命令以刪除所述圖形資源,該動作是訪問渲染引擎的應(yīng)用程序所需要的;識別為所述圖形資源創(chuàng)建的抽象圖形資源;檢索用于圖形卡中的至少一個的圖形資源的標識符;以及訪問圖形資源并刪除圖形卡中的至少一個的圖形資源;
-向上層提供抽象圖形資源;
-在創(chuàng)建抽象資源之前:選擇至少一個圖形卡以用于處理要使用的至少一個圖形資源;
-抽象圖形資源存儲用于多個圖形卡中的每個圖形卡的圖形資源的標識符,并且其中圖形資源在多個圖形卡中的每個圖形卡上被復(fù)制;
進一步提供了包括用于執(zhí)行該方法的指令的渲染引擎計算機程序。
進一步提供了一種具有記錄在其上的渲染引擎計算機程序的計算機可讀存儲介質(zhì)。
進一步提供了一種包括耦合到存儲器和圖形用戶界面的處理電路的系統(tǒng),存儲器具有記錄在其上的渲染引擎計算機程序。
附圖說明
現(xiàn)在將通過非限制性示例并參考附圖來描述本發(fā)明的實施例,在附圖中:
-圖1示出用于執(zhí)行多gc顯示的現(xiàn)有技術(shù)方法的流程圖;
-圖2示出本發(fā)明的示例的流程圖;
-圖3示出抽象圖形資源的創(chuàng)建的示例;
-圖4示出用于管理抽象圖形資源的表的示例;
-圖5示出對圖形數(shù)據(jù)執(zhí)行的操作的示例;以及
-圖6示出計算機系統(tǒng)的示例。
具體實施方式
參考圖2的流程圖,提出一種用于管理用于渲染場景的多個圖形卡(gc)的計算機實現(xiàn)的方法。gc可以包括一個或多個圖形處理單元(gpu)。該方法包括在渲染引擎中加載場景。場景可以是三維(3d)場景。場景包括用于渲染場景的視圖的一個或多個圖形數(shù)據(jù)。該方法進一步包括為至少一個圖形數(shù)據(jù)創(chuàng)建抽象圖形資源。抽象圖形資源存儲用于圖形卡中的至少一個的圖形資源的標識符。該方法還包括在所述至少一個圖形卡上(例如在圖形卡的存儲器上)復(fù)制所述圖形數(shù)據(jù)中的至少一個的所述圖形資源。然后,該方法包括向渲染引擎(re)提供對抽象圖形資源的訪問以用于處理所述圖形資源。
這樣的方法在使用當前圖形庫(gl)的同時改善了對多個圖形卡(gc)的管理。值得注意,由于使用了避免重大問題的抽象圖形資源,本發(fā)明允許將視點綁定到具體gc,這是當由圖形庫為給定圖形卡創(chuàng)建圖形資源(gr)時,圖形資源得到可以被稱為資源名稱的圖形卡具體名稱。例如,如果應(yīng)用程序從兩個圖形卡上的兩個不同的視點繪制樹,樹的圖形資源需要在兩個圖形卡上。在第一個圖形卡上,緩沖器將具有資源名稱n1,而在第二個中具有資源名稱n2。這引入很多復(fù)雜性,因為渲染引擎的每個部分都必須處理該復(fù)雜性,并復(fù)制所有渲染命令以處理這兩個圖形卡?,F(xiàn)在,采用具有八個圖形卡的同一示例,為單個對象“樹”管理八個資源名稱變得非常棘手。在典型的場景中,有數(shù)千個圖形對象,從而要處理圖形卡資源名稱的數(shù)量的數(shù)千倍。本發(fā)明針對每個圖形資源使用抽象圖形資源,使得渲染引擎僅操縱針對圖形數(shù)據(jù)的抽象圖形資源,而不是操縱資源名稱。因此,假設(shè)渲染引擎被給予對抽象圖形資源的訪問,(例如,向渲染引擎請求具體顯示的應(yīng)用程序的)每個內(nèi)部命令通過由其匹配的抽象句柄替換圖形卡的具體資源名稱來修改。渲染引擎不再處理上述復(fù)雜性,并且不再需要復(fù)制其接收的所有渲染命令。下文中將討論額外的優(yōu)點。
該方法是計算機實現(xiàn)的。這意味著該方法的步驟(或者基本上所有步驟)由至少一個計算機或相似的任何系統(tǒng)執(zhí)行。因而,該方法的步驟可能由計算機完全自動或半自動地執(zhí)行。在示例中,可以通過用戶-計算機交互來執(zhí)行該方法的步驟中的至少一些的觸發(fā)。所需的用戶-計算機交互的級別可以取決于預(yù)見的自動化的水平,并且與實現(xiàn)用戶的愿望的需要平衡。在示例中,該級別可以是用戶定義的和/或預(yù)定義的。
該方法的計算機實現(xiàn)方式的典型示例是用適于該目的的系統(tǒng)來執(zhí)行該方法。該系統(tǒng)可以包括耦合到存儲器的處理器、以及多個圖形卡。渲染引擎和表示場景的數(shù)據(jù)可以被存儲在存儲器上,并且渲染引擎可以在cpu上運行。更一般地,存儲器可以具有在其上記錄的計算機程序,包括用于執(zhí)行該方法的指令。存儲器還可以存儲數(shù)據(jù)庫。存儲器是適于這樣的存儲的任何硬件,可能包括若干物理不同的部件(例如,一個用于程序,并且可能一個用于數(shù)據(jù)庫)?!皵?shù)據(jù)庫”意味著被組織用于搜索和檢索的數(shù)據(jù)(即信息)的任何集合(例如,例如基于預(yù)定的結(jié)構(gòu)化語言的關(guān)系數(shù)據(jù)庫,例如sql)。當存儲在存儲器上時,數(shù)據(jù)庫允許計算機進行快速搜索和檢索。數(shù)據(jù)庫實際上被結(jié)構(gòu)化,以便于結(jié)合各種數(shù)據(jù)處理操作的數(shù)據(jù)的存儲、檢索、修改和刪除。數(shù)據(jù)庫可以由可以被分解成記錄的文件或文件組組成,記錄中的每一個由一個或多個字段組成。字段是數(shù)據(jù)存儲的基本單位。用戶可以主要通過查詢來檢索數(shù)據(jù)。使用關(guān)鍵字和排序命令,用戶可以快速地搜索、重新排列、分組和選擇許多記錄中的字段,以根據(jù)正在使用的數(shù)據(jù)庫管理系統(tǒng)的規(guī)則來檢索或創(chuàng)建關(guān)于數(shù)據(jù)的特定聚合的報告。
該方法操縱圖形數(shù)據(jù),例如圖形數(shù)據(jù)可以是建模對象。建模對象可以由不同種類的數(shù)據(jù)定義,例如cad對象、plm對象、pdm對象、cae對象、cam對象、cad數(shù)據(jù)、plm數(shù)據(jù)、pdm數(shù)據(jù)、cam數(shù)據(jù)、cae數(shù)據(jù)。圖形數(shù)據(jù)還可以被。
例如,在通過使用cad系統(tǒng)獲得的3d場景的上下文中,建模對象典型地可以是3d建模對象,例如,表示諸如零件或零件的組件的產(chǎn)品,或者可能是產(chǎn)品的組件。“3d建模對象”意味著由允許其3d表示的數(shù)據(jù)來建模的任何對象。3d表示允許從所有角度查看零件。例如,當被3d表示時,3d建模對象可以被處理并圍繞其任何軸或圍繞上面顯示該表示的屏幕中的任何軸旋轉(zhuǎn)。這明顯排除未被3d建模的2d圖標。3d表示的顯示便于設(shè)計(即,增大設(shè)計者在統(tǒng)計上完成他們的任務(wù)的速度)。這加速了工業(yè)中的制造過程,因為產(chǎn)品的設(shè)計是制造過程的部分。3d建模對象可以表示在完成其虛擬設(shè)計之后將在真實世界中制造的產(chǎn)品的幾何結(jié)構(gòu),完成虛擬設(shè)計利用例如cad軟件解決方案或cad系統(tǒng),3d建模對象例如是(例如機械)零件或零件的組件,或者更一般地是任何剛性體部件(例如移動機構(gòu))。cad軟件解決方案允許在各種且無限的工業(yè)領(lǐng)域中設(shè)計產(chǎn)品,包括:航空航天、建筑、結(jié)構(gòu)、消費品、高科技設(shè)備、工業(yè)裝置、運輸、海洋和/或海洋石油/天然氣生產(chǎn)或運輸。由該方法設(shè)計的3d建模對象因而可以表示工業(yè)產(chǎn)品,其可以是任何機械零件,例如陸地交通工具(例如包括汽車和輕型卡車裝置、賽車、摩托車、卡車和汽車裝置、卡車和公共汽車、火車)的零件、空中交通工具(例如包括機身裝置、航空航天裝置、推進裝置、國防產(chǎn)品、航空裝置、空間裝置)的零件、海洋交通工具(例如包括海軍裝置、商用船只、海上裝置、游艇和工作船、海洋裝置)的零件、一般機械零件(例如包括工業(yè)制造機械、重型移動機械或裝置、安裝裝置、工業(yè)裝置產(chǎn)品、金屬制品、輪胎制品)、機電或電子零件(例如包括消費電子產(chǎn)品、安全和/或控制和/或儀器產(chǎn)品、計算和通信裝置、半導體、醫(yī)療設(shè)備和裝置)、消費品(例如包括家具、家用和花園產(chǎn)品、休閑用品、時尚產(chǎn)品、硬質(zhì)商品零售商產(chǎn)品、軟質(zhì)商品零售商產(chǎn)品)、包裝(例如包括食品和飲料及煙草、美容和個人護理、家務(wù)產(chǎn)品包裝)。
plm另外意味著適于對表示物理制品(或待制造的產(chǎn)品)的建模對象的管理的任何系統(tǒng)。在plm系統(tǒng)中,建模對象因而由適合于物理對象的制造的數(shù)據(jù)來定義。這些典型地可以是尺寸值和/或公差值。為了正確地制造對象,實際上最好具有這樣的值。
cam另外意味著適于管理產(chǎn)品的制造數(shù)據(jù)的任何解決方案、硬件的軟件。制造數(shù)據(jù)一般包括與制造的產(chǎn)品、制造過程和所需的資源相關(guān)的數(shù)據(jù)。cam解決方案用于計劃和優(yōu)化產(chǎn)品的整個制造過程。例如,其可以給cam用戶提供可以在制造過程的具體步驟中使用的關(guān)于可行性、制造過程的持續(xù)時間或諸如具體機器人的資源的數(shù)量的信息;并且因而允許關(guān)于管理或所需投資的決定。cam是在cad過程和潛在cae過程之后的后續(xù)過程。這樣的cam解決方案由商標
cae另外意味著適于對建模對象的物理行為的分析的任何解決方案、硬件的軟件。公知且廣泛使用的cae技術(shù)是有限元方法(fem),其典型地包含將建模對象劃分成可以通過方程式計算和模擬其物理行為的元素。這樣的cae解決方案由商標
pdm代表產(chǎn)品數(shù)據(jù)管理。pdm解決方案意味著適于管理與特定產(chǎn)品相關(guān)的所有類型的數(shù)據(jù)的任何解決方案、硬件的軟件。pdm解決方案可以由包含在產(chǎn)品的生命周期中的所有參與者使用:主要是工程師,但也包括項目經(jīng)理、財務(wù)人員、銷售人員和購買者。pdm解決方案一般基于面向產(chǎn)品的數(shù)據(jù)庫。它允許參與者共享關(guān)于其產(chǎn)品的一致數(shù)據(jù),并且因此防止參與者使用發(fā)散數(shù)據(jù)。這樣的pdm解決方案由商標
圖3示出系統(tǒng)的示例;該系統(tǒng)是計算機系統(tǒng),例如用戶的工作站。
示例的系統(tǒng)包括連接到內(nèi)部通信總線1000的中央處理單元(cpu)1010、也連接到總線的隨機存取存儲器(ram)1070。系統(tǒng)進一步提供有與連接到總線的視頻隨機存取存儲器1100相關(guān)聯(lián)的圖形處理單元(gpu)1110。視頻ram1100在本領(lǐng)域中也被稱為幀緩沖器。大容量存儲設(shè)備控制器1020管理對大容量存儲器設(shè)備(諸如硬盤驅(qū)動器1030)的訪問。適合于有形地體現(xiàn)計算機程序指令和數(shù)據(jù)的大容量存儲器設(shè)備包括所有形式的非易失性存儲器,例如包括:半導體存儲器設(shè)備,例如eprom、eeprom和閃存設(shè)備;磁盤,例如內(nèi)部硬盤和可移除盤;磁光盤;以及cd-rom盤1040。任何前述內(nèi)容可以由專門設(shè)計的asic(專用集成電路)補充或并入其中。網(wǎng)絡(luò)適配器1050管理對網(wǎng)絡(luò)1060的訪問。系統(tǒng)還可以包括觸覺設(shè)備1090,例如光標控制設(shè)備、鍵盤等。在系統(tǒng)中使用光標控制設(shè)備以允許用戶將光標選擇性地定位在顯示器1080上的任何期望位置。另外,光標控制設(shè)備允許用戶選擇各種命令并輸入控制信號。光標控制設(shè)備包括用于向系統(tǒng)輸入控制信號的許多信號生成設(shè)備。典型地,光標控制設(shè)備可以是鼠標、正用于生成信號的鼠標的按鈕。替代地或另外,系統(tǒng)可以包括敏感墊和/或敏感屏幕。
計算機程序可以包括可由計算機(例如圖3的系統(tǒng))執(zhí)行的指令。計算機程序的指令使以上系統(tǒng)執(zhí)行該方法。程序可以是可記錄在任何數(shù)據(jù)存儲介質(zhì)上,包括系統(tǒng)的存儲器。程序例如可以在數(shù)字電子電路中、或在計算機硬件、固件、軟件中或者在它們的組合中實現(xiàn)。程序可以被實現(xiàn)為裝置,例如有形地體現(xiàn)在用于由可編程處理器執(zhí)行的機器可讀存儲設(shè)備中的產(chǎn)品。方法步驟可以由可編程處理器執(zhí)行,可編程處理器執(zhí)行指令的程序以通過對輸入數(shù)據(jù)進行操作并生成輸出來執(zhí)行方法的功能。處理器因而可以是可編程的并且被耦合以從數(shù)據(jù)存儲系統(tǒng)、至少一個輸入設(shè)備和至少一個輸出設(shè)備接收數(shù)據(jù)和指令,并且向數(shù)據(jù)存儲系統(tǒng)、至少一個輸入設(shè)備和至少一個輸出設(shè)備發(fā)送數(shù)據(jù)和指令。應(yīng)用程序可以以高級過程或面向?qū)ο蟮木幊陶Z言、或者如果期望的話以匯編或機器語言來實現(xiàn)。在任何情況下,語言可以是編譯或解釋語言。程序可以是完全安裝程序或更新程序。程序在系統(tǒng)上的應(yīng)用在任何情況下導致用于執(zhí)行該方法的指令。
返回參考圖2的流程圖,圖2討論根據(jù)本發(fā)明的用于管理多個圖形卡的計算機實現(xiàn)的方法的示例。
在步驟s100處,三維場景被加載在渲染引擎(re)中。渲染引擎是在應(yīng)用程序請求時生成待顯示的圖像的框架。例如,cad系統(tǒng)的cad應(yīng)用程序向渲染引擎提供3d建模對象的3d場景作為輸入,并且渲染引擎使用cad系統(tǒng)的一個或多個圖形卡將3d場景繪制到屏幕。該框架被實現(xiàn)為軟件部件,該軟件部件采用應(yīng)用程序請求顯示的數(shù)據(jù)作為輸入,并且輸出可以顯示的圖像。
典型的渲染引擎包含用于隱藏渲染引擎的實現(xiàn)方式細節(jié)的若干邏輯層代碼,如本領(lǐng)域中已知的。每個層提供用于與其它層、系統(tǒng)的硬件部件或由系統(tǒng)執(zhí)行的應(yīng)用程序通信的一組功能和接口。邏輯層的數(shù)量可以變化。上層n依賴于層n-1,等等。層n-1比層n更靠近硬件。
在發(fā)明的示例中,渲染引擎包括至少三個邏輯層;即上層、下層和抽象層。上層目的在于向應(yīng)用程序(例如,cad應(yīng)用程序)提供對渲染引擎的訪問,例如,上層包括諸如api的接口。上層可以由應(yīng)用程序本身訪問以向渲染引擎提供3d場景。下層向渲染引擎提供對圖形庫的訪問,圖形庫是被設(shè)計成幫助將計算機圖形渲染到顯示器的計算機程序庫,如本領(lǐng)域中已知的。抽象層在上層和下層之間,并且目的在于管理在步驟s110處創(chuàng)建的抽象圖形資源。僅僅最低層有權(quán)訪問圖形資源的資源名稱,并且僅僅上層處理(多個)抽象圖形資源。
渲染引擎典型地是被稱為渲染引擎計算機程序的計算機程序。因此當執(zhí)行方法的步驟時執(zhí)行渲染引擎。
在渲染引擎中加載3d場景意味著表示3d場景的數(shù)據(jù)(例如,文件)被提供給渲染引擎,也就是說,渲染引擎可以訪問數(shù)據(jù)并在其上執(zhí)行計算。表現(xiàn)3d場景意味著在其中放置至少一個3d模型的3d空間。對于系統(tǒng)立場,場景是包括將用于渲染3d場景的視圖的至少一個圖形數(shù)據(jù)的文件。
接下來,在步驟s110處,為在步驟s100處加載的3d場景的至少一個圖形數(shù)據(jù)創(chuàng)建抽象圖形資源。創(chuàng)建可由先前討論的抽象層執(zhí)行。抽象圖形資源存儲圖形卡中的至少一個的圖形資源的標識符。圖形資源是可由圖形卡顯示的數(shù)據(jù):它由圖形庫根據(jù)先前加載的圖形數(shù)據(jù)計算而來。如本領(lǐng)域中已知的那樣執(zhí)行圖形數(shù)據(jù)到圖形資源的變換。圖形數(shù)據(jù)典型地是存儲將顯示的幾何結(jié)構(gòu)的二進制資產(chǎn),并且其可以進一步包括用于描述該幾何結(jié)構(gòu)(例如紋理、緩沖、照明、陰影信息、視點等等)的可選參數(shù)。從圖形庫的立場,圖形資源可以是但不限于幾何結(jié)構(gòu)、緩沖器、紋理、幀緩沖器、采樣器、著色器、視點等等。該場景包括將用于渲染場景的視圖的至少一個圖形數(shù)據(jù),要理解:典型的場景一般包括數(shù)千個圖形數(shù)據(jù)。
從而,步驟s110包括針對系統(tǒng)的每個圖形卡執(zhí)行對(加載的場景的圖形數(shù)據(jù)的)相同圖形資源的識別,并且這組識別的圖形資源本身用充當所述圖形資源的唯一標識符的抽象圖形資源來識別。
步驟s110創(chuàng)建的抽象圖形資源存儲系統(tǒng)的每個圖形卡上的圖形資源的唯一標識符。在實踐中,抽象圖形資源可以進一步存儲用于系統(tǒng)的每個圖形卡的標識符。用于每個圖形卡的標識符可能是唯一的。因此,抽象圖形資源處理圖形資源的標識符連同在其上加載圖形資源的圖形卡的標識符。標識符可以是但不限于數(shù)字、字母數(shù)字字符等等。例如,每個圖形卡可以被限定為被實現(xiàn)為整數(shù)的密鑰:其數(shù)值對于圖形卡1是1,對于圖形卡2是2,對于圖形卡n是n,等等。
在查詢圖形庫上的渲染引擎時獲得圖形資源的標識符。在示例中,渲染引擎的下層訪問已經(jīng)創(chuàng)建了圖形資源的圖形庫,并且圖形庫在系統(tǒng)的圖形卡之一上提供圖形資源的標識符。一旦下層已經(jīng)獲得標識符,它就被提供給抽象層。優(yōu)選地,給定圖形資源的所有標識符被立即查詢,用于改善抽象圖形資源的創(chuàng)建速度。
在實踐中,圖形卡上的圖形資源的標識符也被稱為資源名稱。由圖形庫在圖形數(shù)據(jù)被變換成圖形資源時創(chuàng)建資源名稱。
接下來,在步驟s120處,抽象圖形資源被存儲在表中。該表被存儲在系統(tǒng)的存儲器上。表可以是已經(jīng)存在的;在該情況下,用新的抽象圖形資源完成表。如果沒有表存在的話,則首先創(chuàng)建表(即,表在存儲器中可用),并且然后用新的抽象圖形資源完成表。在實踐中,渲染引擎是在被執(zhí)行時被加載到存儲器中的軟件,并且執(zhí)行的渲染引擎與用于存儲抽象圖形資源的表一起供給。從而,將向渲染引擎提供對表的訪問(s140),該表存儲作為加載3d場景的結(jié)果而創(chuàng)建的抽象圖形資源。通過這種方式,渲染引擎能夠處理(或管理)3d場景的圖形數(shù)據(jù)。
然后,在步驟s130處,在系統(tǒng)的每個圖形卡上復(fù)制圖形資源(現(xiàn)在通過抽象圖形資源而在系統(tǒng)的每個圖形卡上識別它)。將理解的是:復(fù)制在圖形卡上的信息可以由所述圖形卡利用,也就是說,圖形資源是由圖形庫供給的對象,操作在該圖形庫上可以由圖形卡的至少一個圖形處理單元執(zhí)行。如本領(lǐng)域中已知的那樣執(zhí)行圖形資源到圖形卡的復(fù)制,例如圖形資源被存儲在圖形卡的存儲器上。并且在步驟s340處,渲染引擎可以訪問表,該表存儲作為加載3d場景的結(jié)果而創(chuàng)建的抽象圖形資源。
現(xiàn)在參考圖3至5,討論當渲染引擎接收應(yīng)用程序的命令時步驟s100至s130的示例。渲染引擎命令是渲染引擎必須執(zhí)行的命令。命令例如可以是用具體顏色繪制幾何結(jié)構(gòu)或清除屏幕。命令可以來自使用渲染引擎的用戶(例如,通過執(zhí)行顯示請求的應(yīng)用程序)或直接來自渲染引擎,這取決于渲染引擎的構(gòu)造。在常見的渲染引擎中,命令典型地由動作(繪制、清除等等)和識別圖形資源(例如將繪制的幾何結(jié)構(gòu)圖形資源)的一個或多個資源名稱組成。在本發(fā)明中,渲染引擎的抽象層在待執(zhí)行的命令中用關(guān)聯(lián)到圖形資源的抽象圖形資源替換圖形資源的資源名稱。將根據(jù)系統(tǒng)的圖形卡的數(shù)量而執(zhí)行該命令。例如,如果系統(tǒng)包括八個圖形卡,則該命令將被執(zhí)行八次;一次執(zhí)行針對一個圖形卡。
在圖3中,表示了抽象圖形資源、資源名稱和圖形卡之間的關(guān)系。在應(yīng)用程序的請求時,在渲染引擎上已經(jīng)加載了圖形數(shù)據(jù)(當加載3d場景時)。已經(jīng)作為加載圖形數(shù)據(jù)的結(jié)果創(chuàng)建了抽象圖形資源。抽象圖形資源表示計算機系統(tǒng)的兩個圖形卡(圖形卡1和圖形卡2)上的圖形資源(由圖形庫根據(jù)加載的圖形數(shù)據(jù)計算)。每個圖形資源具有也被稱為資源名稱的唯一標識符;這里,圖形資源在圖形卡1上具有資源名稱1,并且在圖形卡2上具有資源名稱2。將理解的是:可能在創(chuàng)建抽象圖形資源之前執(zhí)行圖形資源在圖形卡上的復(fù)制;即,在步驟s110之前執(zhí)行步驟s130。在步驟s130之前執(zhí)行步驟s110改善圖形卡上的圖形資源的關(guān)聯(lián),并且還改善抽象圖形資源的創(chuàng)建和管理。
圖5示出當圖形數(shù)據(jù)被加載到渲染引擎時執(zhí)行的步驟。創(chuàng)建的抽象圖形資源表示圖形資源的n個資源名稱,每個資源名稱與n個圖形卡中的一個相關(guān)聯(lián)。圖形資源被復(fù)制在圖形卡上。一旦完成復(fù)制(步驟s130),先前創(chuàng)建的抽象圖形資源(步驟s120)就被返回到應(yīng)用程序。使用抽象圖形資源而不是資源名稱對于不知道抽象圖形資源表示多于一個圖形資源的應(yīng)用程序是透明的。因而不需修改應(yīng)用程序,抽象圖形資源的創(chuàng)建/管理正由渲染引擎的抽象層執(zhí)行。抽象層可以被配置成向上層提供所創(chuàng)建的抽象圖形資源。通過這種方式,應(yīng)用程序可以經(jīng)由應(yīng)用程序可以訪問的上層而被直接通知新的抽象圖形資源的創(chuàng)建。這允許隱藏圖形卡管理和工作的復(fù)雜性,好像系統(tǒng)中只有一個圖形卡一樣。
現(xiàn)在參考圖4,現(xiàn)在描繪用于存儲和管理所創(chuàng)建的抽象圖形資源的架構(gòu)的示例。該示例的架構(gòu)類似于具有用于搜索表的良好的行的抽象圖形資源的復(fù)式表,并且圖形卡標識符(也被稱為用于圖形卡的密鑰)用于搜索表的良好的列。例如,抽象句柄40允許識別表的行42,行42包括若干列42a-42c,每列存儲一個圖形卡標識符?,F(xiàn)在,根據(jù)列,可能獲得圖形資源的所有資源名稱(即每個圖形卡上的資源名稱)。在實踐中,資源名稱可以連同圖形卡的標識符被存儲在表中,例如在行42a-42c上。
現(xiàn)在討論用于用兩個不同視點顯示3d場景的抽象圖形資源創(chuàng)建和使用的示例。在該示例中,系統(tǒng)包括兩個圖形卡,并且每個圖形卡將負責用一個視點顯示3d場景。在應(yīng)用程序請求渲染引擎用兩個不同視點顯示3d場景之后,圖形庫命令(也稱為圖形庫動作)由渲染引擎接收。如先前所看到的,場景上的視點是圖形資源,其是由圖形庫供給并且可以在其上執(zhí)行操作的對象。并且該視點圖形資源可以由應(yīng)用程序通過向渲染引擎發(fā)送命令來請求。在討論的示例中,應(yīng)用程序發(fā)送請求相同場景上的兩個視點的命令。渲染引擎的上層典型地負責接收應(yīng)用程序的命令;否則,應(yīng)用程序有權(quán)經(jīng)由上層訪問渲染引擎。一旦已經(jīng)接收命令,渲染引擎就識別該命令關(guān)注的抽象圖形資源,例如在抽象圖形資源是在表中進行搜索。在實踐中,這變得可能,因為渲染引擎已經(jīng)向應(yīng)用程序提供關(guān)聯(lián)到加載的圖形數(shù)據(jù)的抽象圖形資源。遍歷抽象圖形資源的表行,以便獲得所有圖形卡上的資源名稱:圖形資源是已知的,命令可以通過在命令中由相應(yīng)的資源名稱替換抽象圖形資源來執(zhí)行。將理解的是:利用每個圖形卡上存儲的圖形資源的資源名稱來為所述每個圖形卡執(zhí)行命令。
以類似的方式執(zhí)行抽象圖形資源的刪除。應(yīng)用程序向渲染引擎發(fā)送刪除圖形數(shù)據(jù)的命令。命令(或動作)由渲染引擎接收,因為應(yīng)用程序可以訪問所述渲染引擎,例如通過渲染引擎的上層。命令被尋址到抽象圖形資源,因為應(yīng)用程序用抽象圖形資源識別圖形數(shù)據(jù)(作為圖形資源被復(fù)制在圖形卡上)。渲染引擎然后查詢抽象圖形資源表,并且識別系統(tǒng)的圖形卡上的圖形資源的標識符。現(xiàn)在可以通過由表中找到的圖形資源替換抽象圖形資源來修改該命令,已經(jīng)為與抽象圖形資源相關(guān)聯(lián)的每個圖形資源創(chuàng)建了新命令。結(jié)果,可以執(zhí)行刪除命令,并且擦除圖形卡存儲器的圖形資源。
上文呈現(xiàn)的發(fā)明的示例僅僅設(shè)想其中圖形數(shù)據(jù)的顯示占用所有圖形卡的場景。有趣的是,本發(fā)明進一步允許應(yīng)用程序在顯示過程中占用的系統(tǒng)的圖形卡之中選擇一個或多個圖形卡。由應(yīng)用程序選擇圖形卡的數(shù)量可以取決于一個或多個參數(shù),例如用于顯示圖形數(shù)據(jù)所需的計算資源(例如,在gpu上)。還可以在用戶動作時配置該選擇,例如用戶配置應(yīng)用程序,以使用于渲染圖形數(shù)據(jù)的圖形卡的數(shù)量不超過預(yù)定數(shù)量。對于其中使用系統(tǒng)的圖形卡之中的一個或多個圖形卡的場景,由應(yīng)用程序通過使用配置渲染引擎的具體命令來通知渲染引擎。渲染引擎可以被配置為對于所有圖形數(shù)據(jù)或者對于一個或多個特定圖形數(shù)據(jù)使用有限數(shù)量的圖形卡。在創(chuàng)建抽象資源之前執(zhí)行用于處理至少一個圖形數(shù)據(jù)的對至少一個圖形卡的這種選擇,使得將在與圖形資源相關(guān)聯(lián)的抽象圖形資源的行中僅僅識別渲染所占用的圖形卡以進行顯示。因而,本發(fā)明允許顯著地改善多圖形卡系統(tǒng)的管理,并且因而改善場景的渲染;顯著地,在3d場景上同時渲染視點是可能的,而不用修改應(yīng)用程序或圖形庫。