專利名稱:用于透明地實(shí)施z壓縮的機(jī)制的制作方法
背景技術(shù):
用于生成3D圖像的標(biāo)準(zhǔn)方法從代表圖像內(nèi)各個對象的面的基元組開始?;湫偷貫槎噙呅危T如可以被平鋪以形成一個面的三角形或矩形。具有中等復(fù)雜形狀的對象可能需要成千的基元來表示其面,并且含有多個對象的圖像可能需要數(shù)萬或是甚至幾十萬的基元。必須處理對于這些基元中的每一個基元的深度,顏色,紋理,照度或方位數(shù)據(jù),并把它們轉(zhuǎn)換成像素級數(shù)據(jù)以在顯示設(shè)備上生成3D圖像。
通常通過包括幾何或建立階段以及再現(xiàn)或掃描轉(zhuǎn)換階段的3D流水線來實(shí)施圖像處理。在幾何階段中,各個基元的方位以及任何照射該基元的光源的位置都是根據(jù)一參照坐標(biāo)系統(tǒng)而被確定并且由與該基元的頂點(diǎn)有關(guān)的矢量來規(guī)定。該頂點(diǎn)數(shù)據(jù)隨后被變換到視圖或攝像坐標(biāo)系統(tǒng)并且被旋轉(zhuǎn)到期望的方位上。
在掃描轉(zhuǎn)換階段中,用于圖像內(nèi)每個對象的圖形基元被轉(zhuǎn)換到提供3D圖像的2D表現(xiàn)的一個單獨(dú)的像素值組。組成2D圖像的像素一般地存儲在從中生成顯示的幀緩沖器的項(xiàng)中。用于填充幀緩沖器的公知裝置通過內(nèi)插對于一個基元的變換頂點(diǎn)來為該基元的各個位置生成顏色值。由于基元位置被規(guī)定在3D空間,因此多個基元位置可以映射到該2D顯示面的相同的幀緩沖器項(xiàng)(像素)內(nèi)。根據(jù)其是否在最終的圖像內(nèi)可見,為基元位置所生成的顏色值存儲在其映射到的該幀緩沖器項(xiàng)內(nèi)或是被廢棄。在此階段期間,還可以為基元確定紋理數(shù)據(jù)。
一種用于確定各個基元的哪些位置是在最終的圖像內(nèi)可見的技術(shù)采用了z緩沖器。該z緩沖器包括用于幀緩沖器內(nèi)每個像素的一個項(xiàng)。每個z緩沖器項(xiàng)被初始化為0或其它參考值。通常,該參考值表示該圖像的后剪帖平面。在掃描轉(zhuǎn)換期間,為基元內(nèi)的每個位置確定z值并且與該基元位置所映射到的該z緩沖器中的項(xiàng)進(jìn)行比較。如果z緩沖器中的該值比為相應(yīng)的基元位置所確定的z值更接近觀眾,那么該基元位置在最終的圖像中是不可見的,并且廢棄其顏色值。如果z緩沖器中的該值比為相應(yīng)的基元位置所確定的z值更遠(yuǎn)離觀眾,那么把用于此位置的顏色值存入幀緩沖器的適當(dāng)項(xiàng)中。如果在掃描變換完成之前該顏色值未被替代,那么它被顯示在最終的圖像中。
在再現(xiàn)階段期間在存儲器與圖形源之間傳送紋理,顏色以及z數(shù)據(jù)的有效數(shù)量。由于可能存在每基元數(shù)十至數(shù)百像素,所以這些數(shù)據(jù)傳送可能把有效負(fù)載放在該存儲信道的帶寬上。內(nèi)存帶寬的必然下降會降低圖形系統(tǒng)的性能。如果圖形系統(tǒng)是在采用統(tǒng)一存儲器體系結(jié)構(gòu)(UMA)的計(jì)算機(jī)系統(tǒng)內(nèi)實(shí)施的話更是如此。對于基于UMA的計(jì)算機(jī)系統(tǒng),中央處理器單元(CPU)以及圖形引擎(graphics engine)具有對主存儲器的同等訪問。圖形引擎所要求的存儲器會降低CPU的性能。另外,該圖形引擎的一個單元所需要的存儲器會降低其它單元的性能。例如,用來傳送用于z測試的z數(shù)據(jù)的任何帶寬對于確定像素紋理的那一單元都是無效的,并且?guī)挼南陆禃档推湫阅堋?br>
本發(fā)明致力于與圖形系統(tǒng)內(nèi)的內(nèi)存帶寬有關(guān)的這些以及其它問題。
圖1是表示在基元位置與像素級數(shù)據(jù)塊之間的一映射的框圖。
圖2是適于把基元數(shù)據(jù)掃描轉(zhuǎn)換為像素?cái)?shù)據(jù)的圖形流水線的簡略表示。
圖3是實(shí)施本發(fā)明z壓縮機(jī)制的計(jì)算機(jī)系統(tǒng)的一實(shí)施例的方框圖。
圖4是其中z數(shù)據(jù)塊及其相關(guān)狀態(tài)數(shù)據(jù)被分配在本地高速緩存與主存儲器之間的z壓縮系統(tǒng)的一實(shí)施例的方框圖。
圖5A是用來存儲z數(shù)據(jù)值和相關(guān)的狀態(tài)值的本地高速緩存系統(tǒng)的一實(shí)施例的方框圖。
圖5B是表示在TLB未命中時用于更新圖5A的本地高速緩存系統(tǒng)的機(jī)制的方框圖。
圖6A是用來存儲z數(shù)據(jù)值和相關(guān)的狀態(tài)值的本地高速緩存系統(tǒng)的另一實(shí)施例的簡略表示。
圖6B是表示用于圖6A的本地高速緩存的項(xiàng)的狀態(tài)變化的狀態(tài)機(jī)。
圖6C是在TLB未命中時用于更新圖6A的本地高速緩存系統(tǒng)的機(jī)制的簡略表示。
圖7是適于在線性存儲區(qū)內(nèi)存儲用于數(shù)據(jù)塊的狀態(tài)值的內(nèi)存映像的一個實(shí)施例。
圖8A和8B表示可使用本發(fā)明機(jī)制來壓縮的16位及32位z數(shù)據(jù)格式的實(shí)施例。
圖9表示可能被實(shí)施本發(fā)明的系統(tǒng)使用的用于z數(shù)據(jù)的被壓縮格式的一個實(shí)施例。
圖10A-10C是表示用于實(shí)施對于z數(shù)據(jù)塊的存儲器讀,存儲器寫,以及狀態(tài)更新的方法的一個實(shí)施例的流程圖。
圖11是表示用于透明實(shí)施z壓縮的方法的一個實(shí)施例的流程圖。
圖12是表示用于透明實(shí)施對z緩沖器的訪問的方法的一個實(shí)施例的流程圖。
圖13A-13C是表示用于透明清除z緩沖器的不同方法的實(shí)施例的流程圖。
發(fā)明的詳細(xì)說明下面的論述陳述了許多具體細(xì)節(jié)以提供對本發(fā)明的透徹理解。然而,本領(lǐng)域的那些普通技術(shù)人員,得益于本公開內(nèi)容,將懂得無需這些具體細(xì)節(jié)而可以實(shí)施本發(fā)明。另外,沒有對各種公知方法,程序,元件,以及電路進(jìn)行詳細(xì)描述以便把注意力集中在本發(fā)明的特征上。
圖1是圖形基元100和數(shù)據(jù)塊110(a),110(b)(一般地,“數(shù)據(jù)塊110”)的子集的簡略表示,在視覺坐標(biāo)系統(tǒng)中基元100中的相應(yīng)位置(x,y)被映射到該子集。多個圖形基元100被用來近似將被顯示在一圖像中的對象的表面。當(dāng)圖形基元100被示作為三角形時,眾所周知任何類型的多邊形都可用來表示對象的表面。類似地,參照含有4×4像素(跨度)陣列的數(shù)據(jù)塊110來說明本發(fā)明的實(shí)施例,但是也可以使用其它的數(shù)據(jù)塊結(jié)構(gòu)。
顏色,紋理坐標(biāo),以及深度(c,t,z)均與基元100的頂點(diǎn)120(a),120(b),120(c)有關(guān)。還可以把其它屬性,諸如灰霧及阿爾法(未示出)分配給頂點(diǎn)。之后把這些頂點(diǎn)特性插入以給會被映射到數(shù)據(jù)塊110的像素內(nèi)的所有基元位置(x,y)提供值。對于該公開的表示,數(shù)據(jù)塊110(b)為跨度,所有組成部份的像素為了所述跨度而被從基元100之中的位置映射。數(shù)據(jù)塊110(a)為跨度,像素值為了所述跨度而被從跨在基元100的一個或多個邊界上的位置映射。即,不是所有數(shù)據(jù)塊110(a)的像素均對應(yīng)于基元100之中的位置。
圖2表示實(shí)施掃描變換的圖形處理流水線200的一個實(shí)施例。在210從一給定基元所映射到的z緩沖器項(xiàng)中讀取Z數(shù)據(jù)。在220插入該基元的頂點(diǎn)數(shù)據(jù)以便為每個基元位置生成,例如顏色,紋理以及z數(shù)據(jù)。例如,對于基元的各個位置(x,y)的z數(shù)據(jù)可以如下所述,利用建立z=C0+Cx·x+Cy·y的表面函數(shù)從該基元的頂點(diǎn)數(shù)據(jù)中生成。在此階段同樣可以為每個位置生成顏色值以及紋理坐標(biāo)。
在流水線200的隨后階段中,在230可以執(zhí)行圖像改進(jìn)技術(shù),諸如紋理映射,凹凸映射,阿爾法重疊等等。在240,z測試確定該基元的哪一位置,如果有的話,把其顏色值提供給幀緩沖器,即基元的哪些部分將在2D圖像中是可見的。如果為一位置確定的z值通過了z測試,那么分別用該基元位置的顏色以及z值來更新該幀內(nèi)的適當(dāng)項(xiàng)以及z緩沖器。否則,廢棄該值。
圖形引擎與幀及z緩沖器內(nèi)的存儲單元之間的圖形數(shù)據(jù)傳送降低了可用內(nèi)存帶寬。對于象UMA這樣的存儲器體系結(jié)構(gòu),這種降低能夠?qū)τ?jì)算機(jī)系統(tǒng)的整體性能具有不利影響。已經(jīng)提出用各種方法來減少紋理數(shù)據(jù)傳送的帶寬影響。本發(fā)明提供了用于減少深度緩沖及其相關(guān)數(shù)據(jù)傳送對系統(tǒng)性能的影響的一種機(jī)制。
圖3是實(shí)施本發(fā)明z壓縮的計(jì)算機(jī)系統(tǒng)300的一個實(shí)施例的框分層圖。計(jì)算機(jī)系統(tǒng)300包括處理器內(nèi)核310,圖形內(nèi)核320以及存儲系統(tǒng)330。處理器內(nèi)核310和圖形內(nèi)核320耦合于總線或存儲信道340上以把數(shù)據(jù)從存儲系統(tǒng)330傳出或把數(shù)據(jù)傳入存儲系統(tǒng)330。虛線表示對于計(jì)算機(jī)系統(tǒng)300的一實(shí)施例的集成電路模片370的邊界,其中處理器內(nèi)核310和圖形內(nèi)核320集成在一單芯片上。計(jì)算機(jī)系統(tǒng)300的這一實(shí)施例可能實(shí)施統(tǒng)一存儲器體系結(jié)構(gòu)(UMA),對于該體系結(jié)構(gòu)本發(fā)明的特征可以提供顯著的優(yōu)點(diǎn)。然而,本發(fā)明并不限于采用集成的圖形及處理器內(nèi)核或UMA的計(jì)算機(jī)系統(tǒng)。
對于計(jì)算機(jī)系統(tǒng)300的該公開實(shí)施例,存儲系統(tǒng)330被示為跨接在模片370上以表示它可以包括片內(nèi)或片外元件。例如,存儲系統(tǒng)330一般包括一個或多個位于電路模片370上的高速緩沖存儲器以及一個位于另外的電路模片上的主存儲器。存儲系統(tǒng)330進(jìn)一步含有z緩沖器350以及z狀態(tài)表(ZST)360,該表內(nèi)的一部分可被分布在片內(nèi)與片外存儲器結(jié)構(gòu)之間(圖4)。如下所更為詳細(xì)論述的,ZST 360為z緩沖器350內(nèi)的相關(guān)項(xiàng)提供狀態(tài)信息。該狀態(tài)信息可用于減少或消除存儲信道340上的數(shù)據(jù)傳送。
ZST 360的一個實(shí)施例包括跟蹤對于存儲在z緩沖器350內(nèi)的各個z數(shù)據(jù)塊的當(dāng)前狀態(tài)。該狀態(tài)表示相應(yīng)的z數(shù)據(jù)塊是被如何存儲的并且可被用于管理圖形內(nèi)核320與存儲器330之間的數(shù)據(jù)傳送。該狀態(tài)可以表示,例如,用于一特定跨度的z數(shù)據(jù)是否處于被壓縮格式或是未被壓縮格式,或者它是否具有可被從本地存儲單元,諸如寄存器供給的一參考值??梢杂帽任幢粔嚎s數(shù)據(jù)更為低的對存儲信道340的帶寬影響來傳送壓縮的z數(shù)據(jù)。此外,在例如,本地寄存器內(nèi)有效的z數(shù)據(jù)根本不必耗費(fèi)任何內(nèi)存帶寬。圖形內(nèi)核320的一個或多個元件使用ZST 350來更為有效地、并對存儲信道的帶寬產(chǎn)生更低影響地管理z數(shù)據(jù)傳送。
對于ZST 360的一個實(shí)施例,每個項(xiàng)存儲一個兩位的狀態(tài)碼以表示對于相應(yīng)數(shù)據(jù)塊的數(shù)據(jù)狀態(tài)。表1歸納了可采用的4位狀態(tài)碼的一個集合。
表1
例如,在被清除狀態(tài)(00)可以用z緩沖器350的所有項(xiàng)來初始化各個圖像。在掃描轉(zhuǎn)換期間更新ZST 360中可被調(diào)整為z緩沖器內(nèi)的初始值的狀態(tài)值。根據(jù)該狀態(tài)碼,可以正常執(zhí)行z緩沖器訪問,可以實(shí)施被壓縮z緩沖器訪問或可以完全避免z緩沖器訪問。后兩個選項(xiàng)減少了z數(shù)據(jù)訪問對存儲信道帶寬的影響。
在下面的論述中,把其中每個z值代表一恒定參考深度的z數(shù)據(jù)塊稱作為“被清除”。該深度可與圖像空間內(nèi)的背景剪貼板一致。由于該值為常數(shù),因此它可以存儲在圖形內(nèi)核320的本地寄存器內(nèi)。當(dāng)一項(xiàng)訪問把具有被清除數(shù)據(jù)狀態(tài)(00)的跨度作為目標(biāo)時,能夠從該本地寄存器讀出該被清除值,消除z緩沖器訪問并保存存儲信道帶寬。如果一項(xiàng)訪問把被指定為被壓縮(10)的數(shù)據(jù)塊作為目標(biāo),那么可以以壓縮格式檢索該目標(biāo)z數(shù)據(jù)并解壓縮該目標(biāo)z數(shù)據(jù)以便使用。如下所述,壓縮減小了為例如,z測試而傳送的數(shù)據(jù)塊的大小,它節(jié)省了存儲信道帶寬。如果一項(xiàng)訪問把被指定為未被壓縮(01)的數(shù)據(jù)塊作為目標(biāo),那么該訪問傳送一未被壓縮的z數(shù)據(jù)塊并且不執(zhí)行解壓縮。
Z壓縮不必統(tǒng)一地應(yīng)用于存儲在z緩沖器350內(nèi)的所有數(shù)據(jù)。例如,部分地,通過參考要被寫的數(shù)據(jù)塊與映射到該數(shù)據(jù)塊的基元位置之間的關(guān)系可以作出以被壓縮格式或不被壓縮格式把數(shù)據(jù)寫入z緩沖器350的決定。表示在基元100的邊界內(nèi)的位置的數(shù)據(jù)塊110(b)通常能夠被壓縮。如下所述,如果z值還包括模板字段或者如果某些剪貼或飽和條件占優(yōu)勢,那么就會出現(xiàn)例外。跨在基元邊界上的位置所映射到的數(shù)據(jù)塊110(a)通常不被壓縮。若通過表面函數(shù)(Eq.I)實(shí)施壓縮,對于該基元邊界不同側(cè)上的位置的z值可以由不同的表面函數(shù)控制。如果使用僅僅適合于該基元內(nèi)的位置的表面公式來壓縮基元外的位置,那么這一z壓縮方案會產(chǎn)生錯誤的結(jié)果。
圖4表示可用來實(shí)施本發(fā)明的z壓縮系統(tǒng)400的一個實(shí)施例。壓縮系統(tǒng)400包括讀/寫單元410,本地高速緩存430,主存儲器440,以及本地寄存器490。對于存儲系統(tǒng)330的一個實(shí)施例,主存儲器440和本地高速緩存430分別表示,例如,片外和片內(nèi)元件。根據(jù)與被該訪問定為目標(biāo)的數(shù)據(jù)塊有關(guān)的狀態(tài)信息,讀/寫單元410執(zhí)行源于圖形內(nèi)核320的各種單元的存儲器訪問請求。本地高速緩存430含有用于處理存儲器訪問的狀態(tài)以及z數(shù)據(jù)塊的本地副本。從本地高速緩存430不能夠被滿足的請求被從主存儲器440滿足。
對于存儲器讀訪問,讀/寫單元410從目標(biāo)數(shù)據(jù)塊的狀態(tài)確定該數(shù)據(jù)塊是否處于被壓縮、未被壓縮,或被清除狀態(tài),并通過適合于所表示狀態(tài)的傳送從本地高速緩存430,主存儲器440或本地寄存器490中檢索該目標(biāo)數(shù)據(jù)。對于存儲器寫訪問,讀/寫單元410利用有關(guān)目標(biāo)數(shù)據(jù)的信息來確定是否以被壓縮、不被壓縮,或被清除狀態(tài)來存儲它,并且它相應(yīng)地更新相關(guān)的數(shù)據(jù)狀態(tài)。
圖4還示出了可以給z壓縮系統(tǒng)400的實(shí)施例提供輸入以實(shí)施數(shù)據(jù)訪問的顏色計(jì)算單元(CCC)450和插入單元(ITU)460。例如,CCU450從頂點(diǎn)數(shù)據(jù)確定顏色值,并向讀/寫單元410指示數(shù)據(jù)塊是否可被壓縮。ITU 460從基元頂點(diǎn)數(shù)據(jù)確定像素級z值并向讀/寫單元410提供可用于壓縮/解壓縮數(shù)據(jù)塊的參數(shù)。
圖5A是示出存儲了z數(shù)據(jù)以及用于被緩存數(shù)據(jù)塊項(xiàng)的數(shù)據(jù)狀態(tài)信息的本地高速緩存系統(tǒng)500的一個實(shí)施例的方框圖。在同一高速緩存中存儲z數(shù)據(jù)以及用于數(shù)據(jù)塊的數(shù)據(jù)狀態(tài)允許更有效地處理存儲器訪問,其形式隨數(shù)據(jù)狀態(tài)信息而定。
本地高速緩存系統(tǒng)500的該公開實(shí)施例包括讀/寫單元410,本地高速緩存430以及變換單元510。變換單元510包括z狀態(tài)高速緩存(ZSTC)520以及z變換后備緩沖器(ZTLB)530。ZTLB 530存儲用于z數(shù)據(jù)的邏輯至物理存儲器地址的變換。ZSTC 520存儲用于ZTLB 530所指向的z數(shù)據(jù)的狀態(tài)信息。對于高速緩存系統(tǒng)500的一個實(shí)施例,ZTLB 530的各個項(xiàng)存儲用于分配給z緩沖器的物理存儲器的頁面的變換,并且ZSTC 520存儲對于存儲在該頁面上的z項(xiàng)的狀態(tài)數(shù)據(jù)。如下所更為詳細(xì)論述的,來自ZSTC 520的狀態(tài)信息被用來控制向主存儲器440讀和寫的z數(shù)據(jù)的大小。
本地高速緩存430的該公開實(shí)施例包括標(biāo)記陣列564,數(shù)據(jù)陣列568以及命中/未命中單元570。各個項(xiàng)560包括存儲在標(biāo)記陣列564內(nèi)的標(biāo)記字段(TAG),狀態(tài)字段(STATUS),以及存儲在數(shù)據(jù)陣列568內(nèi)的數(shù)據(jù)字段(DATA)。TAG存儲可用于實(shí)施查找本地高速緩存430的邏輯地址(或其中的部分)。STATUS存儲用于由TAG索引的數(shù)據(jù)塊的狀態(tài)位,以及DATA存儲z數(shù)據(jù)值塊。讀/寫單元410的該公開實(shí)施例包括讀單元540和寫單元550。圖5中還示出了主存儲器440以及存儲信道340。
對于系統(tǒng)500的一個實(shí)施例,響應(yīng)于存儲器訪問而觸發(fā)本地高速緩存430的查找。例如,命中/未命中單元570比較由讀訪問指定的邏輯地址(或其中的部分)與項(xiàng)560的標(biāo)記字段。如果該訪問命中,那么把STATUS內(nèi)的值提供給讀單元540,該值確定了適當(dāng)?shù)臄?shù)據(jù)檢索流程。對于被壓縮數(shù)據(jù)(STATUS=10)以及未被壓縮數(shù)據(jù)(STATUS=01),讀單元540使用適當(dāng)分級的傳送來從命中項(xiàng)中檢索數(shù)據(jù)。被壓縮的(CMP)數(shù)據(jù)被解壓縮并送到請求者,對于系統(tǒng)500的該公開實(shí)施例,該請求者可以是CCU 450。未被壓縮的(UNC)數(shù)據(jù)被送到該請求者而不必解壓縮。對于被清除的數(shù)據(jù)(STATUS=00),讀單元540把該被清除的數(shù)據(jù)從本地寄存器490供給該請求者。
對于本地高速緩存系統(tǒng)的一個實(shí)施例,命中/未命中單元570考慮STATUS與TAG以確定在本地高速緩存430內(nèi)訪問是否“命中”或“未命中”。例如,根據(jù)以下標(biāo)準(zhǔn),把未被壓縮的數(shù)據(jù)定為目標(biāo)的訪問可以在本地高速緩存430內(nèi)整個或部分地命中Hit=Tag_Match & No_Blocking & [(UNC & QW_Match|CMP|CLEAR]Partial_Hit=Tag_Match & No_Blocking & (UNC &!QW_Match)Miss=!Tag_Match這里,Tag_Match表示識別要被訪問的地址的標(biāo)記是否與該高速緩存內(nèi)的標(biāo)記匹配,No_Blocking表示另一個訪問是否阻止當(dāng)前的訪問,以及QW_Match表示數(shù)據(jù)的哪一部分將要在該高速緩存線內(nèi)或由該標(biāo)記識別的數(shù)據(jù)塊內(nèi)被尋找。QW_Match可用于允許數(shù)據(jù)塊的QW被單獨(dú)訪問的本地高速緩存430的實(shí)施例。當(dāng)為該高速緩存內(nèi)的標(biāo)記(Tag_Match)分配一個線但是被尋找的特殊四倍長字不在該高速緩存內(nèi)時,就出現(xiàn)部分命中。
如果命中/未命中單元570確定在本地高速緩存430內(nèi)未命中讀訪問,那么對變換單元510啟動查找。對于替換單元510的該公開實(shí)施例,ZTLB 530的項(xiàng)包括由邏輯地址標(biāo)記字段索引的邏輯-物理地址變換,并且ZSTC 520存儲用于在ZTLB 530內(nèi)被跟蹤的各個數(shù)據(jù)塊的狀態(tài)位。如果在變換單元510內(nèi)該尋找命中,那么該狀態(tài)位表示在主存儲器440內(nèi)所指示的物理地址上的數(shù)據(jù)塊的狀態(tài)。如果STATUS=被清除,那么該“被清除”數(shù)據(jù)塊的z值被從本地寄存器490提供,并且在存儲信道340上不產(chǎn)生通信量。如果STATUS=被壓縮或未被壓縮,那么通過分別執(zhí)行部分提取或全部提取,數(shù)據(jù)塊被從主存儲器440檢索到指定的物理地址。根據(jù)z數(shù)據(jù)格式,例如32位或16位,部分提取使用全部提取所用帶寬的1/2至1/4。
圖5B表示在ZTLB 530內(nèi)尋找沒有命中(“TLB-未命中”)的事件中用于更新變換單元510的機(jī)制。對于該公開實(shí)施例,使用圖形變換表(GTT)574把例如增強(qiáng)圖形端口(AGP)存儲器的4K字節(jié)頁面變換成物理地址。GTT 574包括用于Z緩沖器350和用于ZST 360的項(xiàng)。ZSTC指針表(ZPT)578存儲指向ZST 360內(nèi)位置的指針。也就是,ZPT578象TLB對ZST 360一樣操作。
在初始TLB-未命中時,GTT 574向ZTLB 530提供未被命中的TLB變換。來自GTT 574的指針也被讀入ZPT 578,并且與該未被命中的TLB項(xiàng)有關(guān)的指針被用來從ZST 360內(nèi)檢索相應(yīng)的狀態(tài)數(shù)據(jù)。根據(jù)該被更新的狀態(tài)數(shù)據(jù),該被更新的變換被用來檢索主存儲器440內(nèi)的目標(biāo)數(shù)據(jù)塊。分別用檢索到的z數(shù)據(jù)及其狀態(tài)更新數(shù)據(jù)陣列568和標(biāo)記陣列564。一般地,每當(dāng)數(shù)據(jù)塊的狀態(tài)被改變時就更新ZSTC 520。當(dāng)ZTLB 530內(nèi)的項(xiàng)被替換時,把ZSTC 520內(nèi)的相應(yīng)項(xiàng)寫回存儲器。
圖6A是包括一物理尋址的本地高速緩存430的本地高速緩存系統(tǒng)600的實(shí)施例的方框圖。本地高速緩存430的該公開實(shí)施例包括變換單元610,標(biāo)記陣列620,數(shù)據(jù)陣列624,命中/未命中單元630,替換單元634,以及輸出選擇單元638。讀/寫單元410把數(shù)據(jù)移入和移出本地高速緩存430及寄存器490。為了送到數(shù)據(jù)陣列624以及從數(shù)據(jù)陣列624送出,CMPRS和DCMPRS分別壓縮及解壓縮數(shù)據(jù)。數(shù)據(jù)陣列624存儲由物理地址(或其中的一部分)索引的數(shù)據(jù)塊,這些物理地址存儲在標(biāo)記陣列620內(nèi)。通過邏輯地址,諸如基元或該數(shù)據(jù)塊的跨度坐標(biāo)(x,y)來指定被存儲器訪問定為目標(biāo)的數(shù)據(jù)塊。
變換單元610提供允許從本地高速緩存430尋找被存儲器訪問定為目標(biāo)數(shù)據(jù)的邏輯-物理地址變換。變換單元610包括ZSTC 614和ZLTB618,它們提供與ZSTC 520和ZLTB 530所提供的功能相類似的功能。當(dāng)在ZLTB 618內(nèi)地址命中時,命中項(xiàng)提供該邏輯地址所映射到的物理地址,以及ZSTC 614的相應(yīng)項(xiàng)提供用于數(shù)據(jù)的狀態(tài)。高速緩存系統(tǒng)600的實(shí)施例可以用對于該項(xiàng)的狀態(tài)數(shù)據(jù)來更新標(biāo)記陣列。命中/未命中單元630比較該物理地址與標(biāo)記陣列620內(nèi)的項(xiàng)。
對于在標(biāo)記陣列620內(nèi)未命中的訪問,替換單元634確定當(dāng)前項(xiàng)中的哪一項(xiàng)將被指配為接收從更高的存儲器結(jié)構(gòu)返回的數(shù)據(jù)。對于在標(biāo)記陣列620內(nèi)命中的訪問,輸出選擇單元638向數(shù)據(jù)陣列624指示該命中項(xiàng)并且來自標(biāo)記陣列620的狀態(tài)信息確定了如何檢索數(shù)據(jù)。對于每高速緩存線存儲一個跨度的實(shí)施例,如果壓縮目標(biāo)數(shù)據(jù),那么高速緩存線的一半被從數(shù)據(jù)陣列660檢索,解壓縮,并送給請求者。如果該目標(biāo)數(shù)據(jù)是未壓縮的,那么整個高速緩存線被從數(shù)據(jù)陣列660檢索并送給請求者而無需解壓縮。如果該目標(biāo)數(shù)據(jù)被清除,那么從本地寄存器490檢索數(shù)據(jù)并送給請求者。
讀/寫單元410包括在讀單元640內(nèi)的MUX 644用以提供響應(yīng)于其相關(guān)狀態(tài)的數(shù)據(jù)。寫單元650內(nèi)的MUX 648向被寫入本地高速緩存430的數(shù)據(jù)提供類似的支持。把狀態(tài)信息耦合到讀/寫單元410以指示被傳送的數(shù)據(jù)應(yīng)當(dāng)被怎樣處理。
圖6B示出表示對于數(shù)據(jù)陣列624的項(xiàng)的可能狀態(tài)變化的狀態(tài)機(jī)的一個實(shí)施例。在該項(xiàng)被分配之前,它處于無效狀態(tài)654。當(dāng)該項(xiàng)被分配給一數(shù)據(jù)塊時,根據(jù)該項(xiàng)被分配到的數(shù)據(jù)塊的狀態(tài),其狀態(tài)被更新為被清除(CLR 658),被壓縮(CMP 660),未被壓縮(UNC 664)或全部未被壓縮(UNC_A 668)。對于該公開實(shí)施例,由ZSTC 614內(nèi)的相應(yīng)項(xiàng)來表示該狀態(tài)。對于允許裝入少于數(shù)據(jù)的全部線的高速緩存,UNC和UNC_A的區(qū)別在于分別用數(shù)據(jù)而部分填充或全部填充的高速緩存線。以CLR 658或CMP 660存儲數(shù)據(jù)塊的項(xiàng)在先前被清除或被壓縮的數(shù)據(jù)塊被以未被壓縮狀態(tài)寫回到該高速緩存中時可以變換到UNC_A 668。由于僅僅全部數(shù)據(jù)塊可以是CLR 658或CMP 660,因此在這些狀態(tài)與UNC 664之間不提供變換。
如果已經(jīng)被變更的數(shù)據(jù)塊被從本地高速緩存430逐出,那么該被逐出的數(shù)據(jù)塊的狀態(tài)表示了將被執(zhí)行的操作。例如,如果處于狀態(tài)CLR658的數(shù)據(jù)塊被逐出,那么沒有任何東西被寫回到較高的存儲器級,并且數(shù)據(jù)塊被從中逐出的項(xiàng)的狀態(tài)被更新為表示新數(shù)據(jù)塊的狀態(tài)。如果處于狀態(tài)CMP 660的數(shù)據(jù)塊被逐出,那么存儲了被壓縮數(shù)據(jù)的高速緩存線的一部分,例如該高速緩存線的一半被寫回到存儲器中。如果處于狀態(tài)UNC 664的數(shù)據(jù)塊被逐出,那么被變更的字節(jié)被寫回到存儲器中,以及如果處于狀態(tài)UNC_A的數(shù)據(jù)塊被逐出,那么全部高速緩存線被寫回到存儲器中。在每種情況下,項(xiàng)的狀態(tài)在ZSTC內(nèi)被更新以跟蹤被逐出的數(shù)據(jù)塊的狀態(tài)。當(dāng)項(xiàng)被從ZTLB 618內(nèi)逐出時,ZSTC 614的相應(yīng)位被寫回到ZST 360。圖6C表示如果在ZTLB 618內(nèi)邏輯地址未命中時用于更新變換單元610的機(jī)制。對于該公開實(shí)施例,未命中觸發(fā)了對頁面表690的讀,該表提供由訪問所指示的TLB項(xiàng)。ZTLB 618被用新的TLB項(xiàng)更新,并且ZSTC 614被用該頁上的所有數(shù)據(jù)塊的狀態(tài)數(shù)據(jù)更新。目標(biāo)高速緩存線被從Z緩沖器330內(nèi)的指定地址裝入到數(shù)據(jù)陣列624,并且標(biāo)記陣列624內(nèi)的狀態(tài)被更新以反映該數(shù)據(jù)塊的(存儲)狀態(tài)。
圖5A,5B以及6A-6C舉例說明了適合于處理混合狀態(tài)及數(shù)據(jù)信息的高速緩存系統(tǒng)的兩個實(shí)施例的各種特征。對于這兩個實(shí)施例,數(shù)據(jù)陣列可以以壓縮或不壓縮格式存儲數(shù)據(jù)(或根本不存儲,在被清除項(xiàng)的情況下)。高速緩存管理邏輯根據(jù)其有關(guān)狀態(tài)而把數(shù)據(jù)移入或移出該數(shù)據(jù)陣列,并根據(jù)該狀態(tài)控制對外部存儲器的操作。TLB提供對z數(shù)據(jù)塊及其有關(guān)狀態(tài)的訪問。在每一數(shù)據(jù)塊把狀態(tài)存入標(biāo)記陣列,以及在每一內(nèi)存頁面把狀態(tài)存入變換單元(ZSTC)。雖然已經(jīng)把這些高速緩存系統(tǒng)作為z壓縮機(jī)制的部件進(jìn)行了描述,但是它們也可以用在需要跟蹤各種類型的數(shù)據(jù)的其它系統(tǒng)中。
圖形內(nèi)核320的各種功能單元以其UNC(或UNC_A)形式對數(shù)據(jù)進(jìn)行操作。因此,數(shù)據(jù)塊可以以壓縮(或再壓縮)或是不被壓縮狀態(tài)被寫回到本地高速緩存430或存儲器440內(nèi),或者如果該數(shù)據(jù)狀態(tài)被清除,那么可以完全避免上述寫。對于本地高速緩存系統(tǒng)500的一個實(shí)施例,寫單元550根據(jù)為被上述寫定為目標(biāo)的數(shù)據(jù)塊而確定的狀態(tài)來處理寫訪問。下面更為詳細(xì)地論述用于數(shù)據(jù)塊是否可被壓縮或用一被清除值來表示的標(biāo)準(zhǔn)。
圖7是表示在存儲器330的線性部分存儲狀態(tài)數(shù)據(jù)的內(nèi)存映像700的一個實(shí)施例的方框圖。對于映像700,各個狀態(tài)項(xiàng),Sx,y,與代表4×4像素陣列(跨度)的數(shù)據(jù)塊有關(guān)。這里,Sx,y,表示用于在跨度地址(x,y)上的數(shù)據(jù)塊的狀態(tài)數(shù)據(jù)。對于16和32位Z模式的跨度地址的一個可能表示示于圖7的下部。
對于這一數(shù)據(jù)塊定義,可以用512×512跨度柵格來表示2048×2048像素幀緩沖器。內(nèi)存映像700把該跨度組織成每個均為512個字節(jié)的組,并且每個字節(jié)存儲用于4個跨度列的狀態(tài)位。當(dāng)一個把在跨度坐標(biāo)(x,y)上的數(shù)據(jù)塊定為目標(biāo)的訪問在本地高速緩存430內(nèi)未命中時,其狀態(tài)位,Sx,y,可以在內(nèi)存地址上的字節(jié)[Byte_Index]的位Y[1∶0]上被訪問Status_Bits_Base_Address+PageY·512+PageX·Entry_Size,其中Entry_Size=16位Z模式? 32∶16PageX=16位Z模式?X[8∶5]∶X[8∶4]PageY=Y(jié)[8∶2]Byte_Index=16位Z模式?X[4∶0]∶X[3∶0]使z壓縮變得復(fù)雜的一個因素是壓縮對于某些跨度會是不希望的或是不可行的。ZST 360為確定是否以壓縮狀態(tài)存儲要被讀的跨度以及要被寫的跨度在其被寫之前是否可被壓縮提供了便捷的跟蹤機(jī)制。如上所指出的,可以應(yīng)用各種標(biāo)準(zhǔn)來確定是否為了存入存儲系統(tǒng)而壓縮一特定的跨度。這些標(biāo)準(zhǔn)包括,例如,該跨度是否完全落入基元內(nèi),即是否通過特定操作來寫跨度的所有像素,以及,如果該跨度包括模板值,那么該基元內(nèi)的所有跨度都具有相同的模板值。例如,如果跨度處于被清除狀態(tài),那么對于該幀內(nèi)的所有像素該被清除值都為常數(shù),并且可存入更容易地可訪問的寄存器內(nèi)。鑒于數(shù)據(jù)塊存儲所依據(jù)的各種未被壓縮或壓縮格式,可以更好地構(gòu)想到其它的標(biāo)準(zhǔn)。
圖8A和8B是分別表示當(dāng)z數(shù)據(jù)被存儲作為跨度時用于16位和32位z數(shù)據(jù)的未被壓縮格式810及850的框圖。對于16位格式810,每一行對應(yīng)于數(shù)據(jù)(4×16位)的一個四倍長字(QW),對于32位格式850,每一行對應(yīng)于數(shù)據(jù)(4×32位)的一個雙四倍長字(DQW)??缍葍?nèi)的16個像素的z值被標(biāo)記為Z0.0-Z3.3。對于32位格式850的一個實(shí)施例,每個32位值可以包括一24位z值和一8位模板值。模板值被用來表示屏幕的一部分,對于這一部分不必進(jìn)行繪圖更新。例如,被窗口邊框遮掩的像素可以包括替代像素值而要被寫的模板值。對于本發(fā)明的一個實(shí)施例,其像素與不同模板值有關(guān)的跨度可以不被壓縮。
圖9表示被壓縮數(shù)據(jù)塊900的一個實(shí)施例,可以從未被壓縮格式810,850或其它的未被壓縮格式生成該數(shù)據(jù)塊。被壓縮數(shù)據(jù)塊900為一個DQW,它是16位格式810的大小的50%,是32位格式950大小的25%??梢酝ㄟ^無損壓縮方法生成被壓縮格式900的該公開實(shí)施例。一種方式是基于用于基元的z值函數(shù)表達(dá)式,諸如被內(nèi)插器460用來從頂點(diǎn)值為基元位置確定z值的表達(dá)式。
對于一種壓縮方法,用于一給定基元的z值被表示為(Eq.I)Z(x,y)=+C0+Cx·x+Cy·y其中C0表示在一參考點(diǎn)上的Z值,例如x=y(tǒng)=0,Cx表示在x方向上的(線性化的)z依從關(guān)系,Cy表示在y方向上的線性化z依從關(guān)系。當(dāng)通過Z(x,y)或類似的函數(shù)參數(shù)化用于跨度的像素z值時,該Z值可以用系數(shù)C0,Cy,以及Cy來表示,而不是通過它們自身存儲z值。被壓縮數(shù)據(jù)塊900能夠存儲16個24位z值以及一個8位模板值(4DQW)作為3個40位系數(shù)以及一個8位模板值(1DQW),假如所有16個像素都具有相同的模板值的話。
用于壓縮對于跨度的z值的另一種機(jī)制存儲該跨度的一個像素的z值以及此z值與該跨度的其它像素的z值之間的差異。由于希望這些差異很小,所以可以用較少位來表示它們。例如,對于16位z值,可以把參考z值存作為16位值并且可以把剩余15個像素的差異存作為7位值。另一方面,可以用7位的差值來指定接近于該參考值的8個像素,以及用8位值來指定剩余的7位。在這種基于差異的壓縮機(jī)制上的其它變化是可能存在的。這些機(jī)制不被承認(rèn)為是無損的,這是因?yàn)樵摬町悤蟊扔晒潭ㄎ凰峁┑姆直媛矢叩姆直媛?。如果似乎該壓縮將不是無損的話,那么該機(jī)制的實(shí)施例可以繞過對數(shù)據(jù)塊進(jìn)行壓縮。
圖10A表示本發(fā)明用于處理對存儲器的讀訪問的方法1000的一個實(shí)施例。可以例如,采用圖3的系統(tǒng)或其它任何提供跟蹤被讀的數(shù)據(jù)塊的狀態(tài)(被壓縮,未被壓縮,被清除)的機(jī)制的系統(tǒng)來實(shí)施方法1000。根據(jù)方法1000,在1010檢測讀訪問,以及在1012確定被讀取定為目標(biāo)的數(shù)據(jù)塊的狀態(tài)。在系統(tǒng)400內(nèi),例如,根據(jù)在本地高速緩存430內(nèi)該讀是否命中或未命中,分別用本地高速緩存430或存儲器440內(nèi)的項(xiàng)來表示該狀態(tài)。
如果在1014確定該狀態(tài)為“被清除”,那么在1016把該被清除值從本地寄存器中讀出并在1026把它送給請求者。不向存儲系統(tǒng)發(fā)出任何提取。如果在1018確定該狀態(tài)為“未被壓縮”,那么通過在1020執(zhí)行完全提取來檢索數(shù)據(jù),并且在1026把檢索出的數(shù)據(jù)送給請求者。對于該公開實(shí)施例,完全提取為16位z數(shù)據(jù)的各個塊傳送4個4倍長字(QW)以及為32位z數(shù)據(jù)的各個塊傳送4個雙4倍長字(DQW)。對于允許QW或DQW粒狀讀取的本地高速緩存430的實(shí)施例,“完全提取”意指未被壓縮形式的目標(biāo)數(shù)據(jù)的提取。
如果在1018確定該狀態(tài)為“被壓縮”,那么通過在1022執(zhí)行部分提取來檢索數(shù)據(jù)。對于該公開實(shí)施例,部分提取為32或16位z數(shù)據(jù)的各個塊傳送一個DQW。在1024解壓縮檢索出的數(shù)據(jù)并在1026把它送給請求者??梢詴簳r保存該被壓縮數(shù)據(jù)的副本。如果請求者不修改送來的數(shù)據(jù),那么所保存的該被壓縮數(shù)據(jù)的副本保持有效并可以被返回到本地高速緩存430或存儲器440。對于系統(tǒng)400,分別根據(jù)在本地高速緩存430內(nèi)該讀是否命中或未命中,可以從本地高速緩存430或存儲器440內(nèi)取出被壓縮/未被壓縮的數(shù)據(jù)。
圖10B表示本發(fā)明用于處理對存儲器的寫訪問的方法1004的一個實(shí)施例。也可以用系統(tǒng)400或提供類似支持跟蹤z數(shù)據(jù)塊的狀態(tài)(被壓縮,未被壓縮,被清除)的系統(tǒng)來實(shí)施方法1004。根據(jù)方法1004,在1030檢測寫訪問以及在1032為被寫訪問定為目標(biāo)的數(shù)據(jù)塊,即要被寫的數(shù)據(jù)塊確定狀態(tài)。結(jié)合圖10C論述用于確定狀態(tài)的方法。
如果在1034確定狀態(tài)為“被清除”,那么已經(jīng)用參考值來表示塊值,并且任何數(shù)據(jù)寫都不是必需(做)的。在1036,可以在本地高速緩存430的適當(dāng)區(qū)域或反映該寫的“被清除”狀態(tài)的存儲器440的項(xiàng)內(nèi)更新該狀態(tài)。如果在1038確定狀態(tài)為未被壓縮,那么在1040執(zhí)行完全寫以把數(shù)據(jù)按其未被壓縮形式寫入存儲系統(tǒng),并且如果需要,在1036更新該狀態(tài)。對于該公開實(shí)施例,完全寫為32位數(shù)據(jù)的各個塊傳送4個DQW以及為16位數(shù)據(jù)的各個塊傳送4個QW。對于允許QW或DQW粒狀訪問的本地高速緩存430的實(shí)施例,“完全寫”意指該指定QW(s)或DQW(s)按照未被壓縮形式被寫。
如果在1038確定狀態(tài)為“未被壓縮”,那么在1042壓縮它,在1044執(zhí)行部分寫以把數(shù)據(jù)寫入存儲系統(tǒng),并且如果需要,在1036更新該狀態(tài)。對于該公開實(shí)施例,部分寫為32位或16位數(shù)據(jù)的各個塊傳送一個DQW。對于系統(tǒng)400,根據(jù)在本地高速緩存430內(nèi)該訪問是否命中或未命中可以把數(shù)據(jù)塊寫入本地高速緩存430或存儲器440。
圖10C表示本發(fā)明用于為16位數(shù)據(jù)塊確定狀態(tài)的方法1008的一個實(shí)施例。結(jié)合表3論述用于32位數(shù)據(jù)塊的狀態(tài)更新。對于方法1008,在1060確定是否更新用于一數(shù)據(jù)塊內(nèi)的所有像素的z值。例如,來自圖1的數(shù)據(jù)塊110(b)的所有像素都落入一基元內(nèi),并在當(dāng)基元被處理時,所有像素都被更新。數(shù)據(jù)塊110(a)內(nèi)的像素不都被更新,這是由于有些像素落在該基元外。在1060如果塊內(nèi)的所有像素值不被更新,那么在1064把數(shù)據(jù)塊狀態(tài)設(shè)置為未被壓縮。
在1060如果塊內(nèi)的所有像素值被更新,那么在1068考慮各種超越條件?!俺綏l件”是可以排除z值的準(zhǔn)確壓縮或解壓縮的條件。例如,某些圖形算法給所有z值提供z偏移。盡管相對稀少,但是如果遭到超出范圍的z值,那么可以改變z偏移值。由于某些z壓縮/解壓縮方法依賴于該z偏移值,所以如果把不同的z偏移值用于壓縮及解壓縮,這些方法將提供錯誤的結(jié)果。因此,當(dāng)通過調(diào)整z偏移值而把z值箝制在允許的范圍時,可以表示一個超越條件。另外,潛在的超越條件可歸因于z值被插入所依據(jù)的精度,它能夠產(chǎn)生落在圖像的最大/最小z值外的z值。如果在1068檢測這些或其它的超越條件,那么把狀態(tài)設(shè)置成未被壓縮。
如果在1068表示無超越條件,那么在1070確定是否該數(shù)據(jù)塊的所有像素都具有被清除值。如果在1070所有像素都被清除,那么在1074把狀態(tài)設(shè)置成清除。若否,則在1080把狀態(tài)設(shè)置成被壓縮。
所公開的32位z數(shù)據(jù)格式(圖8B),包括模板和z數(shù)據(jù),并且狀態(tài)分配考慮該兩個元素。例如,被壓縮格式900對一數(shù)據(jù)塊的所有像素使用一單一的模板值。因此,即使一個塊的z數(shù)據(jù)可能被壓縮,如果像素具有不同的模板值,格式900也不允許壓縮。表2概括了根據(jù)正被更新的數(shù)據(jù)的類型及其先前的狀態(tài)而適合于32位格式的狀態(tài)更新。
表2
*使用圖10C的方法或類似的方法可以確定Z數(shù)據(jù)的可壓縮性#z數(shù)據(jù)和模板數(shù)據(jù)(如果存在)都符合可壓縮性標(biāo)準(zhǔn)^z數(shù)據(jù)或模板數(shù)據(jù)或二者都未能符合可壓縮性標(biāo)準(zhǔn)上述z壓縮/解壓縮機(jī)制可以把z緩沖器存儲數(shù)據(jù)留在被壓縮及解壓縮狀態(tài)。這能夠?qū)υ试S某些指令直接讀或?qū)憐緩沖器-即繞過系統(tǒng)400的讀/寫單元-的系統(tǒng)內(nèi)的編程者造成問題。用于支持這些指令的可供選擇的方法包括要求編程者相應(yīng)地掌握深度壓縮及寫代碼的細(xì)節(jié)或者使z壓縮對編程者透明。后一種可供選擇的方法使編程者不知道該機(jī)制的細(xì)節(jié)并確保了數(shù)據(jù)將被適當(dāng)?shù)靥幚???梢裕?,通過把系統(tǒng)狀態(tài)擴(kuò)展為適應(yīng)一些狀態(tài)變量(SV)以控制圖形系統(tǒng)的操作,提供一個或多個指令來適當(dāng)管理這些SV,以及當(dāng)所選指令被檢測時修改圖形驅(qū)動器來干預(yù)而實(shí)施這種透明。對于本發(fā)明的一個實(shí)施例,定義了一組圖形指令來設(shè)置和更新該圖形狀態(tài)的適當(dāng)位,并且當(dāng)檢測到訪問Z緩沖器的指令時設(shè)計(jì)該驅(qū)動器來進(jìn)行干預(yù)。
表3表示本發(fā)明的可用于控制/配置圖形系統(tǒng)的一個實(shí)施例的所選擇的狀態(tài)位。說明了各種位并指出了位的大小。
表3
圖11是表示用于透明地實(shí)施z壓縮的方法1100的一個實(shí)施例的流程圖??梢?,例如,對于基礎(chǔ)圖形硬件,用一個解釋來自3D編程環(huán)境,諸如Win3D的指令的圖形驅(qū)動器來實(shí)施方法1100。
最初,在1110分配一z緩沖器并在1120確定是否應(yīng)當(dāng)執(zhí)行z壓縮。例如,如果平鋪式存儲器對于z緩沖器無效或是如果存在不足的線性存儲器來調(diào)節(jié)支持該z緩沖器的z狀態(tài)表,那么可以不執(zhí)行z壓縮。如果在1120不執(zhí)行z壓縮,那么在1124輸入非壓縮模式。
如果在1120將要執(zhí)行z壓縮,那么在1130為z狀態(tài)表(ZST)分配存儲器并且在1134清除該表的項(xiàng)??梢?,例如,通過把0塊傳送(BLITing)到ZST的項(xiàng)來清除ZST。在1140更新圖形上下文以表示允許z壓縮。對于方法1100的一個實(shí)施例,利用一適當(dāng)?shù)闹噶顏碓O(shè)置諸如表3所示出的狀態(tài)變量。一旦在1140圖形上下文被更新,那么在當(dāng)方法1100為所選事件監(jiān)控圖形操作時,在1144再現(xiàn)結(jié)果。用通過塊1150,1160,以及1170的循環(huán)來指示該監(jiān)控活動。
如果在1150檢測到z緩沖器清除事件,那么在1154執(zhí)行改進(jìn)的清除操作。如果在1160檢測到某些z緩沖器訪問事件,那么在1164執(zhí)行改進(jìn)的訪問操作。下面將更為詳細(xì)地論述改進(jìn)的清除及訪問操作。如果在1170檢測到上下文轉(zhuǎn)換,那么在1174檢索用于新的上下文的狀態(tài)變量并在1140更新圖形上下文。1144的再現(xiàn)以及1150,1160,1170的監(jiān)控根據(jù)新的處理進(jìn)行。如果在1170未檢測到上下文轉(zhuǎn)換,那么依舊按當(dāng)前處理進(jìn)行監(jiān)控。
圖12是表示用于透明地處理對z緩沖器的選定訪問(在1164的改進(jìn)訪問)的方法1200的一實(shí)施例的流程圖。該選定訪問包括,例如,通過用戶應(yīng)用程序試圖讀取Z緩沖器或試圖當(dāng)允許z壓縮時鎖定Z緩沖器。方法1200在該選定訪問進(jìn)行之前解壓縮z緩沖器的內(nèi)容。
對于方法1200的該公開實(shí)施例,在1210保存當(dāng)前的圖形狀態(tài),在1220設(shè)置一個位以允許對于指定基元內(nèi)的像素的快速讀/寫處理(“強(qiáng)制解壓縮”),并在1224調(diào)整該圖形狀態(tài)以便解壓縮。對于一個實(shí)施例,圖形狀態(tài)調(diào)整包括允許z-寫及阿爾法測試,把阿爾法測試功能設(shè)置成NEVER,并禁止幀緩沖器寫。在1230,把圍繞將被用戶應(yīng)用程序所訪問的區(qū)域的一個基元發(fā)送到圖形引擎。當(dāng)強(qiáng)制解壓縮位被設(shè)置在此狀態(tài)中時,讀取該指定基元內(nèi)的每個像素,解壓縮(如果需要),并寫回到其存儲單元。在1240恢復(fù)被保存的圖形狀態(tài)并在1150實(shí)施用戶訪問。
跟隨解壓縮而恢復(fù)圖形狀態(tài)意指再次允許z壓縮。因此,隨后,可以壓縮對z緩沖器的非用戶啟動的寫訪問,如果目標(biāo)塊符合壓縮標(biāo)準(zhǔn)的話。
圖13A是表示用于當(dāng)允許z壓縮時,透明地實(shí)施清除操作的方法1300的一個實(shí)施例的流程圖。當(dāng)清除整個Z緩沖器時(下面論述部分清除),通過BLIT操作實(shí)施方法1300。對于該公開實(shí)施例,在1320通過把0塊傳送到ZST的項(xiàng)來清除ZST并在1324更新被清除的模板及z值。有意義地,當(dāng)允許z壓縮時方法1300不訪問z緩沖器來實(shí)施這一清除。僅當(dāng)ZST表示其狀態(tài)被清除,即狀態(tài)=00時,讀取對于數(shù)據(jù)塊的狀態(tài)變量(被清除的z及模板值)。
圖13B是表示用于當(dāng)允許Z壓縮時,透明地實(shí)施Z緩沖器清除的另一種方法1304的一實(shí)施例的流程圖。當(dāng)清除整個z緩沖器時,通過clear( )函數(shù)調(diào)用來實(shí)施方法1304。該清除操作取決于是否z值、模板值或是二者都被清除。如果在1330模板及z值都被清除(或者如果該系統(tǒng)操作于16位模式,其不支持模板),那么可以通過經(jīng)由方法1300塊傳送ZST來實(shí)施清除。如果在1330僅清除z或僅清除模板值,那么把基元寫入z緩沖器以更新該值。由于這些操作改變了圖形狀態(tài),所以在1334保存當(dāng)前的圖形狀態(tài)(或?qū)⒈桓淖兊牟糠?。另外,禁止各種按像素測試。
如果在1340僅清除z值,那么在1344允許z寫入并禁止模板更新功能。在1348再現(xiàn)按大小被排列進(jìn)z緩沖器(或有關(guān)區(qū)域,對于部分清除)并具有與被清除的z值相等的一頂點(diǎn)z值的基元。對該基元的再現(xiàn)清除了z緩沖器內(nèi)的項(xiàng)而無需更新模板值。在1360恢復(fù)清除之前的圖形狀態(tài)。
如果在1340僅清除模板值,那么在1354禁止z寫入并允許模板更新功能。在1358再現(xiàn)按大小排列進(jìn)z緩沖器(或它的有關(guān)區(qū)域,對于部分清除)的基元。被更新的模板值即為由該被清除的模板狀態(tài)變量確定的模板值。由于禁止z寫入因而不修改Z值。在1358的基元再現(xiàn)之后,在1360恢復(fù)該圖形狀態(tài)。
圖13C是表示當(dāng)允許Z壓縮時實(shí)施Z緩沖器的部分清除的方法1308的一實(shí)施例的流程圖。在下面的論述中,把要被清除的Z緩沖器區(qū)域稱為“目標(biāo)區(qū)域”,把Z緩沖器其余區(qū)域稱為“非目標(biāo)區(qū)域”。
對于該公開實(shí)施例,在1370確定覆蓋目標(biāo)及非目標(biāo)區(qū)域的基元。在1372為了準(zhǔn)備再現(xiàn),保存圖形狀態(tài)信息,禁止按像素測試,允許z及模板寫,以及把模板更新功能設(shè)置成“替換”。清除方法1308的操作取決于為該目標(biāo)區(qū)域指定的新的被清除值(新被清除值)是否與為該非目標(biāo)區(qū)域指定的被清除值(舊被清除值)相同。
在1374如果新被清除值與舊被清除值相同,那么設(shè)置一“清除位”(表3)并使用該被清除值來再現(xiàn)覆蓋整個z緩沖器的基元。在此情形中,把一個統(tǒng)一的被清除值提供給z緩沖器的所有項(xiàng),與它們是否駐留在目標(biāo)區(qū)域或非目標(biāo)區(qū)域內(nèi)無關(guān)??梢?,例如,通過把0塊傳送到ZST的相應(yīng)項(xiàng)來進(jìn)行清除。被清除值可以被更新,但是,由于它們與舊被清除值相同,因此可以繞過這一更新。
在1374如果新被清除值與舊被清除值不同,那么不一起處理目標(biāo)區(qū)域和非目標(biāo)區(qū)域。對于該公開實(shí)施例,在1380使用新被清除值來再現(xiàn)覆蓋目標(biāo)區(qū)域的基元。
由此已經(jīng)公開了降低服務(wù)于z緩沖器所需的內(nèi)存帶寬部分的一種機(jī)制,增加了對其它存儲器操作有效的帶寬。可以把Z數(shù)據(jù)指定為被壓縮,不被壓縮,或具有一參考值。對于一個實(shí)施例,數(shù)據(jù)狀態(tài)表示對于各個數(shù)據(jù)塊的該指定,并且在實(shí)施對數(shù)據(jù)塊的訪問之前檢驗(yàn)這一指定。由于僅傳送一個被壓縮的數(shù)據(jù)塊,因此以被壓縮數(shù)據(jù)塊為目標(biāo)的訪問就消耗較少的帶寬,并且通過參考存儲在一本地寄存器內(nèi)的z值可以滿足以“被清除的”數(shù)據(jù)塊為目標(biāo)的訪問。而且還為壓縮z數(shù)據(jù)以及使這些壓縮/解壓縮操作對用戶應(yīng)用程序透明提供了機(jī)制,并提供了適合于支持這些機(jī)制的高速緩存體系結(jié)構(gòu)。
已經(jīng)提供了這些公開實(shí)施例用于說明本發(fā)明的各種特征。圖形處理領(lǐng)域的技術(shù)人員得益于這一公開,將認(rèn)識到這些公開實(shí)施例的變化和更改,它們依然落入附帶的權(quán)利要求書的精神及范圍之內(nèi)。例如,z緩沖是被稱作深度緩沖的較普通技術(shù)的一種特殊形式。其它形式包括W緩沖,它跟蹤像素的z坐標(biāo),或在不同參考系統(tǒng)例如視覺空間內(nèi)的這些坐標(biāo)的函數(shù)。本發(fā)明可以應(yīng)用于深度緩沖的這些以及其它形式。
權(quán)利要求
1.一種用于處理數(shù)據(jù)的方法,包括把數(shù)據(jù)塊存入第一存儲單元組,每個數(shù)據(jù)塊以被清除,被壓縮,或不被壓縮數(shù)據(jù)狀態(tài)中的一種狀態(tài)存儲;為一選定操作監(jiān)控對該第一存儲單元的操作;以及如果檢測到該選定操作,則實(shí)施一種掩蔽了數(shù)據(jù)塊的數(shù)據(jù)狀態(tài)之間的差異的該選定操作的修改版本。
2.權(quán)利要求1的方法,其中該選定操作是指定數(shù)據(jù)塊的讀,并且實(shí)施該修改的讀包括把被清除或被壓縮狀態(tài)的指定數(shù)據(jù)塊中的任何一個轉(zhuǎn)換成不被壓縮狀態(tài);以及根據(jù)被轉(zhuǎn)換數(shù)據(jù)塊的存儲狀態(tài)讀取該被轉(zhuǎn)換的數(shù)據(jù)塊。
3.權(quán)利要求2的方法,其中轉(zhuǎn)換包括保存一當(dāng)前的處理器狀態(tài);根據(jù)指定數(shù)據(jù)塊的數(shù)據(jù)狀態(tài)讀取該指定數(shù)據(jù)塊;以及以不被壓縮狀態(tài)把讀取的數(shù)據(jù)寫回其第一存儲單元。
4.權(quán)利要求1的方法,其中該選定操作是第一存儲單元組的清除,并且實(shí)施該清除包括把第一存儲單元組中的數(shù)據(jù)塊的狀態(tài)設(shè)置成被清除狀態(tài)。
5.權(quán)利要求4的方法,進(jìn)一步包括更新在當(dāng)前處理器狀態(tài)中的被清除狀態(tài)變量。
6.權(quán)利要求1的方法,其中該選定操作是第一存儲單元組的數(shù)據(jù)塊的指定部分的清除,并且實(shí)施該清除包括如果該指定部分是整個數(shù)據(jù)塊,則把該數(shù)據(jù)塊的數(shù)據(jù)狀態(tài)設(shè)置成被清除狀態(tài);以及如果該指定部分不是整個數(shù)據(jù)塊,則把一基元寫入該第一存儲單元組。
7.權(quán)利要求6的方法,其中該指定部分可以是數(shù)據(jù)塊的深度或模板部分。
8.一種處理z數(shù)據(jù)的方法,包括確定是否實(shí)施z壓縮;如果不實(shí)施z壓縮,則實(shí)施一選定操作;以及如果實(shí)施z壓縮,則實(shí)施該選定操作的一修改形式。
9.權(quán)利要求8的方法,其中確定是否實(shí)施z壓縮包括分配第一存儲區(qū)以存儲z數(shù)據(jù);確定存儲系統(tǒng)是否能夠支持z壓縮;以及如果該存儲系統(tǒng)能夠支持深度壓縮,則分配第二存儲區(qū)以存儲用于該z數(shù)據(jù)的狀態(tài)位。
10.權(quán)利要求9的方法,其中把z數(shù)據(jù)組織成為多個數(shù)據(jù)塊,并且該狀態(tài)位表示一相關(guān)的數(shù)據(jù)塊被壓縮,不被壓縮,或被清除。
11.權(quán)利要求10的方法,其中該選定操作是由應(yīng)用程序?qū)υ摰谝淮鎯^(qū)的讀取,并且實(shí)施該選定操作的一修改形式包括根據(jù)數(shù)據(jù)塊的狀態(tài)位讀取該第一存儲區(qū)內(nèi)的數(shù)據(jù)塊,并以不被壓縮存儲狀態(tài)把讀取的數(shù)據(jù)塊寫回到該第一存儲區(qū)內(nèi);以及在不被壓縮存儲狀態(tài)上執(zhí)行該讀取操作。
12.權(quán)利要求10的方法,其中該選定操作是該第一存儲區(qū)的清除,并且實(shí)施該清除的一修改形式包括把第二存儲區(qū)內(nèi)的狀態(tài)位設(shè)置成表示相關(guān)數(shù)據(jù)處于被清除狀態(tài)的一個值。
13.一種機(jī)器可讀介質(zhì),其上存儲了可被執(zhí)行以實(shí)施一種方法的指令,該方法包括檢測一指令以清除z數(shù)據(jù)塊,每個z數(shù)據(jù)塊都具有由相關(guān)狀態(tài)字段所表示的數(shù)據(jù)狀態(tài);把這些狀態(tài)字段設(shè)置成表示相關(guān)z數(shù)據(jù)塊處于被清除狀態(tài)的一個值;以及把被清除狀態(tài)值更新成表示z數(shù)據(jù)塊的一個被清除值。
14.權(quán)利要求13的機(jī)器可讀介質(zhì),其中設(shè)置狀態(tài)字段包括把0塊傳送到該狀態(tài)字段。
15.一種機(jī)器可讀介質(zhì),其上存儲了可被實(shí)施以執(zhí)行一種方法的指令,該方法包括通過z數(shù)據(jù)塊的應(yīng)用程序檢測讀取或鎖定,每個z數(shù)據(jù)塊都具有由相關(guān)狀態(tài)字段所表示的數(shù)據(jù)狀態(tài);保存處理器狀態(tài);把z數(shù)據(jù)塊轉(zhuǎn)換成不被壓縮數(shù)據(jù)狀態(tài);恢復(fù)該處理器狀態(tài);以及執(zhí)行該讀取或鎖定。
16.權(quán)利要求14的機(jī)器可讀介質(zhì),其中把z數(shù)據(jù)塊轉(zhuǎn)換成不被壓縮數(shù)據(jù)狀態(tài)包括根據(jù)z數(shù)據(jù)塊的數(shù)據(jù)狀態(tài)讀取該z數(shù)據(jù)塊;以及以不被壓縮狀態(tài)寫被讀取的數(shù)據(jù)塊并相應(yīng)地更新其狀態(tài)字段。
17.一種計(jì)算機(jī)系統(tǒng),包括一處理器內(nèi)核;一數(shù)據(jù)緩沖器;與該數(shù)據(jù)緩沖器有關(guān)的一狀態(tài)表,以表示該數(shù)據(jù)緩沖器的各個項(xiàng)的狀態(tài)值;以及一機(jī)器可讀介質(zhì),其上存儲了可由該處理器內(nèi)核執(zhí)行以實(shí)施一種方法的指令,該方法包括截取在該數(shù)據(jù)緩沖器上運(yùn)行的選定指令;修改該數(shù)據(jù)緩沖器及狀態(tài)表,如果需要,以按照該選定指令所期望的狀態(tài)把數(shù)據(jù)放入該數(shù)據(jù)緩沖器;以及執(zhí)行被截取的指令。
18.權(quán)利要求17的計(jì)算機(jī)系統(tǒng),其中該選定指令是清除指令并且修改該數(shù)據(jù)緩沖器包括根據(jù)與項(xiàng)有關(guān)的狀態(tài)值讀取該數(shù)據(jù)緩沖器的項(xiàng);如果需要,解壓縮讀取的項(xiàng);以及以不被壓縮形式把該讀取的項(xiàng)寫入該數(shù)據(jù)緩沖器。
19.權(quán)利要求18的計(jì)算機(jī)系統(tǒng),進(jìn)一步包括更新狀態(tài)表內(nèi)的該讀取的項(xiàng)的狀態(tài)值。
20.權(quán)利要求18的計(jì)算機(jī)系統(tǒng),其中讀取該數(shù)據(jù)緩沖器的項(xiàng)包括為一個具有被清除狀態(tài)值的項(xiàng)從本地寄存器內(nèi)讀取被清除值。
21.權(quán)利要求20的計(jì)算機(jī)系統(tǒng),進(jìn)一步包括把該被清除值寫入該數(shù)據(jù)緩沖器并更新該狀態(tài)表。
全文摘要
本發(fā)明提供了一種用于按照對用戶透明的方式實(shí)施Z壓縮的機(jī)制。為選定的操作而監(jiān)控與Z數(shù)據(jù)緩沖器內(nèi)的存儲單元有關(guān)的Z數(shù)據(jù)塊。這些操作可以包括清除或鎖定操作。如果檢測到選定的操作,則實(shí)施該選定操作的一修改版本以掩蔽數(shù)據(jù)塊存儲狀態(tài)之間的差異。
文檔編號G06T15/10GK1449544SQ01814880
公開日2003年10月15日 申請日期2001年6月21日 優(yōu)先權(quán)日2000年6月30日
發(fā)明者D·奧倫斯蒂恩, Z·斯佩爾伯, G·薩夫蘭斯基, G·佩勒德 申請人:英特爾公司