亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

用于區(qū)域渲染的自動存儲器管理的制作方法

文檔序號:6434427閱讀:224來源:國知局
專利名稱:用于區(qū)域渲染的自動存儲器管理的制作方法
技術(shù)領(lǐng)域
本發(fā)明一般地涉及圖形系統(tǒng),更具體而言涉及圖形渲染(rendering)系統(tǒng)。
背景技術(shù)
計算機圖形系統(tǒng)被廣泛用于在二維視頻顯示屏幕上顯示對象的圖形表示。當(dāng)前的計算機圖形系統(tǒng)提供非常細致的表示并用于多種應(yīng)用中。在典型的計算機圖形系統(tǒng)中,顯示屏幕上所要表示的對象被分解成多個圖形圖元(primitive)。圖元是圖形顯示的基本組成部分,并可包括點、線、向量和多邊形(例如三角形和四邊形)。通常,利用硬件/軟件方案來渲染或畫出下述圖形圖元,所述圖形圖元代表顯示屏幕上正被表示的一個或多個對象的視圖。
要被渲染的三維對象的圖元由主機計算機以圖元數(shù)據(jù)的方式來定義。例如,當(dāng)圖元是三角形時,主機計算機可以按照其頂點的X、Y和Z坐標(biāo)以及每個頂點的紅、綠和藍(R、G和B)顏色值來定義圖元。在具體應(yīng)用中可以使用其它圖元數(shù)據(jù)。
圖像渲染是將基于對象的高級描述轉(zhuǎn)換為用于在某個顯示設(shè)備上顯示的圖形化圖像。例如,在將三維對象或場景的數(shù)學(xué)模型轉(zhuǎn)換為位圖(bitmap)圖像期間,就會發(fā)生圖像渲染動作。圖像渲染的另一個例子是將一個HTML文檔轉(zhuǎn)換為一個用于在計算機監(jiān)視器上顯示的圖像。通常,稱為圖形渲染引擎的硬件設(shè)備執(zhí)行這些圖形處理任務(wù)。圖形渲染引擎通常將場景渲染到隨后將被輸出到圖形輸出設(shè)備的緩沖區(qū)中,但某些渲染引擎可能將其二維輸出直接寫到輸出設(shè)備中。圖形渲染引擎插入圖元數(shù)據(jù)來計算表示每個圖元的顯示屏幕像素,并計算每個像素的R、G和B顏色值。
這里所用的圖形渲染系統(tǒng)(或子系統(tǒng))指的是在應(yīng)用程序和圖形輸出設(shè)備之間的所有級別的處理。圖形引擎可以提供一種或多種模式的渲染,包括區(qū)域渲染(zone rendering)。區(qū)域渲染通過實現(xiàn)最優(yōu)的渲染緩存利用率,由此緩解像素顏色和深度存儲器讀/寫的瓶頸,以此來試圖提高整體的3D渲染性能。在區(qū)域渲染中,屏幕被劃分成區(qū)域陣列,并對各個區(qū)域生成對應(yīng)的指令庫(instruction bin),所述指令庫用來保存渲染每個子圖像所需的所有圖元和狀態(tài)設(shè)置指令。只要一個圖元與一個區(qū)域相交(或者可能相交),則將該圖元指令置于該區(qū)域的庫中。一些圖元將與一個以上的區(qū)域相交,這種情況下該圖元指令被復(fù)制到對應(yīng)的多個庫中。繼續(xù)這個過程,直到整個場景被分類到各個庫中。在為與一個圖元相交的每個區(qū)域都建立庫的第一次掃描之后,進行第二次逐個區(qū)域的渲染掃描。具體而言,形成所有區(qū)域的庫以生成最終的圖像。
傳統(tǒng)的區(qū)域渲染系統(tǒng)缺乏效率,這是因為它們需要對各種功能的全面軟件干預(yù)和/或管理,所述功能包括但不限于庫存儲器功能、以及為了入庫(binning)和渲染而對多個場景的排隊。
因此需要的是這樣一種方法、裝置和系統(tǒng),其可以在入庫和渲染階段之間對庫存儲器進行自動管理。


圖1示出了一個計算機系統(tǒng)的實施例框圖,該計算機系統(tǒng)包括用于對區(qū)域渲染進行自動存儲器管理的圖形設(shè)備的實施例。
圖2示出了一種圖形設(shè)備的實施例的框圖,該圖形設(shè)備包括圖形入庫引擎、圖形渲染引擎、庫、庫存儲器池、庫指針列表和場景計數(shù)器。
圖3示出了包括多個區(qū)域和幾何圖元的區(qū)域渲染器屏幕視圖的實施例。
圖4示出了庫存儲器池存儲區(qū)和圖形設(shè)備的實施例的具體框圖,所述圖形設(shè)備包括圖形入庫引擎、圖形渲染引擎、庫存儲器池環(huán)形緩沖區(qū)寄存器、控制寄存器和待處理場景計數(shù)器。
圖5示出了庫指針列表和相關(guān)庫的一個實施例的具體框圖。
圖6示出了庫存儲器池環(huán)形緩沖存儲區(qū)和相關(guān)聯(lián)的庫存儲器池環(huán)形緩沖區(qū)寄存器的一個實施例的流程圖。
圖7示出了用于自動存儲器管理的過程的一個實施例的流程圖。
具體實施例方式
本發(fā)明通過在入庫和渲染階段之間提供對庫存儲器的自動管理,而在基于圖塊(tile based)的渲染(例如區(qū)域渲染)期間對圖形性能進行優(yōu)化。利用本發(fā)明的實施例所提供的機制,入庫器和渲染器自動地共享一個物理存儲器頁面池,從而建立庫緩沖區(qū),并在這些庫緩沖區(qū)已用于渲染之后再次利用它們。這是按下列方式來進行的,即多個入庫的場景可同時排隊等候,除例外情況之外無需軟件的干預(yù)。因此基本上最小化了對區(qū)域渲染庫緩沖存儲器進行軟件管理的需要。這些特性增強了系統(tǒng)的性能。
在詳細的描述中給出了大量的具體細節(jié)以提供對本發(fā)明的充分理解。但是,本領(lǐng)域的技術(shù)人員將理解到,沒有這些具體細節(jié)也可以實現(xiàn)本發(fā)明。此外,沒有詳細地描述公知的方法、過程、組件和電路,以免模糊了本發(fā)明。
接下來的詳細描述中的某些部分按照對計算機中數(shù)據(jù)位或二進制信號的操作的算法和符號表示來展現(xiàn)。這些算法描述和表示是數(shù)據(jù)處理領(lǐng)域的技術(shù)人員用來向本領(lǐng)域其他技術(shù)人員傳達其工作內(nèi)容的手段。算法在這里(以及一般地)被認為是產(chǎn)生所期望結(jié)果的自相一致的步驟序列。這些步驟包括對物理量的物理操縱。雖然不是必需的,但通常這些量采用能被存儲、傳送、組合、比較或者操縱的電信號或磁信號的形式。為通用起見,將這些信號稱為位、值、元素、符號、字符、項、數(shù)等常常被證明是方便的。但是應(yīng)該理解,所有這些以及類似的術(shù)語將與合適的物理量相關(guān)聯(lián),并僅僅是應(yīng)用到這些量上的方便的標(biāo)記。除非在后面的討論中專門給出了相反的陳述,應(yīng)該認識到在整個說明書中,采用諸如“處理”或“計算(computing或calculating)”或“確定”等術(shù)語的討論,指的是計算機或計算系統(tǒng)或類似的電子計算設(shè)備的下列動作和過程,即將表示為該計算系統(tǒng)的寄存器和/或存儲器中的物理(電子)量的數(shù)據(jù)操縱并轉(zhuǎn)換成類似地表示為該計算系統(tǒng)的存儲器、寄存器或其它這樣的信息存儲、傳輸或顯示設(shè)備中的物理量的其它數(shù)據(jù)。
本發(fā)明的實施例可以在硬件或軟件、或者兩者的組合中實現(xiàn)。但是,本發(fā)明的實施例可被實現(xiàn)為在可編程系統(tǒng)上執(zhí)行的計算機程序,該系統(tǒng)包括至少一個處理器、數(shù)據(jù)存儲系統(tǒng)(包括易失性和非易失性存儲器和/或存儲元件)、至少一個輸入設(shè)備、以及至少一個輸出設(shè)備??蓪斎霐?shù)據(jù)應(yīng)用程序代碼以執(zhí)行這里所描述的功能并產(chǎn)生輸出信息。輸出信息可以以已知的方式被應(yīng)用到一個或多個輸出設(shè)備。為了這一應(yīng)用目的,處理系統(tǒng)包括任何具有處理器的系統(tǒng),所述處理器例如是數(shù)字信號處理器(DSP)、微控制器、專用集成電路(ASIC)或者微處理器。
程序可以用高級過程性或面向?qū)ο蟮木幊陶Z言來實現(xiàn),以和處理系統(tǒng)通信。如果需要,程序還可以用匯編語言或機器語言來實現(xiàn)。實際上,本發(fā)明在范圍上并不限于任何具體的編程語言。在任何情況下,該語言都可以是經(jīng)過編譯的語言或解釋性的語言。
程序可以被存儲在通用或?qū)S每删幊烫幚硐到y(tǒng)可讀的存儲介質(zhì)或設(shè)備(例如硬盤驅(qū)動器、軟盤驅(qū)動器、只讀存儲器(ROM)、CD-ROM設(shè)備、閃存設(shè)備、數(shù)字多功能盤(DVD)或其它存儲設(shè)備)上,用于當(dāng)該存儲介質(zhì)或設(shè)備被處理系統(tǒng)讀取時,配置并操作該處理系統(tǒng)來執(zhí)行這里所描述的過程。還可認為本發(fā)明的實施例可被實現(xiàn)為機器可讀的存儲介質(zhì),其被配置來和處理系統(tǒng)一起使用,其中如此配置的存儲介質(zhì)使得處理系統(tǒng)以特定和預(yù)定義的方式操作,來執(zhí)行這里所描述的功能。
在圖1中示出這樣一種處理系統(tǒng)的例子。示例系統(tǒng)100可以被用來例如執(zhí)行根據(jù)本發(fā)明的方法的處理,例如這里所描述的實施例。示例系統(tǒng)100可表示基于可從英特爾公司得到的微處理器的處理系統(tǒng),盡管也可以使用其它系統(tǒng)(包括具有其它微處理器的個人計算機(PC)、工程工作站、機頂盒等等)。在一個實施例中,示例系統(tǒng)100可以運行可從微軟公司得到的WINDOWSTM操作系統(tǒng)的某一版本,盡管也可以使用例如其它操作系統(tǒng)和圖形用戶界面。
圖1是本發(fā)明一個實施例的系統(tǒng)100的框圖。計算機系統(tǒng)100包括中央處理器102、包括圖形設(shè)備106在內(nèi)的圖形和存儲器控制器104、存儲器108和顯示設(shè)備114。處理器102處理數(shù)據(jù)信號,并可以是復(fù)雜指令集計算機(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實施多個指令集的組合的處理器、或者例如數(shù)字信號處理器的其它處理器設(shè)備。處理器102可以耦合到公共總線112,該總線112在處理器102和系統(tǒng)100中的其它組件之間傳輸數(shù)據(jù)信號。圖1僅僅用來說明。還可以在包括單獨的圖形設(shè)備的配置中使用本發(fā)明。
處理器102在公共總線112上發(fā)出信號來與存儲器108或圖形和存儲器控制器104通信,以根據(jù)這里的描述來操縱數(shù)據(jù)。處理器102響應(yīng)于從存儲器108得到的軟件指令來發(fā)出這樣的信號。存儲器108可以是動態(tài)隨機訪問存儲器(DRAM)設(shè)備、靜態(tài)隨機訪問存儲器(SRAM)設(shè)備或其它存儲器設(shè)備。存儲器108可以存儲由數(shù)據(jù)信號表示的指令和/或數(shù)據(jù),這些指令和/或數(shù)據(jù)可以被處理器102、圖形設(shè)備106或某種其它設(shè)備執(zhí)行。這些指令和/或數(shù)據(jù)可以包括用來執(zhí)行本發(fā)明的任何和/或所有技術(shù)的代碼。存儲器108還可以包含軟件和/或數(shù)據(jù)??蛇x的緩存110可用來利用其訪問的局部性來加速圖形設(shè)備106的存儲器訪問。
在一些實施例中,圖形設(shè)備106可以從處理器102分擔(dān)許多渲染圖像所需的存儲器密集型任務(wù)。圖形設(shè)備106處理數(shù)據(jù)信號,并可以是復(fù)雜指令集計算機(CISC)微處理器、精簡指令集計算(RISC)微處理器、超長指令字(VLIW)微處理器、實施多個指令集的組合的處理器、或者例如數(shù)字信號處理器的其他處理器設(shè)備。圖形設(shè)備106可以耦合到公共總線112,該總線112在圖形設(shè)備106和系統(tǒng)100中的其它組件之間傳輸數(shù)據(jù)信號,這些組件包括渲染緩存110和顯示設(shè)備114。圖形設(shè)備106包括渲染硬件,該硬件除了別的功能之外還向顯示設(shè)備114的特定像素寫特定屬性(例如顏色),并在顯示設(shè)備114上畫出復(fù)雜的圖元。圖形和存儲器控制器104與用于顯示由圖形控制器104進行渲染或其它處理的圖像的顯示設(shè)備114通信,從而向用戶顯示經(jīng)過渲染或其它處理的圖像。顯示設(shè)備114可以包括計算機監(jiān)視器、電視機、平板顯示器或者其他合適的顯示設(shè)備。
存儲器108存儲主機操作系統(tǒng),該主機操作系統(tǒng)可以包括一個或多個渲染程序來構(gòu)建圖形圖元的圖像以用于顯示。系統(tǒng)100包括諸如圖形加速器之類的圖形設(shè)備106,所述圖形加速器使用定制的硬件邏輯設(shè)備或協(xié)處理器,以提高對本來由主機渲染程序處理的圖形圖元的至少某個部分進行渲染的性能。主機操作系統(tǒng)程序及其主機圖形應(yīng)用編程接口(API)通過驅(qū)動程序來控制圖形設(shè)備106。
參考圖2和3,圖示了在區(qū)域渲染系統(tǒng)120上實現(xiàn)的各種圖形對象的實施例160,例如幾何圖元(即三角形、直線)162。在區(qū)域渲染中,屏幕被劃分成多個區(qū)域164的陣列,這些區(qū)域164通常是具有一定屏幕空間的矩形,盡管也可以使用其他的幾何變形。每個區(qū)域164與一個庫相關(guān)聯(lián)。每個庫128包括存儲在非連續(xù)物理存儲器頁面中的一連串命令緩沖區(qū)134。因此庫128優(yōu)選地實現(xiàn)為一連串獨立的物理頁面。
當(dāng)圖元162與區(qū)域164相交時,相應(yīng)的圖元指令就被置于與相交區(qū)域164相關(guān)聯(lián)的庫128中。因此每個區(qū)域的指令庫128被用來保存渲染每個子圖像所需的圖元指令和狀態(tài)設(shè)置指令,并且,通過將每個圖元162的屏幕空間范圍與區(qū)域164的陣列進行比較而生成該指令庫128。于是,當(dāng)接收到圖元162時,本發(fā)明就確定與每個圖元162相交的(多個)區(qū)域164,并將圖元指令復(fù)制到與這些區(qū)域164中的每個區(qū)域相關(guān)聯(lián)的庫128中。將圖元(及其屬性)162分配到區(qū)域164的過程稱為“入庫”?!皫臁?28指的是用于每個區(qū)域的抽象緩沖區(qū)——其中庫128一般被實現(xiàn)為一系列指令批處理緩沖區(qū)134。入庫過程執(zhí)行必要的計算來確定哪些圖元162位于哪些區(qū)域164中,并且可由專用硬件和/或軟件實現(xiàn)來執(zhí)行。在一種典型的實現(xiàn)中,驅(qū)動器122為與圖元162相交的每個164寫出一組將由圖形入庫引擎126解析(parse)的命令,并且這些命令可被寫入到與相交的區(qū)域164相關(guān)聯(lián)的緩沖區(qū)134中。
一些圖元162將與一個以上的區(qū)域164相交,這種情況下,圖元指令被復(fù)制到與相交區(qū)域164對應(yīng)的庫128中。例如,圖3中所示的閃電與9個區(qū)域164相交。繼續(xù)此過程,直到整個場景都被分類到庫128中。
一旦所有的圖元162都被分類并且完成了命令結(jié)構(gòu),就進行第二次掃描來一次一個區(qū)域164地渲染所述場景。在為與一個圖元162相交的每個區(qū)域164建庫的第一次掃描之后,進行第二次逐個區(qū)域的渲染掃描。具體而言,形成所有區(qū)域164的庫128以生成最終的圖像,其中每個場景都一次一個區(qū)域164地被渲染。區(qū)域164被渲染的順序并不重要。與涉及某個特定區(qū)域164中的像素的圖元162相關(guān)聯(lián)的所有庫128在渲染下一個區(qū)域164之前都被形成。單個圖元162可與許多區(qū)域164相交,因此需要多次復(fù)制。結(jié)果,與多個區(qū)域164相交的圖元162被多次渲染(即對每個相交的區(qū)域164都渲染一次)。
由于圖元162被分解成與渲染緩存110對齊的若干區(qū)域164,因此渲染性能得到了改進。由于圖形設(shè)備106每次只對屏幕的一小部分(即某個區(qū)域164)工作,因此它能夠在渲染緩存110中保存整個區(qū)域164的幀緩沖區(qū)內(nèi)容。區(qū)域164的大小一般是一個常數(shù),其被調(diào)節(jié)成適于渲染緩存110的大小和結(jié)構(gòu)。通過這一機制,渲染緩存110提供了最佳收益——通過利用區(qū)域164的空間連貫性(coherence),可最大程度地重復(fù)使用所緩存的數(shù)據(jù)。通過使用區(qū)域渲染模式,只需要執(zhí)行最少數(shù)量的顏色存儲器寫就可以一次一個區(qū)域164地生成最終的圖像,并且同時可以最少化或避免顏色存儲器讀以及深度存儲器讀和寫。因此,與傳統(tǒng)的渲染器相比,渲染緩存110的使用大大減少了存儲器流量并提高了性能,其中所述傳統(tǒng)的渲染器在完整地繪制完每一個圖元之后才繼續(xù)到下一個圖元。
參考圖2,在典型的實現(xiàn)中,最開始,將被稱為場景輸入列表124的圖形圖元和狀態(tài)設(shè)置指令流應(yīng)用到與圖形入庫引擎126相關(guān)聯(lián)的圖形入庫引擎環(huán)形緩沖區(qū)125。場景輸入列表124可以是(應(yīng)用編程接口所接收到的)單個的、按時間排序的場景描述。圖形入庫引擎126通常實現(xiàn)為硬件入庫引擎(HWB)126。本領(lǐng)域技術(shù)人員將認識到也可以使用軟件或軟件加硬件的入庫器。圖形入庫引擎126對屏幕輸入列表124進行解析,并確定每個圖元162與哪個(哪些)區(qū)域164相交。
如前所述,區(qū)域164與庫128相關(guān)聯(lián)。圖形入庫引擎126將每個圖元162的屏幕空間范圍與區(qū)域164的陣列進行比較,并將相關(guān)聯(lián)的圖元命令復(fù)制到相應(yīng)的庫128中。如圖5所示以及如下所述,庫128由通常存儲在非連續(xù)物理存儲器頁面中的一連串命令緩沖區(qū)134組成。庫列表是包括每個庫132的緩沖區(qū)134的列表。頁面一開始被分配到BMP 140。用所述頁面的頁號來初始化庫指針列表130,并且?guī)熘羔樍斜?30將寫指針存儲到庫列表132中。
圖形入庫引擎126還通過對包含在場景輸入列表124中的相關(guān)狀態(tài)設(shè)置指令進行解析,來維護當(dāng)前的圖形狀態(tài)。在將圖元命令置于任何給定的庫128中之前,圖形入庫引擎126通常在庫128中將任何必要的狀態(tài)設(shè)置指令放在所述圖元命令之前。
在已經(jīng)完全對場景輸入列表124進行解析之后,相關(guān)聯(lián)的庫(即庫0、庫1...庫n-1)的集合就準(zhǔn)備好由圖形渲染引擎136用來渲染場景了。如下所詳細討論的,在場景輸入列表124末端包括指令,以使得圖形入庫引擎126將待處理場景計數(shù)器148中的寄存器加1,并開始對已入庫場景的渲染。例如,圖形入庫引擎126經(jīng)由路徑156向與圖形渲染引擎136相關(guān)聯(lián)的圖形渲染引擎環(huán)形緩沖區(qū)157發(fā)送渲染指令。
圖4示出了庫存儲器池存儲區(qū)180和一個圖形設(shè)備的實施例的框圖,所述圖形設(shè)備包括圖形入庫引擎126、圖形渲染引擎136、BMP環(huán)形緩沖區(qū)寄存器174、控制寄存器182和待處理場景計數(shù)器148。BMP環(huán)形緩沖存儲區(qū)180保存一個指向可供入庫器125使用的空閑物理頁面的指針的列表。在為每一個庫128都建立了初始緩沖區(qū)后,生成場景生成指令流。
參考圖5,示出了庫指針列表(BPL)130的一個實施例170,其中包括當(dāng)前庫指針132和多個庫128。維護在存儲器中的庫指針列表130被用來為每個庫128將初始的以及后續(xù)的當(dāng)前指針132存儲到庫指針列表130中。BMP環(huán)形緩沖存儲區(qū)180保存一個指向可供入庫器125使用的空閑物理頁面的指針的列表。具體地說,庫指針列表130是庫指針132在物理上連續(xù)的、大小對齊的陣列,其中庫指針列表130的大小等于或近似等于圖形設(shè)備106所支持的庫128的最大數(shù)量。每個庫指針132都包含用于庫128的當(dāng)前庫寫指針(例如,物理字地址),還有庫狀態(tài)值。在一個典型的實施例中,按圖塊化的方式來存儲庫指針132,其中每8個雙字(256比特的緩存線)包含一個重新排列的庫指針132的列表,其用于寬1高4的庫128矩形組。
參考圖6,示出了BMP環(huán)形緩沖存儲區(qū)180的實施例。與BMP 140相關(guān)聯(lián)的BMP環(huán)形緩沖存儲區(qū)180保存著指向可供圖形入庫引擎126使用的空閑物理頁面的指針的列表。環(huán)形緩沖存儲區(qū)180可能位于系統(tǒng)存儲器108中或?qū)S么鎯ζ髦???捎玫目臻e頁面146的頁面號被生成并放置在BMP環(huán)形緩沖區(qū)144中。與BMP環(huán)形緩沖存儲區(qū)180相關(guān)聯(lián)的BMP環(huán)形緩沖區(qū)寄存器150可能具有寄存器內(nèi)的多個字段。在BMP環(huán)形緩沖區(qū)寄存器174的實施例內(nèi)所包含的字段包括但不限于起始地址字段(S)166、緩沖區(qū)長度字段(L)168、獲得(get)偏移量字段(G)170、放置(put)偏移量字段(P)172以及其它字段。BMP環(huán)形緩沖區(qū)寄存器174定義了BMP環(huán)形緩沖存儲區(qū)180的起始166和長度168,并包括兩個進入BMP環(huán)形緩沖存儲區(qū)180中的“偏移量”,分別是獲得170和放置172。BMP 140自身被存儲在物理上連續(xù)的存儲器的對齊列表中,這個列表通常為4KB,由起始物理頁面號和頁面大小(通常為4KB)來定義。
圖形設(shè)備106包括圖形入庫引擎126和圖形渲染引擎136,經(jīng)由獲得和放置偏移量寄存器170和172來訪問BMP環(huán)形緩沖存儲區(qū)180。通過寫用于提供BMP起始166和BMP大小168的BMP寄存器,而在一開始初始化并指定BMP 140。獲得偏移量170和放置偏移量172在被入庫器使用前一般都被初始化為0,以表示空閑頁面的完全補足(complement)。
參考圖4,圖形設(shè)備106還包括庫控制寄存器182,其包括寄存器內(nèi)的多個字段。在庫控制寄存器182的實施例內(nèi)所包含的字段包括但不限于重啟位184、場景的同步結(jié)束位186、恢復(fù)(resume)位188以及其它字段。一旦BMP 140有增長,就通過直接寫庫控制寄存器182來設(shè)置重啟位184而恢復(fù)場景的入庫。
當(dāng)一個入庫的場景被渲染時,分配庫存儲器,這個庫存儲器后面會被再次利用,以在下一個場景入庫時使用。具體地說,用批處理緩沖區(qū)起始指令182來創(chuàng)建每一個批處理緩沖區(qū)134,所述指令182指定了物理地址和回收(reclaim)位。當(dāng)圖形渲染引擎136渲染每一個批處理緩沖區(qū)134時,它譯碼并執(zhí)行批處理緩沖區(qū)起始指令182。圖形渲染引擎136在對批處理緩沖區(qū)134進行處理的結(jié)尾處將空閑頁面146插入到BMP 140中,所述批處理緩沖區(qū)134是用指定了物理地址并設(shè)置了“回收”位的批處理緩沖區(qū)起始指令182來創(chuàng)建的。這一過程使得庫緩沖存儲器134(即,頁面)可被自動地回收,而無需軟件的干預(yù)。放置偏移量172向圖形渲染引擎136通知放置偏移量172,在這個放置偏移量172處寫下一次釋放的緩沖區(qū)134的頁面號。圖形渲染引擎136使用放置偏移量172來將庫緩沖區(qū)134的頁面在執(zhí)行結(jié)束后返還給BMP 140。
圖形入庫引擎126和圖形渲染引擎136都和待處理場景計數(shù)器148進行通信,所述待處理場景計數(shù)器148對每一個正在入庫的場景進行監(jiān)控和計數(shù)。待處理場景計數(shù)器148被初始化為0,當(dāng)不是0時,則表示當(dāng)前處理著至少一個入庫的場景。當(dāng)沒有待處理的場景時,待處理場景計數(shù)器148為0。每次有場景入庫,待處理場景計數(shù)器148就加1。相應(yīng)地,每當(dāng)入庫的場景被渲染,則待處理場景計數(shù)器148減1。具體地說,要想為形成每個庫128而初始化圖形狀態(tài),就要在場景渲染列表124的末尾處放置一條專用的指令,該指令將待處理場景計數(shù)器148減1。當(dāng)待處理場景計數(shù)器148減到1時,就不存在任何排隊等候渲染的完整場景了。
BMP環(huán)形緩沖存儲區(qū)180可以保存一個或多個庫指針列表130,其中每一個庫指針列表130都是將被用于初始庫緩沖區(qū)的物理頁面號的列表(每個區(qū)域一個頁面號)。多個庫列表(一般一個雙緩沖區(qū)有兩個)使得在圖形入庫引擎126正活動地入庫當(dāng)前場景的同時可以開始下一場景的入庫。為了允許在當(dāng)前場景結(jié)束入庫之前開始下一場景的入庫,使用一個以上的庫指針列表130來向入庫器128提供一種多緩沖的輸入。BMP環(huán)形緩沖存儲區(qū)180中的雙字節(jié)條目包含了物理頁面號以及相關(guān)聯(lián)的存儲器空間選擇(如果設(shè)備支持多個物理存儲器空間的話)。
參考圖4和5,在建立新的庫緩沖區(qū)134的過程中,圖形入庫引擎126將從BMP 140中抽取一個空閑頁面號146(假定有一個是可用的)。具體地說,在場景入庫期間,圖形入庫引擎126查詢BMP環(huán)形緩沖存儲區(qū)180,以確定是否有空閑頁面可用。獲得偏移量170向圖形入庫引擎126通知下一個可獲取的空閑頁面146的頁面號的偏移量。圖形入庫引擎126將使用這個偏移量來獲得建立庫128所需的物理頁面146。當(dāng)圖形入庫引擎126試圖抽取空閑頁面號146但發(fā)現(xiàn)BMP 140為空時,圖形入庫引擎126查詢待處理場景計數(shù)器148以確定是否存在“待處理的”入庫場景。如果待處理場景計數(shù)器148不是0,則圖形入庫引擎126保持空閑,直到某一空閑頁面146變?yōu)榭捎没蛘叽幚韴鼍坝嫈?shù)器148變?yōu)?。
如果待處理場景計數(shù)器148為0,則沒有任何待處理的入庫場景,因此沒有任何釋放頁面的潛在源。在這個時刻,通過增大BMP 140的大小來增長BMP 140,所述增幅是要容納必需數(shù)量的額外空閑頁面號146所必備的。在一個典型的實現(xiàn)中,BMP 140以4KB的整數(shù)倍增長。接著,額外的空閑頁面號被插入到更大的BMP 140中,并且據(jù)此對BMP環(huán)形緩沖區(qū)寄存器166、168、170和172進行調(diào)整??臻e頁面146的新列表被放置在BMP環(huán)形緩沖存儲區(qū)180的頂端,并且指針被調(diào)整。例如,當(dāng)圖形入庫引擎126只是使用新的指針值來恢復(fù)時,兩個指針都可被移動。然后,圖形入庫引擎126從BMP 140中抽取空閑頁面號146,并繼續(xù)入庫過程。
如果無法得到額外的空閑存儲器,則圖形渲染引擎136渲染部分入庫的場景,以釋放庫存儲器,并且隨后重新開始入庫所述場景的剩余部分。在一個典型的實施例中,直接寫庫控制寄存器182,以設(shè)置同步結(jié)束場景位186。這使得圖形入庫引擎126(a)通過用一條結(jié)束批處理緩沖區(qū)的指令來終止所有有效的庫128,從而關(guān)閉這些有效的庫128,(b)沖刷(flush)任何內(nèi)部緩存的數(shù)據(jù)(例如,所緩存的庫指針132),以及(c)修改與庫128相關(guān)聯(lián)的狀態(tài)跟蹤信息,使得一旦恢復(fù)入庫,則所有必要的狀態(tài)都被插入到庫128中它收到的第一個圖元162之前。還要采取渲染部分入庫的場景所需的任何其它動作。這些動作包括但不限于對庫場景寄存器190的直接寫,以使得待處理場景計數(shù)器148增加,以及在渲染部分場景之前確保區(qū)域控制寄存器的深度寫使能位被清零(因為對場景的繼續(xù)部分的渲染要求深度值已被寫入存儲器)的動作。
通過直接寫庫控制寄存器182來設(shè)置恢復(fù)位188,就可以恢復(fù)場景的入庫。如上所述,同步結(jié)束場景操作將使得所有庫位向量都被用于跟蹤狀態(tài)組的變化,因此在任何新的圖元被輸出之前,都將用當(dāng)前的狀態(tài)來刷新每個庫128。
圖形渲染引擎136將在對批處理緩沖區(qū)進行處理的結(jié)尾處將空閑頁面號146插入到BMP 140中,所述批處理緩沖區(qū)是用指定了物理地址并設(shè)置了“回收”位的批處理緩沖區(qū)起始指令182來創(chuàng)建的。這一過程使得庫緩沖區(qū)存儲器(即,頁面)可被自動地回收,而無需軟件的干預(yù)。當(dāng)一個入庫的場景被渲染時,分配庫存儲器,這個庫存儲器后面會被再次利用,以在渲染下一個場景時接著使用。具體地說,放置偏移量172向圖形渲染引擎136通知放置偏移量172,在這個放置偏移量172處寫下一次釋放的緩沖區(qū)的頁面號。圖形渲染引擎136使用放置偏移量172來將庫緩沖區(qū)134的頁面在執(zhí)行結(jié)束后返還給BMP 140。
圖7是圖示了用于實現(xiàn)自動存儲器管理,包括對緩沖存儲器進行自動回收的實施例200的流程圖。
頁面一開始被分配給BMP 140(步驟202)。然后初始化BMP 140(步驟204)。通過寫B(tài)MP緩沖區(qū)寄存器而指定BMP 140,所述BMP緩沖區(qū)寄存器規(guī)定了BMP起始166和BMP大小168。在任何入庫器使用之前,BMP的獲得偏移量170和放置偏移量172被初始化為0,以表示空閑頁面的完全補足。
然后,用所分配的物理頁面號來初始化庫指針列表130(步驟206)。在場景的入庫過程中,本發(fā)明確定是否有可用的空閑頁面(步驟208)。當(dāng)圖形入庫引擎126試圖提取空閑頁面號146但發(fā)現(xiàn)BMP 140為空時,它執(zhí)行兩種動作之一。如果存在任何“待處理的”入庫場景(即,待處理場景計數(shù)器148非零)(步驟210),則圖形入庫引擎126將等待空閑頁面146變?yōu)榭捎没蛘叽幚韴鼍坝嫈?shù)器148變?yōu)?(步驟212)。
假如圖形入庫引擎126遇到了存儲器用盡的狀況,并且沒有待處理的入庫場景(因此沒有釋放頁面的潛在源),則產(chǎn)生一個存儲器用盡中斷。此時,軟件可以選擇通過“增長”BMP 140而提供更多的空閑頁面(步驟218)。通過初始時將BMP增大容納所需數(shù)量的額外空閑頁面號146所必需的大小,從而增長BMP 140。然后,額外的空閑頁面號被插入到更大的BMP 140中,并且獲得和放置偏移量寄存器166、168、170和172做出相應(yīng)的調(diào)整。如果空閑頁面146變?yōu)榭捎?步驟212),則圖形入庫引擎126將從BMP 140中抽取這個頁面號146,并繼續(xù)入庫過程。
如果待處理場景計數(shù)器148為0(步驟210)或者在等待時變?yōu)?(步驟212),則圖形入庫引擎126將產(chǎn)生一個能夠產(chǎn)生處理器中斷的存儲器用盡例外(步驟214)。
此時,如果軟件可將額外的空閑頁面變?yōu)榭捎?步驟216),則通過直接寫庫控制寄存器182以設(shè)置重啟位184,從而增長BMP 140,插入額外的空閑頁面,并且恢復(fù)場景的入庫(步驟218)。
如果認為BMP 140處于“空”狀態(tài),無法得到可用的額外空閑存儲器(步驟216),則強迫對部分入庫的場景進行渲染,以釋放庫存儲器,然后重新開始對所述場景的剩余部分的入庫(步驟220)。圖形入庫引擎126隨后將(a)用一條結(jié)束批處理緩沖區(qū)的指令來終止所有有效的庫,從而關(guān)閉這些庫,(b)沖刷任何內(nèi)部緩存的數(shù)據(jù)(例如,所緩存的庫指針132),以及(c)修改與庫128相關(guān)聯(lián)的狀態(tài)跟蹤信息,使得一旦恢復(fù)入庫,則所有必要的狀態(tài)都被插入到庫128中它收到的第一個圖元162之前。還要采取渲染部分入庫的場景所需的任何其它動作。通過直接寫庫控制寄存器182來設(shè)置恢復(fù)位188,就可以恢復(fù)場景的入庫。如上所述,同步結(jié)束場景操作將使得所有庫位向量都被用于跟蹤狀態(tài)組的變化,因此在任何新的圖元被輸出之前,都將用當(dāng)前的狀態(tài)來刷新每個庫128。
因此,根據(jù)本發(fā)明,入庫器和渲染器自動地共享一個物理存儲器頁面池,從而在入庫階段建立庫緩沖區(qū),并在渲染階段已利用之后再次利用它們。這是按照以下方式來進行的,即同時讓多個入庫場景排隊等候,而加以最小的軟件干預(yù)。
已按照專利法規(guī)的要求描述了本發(fā)明,本領(lǐng)域的技術(shù)人員將會理解如何對本發(fā)明做出修改和改變以滿足他們的特定需求和條件。所做出的這些修改和改變將不會偏離所附權(quán)利要求所闡述的本發(fā)明的范圍和精神。
權(quán)利要求
1.一種用于渲染包括幾何圖元的場景的裝置,包括入庫引擎;渲染引擎;和自動存儲器管理器,用于在入庫引擎和渲染引擎之間管理存儲器頁面,其包括用于存儲存儲器頁面的存儲區(qū);和包括第一寄存器和第二寄存器的多個存儲區(qū)寄存器,其中,所述第一寄存器包含指向所述存儲區(qū)中若干存儲位置的信息,所述入庫引擎可從所述存儲位置獲取存儲器頁面以建立緩沖區(qū),這些緩沖區(qū)是用一條包括回收命令的緩沖區(qū)指令來發(fā)起的,并且其中,所述第二寄存器包含指向所述存儲區(qū)中若干存儲位置的信息,所述渲染引擎可響應(yīng)于與所形成的緩沖區(qū)相關(guān)聯(lián)的回收命令而自動地將存儲器頁面返還到所述存儲位置。
2.如權(quán)利要求1所述的裝置,其中,所述入庫引擎使用所述存儲器頁面來配置與多個區(qū)域相關(guān)聯(lián)的緩沖區(qū)。
3.如權(quán)利要求2所述的裝置,其中,所述入庫引擎確定某個幾何對象與哪些區(qū)域相交,被將相關(guān)聯(lián)的對象指令復(fù)制到與相交的區(qū)域相關(guān)聯(lián)的緩沖區(qū)中。
4.如權(quán)利要求1所述的裝置,其中,所述入庫引擎響應(yīng)于所述第一寄存器而抽取可用的存儲器頁面,以配置與多個區(qū)域相關(guān)聯(lián)的多個庫。
5.如權(quán)利要求1所述的裝置,其中,所述入庫引擎是圖形入庫引擎。
6.如權(quán)利要求1所述的裝置,其中,所述緩沖區(qū)指令包括地址和回收位。
7.如權(quán)利要求1所述的裝置,其中,所述渲染引擎在形成每個緩沖區(qū)時譯碼并執(zhí)行所述緩沖區(qū)指令。
8.如權(quán)利要求1所述的裝置,其中,所述渲染引擎在對用緩沖區(qū)指令發(fā)起的緩沖區(qū)進行處理的結(jié)尾處,將緩沖區(qū)插入到所述存儲區(qū)中,從而實現(xiàn)緩沖區(qū)的自動回收。
9.如權(quán)利要求1所述的裝置,其中,所述第二寄存器將一個偏移量通知給所述渲染引擎,將下一個可用緩沖區(qū)的頁面號寫在所述偏移量處。
10.如權(quán)利要求9所述的裝置,其中,所述渲染引擎使用所述偏移量而在所述緩沖區(qū)頁面的執(zhí)行結(jié)束時將它們返還到所述存儲器池中。
11.如權(quán)利要求1所述的裝置,其中,所述存儲區(qū)保存多個庫列表,其中,每個庫列表是將用于初始庫緩沖區(qū)的物理頁面號的列表。
12.如權(quán)利要求11所述的裝置,其中,所述入庫引擎利用所述多個庫列表來排隊多個場景。
13.如權(quán)利要求12所述的裝置,其中,所述入庫引擎利用所述多個庫列表而在第一場景入庫的同時開始第二場景的入庫。
14.如權(quán)利要求1所述的裝置,還包括場景計數(shù)器,與所述入庫引擎和渲染引擎通信,用于計數(shù)入庫場景。
15.如權(quán)利要求14所述的裝置,其中,每次有一個場景入庫,則所述場景計數(shù)器遞增。
16.如權(quán)利要求14所述的裝置,其中,每次有一個場景被渲染,則所述場景計數(shù)器遞減。
17.如權(quán)利要求16所述的裝置,其中,所述場景計數(shù)器響應(yīng)于某一場景被渲染后所執(zhí)行的指令而遞減。
18.如權(quán)利要求14所述的裝置,其中,當(dāng)所述場景計數(shù)器指示沒有待處理的場景,并且可將可用的存儲器頁面分配給所述存儲區(qū)時,所述存儲區(qū)存儲額外的存儲器頁面。
19.如權(quán)利要求14所述的裝置,其中,當(dāng)所述場景計數(shù)器指示沒有待處理的場景,并且不能將可用的存儲器頁面分配給所述存儲區(qū)時,所述渲染引擎渲染部分入庫的場景。
20.如權(quán)利要求19所述的裝置,其中,所述渲染引擎在渲染了所述部分入庫的場景后,在處理所述部分入庫場景的緩沖區(qū)的結(jié)尾處,將相關(guān)聯(lián)的緩沖區(qū)返還給所述存儲區(qū),從而實現(xiàn)緩沖區(qū)的自動回收。
21.如權(quán)利要求20所述的裝置,還包括控制寄存器,其提供了恢復(fù)位,用于在緩沖區(qū)被回收后恢復(fù)所述部分入庫場景的入庫。
22.一種對存儲器進行自動管理以用于入庫和渲染場景的方法,包括分配存儲器頁面;定義一個存儲區(qū),可對該存儲區(qū)進行訪問以入庫及渲染基于圖塊的渲染圖像;在所述存儲區(qū)中存儲所述存儲器頁面;獲取存儲器頁面以協(xié)助所述場景的入庫;以及在渲染所述場景后,將所獲取的存儲器頁面返還給所述存儲區(qū),從而實現(xiàn)存儲器頁面的自動回收。
23.如權(quán)利要求22所述的方法,其中,定義可訪問來用于入庫和渲染的存儲區(qū)還包括定義第一偏移量,在該處的下一個可用存儲器頁面的頁面號將被用于入庫;以及定義第二偏移量,下一個釋放的存儲器頁面的頁面號將被寫到該第二偏移量處。
24.如權(quán)利要求23所述的方法,其中,獲取存儲器頁面以協(xié)助所述場景的入庫還包括利用所述第一偏移量獲得入庫所需的存儲器頁面。
25.如權(quán)利要求23所述的方法,其中,在渲染所述場景后,將所獲取的存儲器頁面返還給所述存儲區(qū),從而實現(xiàn)存儲器頁面的自動回收還包括利用所述第二偏移量而在執(zhí)行后將存儲器頁面返還給所述存儲區(qū)。
26.如權(quán)利要求22所述的方法,其中,在可訪問來用于入庫和渲染的存儲區(qū)中存儲所述存儲器頁面還包括通過物理頁面號和相關(guān)聯(lián)的存儲器空間選擇來識別每一個所存儲的存儲器頁面。
27.如權(quán)利要求22所述的方法,還包括在入庫每一個場景后,在數(shù)值上遞增待處理場景計數(shù)器;以及開始對入庫場景的渲染。
28.如權(quán)利要求22所述的方法,其中,開始對入庫場景的渲染包括格式化與所述場景相關(guān)聯(lián)的渲染列表;以及在處理了所述場景渲染列表后遞減待處理場景計數(shù)器。
29.如權(quán)利要求22所述的方法,還包括在入庫所述場景的過程中,確定是否有任何空閑存儲器頁面可用。
30.如權(quán)利要求29所述的方法,還包括當(dāng)待處理場景計數(shù)器非零時,等待空閑頁面;當(dāng)存儲器頁面變?yōu)榭捎脮r,從所述存儲區(qū)抽取該存儲器頁面;以及恢復(fù)所述場景的入庫。
31.如權(quán)利要求29所述的方法,還包括當(dāng)待處理場景計數(shù)器為零并有空閑存儲器可用時,增長所述存儲區(qū);將額外的空閑頁面插入到所述存儲區(qū)中;以及恢復(fù)所述場景的入庫。
32.如權(quán)利要求29所述的方法,包括當(dāng)待處理場景計數(shù)器為零并且沒有空閑存儲器可用時,渲染某一入庫場景的一部分;以及恢復(fù)所述場景的未渲染部分的剩余部分的入庫。
33.如權(quán)利要求22所述的方法,其中,所述存儲區(qū)保存多個庫列表,其中每個庫列表是將用于初始庫緩沖區(qū)的存儲器頁面的列表。
34.如權(quán)利要求33所述的方法,還包括利用所述多個庫列表來排隊多個場景。
35.如權(quán)利要求34所述的方法,還包括利用所述多個庫列表而在入庫第一場景的同時開始第二場景的入庫。
36.一種機器可讀介質(zhì),其上存儲的多條機器可讀指令可由處理器執(zhí)行用來自動地管理存儲器以入庫和渲染場景,包括用于分配存儲器頁面的指令;用于定義一個存儲區(qū)的指令,可對該存儲區(qū)進行訪問以入庫及渲染基于圖塊的渲染圖像;用于在所述存儲區(qū)中存儲所述存儲器頁面的指令;用于獲取存儲器頁面以協(xié)助所述場景的入庫的指令;和用于在渲染所述場景后,將所獲取的存儲器頁面返還給所述存儲區(qū),從而實現(xiàn)存儲器頁面的自動回收的指令。
37.如權(quán)利要求36所述的機器可讀介質(zhì),其中,用于定義可訪問來用于入庫和渲染的存儲區(qū)的指令還包括用于定義第一偏移量的指令,在該第一偏移量處的下一個可用存儲器頁面的頁面號將被用于入庫;和用于定義第二偏移量的指令,下一個釋放的存儲器頁面的頁面號將被寫到該第二偏移量處。
38.如權(quán)利要求37所述的機器可讀介質(zhì),其中,用于獲取存儲器頁面以協(xié)助所述場景的入庫的指令還包括利用所述第一偏移量獲得入庫所需的存儲器頁面的指令。
39.如權(quán)利要求37所述的機器可讀介質(zhì),其中,用于在渲染所述場景后,將所獲取的存儲器頁面返還給所述存儲區(qū),從而實現(xiàn)存儲器頁面的自動回收的指令還包括利用所述第二偏移量而在執(zhí)行后將存儲器頁面返還給所述存儲區(qū)的指令。
40.如權(quán)利要求36所述的機器可讀介質(zhì),其中,用于在可訪問來用于入庫和渲染的存儲區(qū)中存儲所述存儲器頁面的指令還包括通過物理頁面號和相關(guān)聯(lián)的存儲器空間選擇來識別每一個所存儲的存儲器頁面的指令。
41.如權(quán)利要求36所述的機器可讀介質(zhì),還包括在入庫每一個場景后,在數(shù)值上遞增待處理場景計數(shù)器的指令;和開始對入庫場景進行渲染的指令。
42.如權(quán)利要求36所述的機器可讀介質(zhì),其中,開始對入庫場景進行渲染的指令包括格式化與所述場景相關(guān)聯(lián)的渲染列表的指令;和在處理了所述場景渲染列表后遞減待處理場景計數(shù)器的指令。
43.如權(quán)利要求36所述的機器可讀介質(zhì),還包括在入庫所述場景的過程中,確定是否有任何空閑存儲器頁面可用的指令。
44.如權(quán)利要求43所述的機器可讀介質(zhì),還包括用于在待處理場景計數(shù)器非零時等待空閑頁面的指令;用于在存儲器頁面變?yōu)榭捎脮r從所述存儲區(qū)抽取該存儲器頁面的指令;和用于恢復(fù)所述場景的入庫的指令。
45.如權(quán)利要求43所述的機器可讀介質(zhì),還包括用于在待處理場景計數(shù)器為零并有空閑存儲器可用時增長所述存儲區(qū)的指令;用于將額外的空閑頁面插入到所述存儲區(qū)中的指令;和用于恢復(fù)所述場景的入庫的指令。
46.如權(quán)利要求43所述的機器可讀介質(zhì),包括用于在待處理場景計數(shù)器為零并且沒有空閑存儲器可用時,渲染某一入庫場景的一部分的指令;和用于恢復(fù)所述場景的未渲染部分的剩余部分的入庫的指令。
47.如權(quán)利要求36所述的機器可讀介質(zhì),其中,所述存儲區(qū)保存多個庫列表,其中每個庫列表是將用于初始庫緩沖區(qū)的存儲器頁面的列表。
48.如權(quán)利要求47所述的機器可讀介質(zhì),還包括利用所述多個庫列表來排隊多個場景的指令。
49.如權(quán)利要求48所述的機器可讀介質(zhì),還包括利用所述多個庫列表而在入庫第一場景的同時開始第二場景的入庫的指令。
全文摘要
本發(fā)明通過在入庫和渲染階段之間提供對庫存儲器的自動管理而優(yōu)化了區(qū)域渲染過程中的性能。本發(fā)明的實施例提供了一種機制,利用這種機制,入庫器和渲染器自動地共享一個物理存儲器頁面池,從而建立庫緩沖區(qū),并在這些庫緩沖區(qū)已用于渲染之后再次利用它們。這是按下列方式來進行的,使得多個入庫的場景可同時排隊等候,除例外情況之外無需軟件的干預(yù)。因此消除了對區(qū)域渲染庫緩沖存儲器進行軟件管理的需要。也可對要入庫和渲染的多個場景進行排隊,而無需軟件的干預(yù)。
文檔編號G06T11/20GK1669055SQ02826586
公開日2005年9月14日 申請日期2002年12月11日 優(yōu)先權(quán)日2001年12月31日
發(fā)明者阿迪蒂亞·斯里尼瓦斯, 彼得·多伊爾 申請人:英特爾公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1