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