国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      用于區(qū)帶渲染的有效圖形狀態(tài)管理的制作方法

      文檔序號:6434165閱讀:134來源:國知局
      專利名稱:用于區(qū)帶渲染的有效圖形狀態(tài)管理的制作方法
      技術(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ū)域的庫以生成最終的圖像。
      為了實現(xiàn)諸如區(qū)帶渲染之類的平鋪式渲染(tile-rendering),維護每個圖像空間區(qū)帶內(nèi)的正確的圖形渲染狀態(tài)變量非常重要,因為隨后(在渲染階段)需要根據(jù)在入庫(binning)階段中遇到每個庫的圖元時存在的圖形狀態(tài)來提供該庫的圖元。
      用于將圖元和它們的合適的圖形狀態(tài)相關(guān)聯(lián)的一種傳統(tǒng)方法是單獨維護所有遇到的圖形狀態(tài)的拷貝,并將每個圖元和某個標(biāo)簽(例如索引)相關(guān)聯(lián),所述標(biāo)簽標(biāo)識了以后將用于渲染該圖元的特定狀態(tài)。然而,在低成本且?guī)捠芟?例如集成式的)圖形系統(tǒng)中,維護單獨的狀態(tài)表的復(fù)雜度以及裝載整個狀態(tài)集的成本(按所需的存儲器區(qū)域、延遲和帶寬來計算)——可能在每個圖元之間——是非常高昂的。
      因此所需要的是這樣一種方法、裝置和系統(tǒng),其可以較低成本且更有效地對區(qū)帶渲染進行圖形狀態(tài)管理。


      圖1示出了一個計算機系統(tǒng)的實施例框圖,該計算機系統(tǒng)包括用于自動對區(qū)帶渲染進行存儲器管理的圖形設(shè)備的實施例。
      圖2示出了一種圖形設(shè)備的實施例的框圖,該圖形設(shè)備包括圖形入庫引擎,用于處理包含狀態(tài)改變量(delta state)、圖形渲染引擎和庫在內(nèi)的場景輸入列表。
      圖3示出了包括多個區(qū)帶和幾何圖元的區(qū)帶渲染器屏幕視圖的實施例。
      圖4示出了動態(tài)狀態(tài)子分組以及逐庫跟蹤位(per-bin tracking bit)的圖5示出了區(qū)帶渲染的場景捕獲期間,用于在將圖元置入庫中之前輸出任何所需的狀態(tài)改變的處理、以及使用所存儲的當(dāng)前動態(tài)狀態(tài)和所述逐庫跟蹤位向量來有效地管理狀態(tài)改變處理的實施例的流程圖。
      圖6示出了對檢測需要哪些紋理圖(texture map)和哪些紋理混合階段(texture blend stage)這一操作進行優(yōu)化的處理的實施例的流程圖。
      具體實施例方式
      本發(fā)明提供了一種有成本效益的機制,其利用硬件狀態(tài)入庫邏輯,并與用以生成圖形化圖像的基于平鋪層(tile based)的圖像渲染方法結(jié)合使用,從而跟蹤并管理圖形狀態(tài)。根據(jù)本發(fā)明的實施例,硬件中只維護動態(tài)狀態(tài)變量的當(dāng)前值。在一個實施例中,動態(tài)狀態(tài)變量包括(但不局限于)被認(rèn)為可能在圖元之間改變的變量。在典型的場景中保持恒定或相當(dāng)恒定的狀態(tài)變量一般被排除在外。將動態(tài)狀態(tài)變量的集合劃分成子分組。每個狀態(tài)子分組都和逐庫跟蹤位陣列相關(guān)聯(lián)。只要在入庫階段遇到了狀態(tài)改變,就為所有的庫設(shè)置對應(yīng)于相關(guān)聯(lián)的狀態(tài)組的跟蹤位。在將圖元置于庫中之前,檢查與該庫相關(guān)聯(lián)的跟蹤位,并將對應(yīng)于所設(shè)置的跟蹤位的當(dāng)前狀態(tài)插入到該庫中所述圖元之前。然后清除用于該庫的跟蹤位。
      如下面所詳細討論的,本發(fā)明優(yōu)化了區(qū)帶渲染支持,因為它不再需要在驅(qū)動程序軟件中跟蹤狀態(tài)改變,因而提高了性能并降低了驅(qū)動程序復(fù)雜度。通過只支持動態(tài)狀態(tài)變量的片上(on-chip)存儲,同時提供改變?nèi)魏螤顟B(tài)變量的方式,并且減少對于每個庫的跟蹤位的片上存儲(一般每個庫存儲4個跟蹤位),最小化了入庫狀態(tài)管理的成本。在一個典型的實施例中,每個庫的片上存儲被減少到了只有4個跟蹤位。另外,對狀態(tài)改變帶寬和區(qū)域的需求也通過下述方式而減少了(a)背靠背地壓縮子分組內(nèi)的狀態(tài)改變,(b)消除對非必需的紋理混合階段和紋理圖狀態(tài)數(shù)據(jù)的更新,以及(c)提供用于狀態(tài)子分組改變的優(yōu)化(并且低延遲的)指令。而且,還降低了管理間接存儲的狀態(tài)陣列和/或緩存的成本和復(fù)雜度。
      在詳細說明中,給出了大量的具體細節(jié)以提供對本發(fā)明的充分理解。但是,本領(lǐng)域的技術(shù)人員將理解到,沒有這些具體細節(jié)也可以實現(xiàn)本發(fā)明。此外,沒有詳細地描述公知的方法、過程、組件和電路,以免模糊本發(fā)明。
      接下來的詳細描述中的某些部分按照對計算機中數(shù)據(jù)位或二進制信號的操作的算法和符號表示來展現(xiàn)。這些算法描述和表示是數(shù)據(jù)處理領(lǐng)域的技術(shù)人員用來向本領(lǐng)域其他技術(shù)人員傳達其工作內(nèi)容的手段。算法在這里(以及一般地)被認(rèn)為是產(chǎn)生所期望結(jié)果的自相一致的步驟序列。這些步驟包括對物理量的物理操縱。雖然不是必需的,但通常這些量采用能被存儲、傳送、組合、比較或者操縱的電信號或磁信號的形式。為通用起見,將這些信號稱為位、值、元素、符號、字符、項、數(shù)等常常被證明是方便的。但是應(yīng)該理解,所有這些以及類似的術(shù)語將與合適的物理量相關(guān)聯(lián),并僅僅是應(yīng)用到這些量上的方便的標(biāo)記。除非在后面的討論中專門給出了相反的陳述,應(yīng)該認(rèn)識到在整個說明書中,采用諸如“處理”或“計算(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í)行這里所描述的過程。還可認(rèn)為本發(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的圖形和存儲器控制器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通信,以按這里所描述的來操縱數(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ù)。可選的緩存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與顯示設(shè)備114通信,以顯示圖形控制器104渲染或者處理的圖像,從而向用戶顯示所渲染或處理的圖像。顯示設(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的陣列相比較來產(chǎn)生指令庫128。于是,當(dāng)接收到圖元162時,本發(fā)明就確定每個圖元162所相交的(多個)區(qū)帶164,并將圖元指令復(fù)制到與這些區(qū)帶164中的每個區(qū)帶相關(guān)聯(lián)的庫128中。將圖元(及其屬性)162分配到區(qū)帶164的過程稱為“入庫”。“庫”128指的是用于每個區(qū)帶的抽象緩沖區(qū)——其中庫128一般被實現(xiàn)為一系列指令批處理緩沖區(qū)124。入庫過程執(zhí)行必要的計算來確定哪些圖元162位于哪些區(qū)帶164中,并且可由專用硬件和/或軟件實現(xiàn)來執(zhí)行。在一個典型的實現(xiàn)中,驅(qū)動器122為與圖元162相交的每個區(qū)帶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以產(chǎn)生最終的圖像,其中每個場景都一次一個區(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)工作,因此它能夠?qū)⒂糜谡麄€區(qū)帶164的幀緩沖區(qū)內(nèi)容保存在渲染緩存110中。區(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ù)人員將認(rèn)識到也可以使用軟件或軟件加硬件的入庫器。圖形入庫引擎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ù)物理存儲器頁面中的串聯(lián)的多個命令緩沖區(qū)134組成。庫列表是包括每個庫132的緩沖區(qū)134的列表。頁面被初始分配到BMP 140。用所述頁面的頁號來初始化庫指針列表130,庫指針列表130將寫指針存儲到庫列表132中。
      圖形入庫引擎126還通過對包含在場景輸入列表124中的關(guān)聯(liá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示出了當(dāng)前的動態(tài)狀態(tài)子分組172和逐庫跟蹤位174的實施例170的框圖。將動態(tài)狀態(tài)劃分成子分組172提供了跟蹤動態(tài)狀態(tài)變量的改變并對之進行改變的一定級別的粒度。在典型的實施例中,將動態(tài)狀態(tài)變量集合劃分成4個子分組172。本領(lǐng)域內(nèi)的技術(shù)人員將會認(rèn)識到4個子分組172對于在此所示出和討論的配置來說是有優(yōu)勢的,然而,本發(fā)明也可利用以任意方式配置的任意數(shù)量的子分組172。
      每個庫128(例如庫0、庫1、庫2……庫n)都與多個跟蹤位174相關(guān)聯(lián),每個庫位都與特定的動態(tài)狀態(tài)子分組172相關(guān)聯(lián)。當(dāng)“設(shè)置”特定庫128的跟蹤位174時,它表示自上一次將圖元162輸出到庫128之后,該子分組172中的(并且是用于所述特定庫128例如庫n的)某個狀態(tài)變量已經(jīng)改變了。相反,“被清除”的跟蹤位174表示自上一次將圖元162輸出到庫128之后,用于該庫128的關(guān)聯(lián)動態(tài)狀態(tài)子分組172沒有改變。在典型的實現(xiàn)中,使用每個庫4比特的“跟蹤位”向量174來跟蹤所述4個狀態(tài)子分組172的改變。“紋理圖”、“紋理混合”、“基本狀態(tài)”和“慢狀態(tài)”子分組中的每一個一般都包括512或1024個庫。對于512個庫,一共是2K比特(每個庫4比特×512個庫)。對于1024個庫,一共是4K比特(每個庫4比特×1024個庫)。
      一開始“設(shè)置”所有的跟蹤位174,以用動態(tài)狀態(tài)的完全的補來初始化每個庫128。具體地說,在將圖元162置入庫128中之前,檢查與該庫128相關(guān)聯(lián)的跟蹤位174,并將對應(yīng)于所設(shè)置的跟蹤位174的當(dāng)前狀態(tài)置入庫128中該圖元162之前。然后,清除用于該庫128的跟蹤位174。在典型的實施例中,許多跟蹤位174并不經(jīng)常改變。然而,必需標(biāo)識出位174當(dāng)中任何隨時間而改變了的位并將之發(fā)送(或?qū)⒁粋€更大組的改變了的位發(fā)送)到庫128,以使得在光柵化(rasterization)期間可以保持三角形的精確狀態(tài)。
      具體地說,圖4所示的狀態(tài)組172包括(1)“基本狀態(tài)”子分組176——與基本狀態(tài)跟蹤位陣列相關(guān)聯(lián)的狀態(tài)變量包括但不局限于頂點緩沖區(qū)、頂點格式、設(shè)置、紋理象素(texel)流和象素流水線狀態(tài)變量。所述狀態(tài)變量通常被設(shè)置成固定的字序列。在一個特定的實施例中,基本狀態(tài)變量的任意改變都需要將所有的字發(fā)送給所需的庫128,盡管本領(lǐng)域內(nèi)的技術(shù)人員將會認(rèn)識到也可使用其它的配置。在另一個實施例中,對所有的庫128或“打開的”(open)庫128的一個較小子集實現(xiàn)了更為粒度化的跟蹤。
      (2)“紋理圖”子分組178——與紋理圖狀態(tài)跟蹤位陣列相關(guān)聯(lián)的狀態(tài)變量包括但不局限于大多數(shù)紋理圖參數(shù)、立方圖表面激活因子以及紋理濾波器參數(shù)。狀態(tài)變量由圖形入庫引擎126作為指令的一部分而輸出。當(dāng)發(fā)現(xiàn)特定的庫128的紋理圖狀態(tài)跟蹤位已設(shè)置時,圖形入庫引擎126將只輸出與當(dāng)前的上下文設(shè)置當(dāng)前所需的紋理圖相關(guān)聯(lián)的字?!爱?dāng)前所使用的”圖由圖形入庫引擎126通過下述操作來確定檢查已激活的紋理混合階段,查看哪些紋理象素流需要作為輸入,然后檢查哪些紋理圖與那些所需的紋理象素流相關(guān)聯(lián)。
      (3)“紋理混合”子分組180——與紋理混合狀態(tài)跟蹤位陣列相關(guān)聯(lián)的狀態(tài)變量包括但不局限于用來控制紋理圖混合階段的狀態(tài)變量。在典型的實現(xiàn)中,所述狀態(tài)變量包括全局控制和紋理混合顏色α,即用于控制1到4個紋理圖混合階段單元的控制階段參數(shù)。這些狀態(tài)變量由圖形入庫引擎126作為指令的一部分而輸出。當(dāng)發(fā)現(xiàn)特定庫128的紋理混合狀態(tài)跟蹤位已設(shè)置時,圖形入庫引擎126將只輸出從“已激活的紋理混合階段”導(dǎo)出的狀態(tài)變量的當(dāng)前狀態(tài)所需要的那些字。
      (4)“慢狀態(tài)”子分組182——與慢狀態(tài)跟蹤位陣列相關(guān)聯(lián)的狀態(tài)變量是“慢狀態(tài)指針”。慢狀態(tài)指針間接地控制未包含在其它狀態(tài)子分組例如基本、紋理混合和紋理圖狀態(tài)子分組176、178和180中的任意狀態(tài)指針。在典型的實施例中,將低級狀態(tài)改變和/或不經(jīng)常改變的指令置入慢狀態(tài)緩沖區(qū)166中,并且只將所述指針通過指令167傳遞到那些慢狀態(tài)緩沖區(qū)166中。
      “慢狀態(tài)”組包含其余未流水線化的(以及少量低頻度的流水線化的)狀態(tài)變量?!奥隣顟B(tài)”狀態(tài)變量的改變不直接發(fā)送給圖形入庫引擎126。相反,如圖2所示,如下構(gòu)建包含這些變量的“初始值+改變量”的慢狀態(tài)緩沖區(qū)166,以使得指向這些慢狀態(tài)緩沖區(qū)166之一內(nèi)部的單個指針就足以定義所有的“慢”狀態(tài)變量的當(dāng)前狀態(tài)。按照這種方式,只有該慢狀態(tài)指針需要被發(fā)送到圖形入庫引擎126。該慢狀態(tài)指針的改變將如所需地被置入庫128中,并且在渲染期間將啟動對慢狀態(tài)緩沖區(qū)166的讀,以更新慢狀態(tài)變量。圖形渲染引擎136將執(zhí)行慢狀態(tài)“指針”以前的值和新值之間的緩沖指令,盡管所述執(zhí)行只發(fā)生在所述新值落在所述以前的值和所渲染的頁面的末端之間的情況下。否則,圖形渲染引擎136將執(zhí)行從新慢狀態(tài)指針?biāo)钡降捻撁娴捻敳块_始,直到(但不包括)該新慢狀態(tài)指針指定的雙字(Dword)為止的指令。從而,這將使得所有的慢狀態(tài)指針被設(shè)置為它們的初始值,然后應(yīng)用所有的改變量狀態(tài)改變,直到(但不包括)所述新慢狀態(tài)指針?biāo)付ǖ碾p字。
      具體地說,一開始,將稱為場景輸入列表124的圖形圖元和狀態(tài)設(shè)置指令流應(yīng)用到與圖形入庫引擎126相關(guān)聯(lián)的圖形入庫引擎環(huán)形緩沖區(qū)125。圖形入庫引擎126解析場景輸入列表124,并確定每個圖元162與哪些164相交。
      圖形入庫引擎126通過解析包含在場景輸入列表124中的關(guān)聯(lián)狀態(tài)設(shè)置指令來維護當(dāng)前的圖形狀態(tài)。在將圖元命令置入任何給定的庫128中之前,圖形入庫引擎126將狀態(tài)設(shè)置指令167置入庫128中該圖元命令之前。
      慢狀態(tài)緩沖區(qū)166存儲慢狀態(tài)變量的初始值和改變量狀態(tài)改變。指向這些慢狀態(tài)緩沖區(qū)166之一內(nèi)部的單個指針就足以定義所有“慢”狀態(tài)變量的當(dāng)前狀態(tài)。慢狀態(tài)緩沖區(qū)166可位于狀態(tài)存儲器108或?qū)S么鎯ζ鲀?nèi)部。在典型的實施例中,低級狀態(tài)改變和/或不經(jīng)常改變的指令被置入慢狀態(tài)緩沖區(qū)166中,并且入庫器(binner)指針只通過指令167傳遞到那些慢狀態(tài)緩沖區(qū)中。一旦將所有的圖元和包含慢狀態(tài)指針的狀態(tài)指令入庫,就依次一個區(qū)帶164地對場景進行第二此掃描。提供了所述庫128來生成最終的圖像,每個場景都是一次一個區(qū)帶164地渲染。在渲染期間,圖形渲染引擎136基于入庫的慢狀態(tài)指針來啟動對慢狀態(tài)緩沖區(qū)166的所需的讀,以更新慢狀態(tài)指針。圖形渲染引擎136將執(zhí)行慢狀態(tài)“指針”先前的值和新值之間的緩沖指令。
      圖5示出了用于在將與圖元162相關(guān)聯(lián)的圖元指令置入庫128中之前輸出任何所需的狀態(tài)改變(步驟192-208)以及用于檢查改變量狀態(tài)改變并更新狀態(tài)和逐庫跟蹤位(步驟212-222)的實施例190的流程圖。所述優(yōu)化最小化了不必要的狀態(tài)復(fù)制。
      具體地說,在渲染期間,在將圖元指令置入特定的庫128之前,圖形入庫引擎126確保該特定庫128的狀態(tài)至少在可正確地渲染圖元162之前是最新的。這意味著在將該圖元指令輸出到所述庫128之前,不需要輸出當(dāng)前未使用的狀態(tài)。例如,被禁止的紋理混合階段設(shè)置以及未使用的紋理圖設(shè)置不需要輸出到所述庫128。
      如果遇到了圖元162(步驟192),則本發(fā)明確定該圖元162與哪些區(qū)帶164相交(步驟194)。對于和所相交的區(qū)帶164相關(guān)聯(lián)的每個庫128(步驟196),檢查每個子分組跟蹤位174(步驟198)。如果設(shè)置了特定子分組的跟蹤位174(步驟199),則將該特定子分組172的當(dāng)前值輸出到所述庫128(步驟200)。當(dāng)與一個跟蹤位174相關(guān)聯(lián)的狀態(tài)子分組172變?yōu)椤耙咽褂谩睍r,該跟蹤位174被認(rèn)為是“已設(shè)置的”。
      例如,一開始可針對庫0而檢查基本狀態(tài)子分組176的子分組跟蹤位177。然后清除用于該特定庫128的子分組跟蹤位174(步驟202)。否則,如果未設(shè)置用于特定子分組的跟蹤位,則不將該特定子分組172的任何當(dāng)前值輸出給所述庫128(步驟201)。
      然后檢查所述庫128的下一個子分組跟蹤位174,并且對該庫128中的每個位174重復(fù)步驟198、200和202(步驟204)。例如,然后可檢查用于庫0的紋理圖子分組178的跟蹤位179。
      在已經(jīng)為特定的庫128檢查了與子分組172相關(guān)聯(lián)的所有跟蹤位174之后,將所述圖元指令輸出到庫128(步驟206)。然后檢查用于下一個庫128的子分組172的跟蹤位174(步驟208),所述下一個庫128與和圖元162所相交的區(qū)帶164相關(guān)聯(lián)。
      例如,參考圖4,如果與庫0相關(guān)聯(lián)的基本狀態(tài)跟蹤位177表明了改變,則基本狀態(tài)子分組176的當(dāng)前值被輸出到庫0。然后清除基本狀態(tài)跟蹤位177。如果基本狀態(tài)跟蹤位177未表明變化,則不向庫0輸出值。
      然后檢查用于下一子分組172的跟蹤位174。例如,如果用于庫0的紋理圖狀態(tài)跟蹤位179表明了改變,則輸出紋理圖狀態(tài)178的當(dāng)前值。然后清除紋理圖狀態(tài)跟蹤位179。如果紋理圖狀態(tài)跟蹤位179未表明改變,則不向庫0輸出值。
      類似地,如果用于庫0的紋理混合狀態(tài)跟蹤位181表明了改變,則輸出紋理混合狀態(tài)180的當(dāng)前值。然后清除紋理混合狀態(tài)跟蹤位181。如果紋理混合狀態(tài)跟蹤位181未表明改變,則不向庫0輸出值。
      如果用于庫0的慢狀態(tài)跟蹤位183表明了改變,則向庫0輸出慢狀態(tài)指針。然后清除慢狀態(tài)跟蹤位183。如果慢狀態(tài)跟蹤位183未表明改變,則不向庫0輸出慢狀態(tài)指針。
      因此,跟蹤位174消除了使用失效資源的可能性。例如,如果(a)改變了當(dāng)前未使用的紋理圖,(b)繪制了圖元162(清除了各紋理圖跟蹤位179而未輸出未使用的狀態(tài)),并且(c)改變了狀態(tài)以使得現(xiàn)在“原封不動”地使用紋理圖(即圖本身未改變),那么,如果沒有任何特殊的處理,失效的紋理圖將會不正確地使用。在本發(fā)明中,當(dāng)(由于紋理圖狀態(tài)的狀態(tài)改變)紋理圖變?yōu)椤耙咽褂谩睍r,設(shè)置紋理圖跟蹤位179,因而消除了使用失效資源的可能性。
      使用了狀態(tài)設(shè)置圖形指令的優(yōu)化版本來獨立地更新每個動態(tài)狀態(tài)變量子分組172。通過將這些優(yōu)化的指令包含在庫128中,大大減小了讀間接狀態(tài)數(shù)據(jù)的復(fù)雜度和延遲,因而改進了性能并降低了成本。具體地說,圖5示出了檢查改變量狀態(tài)改變以及更新狀態(tài)和逐庫跟蹤位174(步驟212-222)。圖形入庫引擎126通過逐個庫128以及逐個子分組172地維護并跟蹤狀態(tài)改變,防止了將所有狀態(tài)改變不必要地廣播到所有庫128。僅在將圖元指令被置入庫128之前才更新該庫128的狀態(tài),這是很有優(yōu)勢的。在圖元指令被入庫之間發(fā)生在同一狀態(tài)子分組172內(nèi)的多個改變被壓縮成輸出到庫128的一個子分組改變。
      實現(xiàn)步驟212-222,以在場景捕獲階段使用所存儲的當(dāng)前的動態(tài)狀態(tài)和逐庫跟蹤位174來有效地管理狀態(tài)改變。通過逐個庫128并且逐個狀態(tài)組172地跟蹤狀態(tài)改變,圖形入庫引擎126還將只更新下述狀態(tài)子分組172,所述子分組172在上一次將圖元162置入特定的相交庫128之后對于該庫128已經(jīng)改變了。
      一開始,如果遇到了狀態(tài)改變(步驟212),則確定對應(yīng)的動態(tài)狀態(tài)子分組172(步驟214)。然后確定該特定狀態(tài)變量的先前值(步驟216) 。
      如果該狀態(tài)的新值不同于該狀態(tài)的當(dāng)前值(步驟218),則設(shè)置用于庫128的對應(yīng)的子分組跟蹤位174(步驟220)。然后用該狀態(tài)的新值來更新所述狀態(tài)(步驟222)。
      慢狀態(tài)指針如果狀態(tài)改變修改了“慢狀態(tài)指針”,則設(shè)置用于每個庫(i)的慢狀態(tài)跟蹤位(i)。將所述狀態(tài)改變應(yīng)用到每個受影響的子分組的當(dāng)前狀態(tài)。
      基本狀態(tài)例如,如果狀態(tài)改變修改了“基本狀態(tài)”,則設(shè)置用于每個庫(i)的基本狀態(tài)跟蹤位(i)。
      紋理圖如果狀態(tài)改變使得任意所需的紋理圖(0…3)變?yōu)橐言O(shè)置,則設(shè)置用于每個庫(i)的紋理圖狀態(tài)跟蹤位(i)。如果狀態(tài)改變修改了紋理圖(0…3),則設(shè)置用于每個庫(i)的紋理圖狀態(tài)跟蹤位(i)。
      紋理混合如果狀態(tài)改變修改了所需的“顏色因子”,則設(shè)置用于每個庫(i)的紋理溫和狀態(tài)跟蹤位(i)。如果狀態(tài)改變增加了已激活的紋理混合階段的數(shù)量,則設(shè)置用于每個庫(i)的紋理混合狀態(tài)跟蹤位(i)。
      圖6示出了對具體地檢測哪些(如果有的話)與特定紋理圖或紋理混合階段相關(guān)聯(lián)的狀態(tài)需要被輸出到庫128這一操作進行優(yōu)化的處理的實施例230的流程圖。具體地說,只有當(dāng)發(fā)現(xiàn)與特定紋理圖或紋理混合階段相關(guān)聯(lián)的子分組跟蹤位174已設(shè)置時,才將與該特定紋理圖或紋理混合階段相關(guān)聯(lián)的狀態(tài)信息輸出到庫128。只有與已使用的紋理圖或紋理混合階段相關(guān)聯(lián)的信息被輸出到庫128。這通過確保只將新需要的狀態(tài)或圖輸出到相交的庫,防止了失效的紋理混合或紋理圖被使用。當(dāng)(a)改變了與當(dāng)前使用的圖/階段相關(guān)聯(lián)的狀態(tài)時,或者當(dāng)(b)通過改變成另一個狀態(tài)變量,以前未使用的圖/階段變成“已使用”時,設(shè)置子分組跟蹤位174。例如,對于后一情形,由于相關(guān)聯(lián)的狀態(tài)改變(例如基本狀態(tài)改變),紋理混合或紋理圖變?yōu)椤耙咽褂谩薄?br> 對于圖元162與之相交的每一個庫128(步驟232),檢查與該庫128相關(guān)聯(lián)的紋理圖或混合子分組跟蹤位174。如果設(shè)置了跟蹤位174(步驟240),則檢查所述圖/階段(步驟238-244)。如果紋理圖/階段中存在改變(步驟240),則將紋理圖/階段輸出到庫128(步驟242)。然后檢查下一個紋理圖/階段(步驟244)。例如,如果設(shè)置了紋理混合狀態(tài)跟蹤位(i)(步驟236),則將已改變的(多個)特定紋理混合階段輸出到庫128。具體地說,如果紋理混合階段0改變了,則輸出紋理混合狀態(tài)1。如果紋理混合階段1改變了,則輸出紋理混合狀態(tài)2。如果紋理混合階段2已經(jīng)到達其最后階段,則輸出紋理混合階段3,等等。然后清除紋理混合狀態(tài)跟蹤位(步驟246)。
      如果設(shè)置了紋理圖狀態(tài)跟蹤位(i)(步驟232),則將已改變的(多個)特定紋理圖輸出到庫128。具體地說,如果紋理圖0改變了,則輸出紋理圖0。如果紋理圖[1]改變了,則輸出紋理圖1。如果紋理圖[2]改變了,則輸出紋理圖2。如果紋理圖[3]改變了,則輸出紋理圖3,等等。然后清除紋理圖狀態(tài)跟蹤位(步驟246)。
      如果跟蹤位174未表明改變,則繪制圖元162,清除各紋理混合狀態(tài)或紋理圖/階段跟蹤位,而不將不必要的狀態(tài)輸出到庫128。
      現(xiàn)在已經(jīng)根據(jù)專利法的需求描述了本發(fā)明,本領(lǐng)域技術(shù)人員將理解如何對本發(fā)明進行改變和改進,以滿足他們的具體要求或情況??梢赃M行這種改變和改進,而不偏離所附權(quán)利要求中提出的本發(fā)明的范圍和精神。
      權(quán)利要求
      1.一種用于管理狀態(tài)變量以渲染圖元的方法,包括定義多個存儲器區(qū)域,以存儲與所述圖元相關(guān)聯(lián)的指令和當(dāng)前狀態(tài)信息;定義與所述圖元相關(guān)聯(lián)的狀態(tài)變量;將狀態(tài)變量分類成多個子分組;將所述多個存儲器區(qū)域中的每一個存儲器區(qū)域與多個跟蹤位相關(guān)聯(lián),其中每個跟蹤位都與一個子分組以及所述多個存儲器區(qū)域之一相關(guān)聯(lián);響應(yīng)于自先前將所述圖元指令輸出到所述存儲器區(qū)域之后的狀態(tài)變量的改變,設(shè)置所述跟蹤位;以及響應(yīng)于設(shè)置所述跟蹤位,將與所述子分組相關(guān)聯(lián)的當(dāng)前狀態(tài)信息輸出到所述多個存儲器區(qū)域之一中。
      2.如權(quán)利要求1所述的方法,還包括在已將所述當(dāng)前狀態(tài)信息輸出到所述多個存儲器區(qū)域之一后,清除所述跟蹤位。
      3.如權(quán)利要求1所述的方法,其中將狀態(tài)變量分類成多個子分組還包括對與基本狀態(tài)功能相關(guān)聯(lián)的狀態(tài)變量進行分類。
      4.如權(quán)利要求1所述的方法,其中將狀態(tài)變量分類成多個子分組還包括對與紋理圖功能相關(guān)聯(lián)的狀態(tài)變量進行分類。
      5.如權(quán)利要求1所述的方法,其中將狀態(tài)變量分類成多個子分組還包括對與紋理混合功能相關(guān)聯(lián)的狀態(tài)變量進行分類。
      6.如權(quán)利要求1所述的方法,其中將狀態(tài)變量分類成多個子分組還包括對與慢狀態(tài)功能相關(guān)聯(lián)的狀態(tài)變量進行分類。
      7.如權(quán)利要求1所述的方法,其中,“響應(yīng)于自先前將所述圖元指令輸出到所述存儲器區(qū)域之后的狀態(tài)變量的改變,設(shè)置所述跟蹤位”還包括確定是否已發(fā)生狀態(tài)改變;確定哪個子分組與所述狀態(tài)改變相關(guān)聯(lián);確定所述狀態(tài)變量的新值和先前值;以及如果所述新值和先前值不同,則設(shè)置對應(yīng)的子分組跟蹤位。
      8.如權(quán)利要求1所述的方法,還包括定義多個附加存儲器區(qū)域,以存儲狀態(tài)信息;定義對所述多個附加存儲器區(qū)域的引用;以及將所選擇的狀態(tài)組信息存儲到所述多個附加存儲器區(qū)域。
      9.如權(quán)利要求8所述的方法,其中,“響應(yīng)于設(shè)置所述跟蹤位,將與所述子分組相關(guān)聯(lián)的當(dāng)前狀態(tài)信息輸出到所述多個存儲器區(qū)域之一中”還包括當(dāng)設(shè)置所述跟蹤位時,將與所述子分組相關(guān)聯(lián)的引用輸出到所述多個存儲器區(qū)域之一中;以及基于所述引用,在渲染期間獲取存儲在所述多個附加存儲器區(qū)域之一中的被引用的信息。
      10.如權(quán)利要求9所述的方法,其中,“將所選擇的狀態(tài)組信息存儲到所述多個附加存儲器區(qū)域中”還包括將與慢狀態(tài)功能相關(guān)聯(lián)的狀態(tài)變量存儲到所述多個附加存儲器區(qū)域中。
      11.如權(quán)利要求10所述的方法,其中,“定義對所述多個附加存儲器區(qū)域的引用”還包括定義指向其中存儲了慢狀態(tài)信息的所述附加存儲器區(qū)域的指針。
      12.一種用于渲染包含圖元的場景的裝置,包括多個入庫存儲器區(qū)域,其與圖元所相交的區(qū)域相關(guān)聯(lián);跟蹤存儲器區(qū)域,用于存儲下述狀態(tài)變量的指示符,所述狀態(tài)變量自先前將圖元指令輸出到所述存儲器區(qū)域之后已經(jīng)受到影響;入庫引擎,用于響應(yīng)于所述跟蹤指示符,將狀態(tài)變量的當(dāng)前狀態(tài)信息入庫;以及渲染引擎,用于渲染存儲在所述存儲器區(qū)域中的當(dāng)前信息。
      13.如權(quán)利要求12所述的裝置,其中所述當(dāng)前信息包括自先前將圖元指令輸出到所述存儲器區(qū)域之后已經(jīng)改變的狀態(tài)變量。
      14.如權(quán)利要求12所述的裝置,其中所述當(dāng)前信息包括引用。
      15.如權(quán)利要求13所述的裝置,其中所述狀態(tài)變量與至少一個狀態(tài)組相關(guān)聯(lián)。
      16.如權(quán)利要求15所述的裝置,其中所述至少一個狀態(tài)組包括基本狀態(tài)功能。
      17.如權(quán)利要求15所述的裝置,其中所述至少一個狀態(tài)組包括紋理圖功能。
      18.如權(quán)利要求15所述的裝置,其中所述至少一個狀態(tài)組包括紋理混合功能。
      19.如權(quán)利要求15所述的裝置,其中所述至少一個狀態(tài)組包括慢狀態(tài)功能。
      20.如權(quán)利要求12所述的裝置,其中所述跟蹤信息包括多個跟蹤位,其中每個跟蹤位都與一個入庫存儲器區(qū)域和一個子分組相關(guān)聯(lián)。
      21.如權(quán)利要求12所述的裝置,其中,用于存儲自先前將圖元指令輸出到所述存儲器區(qū)域之后已受到影響的狀態(tài)變量的指示符的跟蹤存儲器區(qū)域還包括用于存儲自先前將圖元指令輸出到所述存儲器區(qū)域之后已改變的狀態(tài)變量的指示符的跟蹤存儲器區(qū)域。
      22.如權(quán)利要求12所述的裝置,其中用于存儲自先前將圖元指令輸出到所述存儲器區(qū)域之后已受到影響的狀態(tài)變量的指示符的跟蹤存儲器區(qū)域還包括用于存儲自先前將圖元指令輸出到所述存儲器區(qū)域之后已使用的狀態(tài)變量的指示符的跟蹤存儲器區(qū)域。
      23.如權(quán)利要求14所述的裝置,還包括多個附加存儲器區(qū)域。
      24.如權(quán)利要求23所述的裝置,其中所述多個附加存儲器區(qū)域存儲慢狀態(tài)變量。
      25.如權(quán)利要求24所述的裝置,其中所述引用包括指向所述附加存儲器區(qū)域內(nèi)的指針。
      26.如權(quán)利要求25所述的裝置,其中所述入庫引擎響應(yīng)于所述跟蹤指示符,將所述引用入庫到所述多個入庫存儲器區(qū)域之一中。
      27.如權(quán)利要求26所述的裝置,其中所述渲染引擎利用所述引用來從所述多個附加存儲器區(qū)域中的至少一個區(qū)域中獲取慢狀態(tài)信息。
      28.一種機器可讀介質(zhì),其中存儲有多個可被處理器執(zhí)行的機器可讀指令,以管理用于渲染圖元的狀態(tài),所述機器可讀指令包括定義多個存儲器區(qū)域,以存儲與所述圖元相關(guān)聯(lián)的指令和當(dāng)前狀態(tài)信息的指令;定義與所述圖元相關(guān)聯(lián)的狀態(tài)變量的指令;將狀態(tài)變量分類成多個子分組的指令;將所述多個存儲器區(qū)域中的每一個存儲器區(qū)域與多個跟蹤位相關(guān)聯(lián)的指令,其中每個跟蹤位都與一個子分組以及所述多個存儲器區(qū)域之一相關(guān)聯(lián);響應(yīng)于自先前將所述圖元指令輸出到所述存儲器區(qū)域之后的狀態(tài)變量的改變,設(shè)置所述跟蹤位的指令;以及響應(yīng)于設(shè)置所述跟蹤位,將與所述子分組相關(guān)聯(lián)的當(dāng)前狀態(tài)信息輸出到所述多個存儲器區(qū)域之一中的指令。
      29.如權(quán)利要求28所述的機器可讀介質(zhì),還包括在已將所述當(dāng)前狀態(tài)信息輸出到所述多個存儲器區(qū)域之一后,清除所述跟蹤位的指令。
      30.如權(quán)利要求28所述的機器可讀介質(zhì),其中,將狀態(tài)變量分類成多個子分組的指令還包括對與基本狀態(tài)功能相關(guān)聯(lián)的狀態(tài)變量進行分類的指令。
      31.如權(quán)利要求28所述的機器可讀介質(zhì),其中,將狀態(tài)變量分類成多個子分組的指令還包括對與紋理圖功能相關(guān)聯(lián)的狀態(tài)變量進行分類的指令。
      32.如權(quán)利要求28所述的機器可讀介質(zhì),其中,將狀態(tài)變量分類成多個子分組的指令還包括對與紋理混合功能相關(guān)聯(lián)的狀態(tài)變量進行分類的指令。
      33.如權(quán)利要求28所述的機器可讀介質(zhì),其中,將狀態(tài)變量分類成多個子分組的指令還包括對與慢狀態(tài)功能相關(guān)聯(lián)的狀態(tài)變量進行分類的指令。
      34.如權(quán)利要求28所述的機器可讀介質(zhì),其中,響應(yīng)于自先前將所述圖元指令輸出到所述存儲器區(qū)域之后的狀態(tài)變量的改變,設(shè)置所述跟蹤位的指令還包括確定是否已發(fā)生狀態(tài)改變的指令;確定哪個子分組與所述狀態(tài)改變相關(guān)聯(lián)的指令;確定所述狀態(tài)變量的新值和先前值的指令;以及如果所述新值和先前值不同,則設(shè)置對應(yīng)的子分組跟蹤位的指令。
      35.如權(quán)利要求28所述的機器可讀介質(zhì),還包括定義多個附加存儲器區(qū)域,以存儲狀態(tài)信息的指令;定義對所述多個附加存儲器區(qū)域的引用的指令;以及將所選擇的狀態(tài)組信息存儲到所述多個附加存儲器區(qū)域的指令。
      36.如權(quán)利要求35所述的機器可讀介質(zhì),其中,響應(yīng)于設(shè)置所述跟蹤位,將與所述子分組相關(guān)聯(lián)的當(dāng)前狀態(tài)信息輸出到所述多個存儲器區(qū)域之一中的指令還包括當(dāng)設(shè)置所述跟蹤位時,將與所述子分組相關(guān)聯(lián)的引用輸出到所述多個存儲器區(qū)域之一中的指令;以及基于所述引用,在渲染期間獲取存儲在所述多個附加存儲器區(qū)域之一中的被引用的信息的指令。
      37.如權(quán)利要求36所述的機器可讀介質(zhì),其中,將所選擇的狀態(tài)組信息存儲到所述多個附加存儲器區(qū)域中的指令還包括將與慢狀態(tài)功能相關(guān)聯(lián)的狀態(tài)變量存儲到所述多個附加存儲器區(qū)域中的指令。
      38.如權(quán)利要求37所述的機器可讀介質(zhì),其中,定義對所述多個附加存儲器區(qū)域的引用的指令還包括定義指向其中存儲了慢狀態(tài)信息的所述附加存儲器區(qū)域的指針的指令。
      全文摘要
      本發(fā)明提供了一種機制,用于利用硬件狀態(tài)入庫邏輯,并與用以生成圖形化圖像的基于平鋪層的區(qū)帶渲染方法結(jié)合使用,從而跟蹤并管理圖形狀態(tài)。硬件中只維護動態(tài)狀態(tài)變量的當(dāng)前值。動態(tài)狀態(tài)變量包括但不局限于被認(rèn)為可能在圖元之間改變的狀態(tài)變量。將動態(tài)狀態(tài)變量的集合劃分成子分組。每個狀態(tài)分組都和逐庫跟蹤位陣列相關(guān)聯(lián)。只要遇到狀態(tài)改變,就為所有的庫設(shè)置對應(yīng)于相關(guān)聯(lián)的狀態(tài)組的跟蹤位。在將圖元置于庫中之前,檢查與該庫相關(guān)聯(lián)的跟蹤位,并將對應(yīng)于所設(shè)置的跟蹤位的當(dāng)前狀態(tài)插入到該庫中所述圖元之前。然后清除用于該庫的跟蹤位。
      文檔編號G06T15/00GK1610926SQ02826465
      公開日2005年4月27日 申請日期2002年12月12日 優(yōu)先權(quán)日2001年12月31日
      發(fā)明者彼得·多伊爾 申請人:英特爾公司
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點贊!
      1