本發(fā)明涉及數(shù)據(jù)處理系統(tǒng),特別是涉及一種在數(shù)據(jù)處理系統(tǒng)中將數(shù)據(jù)存儲在存儲器中的方法和設(shè)備,特別是涉及一種用于在計算機(jī)圖形處理系統(tǒng)中存儲紋理數(shù)據(jù)和幀緩沖器數(shù)據(jù)的方法和設(shè)備。
背景技術(shù):
作為圖形處理的一部分,常見的是執(zhí)行所謂的“紋理映射(texturemapping)”,即,通過將所謂的紋理或紋理數(shù)據(jù)應(yīng)用于待渲染的表面來為渲染輸出(例如,用于顯示的輸出幀)的采樣位置生成顏色(或其它數(shù)據(jù))。例如,可通過將預(yù)定義的“紋理”應(yīng)用于表示對象的圖元(primitive)集合來生成對象上的表面細(xì)節(jié)。這些紋理通常作為存儲的紋理元素或“紋素(texels)”陣列提供,各個紋素表示給定紋理數(shù)據(jù)(例如,顏色、亮度和/或光/影等值),然后紋素被映射至對應(yīng)元素(例如(實際上,通常是)正在生成的渲染輸出的采樣位置的集合)上。所存儲的紋理元素(數(shù)據(jù))的陣列通常被稱作“紋理貼圖(texturemap)”。
使用紋理和紋理映射可提供更高的圖像質(zhì)量,但是有若干缺點。具體地講,存儲紋理數(shù)據(jù)并且在使用時訪問它可對圖形處理裝置提出例如高的存儲和帶寬要求(或者相反,在不滿足這些要求的情況下導(dǎo)致性能損失)。這對執(zhí)行圖形處理的移動(便攜式)裝置尤其顯著,因為這些裝置的例如存儲、帶寬和功率資源和能力本來就有限。
因此已知的是嘗試以“壓縮的”形式存儲這種紋理數(shù)據(jù)以嘗試減小可能加到裝置的例如存儲和帶寬負(fù)擔(dān)。
存儲用于圖形處理的紋理數(shù)據(jù)(無論是否壓縮)時的另一考慮在于,圖形處理系統(tǒng)通常將需要能夠以隨機(jī)訪問方式訪問存儲的紋理數(shù)據(jù)(因為預(yù)先不知道在任何特定時間將需要紋理貼圖的哪一部分或哪些部分)。這對紋理數(shù)據(jù)的存儲給予了另一約束,因為相應(yīng)可取的是能夠以適合于隨機(jī)訪問所存儲的數(shù)據(jù)(并且效率高)的方式存儲紋理數(shù)據(jù)。
申請人之前在其美國專利us8542939b2、us9014496b2、us8990518b2和us9116790中提出了用于在存儲器中存儲數(shù)據(jù)(例如,用于圖形處理的紋理數(shù)據(jù))的改進(jìn)布置方式。在該布置方式中,這樣存儲數(shù)據(jù)陣列(例如,紋理數(shù)據(jù)陣列):將數(shù)據(jù)陣列分割成多個塊,將數(shù)據(jù)陣列的各個相應(yīng)塊分割成多個子塊,將表示數(shù)據(jù)陣列的各個相應(yīng)子塊的數(shù)據(jù)存儲在存儲器中,并且針對數(shù)據(jù)陣列所分割成的各個相應(yīng)塊存儲報頭數(shù)據(jù)塊,所述報頭數(shù)據(jù)塊包含涉及和/或用于報頭數(shù)據(jù)塊所涉及的數(shù)據(jù)陣列的塊的子塊集合的數(shù)據(jù)。
盡管有申請人早前的美國專利中所描述的改進(jìn)布置方式,申請人相信用于在存儲器中存儲數(shù)據(jù)(例如,用于圖形處理的紋理數(shù)據(jù))的布置方式仍存在改進(jìn)空間。
技術(shù)實現(xiàn)要素:
根據(jù)本發(fā)明的第一方面,提供了一種在數(shù)據(jù)處理系統(tǒng)中存儲數(shù)據(jù)陣列的方法,所述數(shù)據(jù)陣列包括多個數(shù)據(jù)位置,其中:
要存儲的數(shù)據(jù)陣列被分割成多個塊,各個塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;
數(shù)據(jù)陣列的各個相應(yīng)塊被分割成多個子塊,各個子塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;并且
表示數(shù)據(jù)陣列的子塊的數(shù)據(jù)被存儲在存儲器中,并且針對數(shù)據(jù)陣列所分割成的各個相應(yīng)塊存儲報頭數(shù)據(jù)塊,所述報頭數(shù)據(jù)塊包含與數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊的子塊有關(guān)的數(shù)據(jù);
所述方法包括以下步驟:
確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置是否與相同數(shù)據(jù)值關(guān)聯(lián);以及
當(dāng)確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)時:
在數(shù)據(jù)陣列的該塊的報頭數(shù)據(jù)塊中存儲該塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)的指示以及與該塊中的各個數(shù)據(jù)位置關(guān)聯(lián)的所述相同數(shù)據(jù)值的指示。
根據(jù)本發(fā)明的第二方面,提供了一種用于在存儲器中存儲數(shù)據(jù)陣列的設(shè)備,該設(shè)備包括:
處理電路,該處理電路被配置為:
將要存儲的數(shù)據(jù)陣列分割成多個塊,各個塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;
將數(shù)據(jù)陣列的各個相應(yīng)塊分割成多個子塊,各個子塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;
將表示數(shù)據(jù)陣列的子塊的數(shù)據(jù)存儲在存儲器中;并且
針對數(shù)據(jù)陣列所分割成的各個相應(yīng)塊存儲報頭數(shù)據(jù)塊,所述報頭數(shù)據(jù)塊包含與數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊的子塊有關(guān)的數(shù)據(jù);
其中,所述設(shè)備還包括處理電路,該處理電路被配置為:
確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置是否與相同數(shù)據(jù)值關(guān)聯(lián);并且
當(dāng)確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)時:
在數(shù)據(jù)陣列的該塊的報頭數(shù)據(jù)塊中存儲該塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)的指示以及與該塊中的各個數(shù)據(jù)位置關(guān)聯(lián)的所述相同數(shù)據(jù)值的指示。
在本發(fā)明中,為了存儲數(shù)據(jù)陣列,要存儲在存儲器中的數(shù)據(jù)陣列(如上所述,可以是紋理數(shù)據(jù)陣列或者幀緩沖器數(shù)據(jù)陣列)被分割成多個塊,然后各個塊被再分成多個子塊。表示子塊的數(shù)據(jù)然后與報頭數(shù)據(jù)塊一起被存儲在存儲器中,所述報頭數(shù)據(jù)塊包含報頭數(shù)據(jù)所涉及的塊的各個相應(yīng)子塊的數(shù)據(jù)。
在本發(fā)明中,進(jìn)一步確定數(shù)據(jù)陣列所分割成的塊(因此,該數(shù)據(jù)塊的所有子塊)的所有數(shù)據(jù)位置是否具有相同數(shù)據(jù)值。在這種情況下,其指示與該塊的各個數(shù)據(jù)位置所關(guān)聯(lián)的所述相同數(shù)據(jù)值的指示一起被存儲在所談?wù)摰臄?shù)據(jù)陣列的塊的報頭數(shù)據(jù)塊中。
如下面將進(jìn)一步討論的,那么這可方便數(shù)據(jù)陣列中的這些“相同”數(shù)據(jù)值塊的更好壓縮,并且相應(yīng)地,可降低讀取并使用所存儲的數(shù)據(jù)陣列時的處理和帶寬要求。
具體地講,例如,本發(fā)明針對具有與其各個數(shù)據(jù)位置關(guān)聯(lián)的相同數(shù)據(jù)值的數(shù)據(jù)塊的子塊可不再需要生成并存儲單獨的子塊數(shù)據(jù)。相應(yīng)地,這可不再需要執(zhí)行如下的兩級串行“查找”:首先提取數(shù)據(jù)陣列的塊的報頭數(shù)據(jù),然后提取數(shù)據(jù)陣列的塊的子塊的子塊數(shù)據(jù)。那么這可改進(jìn)數(shù)據(jù)陣列的“相同”數(shù)據(jù)值塊的延遲。
另外,如下面將進(jìn)一步討論的,申請人已認(rèn)識到,數(shù)據(jù)陣列內(nèi)的這些相同數(shù)據(jù)值塊以本發(fā)明的方式來標(biāo)識并且相應(yīng)地編碼(因此,壓縮)可能相對簡單,從而允許以壓縮形式存儲數(shù)據(jù)陣列(例如,紋理數(shù)據(jù)陣列)的更高效和有效的方法和設(shè)備。
本發(fā)明中要存儲的數(shù)據(jù)陣列可以是任何合適的數(shù)據(jù)陣列。它應(yīng)該包括多個數(shù)據(jù)元素(條目),各個數(shù)據(jù)元素占據(jù)陣列中的不同位置。實施方式中的數(shù)據(jù)陣列表示圖像。
在一個優(yōu)選實施方式中,數(shù)據(jù)陣列是圖形紋理。
然而,本發(fā)明不僅僅適用于圖形紋理,可同樣用于其它形式的數(shù)據(jù)陣列。例如,申請人相信本發(fā)明可同樣用于在例如圖形處理系統(tǒng)中存儲幀緩沖器數(shù)據(jù)(作為幀緩沖器格式使用)以及隨顯示控制器一起使用。因此,在實施方式中,數(shù)據(jù)陣列是要存儲在幀緩沖器中(例如用于顯示)的數(shù)據(jù)幀。
在實施方式中,本發(fā)明不僅在存儲紋理數(shù)據(jù)時使用,而且在圖形處理系統(tǒng)中作為幀緩沖器格式使用。因此,本發(fā)明還擴(kuò)展至將本發(fā)明的布置方式不僅用于存儲紋理數(shù)據(jù)而且作為其幀緩沖器格式使用的圖形處理系統(tǒng)和圖形處理器。
本發(fā)明還可用在例如圖像信號處理(圖像信號處理器)以及視頻編碼和解碼(視頻編碼器和解碼器)中。
要存儲的數(shù)據(jù)陣列(例如,紋理)所分割成的塊可采取任何合適和期望的形式。各個塊應(yīng)該包括陣列中的數(shù)據(jù)元素(位置)的子集,即,對應(yīng)于陣列的特定區(qū)域(例如,面積或體積)。在實施方式中,陣列被分割成不交疊并且大小和形狀規(guī)則(優(yōu)選為矩形(包括正方形))的塊。在實施方式中塊為正方形,但是如果需要可使用其它布置方式。實施方式中的塊對應(yīng)于將用在所談?wù)摰臄?shù)據(jù)處理系統(tǒng)中的塊大小。因此,在基于拼塊的圖形處理系統(tǒng)的情況下,實施方式中的塊對應(yīng)于圖形處理系統(tǒng)的渲染處理所操作的拼塊(具有與其相同的大小和配置)。
(在基于拼塊的渲染中,渲染處理的二維輸出陣列(“渲染目標(biāo)”)(例如并且通常,將被顯示以顯示正在渲染的場景)被再分割成或者劃分成多個較小的區(qū)域(通常被稱作“拼塊”)以用于渲染處理。拼塊(子區(qū)域)各自被單獨地(通常一個接一個)渲染。所渲染的拼塊(子區(qū)域)然后被重組以提供完整輸出陣列(幀)(渲染目標(biāo)),例如以用于顯示。
通常用于“拼貼(tiling)”和“基于拼塊的”渲染的其它術(shù)語包括“分塊”(子區(qū)域被稱作“區(qū)塊”)和“桶(bucket)”渲染。為了方便本文中將使用術(shù)語“拼塊”和“拼貼”,但是應(yīng)該理解,這些術(shù)語旨在涵蓋所有另選和等同術(shù)語和技術(shù)。)
在實施方式中,數(shù)據(jù)陣列被分割成8×8、16×4或16×16塊(即,8×8、16×4或16×16陣列位置(條目)的塊)。在實施方式中,使用16×16塊。因此,在紋理貼圖的情況下,例如,在實施方式中各個塊將對應(yīng)于16×16(或者8×8或16×4)紋素,在用于幀緩沖器的幀的情況下,在實施方式中各個塊將對應(yīng)于幀的16×16(或者8×8或16×4)像素或采樣位置。其它布置方式當(dāng)然也將是可以的。
數(shù)據(jù)陣列的各個塊可被類似地分割成任何合適和期望的子塊集合。同樣,子塊應(yīng)該包括塊所涉及的數(shù)據(jù)元素(位置)的子集,在實施方式中是非交疊的并且大小和形狀規(guī)則,優(yōu)選為矩形(包括正方形),并且在實施方式中為正方形(至少在數(shù)據(jù)塊本身為正方形的情況下)。其它布置方式當(dāng)然也將是可以的。在實施方式中,各個數(shù)據(jù)塊被分割成4×4數(shù)據(jù)位置子塊。在使用16×16數(shù)據(jù)塊的情況下,各個數(shù)據(jù)塊可相應(yīng)地被分割成十六個4×4數(shù)據(jù)位置(數(shù)據(jù)元素)子塊。
表示數(shù)據(jù)陣列的子塊的數(shù)據(jù)可以是將允許子塊的數(shù)據(jù)位置的數(shù)據(jù)值被再現(xiàn)的任何合適和期望的數(shù)據(jù)。
表示所存儲的子塊的數(shù)據(jù)可采取任何合適和期望的形式,并且可例如取決于正存儲的數(shù)據(jù)的本質(zhì)(例如,它是不是紋理、用于幀緩沖器的幀、它是否以及如何被編碼、壓縮等)。所存儲的子塊數(shù)據(jù)應(yīng)該是(優(yōu)選是)子塊所對應(yīng)(表示)的數(shù)據(jù)陣列位置(條目)的一些或所有數(shù)據(jù)。
表示子塊的數(shù)據(jù)可直接指示子塊所對應(yīng)的數(shù)據(jù)陣列元素(位置)的數(shù)據(jù)陣列值,或者可以是可獲得這些數(shù)據(jù)陣列值的數(shù)據(jù)(即,要用于確定以及允許確定數(shù)據(jù)陣列元素(位置)的數(shù)據(jù)陣列值的數(shù)據(jù))。后者將是例如所存儲的數(shù)據(jù)陣列在存儲之前被編碼和/或壓縮的情況。因此,在實施方式中,本發(fā)明包括對數(shù)據(jù)陣列中的原始數(shù)據(jù)條目進(jìn)行編碼(例如,壓縮)以生成那些數(shù)據(jù)條目的數(shù)據(jù)值的編碼(例如,壓縮)的表示,然后將數(shù)據(jù)值的編碼(例如,壓縮)的表示存儲為表示子塊的數(shù)據(jù)。
在紋理的情況下,例如,表示所存儲的子塊的數(shù)據(jù)應(yīng)該是允許確定子塊的適當(dāng)紋理數(shù)據(jù)(紋素值)的數(shù)據(jù)。這種紋理數(shù)據(jù)應(yīng)該包括例如顏色值的集合(紅、綠、藍(lán)(rgb)、顏色和透明度值的集合(紅、綠、藍(lán)、α(rgba))、亮度和色度值的集合、陰影(光)貼圖值的集合、法線貼圖(凹凸貼圖)值的集合、z值(深度值)、模板值、亮度值(亮度紋理)、亮度-α-紋理和/或光澤貼圖等。
在要存儲在幀緩沖器中的用于顯示的幀的情況下,表示所存儲的子塊的數(shù)據(jù)應(yīng)該是允許確定子塊的適當(dāng)像素和/或采樣位置數(shù)據(jù)(值)的數(shù)據(jù)。這種像素數(shù)據(jù)可包括例如適當(dāng)顏色(rgb)值或者亮度和色度值。
表示子塊的數(shù)據(jù)可按照任何合適和期望的方式來存儲和提供。優(yōu)選地,存儲表示數(shù)據(jù)陣列的各個相應(yīng)子塊(可獲得數(shù)據(jù)陣列的各個子塊)的數(shù)據(jù)。
在尤其優(yōu)選的實施方式中,對于數(shù)據(jù)陣列的子塊,除了報頭數(shù)據(jù)塊中所包含的報頭數(shù)據(jù)之外還可(優(yōu)選)存儲子塊數(shù)據(jù)。在這種情況下,對于數(shù)據(jù)陣列的塊(并且例如,多個塊),包含涉及所談?wù)摰臄?shù)據(jù)陣列的塊的子塊的數(shù)據(jù)的報頭數(shù)據(jù)塊將與所談?wù)摰臄?shù)據(jù)陣列的塊所分割成的數(shù)據(jù)陣列的一個或更多個(例如,各個)子塊的單獨子塊數(shù)據(jù)集合一起存儲。
盡管除了數(shù)據(jù)陣列所分割成的每一個塊的報頭數(shù)據(jù)塊之外還可存儲數(shù)據(jù)陣列的塊的子塊的單獨子塊數(shù)據(jù),在尤其優(yōu)選的實施方式中,(除了數(shù)據(jù)陣列的塊的報頭數(shù)據(jù)之外)數(shù)據(jù)陣列的塊的子塊的附加的單獨子塊數(shù)據(jù)的存儲取決于所談?wù)摰臄?shù)據(jù)陣列的塊的內(nèi)容(具體地講,數(shù)據(jù)位置的數(shù)據(jù)值)和/或基于所談?wù)摰臄?shù)據(jù)陣列的塊的內(nèi)容(具體地講,數(shù)據(jù)位置的數(shù)據(jù)值)來確定。
因此在優(yōu)選實施方式中,例如并且優(yōu)選地,對于數(shù)據(jù)陣列所分割成的給定塊表示數(shù)據(jù)陣列的子塊的數(shù)據(jù)可被(優(yōu)選選擇性地)存儲在所談?wù)摰臄?shù)據(jù)陣列的塊的報頭數(shù)據(jù)塊中(例如,僅在報頭數(shù)據(jù)塊中),或者可被存儲為單獨子塊數(shù)據(jù),和/或可被存儲在報頭數(shù)據(jù)塊中并且存儲為單獨子塊數(shù)據(jù)。
在尤其優(yōu)選的實施方式中,如果確定塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián),則對于數(shù)據(jù)陣列的該塊僅存儲報頭數(shù)據(jù)(報頭數(shù)據(jù)塊),但是如果確定數(shù)據(jù)陣列的塊的數(shù)據(jù)位置不是全部與相同數(shù)據(jù)值關(guān)聯(lián)(具有不同的數(shù)據(jù)值),則存儲數(shù)據(jù)陣列的該塊的報頭數(shù)據(jù)塊以及所談?wù)摰膲K的子塊的單獨子塊數(shù)據(jù)集合。
因此,在尤其優(yōu)選的實施方式中,本發(fā)明包括(并且處理電路被配置為):
當(dāng)確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置不與相同數(shù)據(jù)值關(guān)聯(lián)時:
存儲數(shù)據(jù)陣列的該塊的報頭數(shù)據(jù)塊以及數(shù)據(jù)陣列所涉及的塊的子塊的單獨子塊數(shù)據(jù)集合二者,該報頭數(shù)據(jù)塊包含與數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊有關(guān)的子塊的數(shù)據(jù);
并且
當(dāng)確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)時:
對于數(shù)據(jù)陣列的該塊存儲報頭數(shù)據(jù)塊,該報頭數(shù)據(jù)塊包含塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)的指示以及與塊中的各個數(shù)據(jù)位置關(guān)聯(lián)的相同數(shù)據(jù)值的指示,而無需另外存儲數(shù)據(jù)陣列的塊所涉及的子塊的任何另外的單獨子塊數(shù)據(jù)。
相應(yīng)地,在本發(fā)明的優(yōu)選實施方式中,將存在數(shù)據(jù)陣列的一些塊僅存儲報頭數(shù)據(jù)塊,并且數(shù)據(jù)陣列的其它塊存儲報頭數(shù)據(jù)塊和單獨的附加子塊數(shù)據(jù)二者。
在針對數(shù)據(jù)陣列的塊存儲單獨子塊數(shù)據(jù)(除了報頭數(shù)據(jù)之外)的情況下,則在優(yōu)選實施方式中,存在針對數(shù)據(jù)陣列的塊所分割成的各個子塊存儲的單獨子塊數(shù)據(jù)集合(即,將存在與各個子塊關(guān)聯(lián)的子塊數(shù)據(jù)集合,(例如并且優(yōu)選地)從所述子塊數(shù)據(jù)集合可獲得所談?wù)摰淖訅K的數(shù)據(jù)值(例如并且優(yōu)選地)而無需參考任何其它子塊的子塊數(shù)據(jù)集合)。
優(yōu)選地,對于數(shù)據(jù)陣列的塊所分割成的各個子塊可存儲子單獨塊數(shù)據(jù)集合。
在這種布置方式中,對于數(shù)據(jù)陣列的塊所分割成的各個子塊可存儲(在實施方式中存儲)單獨子塊數(shù)據(jù)集合。在這種情況下,為所談?wù)摰臄?shù)據(jù)陣列的塊存儲的子塊數(shù)據(jù)集合的數(shù)量將等于數(shù)據(jù)陣列的塊所分割成的子塊的數(shù)量。
在其它情況下,數(shù)據(jù)陣列的塊所分割成的子塊中的多個子塊可共享(共享)相同的子塊數(shù)據(jù)集合。在這種情況下,針對所談?wù)摰亩鄠€子塊優(yōu)選地存儲一個(以及僅一個)子塊集合,使得針對所談?wù)摰臄?shù)據(jù)陣列的塊存儲的子塊數(shù)據(jù)集合的數(shù)量將小于數(shù)據(jù)陣列的塊所分割成的子塊的數(shù)量。在這些布置方式中,可存在由所談?wù)摰臄?shù)據(jù)陣列的塊所分割成的所有子塊共享(以使用)的一個子塊數(shù)據(jù)集合,或者子塊數(shù)據(jù)集合可由數(shù)據(jù)塊所分割成的一些而非所有子塊共享。
在除了報頭數(shù)據(jù)塊之外還存儲子塊數(shù)據(jù)的情況下,表示(用于)所述子塊的附加數(shù)據(jù)可按照任何期望且合適的方式和布置方式存儲在存儲器中。
在實施方式中,給定數(shù)據(jù)塊的子塊集合(表示數(shù)據(jù)塊的子塊集合中的子塊的數(shù)據(jù))被一個接一個地存儲在存儲器中的鄰接位置處。
類似地,在實施方式中,給定數(shù)據(jù)陣列的子塊集合(即,數(shù)據(jù)陣列所分割成的各個塊的相應(yīng)子塊集合)被一個接一個地一起存儲在存儲器中。在實施方式中,數(shù)據(jù)陣列的子塊集合被存儲在存儲器中的為此指派(留出)的主體緩沖區(qū)中。
本發(fā)明中所存儲的報頭數(shù)據(jù)塊可根據(jù)期望來配置和布置。針對正在存儲的數(shù)據(jù)陣列所分割成的各個塊將存在(優(yōu)選地存在)單獨的報頭數(shù)據(jù)塊。在優(yōu)選實施方式中,各個報頭數(shù)據(jù)塊為相同的固定(優(yōu)選地預(yù)定的)大小。更優(yōu)選地,各個報頭數(shù)據(jù)塊具有適合于(優(yōu)選地針對其優(yōu)化)在所談?wù)摰臄?shù)據(jù)處理系統(tǒng)中提取和緩存的大小。在優(yōu)選實施方式中,各個報頭數(shù)據(jù)塊的大小為16、32或64字節(jié),優(yōu)選地為16或32字節(jié)。
報頭數(shù)據(jù)塊可按照任何期望且合適的方式和布置方式存儲在存儲器中。在實施方式中,數(shù)據(jù)陣列的所有報頭數(shù)據(jù)塊被一起存儲在存儲器的給定部分中,其可被相應(yīng)地認(rèn)為是所存儲的數(shù)據(jù)陣列的“報頭緩沖區(qū)”。因此,在實施方式中,給定數(shù)據(jù)陣列的所有報頭數(shù)據(jù)塊被存儲在該數(shù)據(jù)陣列的報頭緩沖區(qū)中。
報頭數(shù)據(jù)塊優(yōu)選地被存儲在可預(yù)測的存儲器地址(位置)處。在實施方式中,它們被存儲在可從陣列中的報頭數(shù)據(jù)塊所涉及的數(shù)據(jù)元素和/或數(shù)據(jù)塊的位置預(yù)測(確定)的存儲器地址(位置)處。因此,在實施方式中,各個報頭數(shù)據(jù)塊的存儲位置(存儲器地址)(例如,在存儲器中具有已知位置的報頭緩沖區(qū)內(nèi))取決于數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊在數(shù)據(jù)陣列內(nèi)的位置。
數(shù)據(jù)陣列的給定塊的報頭數(shù)據(jù)塊的內(nèi)容可取決于(優(yōu)選地取決于)該塊所對應(yīng)的數(shù)據(jù)位置的內(nèi)容(數(shù)據(jù)值)。
具體地講,根據(jù)本發(fā)明,在確定數(shù)據(jù)陣列的塊的所有數(shù)據(jù)位置具有相同數(shù)據(jù)值的情況下,則報頭數(shù)據(jù)塊將包含該事實以及用于該塊的數(shù)據(jù)位置的所述相同數(shù)據(jù)值的指示。
塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)的指示可采取任何合適和期望的形式,例如(優(yōu)選地)報頭數(shù)據(jù)塊中的合適標(biāo)志被預(yù)定義為指示這種情況。
相應(yīng)地,與塊中的數(shù)據(jù)位置關(guān)聯(lián)的所述相同數(shù)據(jù)值的指示可采取任何合適和期望的形式。因此,例如,它可包括指向“相同”數(shù)據(jù)值所存儲的位置的指針。在優(yōu)選實施方式中,包括在報頭數(shù)據(jù)塊中的指示允許直接從報頭數(shù)據(jù)塊中的指示確定所述相同數(shù)據(jù)值。因此,在尤其優(yōu)選的實施方式中,與塊中的各個數(shù)據(jù)位置關(guān)聯(lián)的相同數(shù)據(jù)值被存儲在報頭數(shù)據(jù)塊中。該數(shù)據(jù)值可按照壓縮(編碼)形式被存儲,或者可按照未壓縮的形式被存儲。在優(yōu)選實施方式中(并且在報頭數(shù)據(jù)塊的大小允許的情況下),與塊中的各個數(shù)據(jù)位置關(guān)聯(lián)的相同數(shù)據(jù)值按照未壓縮的形式存儲在報頭數(shù)據(jù)塊中。
報頭數(shù)據(jù)塊中所指示的實際數(shù)據(jù)值可對應(yīng)于并且應(yīng)該對應(yīng)于存儲在數(shù)據(jù)陣列中的所談?wù)摰臄?shù)據(jù)值。因此,如上所述,例如,報頭數(shù)據(jù)塊中所指示的數(shù)據(jù)值可包括顏色值、亮度和色度值等。
在塊的數(shù)據(jù)位置不是全部具有相同數(shù)據(jù)值的情況下,則這種塊的報頭數(shù)據(jù)塊優(yōu)選地包含針對所談?wù)摰臄?shù)據(jù)陣列的塊的與所談?wù)摰淖訅K有關(guān)的其它數(shù)據(jù)和信息。
在針對數(shù)據(jù)陣列所分割成的塊存儲單獨的子塊數(shù)據(jù)的情況下,則在優(yōu)選實施方式中,數(shù)據(jù)陣列的該塊的報頭數(shù)據(jù)塊包含指示數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊的子塊的數(shù)據(jù)在存儲器中的位置的指針數(shù)據(jù)(用于其的字段)。這種指針數(shù)據(jù)可采取任何期望且合適的形式。例如,它可直接指示子塊數(shù)據(jù)的存儲器位置(地址),或者間接地指示它(例如,作為相對于某一其它(已知)存儲器位置(地址)的偏移)。
這種報頭數(shù)據(jù)塊可包括指向其相應(yīng)各個子塊的單獨的指針,但是在實施方式中,這種報頭數(shù)據(jù)塊包括指向報頭所涉及的子塊集合在存儲器中所存儲的基礎(chǔ)(例如,起始)位置(基礎(chǔ)(例如,起始)地址)的指針數(shù)據(jù)(用于其的字段),然后從該基礎(chǔ)(例如,起始)存儲器位置獲得各個子塊的位置。這可有助于減小報頭數(shù)據(jù)塊中需要存儲的指針數(shù)據(jù)的量。在實施方式中,指向報頭所涉及的子塊集合在存儲器中的基礎(chǔ)位置的指針數(shù)據(jù)指示從所談?wù)摰臄?shù)據(jù)陣列的報頭緩沖區(qū)在存儲器中的起點到所談?wù)摰膱箢^所涉及的存儲的子塊集合在存儲器中的起點的偏移(在實施方式中,按字節(jié))。
優(yōu)選地,這種報頭數(shù)據(jù)塊然后還包括指示報頭數(shù)據(jù)塊所涉及的存儲的子塊(所存儲的子塊的數(shù)據(jù))在存儲器中的大小(例如,單位為字節(jié))的數(shù)據(jù)(用于其的字段)。
因此,在實施方式中,這種報頭數(shù)據(jù)塊包括指示報頭所對應(yīng)的子塊集合的數(shù)據(jù)的基礎(chǔ)(例如,起始)存儲器位置的指針數(shù)據(jù)(用于其的字段),以及指示子塊集合中的一些或所有子塊(在實施方式中,各個子塊)的數(shù)據(jù)(在存儲器中)的大小的數(shù)據(jù)。
(各個子塊應(yīng)該被相應(yīng)地存儲在存儲器中與所指示的在前子塊的大小(即,在它之前存儲的子塊的大小)對應(yīng)的位置處(相對于所談?wù)摰淖訅K集合的基礎(chǔ)存儲器位置)。)
在實施方式中,針對報頭所涉及的數(shù)據(jù)塊的子塊集合中的各個子塊存在單獨的大小指示(字段)。在這種情況下,報頭數(shù)據(jù)塊將包括報頭所涉及的數(shù)據(jù)塊的子塊集合中的子塊那么多的子塊大小指示(字段)。
在一個實施方式中,各個報頭數(shù)據(jù)塊包含指針數(shù)據(jù)以及其它有用數(shù)據(jù)二者。這在報頭數(shù)據(jù)塊被配置為與突發(fā)大小(例如,64字節(jié))匹配的情況下尤其會是可能的,因為在這種情況下各個報頭數(shù)據(jù)塊將可能有容量以包括比僅僅指針數(shù)據(jù)更多的數(shù)據(jù)。在實施方式中,任何這種額外的報頭數(shù)據(jù)塊數(shù)據(jù)容量(至少部分地)由其它有用數(shù)據(jù)填充。例如,這種其它有用數(shù)據(jù)可包括(在實施方式中,包括)在對報頭數(shù)據(jù)塊所涉及的子塊進(jìn)行解碼時要共同用于所述子塊的數(shù)據(jù)。它還或替代包括涉及特定子塊的數(shù)據(jù),但是在實施方式中,這種數(shù)據(jù)僅被包括在報頭數(shù)據(jù)塊中,如果在報頭數(shù)據(jù)塊中已包括任何“公共”(共享)數(shù)據(jù)之后仍存在空間的話。
在實施方式中,可包括在報頭數(shù)據(jù)塊中的一個或更多個子塊大小值被預(yù)定義為(被留出用于)指示特定的特殊情況(例如,特定類型的數(shù)據(jù)塊或者特定類型的子塊,而非“真實”子塊大小)。在實施方式中,這些特殊情況子塊大小值是子塊實際上不會以其存儲的大小,例如0或1。
在實施方式中,一個大小指示值被預(yù)定義為指示“拷貝塊”子塊,即,該大小指示所涉及的子塊是先前子塊(數(shù)據(jù)陣列中緊挨在前的子塊)的拷貝(與其相同),即,用于先前子塊的相同數(shù)據(jù)應(yīng)該用于所談?wù)摰淖訅K。
如果識別并指示這種“拷貝”子塊,則針對該“拷貝”子塊不存儲單獨子塊數(shù)據(jù)集合(并且解碼器被配置并觸發(fā)以使用其它子塊的數(shù)據(jù))。
在報頭數(shù)據(jù)塊包括或者可包括指向存儲器中數(shù)據(jù)陣列的子塊的數(shù)據(jù)所存儲的位置的指針數(shù)據(jù)的布置方式中,則在尤其優(yōu)選的實施方式中,指針數(shù)據(jù)的特定(優(yōu)選地選擇的)值用于指示(被預(yù)定義為指示)報頭數(shù)據(jù)塊所涉及的塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。
最優(yōu)選地,在報頭數(shù)據(jù)塊具有上述數(shù)據(jù)結(jié)構(gòu)的情況下,則“拷貝塊”子塊大小指示也能夠被用于指示塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。在這種情況下,在報頭數(shù)據(jù)塊的特定(優(yōu)選地選擇的)位置中存在這種“拷貝塊”子塊大小指示值被定義為指示并且用于指示塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。優(yōu)選地,報頭數(shù)據(jù)塊所涉及的數(shù)據(jù)塊的子塊集合中的第一子塊的大小指示(字段)用于此目的,即,如果在報頭數(shù)據(jù)塊中的該大小指示字段中存在適當(dāng)預(yù)定義的大小指示值,則這被認(rèn)為是指示塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。
因此,在尤其優(yōu)選的實施方式中,在報頭數(shù)據(jù)塊中的特定(優(yōu)選選擇的,優(yōu)選預(yù)定義的)位置(例如,字段)中存在特定(優(yōu)選地選擇的,優(yōu)選地預(yù)定義的)數(shù)據(jù)值用于指示塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。相應(yīng)地,在報頭數(shù)據(jù)塊內(nèi)在數(shù)據(jù)陣列的塊不是其所有數(shù)據(jù)位置具有相同數(shù)據(jù)值的情況下可用于(用于)其它目的的報頭數(shù)據(jù)塊內(nèi)的特定位置(例如,字段)中存在特定數(shù)據(jù)值優(yōu)選用于指示塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。
因此,在優(yōu)選實施方式中,各個報頭數(shù)據(jù)塊具有預(yù)定義的字段以用于存儲指針數(shù)據(jù),所述指針數(shù)據(jù)將用于確定在存儲器中將用于再現(xiàn)報頭數(shù)據(jù)塊所涉及的數(shù)據(jù)陣列的子塊的數(shù)據(jù)所存儲的位置,可包括在報頭數(shù)據(jù)塊中的至少一個指針數(shù)據(jù)值被預(yù)定義為指示塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。最優(yōu)選地,指針數(shù)據(jù)值只有在出現(xiàn)在報頭數(shù)據(jù)塊內(nèi)的特定指針數(shù)據(jù)值字段中時才被解釋為指示塊內(nèi)的所有數(shù)據(jù)位置值與相同數(shù)據(jù)值關(guān)聯(lián)。因此,最優(yōu)選地,報頭數(shù)據(jù)塊內(nèi)的特定指針數(shù)據(jù)值字段中的特定指針數(shù)據(jù)值的組合被預(yù)定義為指示塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)。
相應(yīng)地,對于“相同數(shù)據(jù)值”塊,與塊中的各個數(shù)據(jù)位置關(guān)聯(lián)的所述相同數(shù)據(jù)值的指示也被存儲在報頭數(shù)據(jù)塊內(nèi)的特定(優(yōu)選地選擇的)位置中。因此,最優(yōu)選地,存在將在數(shù)據(jù)陣列的塊的所有數(shù)據(jù)位置具有相同數(shù)據(jù)值時使用的預(yù)定義結(jié)構(gòu)的報頭數(shù)據(jù)塊。
在尤其優(yōu)選的實施方式中,除了本文所述的“相同數(shù)據(jù)值”塊的特定處置之外,數(shù)據(jù)陣列和報頭數(shù)據(jù)以及單獨的子塊數(shù)據(jù)(如果存在的話)按照申請人的美國專利us68542939b2、us9014496b2、us8990518b2和us9116790b2中所描述的方式被布置和編碼。
將理解,為了存儲和編碼目的,應(yīng)該針對數(shù)據(jù)陣列所分割成的多個塊(優(yōu)選地針對各個塊)重復(fù)(優(yōu)選地重復(fù))上述處理。相應(yīng)地,優(yōu)選地針對要存儲(例如,并且優(yōu)選地,表示要顯示的幀序列)的多個數(shù)據(jù)陣列執(zhí)行并重復(fù)所述處理。
數(shù)據(jù)陣列的數(shù)據(jù)可按照任何合適和期望的方式被處理以生成子塊和報頭數(shù)據(jù)塊的數(shù)據(jù)。例如,合適的處理器或處理電路可從存儲器讀取要存儲的原始數(shù)據(jù)陣列,和/或接收與要存儲的原始數(shù)據(jù)陣列對應(yīng)的數(shù)據(jù)流,然后相應(yīng)地處理數(shù)據(jù)陣列,即,將它分割成塊和子塊,并且生成所需的報頭數(shù)據(jù)塊以及(例如,編碼的)子塊的數(shù)據(jù),然后將所述數(shù)據(jù)存儲在存儲器中。
作為以本發(fā)明的方式處理數(shù)據(jù)陣列的一部分,如上所述,將確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置是否均與相同數(shù)據(jù)值關(guān)聯(lián),然后相應(yīng)地對數(shù)據(jù)陣列的塊進(jìn)行編碼。
可按照任何合適和期望的方式確定數(shù)據(jù)陣列所分割成的塊是否具有與塊的所有數(shù)據(jù)位置關(guān)聯(lián)的相同數(shù)據(jù)值。
在一個優(yōu)選實施方式中,這通過比較所談?wù)摰臄?shù)據(jù)陣列的塊的各個數(shù)據(jù)位置的數(shù)據(jù)值來進(jìn)行。在一個優(yōu)選實施方式中,這通過從存儲器讀取數(shù)據(jù)塊的數(shù)據(jù)位置的數(shù)據(jù)值并且比較它們以查看它們是否全部相同來進(jìn)行。
相應(yīng)地,在作為數(shù)據(jù)流接收到以本發(fā)明的方式處理和編碼的數(shù)據(jù)陣列的情況下,可比較數(shù)據(jù)位置值的序列(例如,隨著它們被接收),以查看它們是否全部相同。
在數(shù)據(jù)陣列中的各個數(shù)據(jù)位置與多個數(shù)據(jù)通道(例如,顏色通道)關(guān)聯(lián)的情況下,則只有當(dāng)對于塊的各個數(shù)據(jù)位置,各個相應(yīng)數(shù)據(jù)通道的數(shù)據(jù)值相同時,數(shù)據(jù)陣列的塊的數(shù)據(jù)位置才可被認(rèn)為全部具有相同數(shù)據(jù)值。另選地,例如在數(shù)據(jù)陣列的不同數(shù)據(jù)通道可被單獨地編碼和/或被單獨地編碼的情況下,則所述處理可操作在以例如逐數(shù)據(jù)通道的基礎(chǔ)上識別相同數(shù)據(jù)值塊。
在以本發(fā)明的方式處理的數(shù)據(jù)陣列被生成為在數(shù)據(jù)陣列被寫出到存儲器之前被存儲在緩沖器中的數(shù)據(jù)陣列的塊的情況下(例如,基于拼塊圖形的處理系統(tǒng)生成數(shù)據(jù)陣列和/或通過對編碼的視頻圖像數(shù)據(jù)流進(jìn)行解碼來生成數(shù)據(jù)陣列時可能就是這種情況),則在尤其優(yōu)選的實施方式中,塊的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)的數(shù)據(jù)陣列的塊的存在基于在數(shù)據(jù)被寫入緩沖器之前處理數(shù)據(jù)陣列的塊和/或?qū)?shù)據(jù)陣列的數(shù)據(jù)寫入緩沖器來進(jìn)行。
因此,在優(yōu)選實施方式中,本發(fā)明在一種基于塊的數(shù)據(jù)處理系統(tǒng)中實現(xiàn),該系統(tǒng)包括緩沖器,該緩沖器被配置為在數(shù)據(jù)陣列被寫出到存儲器之前存儲數(shù)據(jù)陣列的數(shù)據(jù)位置的塊;并且
所述方法包括(并且所述設(shè)備被配置為):
處理數(shù)據(jù)陣列的塊以生成數(shù)據(jù)陣列的數(shù)據(jù)的塊;
將數(shù)據(jù)陣列的塊寫入緩沖器;
基于在數(shù)據(jù)被寫入緩沖器之前數(shù)據(jù)陣列的塊的處理和/或所述數(shù)據(jù)到緩沖器的寫入,識別數(shù)據(jù)陣列的塊是否具有與塊的各個數(shù)據(jù)位置關(guān)聯(lián)的相同數(shù)據(jù)值。
基于例如將數(shù)據(jù)到緩沖器的寫入來識別具有相同數(shù)據(jù)值的數(shù)據(jù)位置的塊使得可識別數(shù)據(jù)陣列的這些塊,而無需例如針對所談?wù)摰膲K讀取存儲在緩沖器(或者存儲器)中的所有數(shù)據(jù)。
在這些實施方式中,相同數(shù)據(jù)值位置的塊的識別可按照任何合適和期望的方式基于在數(shù)據(jù)陣列被寫入緩沖器之前數(shù)據(jù)陣列的塊的處理和/或基于數(shù)據(jù)陣列數(shù)據(jù)到緩沖器的寫入來識別。
例如,在視頻解碼器接收編碼的視頻圖像數(shù)據(jù)流并對其進(jìn)行解碼(然后可在顯示之前將其寫入存儲器)的視頻處理系統(tǒng)中,視頻解碼器(或者關(guān)聯(lián)的處理電路)可操作以識別具有相同數(shù)據(jù)(例如,顏色)值的數(shù)據(jù)位置的塊。例如,在編碼的視頻圖像數(shù)據(jù)中(例如,不存在)針對數(shù)據(jù)位置的塊的變換系數(shù)(并且例如,沒有其它熵源(熵編碼的數(shù)據(jù)))可指示塊的各個采樣位置具有相同的數(shù)據(jù)(例如,顏色)值。
因此,在優(yōu)選實施方式中,本發(fā)明的方法和設(shè)備用在視頻解碼器中,該視頻解碼器被布置為對編碼的視頻圖像數(shù)據(jù)的塊進(jìn)行解碼,并且該視頻解碼器能夠基于在解碼的視頻圖像數(shù)據(jù)被寫入(例如,幀)緩沖器之前對編碼的視頻圖像數(shù)據(jù)的塊的解碼來操作,以(例如,并且優(yōu)選地)基于例如利用沒有其它熵源的塊的變換系數(shù)對編碼的視頻圖像數(shù)據(jù)的塊的解碼來識別與相同數(shù)據(jù)值關(guān)聯(lián)的采樣位置的塊。
在尤其優(yōu)選的實施方式中,本發(fā)明的方法和設(shè)備用在基于拼塊的圖形處理流水線中,并且操作以基于針對拼塊將渲染的片段數(shù)據(jù)寫入拼塊緩沖器來識別拼塊內(nèi)的所有數(shù)據(jù)(即,采樣)位置是否均與相同數(shù)據(jù)值關(guān)聯(lián)(然后相應(yīng)地對拼塊進(jìn)行編碼)。
因此,在優(yōu)選實施方式中,本發(fā)明在基于拼塊的圖形處理器中實現(xiàn),基于拼塊的圖形處理器包括:
拼塊緩沖器,其被配置為在渲染的片段數(shù)據(jù)被寫出到存儲器之前將采樣位置的渲染的片段數(shù)據(jù)本地存儲到圖形處理器;
并且所述方法包括(并且所述設(shè)備被配置為):
當(dāng)渲染圖形片段以生成渲染的片段數(shù)據(jù)時,各個圖形片段與拼塊中要渲染的一個或更多個采樣位置的集合關(guān)聯(lián),并且將拼塊中的采樣位置的渲染的片段數(shù)據(jù)寫入拼塊緩沖器;
基于渲染的片段數(shù)據(jù)針對拼塊到拼塊緩沖器寫入,識別包括拼塊內(nèi)的多個采樣位置的塊是否具有與塊中的所述多個采樣位置中的每一個關(guān)聯(lián)的相同數(shù)據(jù)值;并且
當(dāng)識別出拼塊內(nèi)各自與相同數(shù)據(jù)值關(guān)聯(lián)的采樣位置的塊時,針對采樣位置的塊以本發(fā)明的方式存儲報頭數(shù)據(jù)塊。
在這些實施方式中,可按照任何合適和期望的方式基于渲染的片段數(shù)據(jù)針對拼塊到拼塊緩沖器的寫入來識別相同數(shù)據(jù)值數(shù)據(jù)(采樣)位置的塊。
在一個實施方式中,這基于當(dāng)拼塊被渲染時拼塊緩沖器中的采樣位置是否被寫入來進(jìn)行。優(yōu)選地,基于當(dāng)拼塊被渲染時針對塊沒有將(渲染的片段數(shù)據(jù))寫入拼塊緩沖器中的采樣位置來識別相同數(shù)據(jù)值數(shù)據(jù)位置塊(這樣的“干凈”采樣位置塊然后被識別并當(dāng)作相同數(shù)據(jù)值數(shù)據(jù)位置塊)。
將理解,在當(dāng)渲染拼塊時還未被寫入的采樣位置的塊被識別為恒定的相同數(shù)據(jù)值塊的這些布置方式中,則與塊中的多個采樣位置中的每一個關(guān)聯(lián)的相同(恒定)數(shù)據(jù)值將不是當(dāng)渲染拼塊時被寫入到采樣位置的塊的數(shù)據(jù)值,而實際上將是要在當(dāng)渲染拼塊時渲染的片段數(shù)據(jù)實際上沒有被寫入到采樣位置時使用的數(shù)據(jù)值(例如,“干凈”值)。因此,在這些情況下,例如,采樣位置塊的恒定數(shù)據(jù)值將是要在采樣位置不存在渲染的片段數(shù)據(jù)時使用的默認(rèn)或“干凈”數(shù)據(jù)值(例如,在這種情況下應(yīng)該用于采樣位置的默認(rèn)(例如,背景)數(shù)據(jù)值(例如,顏色))。例如,要在采樣位置不存在渲染的片段數(shù)據(jù)時使用的默認(rèn)或“干凈”數(shù)據(jù)值可通過例如每渲染輸出(幀)讀取一次的單獨的渲染輸出(例如,幀)描述符來指示。
當(dāng)渲染拼塊時沒有渲染的片段數(shù)據(jù)將被寫入或者已被寫入到拼塊緩沖器中的采樣位置的確定可在處理流水線的任何合適和期望的階段來確定。
在一個實施方式中,在柵格化(rasterise)級處(即,當(dāng)輸入圖元被柵格化以生成要處理的圖形片段時)例如(并且優(yōu)選地)通過識別包括拼塊內(nèi)還未通過柵格化級(處理)生成片段(即,不存在至少部分地覆蓋采樣位置的圖元)的多個采樣位置的塊來識別在渲染拼塊時沒有渲染的片段數(shù)據(jù)將被寫入到拼塊緩沖器的采樣位置的塊(即,“干凈”塊)。
在另一實施方式中,在拼塊緩沖器寫入級處(基于將拼塊的渲染的片段數(shù)據(jù)寫入到拼塊緩沖器的操作(當(dāng)數(shù)據(jù)正被寫入到拼塊緩沖器(或沒有)時)優(yōu)選地基于拼塊緩沖器的寫入端口處的寫入事務(wù)(不存在)來識別“干凈”(未寫入的)采樣位置的塊。
根據(jù)針對拼塊的渲染的片段數(shù)據(jù)到拼塊緩沖器的寫入來識別采樣位置的“干凈”塊可按照任何合適和期望的方式來執(zhí)行。在優(yōu)選實施方式中,當(dāng)數(shù)據(jù)被寫入到拼塊緩沖器時(當(dāng)拼塊被渲染時),跟蹤針對拼塊的渲染的片段數(shù)據(jù)到拼塊緩沖器中的采樣位置的寫入(因此,例如,沒有寫入),然后基于對渲染的片段數(shù)據(jù)到拼塊緩沖器的寫入的跟蹤,來識別包括拼塊內(nèi)的當(dāng)渲染拼塊時沒有渲染的片段數(shù)據(jù)被寫入拼塊緩沖器中的多個采樣位置的塊。
渲染的片段數(shù)據(jù)是否被寫入到拼塊的采樣位置可按照任何合適和期望的方式來跟蹤。在優(yōu)選實施方式中,當(dāng)數(shù)據(jù)被寫入到拼塊緩沖器時,使用(“干凈位”)位圖來跟蹤渲染的片段數(shù)據(jù)向拼塊緩沖器的寫入。
在此布置方式中,一旦拼塊中的采樣位置陣列的(例如,所有)渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器(因此,跟蹤信息(例如,位圖)針對各個采樣位置指示渲染的片段數(shù)據(jù)是否被寫入到采樣位置的拼塊緩沖器),然后優(yōu)選地使用跟蹤信息(例如,位圖)來識別包括拼塊內(nèi)的當(dāng)渲染拼塊時還未被寫入(即,各自“干凈”的)的多個采樣位置的任何塊(當(dāng)拼塊的渲染的片段數(shù)據(jù)根本未寫入到拼塊緩沖器時可以是整個拼塊,或者可以是拼塊的數(shù)據(jù)未寫入的某一部分)。
在實施方式中,另外或者作為替代(優(yōu)選地另外),對于當(dāng)拼塊被渲染時數(shù)據(jù)被寫入到拼塊緩沖器的采樣位置的塊(即,對于渲染的片段數(shù)據(jù)存在于拼塊緩沖器中的采樣位置的塊),可識別采樣位置的恒定數(shù)據(jù)值塊。在這種情況下,在拼塊被渲染時相同數(shù)據(jù)值被寫入到整個塊的采樣位置的情況下將識別恒定數(shù)據(jù)值塊。
因此優(yōu)選地,所述設(shè)備和方法能夠操作以基于渲染的片段數(shù)據(jù)針對拼塊到拼塊緩沖器的寫入,將寫入有相同數(shù)據(jù)值或值集合(例如,對于例如rgb顏色通道中的一個或更多個)的采樣位置的塊(例如,拼塊)識別為與塊中的多個采樣位置中的每一個關(guān)聯(lián)的渲染的片段數(shù)據(jù)。
可在圖形處理流水線的任何合適和期望的級處識別寫入有相同渲染的片段數(shù)據(jù)值的采樣位置的塊。
在一個實施方式中,優(yōu)選地基于拼塊緩沖器的寫入端口處的寫入事務(wù),通過當(dāng)數(shù)據(jù)被寫入(正被寫入)拼塊緩沖器時跟蹤被寫入拼塊緩沖器的渲染的片段數(shù)據(jù)來識別采樣位置的相同數(shù)據(jù)(例如,顏色)值塊。
因此優(yōu)選地,當(dāng)數(shù)據(jù)被寫入到拼塊緩沖器時(例如,并且優(yōu)選地,基于數(shù)據(jù)值以及出現(xiàn)在拼塊緩沖器的寫入端口處的寫入事務(wù))跟蹤多個特定渲染的片段數(shù)據(jù)值(或數(shù)據(jù)值集合)針對拼塊到拼塊緩沖器中的采樣位置的寫入,然后基于在寫入到拼塊緩沖器的渲染的片段數(shù)據(jù)中跟蹤特定數(shù)據(jù)值(或數(shù)據(jù)值集合)來識別包括拼塊內(nèi)塊的各個采樣位置與包括相同(特定)數(shù)據(jù)值(或數(shù)據(jù)值集合)的渲染的片段數(shù)據(jù)關(guān)聯(lián)的多個采樣位置的塊(如果存在的話)。
可按照任何合適和期望的方式通過在渲染的片段數(shù)據(jù)針對拼塊被寫入到拼塊緩沖器中的采樣位置時跟蹤數(shù)據(jù)值來確定渲染的片段數(shù)據(jù)中與相同數(shù)據(jù)(例如,顏色)值(或數(shù)據(jù)(例如,顏色)值集合)關(guān)聯(lián)的多個采樣位置的塊。
在一個優(yōu)選實施方式中,在正被渲染時被寫入到拼塊中的采樣位置的各個數(shù)據(jù)值(或數(shù)據(jù)值集合)與特定數(shù)據(jù)值或數(shù)據(jù)值集合進(jìn)行比較,以查看它是否與所述特定數(shù)據(jù)值或數(shù)據(jù)值集合相同。此處理優(yōu)選被繼續(xù),只要被寫入到拼塊的數(shù)據(jù)值與比較數(shù)據(jù)值或數(shù)據(jù)值集合匹配即可。
相應(yīng)地,在此實施方式中,當(dāng)檢測到不同的數(shù)據(jù)值時,將確定拼塊不是將相同數(shù)據(jù)值寫入拼塊緩沖器中的各個采樣位置。因此,此實施方式便于識別整個拼塊將相同數(shù)據(jù)值寫入到拼塊緩沖器中的針對拼塊的采樣位置,而不必還跟蹤哪些采樣位置被寫入數(shù)據(jù)值。
在此實施方式中,當(dāng)檢測到正被寫入到拼塊緩沖器中的采樣位置的渲染的片段數(shù)據(jù)中的數(shù)據(jù)值不同于正在跟蹤的特定數(shù)據(jù)值時,優(yōu)選地停止當(dāng)數(shù)據(jù)針對拼塊正被寫入到拼塊緩沖器時渲染的片段數(shù)據(jù)中的數(shù)據(jù)值的比較和跟蹤。
在另一優(yōu)選實施方式中,針對采樣位置,優(yōu)選針對各個采樣位置(和/或針對采樣位置集合),跟蹤特定數(shù)據(jù)值(或數(shù)據(jù)值集合)是否被寫入到采樣位置。這可(優(yōu)選)按照與跟蹤當(dāng)渲染拼塊時渲染的片段數(shù)據(jù)是否被寫入到采樣位置的拼塊緩沖器的方式相似的方式來操作,(例如,并且優(yōu)選地)使得維護(hù)信息集合(例如并且優(yōu)選地,位圖),其中(例如,并且優(yōu)選地)針對各個采樣位置記錄了寫入到該采樣位置的數(shù)據(jù)值是否對應(yīng)于特定數(shù)據(jù)值(或者對應(yīng)于特定數(shù)據(jù)值集合中的一個)。同樣,一旦拼塊被完全渲染,則優(yōu)選地使用(評估)這種信息集合(例如,位圖),以識別拼塊中的寫入有相同的特定數(shù)據(jù)值(或數(shù)據(jù)值集合)的那些采樣位置。
在這些情況下,所跟蹤的特定數(shù)據(jù)值或數(shù)據(jù)值集合可包括任何合適和期望的數(shù)據(jù)值或數(shù)據(jù)值集合。例如,它可包括選擇的(例如,預(yù)定義的)數(shù)據(jù)值,例如參考數(shù)據(jù)值(例如,背景顏色值)。另外地或另選地,例如,所述特定數(shù)據(jù)值可以是數(shù)據(jù)值,例如(并且優(yōu)選地)當(dāng)拼塊正被渲染時被寫入到拼塊的采樣位置的第一數(shù)據(jù)值(或者當(dāng)拼塊正被渲染時被寫入到拼塊的數(shù)據(jù)值之一)。因此在該后一種情況下,將跟蹤以查看哪些采樣位置具有與已被寫入到拼塊的另一采樣位置(與先前已被寫入到拼塊中的采樣位置的拼塊緩沖器的數(shù)據(jù)值)相同的數(shù)據(jù)(例如,顏色)值。
特定數(shù)據(jù)值是否已被寫入到采樣位置可按照任何合適和期望的方式來跟蹤。在尤其優(yōu)選的實施方式中,當(dāng)(優(yōu)選地,當(dāng)各個)數(shù)據(jù)值被寫入到拼塊緩沖器時,將該數(shù)據(jù)值與所跟蹤的特定數(shù)據(jù)值進(jìn)行比較,并且相應(yīng)地更新(或不更新)正寫入數(shù)據(jù)值的采樣位置的跟蹤信息。這將允許正被寫入到采樣位置的數(shù)據(jù)值在它們被寫入到拼塊緩沖器中時被跟蹤。
當(dāng)比較數(shù)據(jù)值時,與要寫入到拼塊緩沖器的新數(shù)據(jù)值比較的數(shù)據(jù)值優(yōu)選地不從拼塊緩沖器讀取,而是優(yōu)選地被存儲在其它存儲裝置(例如,觸發(fā)器集合)中。因此,針對拼塊緩沖器寫入操作,“比較”數(shù)據(jù)值優(yōu)選地被本地存儲。
在這些布置方式中,在識別出實際被寫入到拼塊緩沖器的相同數(shù)據(jù)值的塊的情況下,則與塊中的采樣位置關(guān)聯(lián)的相同數(shù)據(jù)值將是實際被寫入到拼塊緩沖器的數(shù)據(jù)值(即,渲染的片段數(shù)據(jù)值)。
單獨的“數(shù)據(jù)值”跟蹤位圖(例如)可用于此目的。然而,在尤其優(yōu)選的實施方式中,當(dāng)“干凈位”位圖被定義并用于跟蹤拼塊內(nèi)未被寫入(“干凈”)的采樣位置時,(例如,并且優(yōu)選地)當(dāng)確定了塊(例如,拼塊)中的所有采樣位置均被寫入了渲染的片段數(shù)據(jù)(即,拼塊中不存在“干凈”的采樣位置)時,“干凈位”位圖可(優(yōu)選)用于跟蹤正被寫入到拼塊的采樣位置陣列的渲染的片段數(shù)據(jù)的數(shù)據(jù)值。
因此,在優(yōu)選實施方式中,確定包括拼塊中的多個采樣位置的塊是否針對塊中的各個采樣位置均生成了渲染的片段數(shù)據(jù)(例如并且優(yōu)選地,塊是否完全被不透明圖元覆蓋),然后,當(dāng)識別出這種塊時,使用先前為了跟蹤拼塊內(nèi)的未被寫入(“干凈”)的采樣位置而預(yù)留的位圖來跟蹤正被寫入到塊(例如,拼塊)的拼塊緩沖器中的采樣位置的渲染的片段數(shù)據(jù)中的數(shù)據(jù)值(或數(shù)據(jù)值集合)。
順便,可在將圖元柵格化期間執(zhí)行確定塊何時完全被不透明圖元覆蓋的步驟。因此,在優(yōu)選實施方式中,柵格化處理能夠操作以識別包括拼塊內(nèi)的已生成了圖形片段的多個采樣位置的塊以用于渲染塊中的所述多個采樣位置中的每一個。
例如,柵格化處理可設(shè)定拼塊何時整個被不透明圖元覆蓋的標(biāo)志。響應(yīng)于所設(shè)定的該標(biāo)志,“干凈位”位圖然后可被賦予新的用途,以使用它來跟蹤針對拼塊正被寫入到拼塊緩沖器中的采樣位置的渲染的片段數(shù)據(jù)中的數(shù)據(jù)值(或數(shù)據(jù)值集合)(即,在知道將針對拼塊中的各個采樣位置生成并渲染片段的情況下(因此相應(yīng)地,渲染的片段數(shù)據(jù)將被寫入到拼塊的拼塊緩沖器中的每一個采樣位置))。
一旦識別出拼塊內(nèi)的采樣位置全部具有相同數(shù)據(jù)值的塊,基于渲染的片段數(shù)據(jù)針對塊中的采樣位置到拼塊緩沖器的寫入,將以本發(fā)明的方式生成相同數(shù)據(jù)值采樣位置的塊的報頭數(shù)據(jù)塊并將其寫入到(例如,外部)存儲器。
可按照任何合適和期望的方式來觸發(fā)(引起)報頭數(shù)據(jù)塊到存儲器的寫入。
在一個實施方式中,當(dāng)識別出拼塊內(nèi)的與相同數(shù)據(jù)值關(guān)聯(lián)的采樣位置的塊時用信號通知合適的寫出電路,以觸發(fā)相同數(shù)據(jù)值采樣位置的塊的報頭數(shù)據(jù)塊到存儲器的寫入。
要用于所有數(shù)據(jù)位置(并且相應(yīng)地,將在所談?wù)摰臄?shù)據(jù)位置的塊的報頭數(shù)據(jù)塊中指示)的相同數(shù)據(jù)值可按照任何合適和期望的方式被指示并提供給報頭數(shù)據(jù)塊生成和存儲處理。例如,數(shù)據(jù)位置的數(shù)據(jù)值可從存儲有數(shù)據(jù)位置值的緩沖器(例如,從拼塊緩沖器)讀取。另外地或另選地,數(shù)據(jù)值可按照任何其它合適和期望的方式提供。
存儲有報頭數(shù)據(jù)塊(以及子塊數(shù)據(jù)(如果需要的話))的存儲器可包括任何合適的這種存儲器,并且可按照任何合適且期望的方式來配置。例如,它可以是片上緩沖器或者可以是外部存儲器(實際上,更有可能是外部存儲器)。類似地,它可以是用于此目的的專用存儲器或者可以是還用于其它數(shù)據(jù)的存儲器的一部分。在實施方式中,此數(shù)據(jù)被存儲在總數(shù)據(jù)處理系統(tǒng)的主存儲器中。
在紋理數(shù)據(jù)陣列的情況下,在實施方式中存儲器是圖形處理系統(tǒng)的紋理緩沖器(根據(jù)需要,該緩沖器可以例如在片上存儲器或者外部存儲器中)。類似地,在用于顯示器的幀的情況下,在實施方式中存儲器是用于數(shù)據(jù)(圖形)處理系統(tǒng)和/或用于圖形處理系統(tǒng)的輸出所提供給的顯示器的幀緩沖器。
在實施方式中報頭數(shù)據(jù)和子塊數(shù)據(jù)被存儲在相同的物理存儲器中,但這不是必要的。
當(dāng)然,其它存儲器布置方式也將是可能的。
盡管上面具體參照存儲數(shù)據(jù)陣列的數(shù)據(jù)描述了本發(fā)明,本領(lǐng)域技術(shù)人員將理解,本發(fā)明也擴(kuò)展至讀取(并解碼)以本發(fā)明的方式存儲的數(shù)據(jù)的對應(yīng)處理。
因此,根據(jù)本發(fā)明的另一方面,提供了一種在數(shù)據(jù)處理系統(tǒng)中確定用于所存儲的數(shù)據(jù)陣列的數(shù)據(jù)位置的數(shù)據(jù)值的方法,該方法包括以下步驟:
針對數(shù)據(jù)陣列的所述數(shù)據(jù)位置所落入的塊讀取所存儲的報頭數(shù)據(jù)塊;
確定所述報頭數(shù)據(jù)塊是否包含數(shù)據(jù)陣列的所述塊的所有數(shù)據(jù)位置的值具有相同數(shù)據(jù)值的指示;以及
當(dāng)從所述報頭數(shù)據(jù)塊確定數(shù)據(jù)陣列的所述報頭數(shù)據(jù)塊所涉及的所述塊的所存儲的數(shù)據(jù)陣列的所有數(shù)據(jù)位置具有相同數(shù)據(jù)值時:
從存儲在所示報頭數(shù)據(jù)塊中的其它數(shù)據(jù)確定用于所述數(shù)據(jù)位置的值。
根據(jù)本發(fā)明的另一方面,提供了一種在數(shù)據(jù)處理系統(tǒng)中確定用于所存儲的數(shù)據(jù)陣列的數(shù)據(jù)位置的數(shù)據(jù)值的設(shè)備,該設(shè)備包括處理電路,該處理電路被配置為:
針對數(shù)據(jù)陣列的所述數(shù)據(jù)位置所落入的塊讀取所存儲的報頭數(shù)據(jù)塊;
確定所述報頭數(shù)據(jù)塊是否包含數(shù)據(jù)陣列的所述塊的所有數(shù)據(jù)位置的值具有相同數(shù)據(jù)值的指示;并且
當(dāng)從所述報頭數(shù)據(jù)塊確定數(shù)據(jù)陣列的所述報頭數(shù)據(jù)塊所涉及的所述塊的所存儲的數(shù)據(jù)陣列的所有數(shù)據(jù)位置具有相同數(shù)據(jù)值時:
從存儲在所示報頭數(shù)據(jù)塊中的其它數(shù)據(jù)確定用于所述數(shù)據(jù)位置的值。
本領(lǐng)域技術(shù)人員將理解,如果適當(dāng),則本發(fā)明的這些方面可(優(yōu)選)包括本文所述的本發(fā)明的優(yōu)選和可選特征中的任一個或更多個或全部。
因此,例如,數(shù)據(jù)處理系統(tǒng)在實施方式中是圖形處理系統(tǒng)或顯示控制器系統(tǒng),數(shù)據(jù)陣列在實施方式中是圖形紋理(在這種情況下數(shù)據(jù)位置(元素)在實施方式中是紋素)或者用于顯示的幀(在幀緩沖器中)(在這種情況下數(shù)據(jù)位置(元素)在實施方式中是像素或采樣位置)等。類似地,用于在數(shù)據(jù)處理系統(tǒng)中確定所存儲的數(shù)據(jù)陣列的數(shù)據(jù)位置的值的設(shè)備在實施方式中被包含在圖形處理器或顯示控制器中。
相應(yīng)地,數(shù)據(jù)陣列的所述數(shù)據(jù)位置所落入的塊的所存儲的報頭數(shù)據(jù)塊的存儲器位置優(yōu)選按照預(yù)定方式優(yōu)選從所述數(shù)據(jù)位置在數(shù)據(jù)陣列內(nèi)的相對位置來優(yōu)選確定。
類似地,解碼處理和系統(tǒng)優(yōu)選被配置為將報頭數(shù)據(jù)塊中(例如并且優(yōu)選地,報頭數(shù)據(jù)塊中的特定(優(yōu)選預(yù)定義的)數(shù)據(jù)位置中)的特定(優(yōu)選預(yù)定義的)數(shù)據(jù)值(例如,子塊大小值)識別為指示數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊中的所有數(shù)據(jù)位置具有相同數(shù)據(jù)值(然后相應(yīng)地確定數(shù)據(jù)位置的值)。
用于所談?wù)摰臄?shù)據(jù)位置的數(shù)據(jù)值可按照任何合適和期望的方式從存儲在報頭數(shù)據(jù)塊中的其它數(shù)據(jù)確定。這將取決于在報頭數(shù)據(jù)塊中如何指示和編碼該值。因此,例如,可簡單地包括從報頭數(shù)據(jù)塊讀取數(shù)據(jù)值,或者可包括對存儲在報頭數(shù)據(jù)塊中的數(shù)據(jù)進(jìn)行解碼(例如,解壓縮)以獲得數(shù)據(jù)值本身。
在報頭數(shù)據(jù)塊不包含數(shù)據(jù)陣列的所述塊的所有數(shù)據(jù)位置的值具有相同數(shù)據(jù)值的指示的情況下,則所談?wù)摰臄?shù)據(jù)位置的數(shù)據(jù)值可(優(yōu)選地)按照適合于所使用的編碼方案的方式(例如并且優(yōu)選地,按照根據(jù)上面所討論的申請人早前的美國專利中所描述的技術(shù)的方式)來確定。
一旦確定了用于數(shù)據(jù)位置的值,則該數(shù)據(jù)值可按照任何適當(dāng)和期望的方式(例如并且優(yōu)選地,依據(jù)數(shù)據(jù)陣列表示什么)來使用。因此,例如,在數(shù)據(jù)陣列表示圖形紋理的情況下,數(shù)據(jù)值優(yōu)選地用于將紋理值應(yīng)用于正在渲染的圖形片段(例如,采樣位置)。相應(yīng)地,在數(shù)據(jù)陣列是例如用于顯示的輸出幀的情況下,數(shù)據(jù)位置的數(shù)據(jù)值優(yōu)選被存儲用于幀中的對應(yīng)數(shù)據(jù)位置,所述幀然后可例如被顯示。
如上所述,至少在本發(fā)明的優(yōu)選實施方式中,報頭數(shù)據(jù)塊包括指示報頭所對應(yīng)的子塊集合的數(shù)據(jù)的基礎(chǔ)(例如,起始)存儲器位置的指針數(shù)據(jù),其優(yōu)選為從所談?wù)摰臄?shù)據(jù)陣列的存儲有報頭數(shù)據(jù)塊的報頭緩沖區(qū)在存儲器中的起點到所談?wù)摰膱箢^數(shù)據(jù)塊所涉及的所存儲的子塊集合(子塊集合的數(shù)據(jù))在存儲器中的起點的偏移(在實施方式中,以字節(jié)單位)的形式。
盡管該基礎(chǔ)存儲器位置指針數(shù)據(jù)可作為整數(shù)(使用整數(shù)表示)來提供,申請人進(jìn)一步認(rèn)識到,盡管針對該指針數(shù)據(jù)使用整數(shù)表示(格式)對于需要編碼的大多數(shù)數(shù)據(jù)陣列而言可能足夠了,會存在這樣的情況:與利用基礎(chǔ)地址指針的整數(shù)格式可指示的地址跨度(span)相比,可能需要更大的地址跨度。
因此,在尤其優(yōu)選的實施方式中,基礎(chǔ)存儲器位置指針數(shù)據(jù)利用浮點數(shù)(利用浮點數(shù)表示)來指示。例如,在該數(shù)據(jù)使用32位字段的情況下,在優(yōu)選實施方式中,使用具有5位指數(shù)和27位尾數(shù)(mantissa)的浮點表示。這將有利于例如指示更大的存儲器地址范圍。與例如僅僅使用這些值的對應(yīng)整數(shù)表示(整數(shù)值)的情況相比,這可有利于指針數(shù)據(jù)(例如,偏移)用于對更大的地址跨度尋址。
在圖形處理器能夠使用(正在使用)“稀疏”(“部分駐留”)紋理的情況下,即,在紋理太大從而整個(完整)紋理無法被一次存儲在存儲器中(或者不期望將整個紋理一次存儲在存儲器中),而是紋理的較小區(qū)域(例如,拼塊)根據(jù)需要被加載到存儲器中以及從存儲器卸載的情況下,這可能尤其有用。
在這樣的布置方式中,“稀疏”紋理通常將使用虛擬地址并且會非常大,覆蓋更大范圍的存儲器地址空間。針對基礎(chǔ)存儲器位置地址指針使用浮點表示將有利于訪問可能用于“稀疏”紋理的更大范圍的虛擬地址,同時當(dāng)不需要大地址跨度時仍允許更緊密的打包(指針壓縮)。
據(jù)信這種布置方式可為新穎的并且本身是有利的,因此根據(jù)本發(fā)明的另一方面,提供了一種在數(shù)據(jù)處理系統(tǒng)中存儲數(shù)據(jù)陣列的方法,所述數(shù)據(jù)陣列包括多個數(shù)據(jù)位置,其中:
要存儲的數(shù)據(jù)陣列被分割成多個塊,各個塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;
數(shù)據(jù)陣列的各個相應(yīng)塊被分割成多個子塊,各個子塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;并且
表示數(shù)據(jù)陣列的子塊的數(shù)據(jù)被存儲在存儲器中,并且針對數(shù)據(jù)陣列所分割成的各個相應(yīng)塊存儲報頭數(shù)據(jù)塊,所述報頭數(shù)據(jù)塊包含與數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊的子塊有關(guān)的數(shù)據(jù);
所述方法包括以下步驟:
對于數(shù)據(jù)陣列所分割成的至少一個塊:
存儲表示數(shù)據(jù)陣列的該塊的子塊的數(shù)據(jù);以及
在數(shù)據(jù)陣列的該塊的報頭數(shù)據(jù)塊中存儲指示所存儲的表示報頭數(shù)據(jù)塊所涉及的子塊的數(shù)據(jù)的存儲器位置的指針數(shù)據(jù),其中,指示所存儲的表示子塊的數(shù)據(jù)的存儲器位置的所述指針數(shù)據(jù)利用浮點數(shù)表示來存儲。
根據(jù)本發(fā)明的另一方面,提供了一種用于在數(shù)據(jù)處理系統(tǒng)中存儲數(shù)據(jù)陣列的設(shè)備,所述數(shù)據(jù)陣列包括多個數(shù)據(jù)位置,該設(shè)備包括處理電路,該處理電路被配置為:
將要存儲的數(shù)據(jù)陣列分割成多個塊,各個塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;
將數(shù)據(jù)陣列的各個相應(yīng)塊分割成多個子塊,各個子塊包括數(shù)據(jù)陣列的多個數(shù)據(jù)位置;
將表示數(shù)據(jù)陣列的子塊的數(shù)據(jù)存儲在存儲器中;并且
針對數(shù)據(jù)陣列所分割成的各個相應(yīng)塊存儲報頭數(shù)據(jù)塊,所述報頭數(shù)據(jù)塊包含與數(shù)據(jù)陣列的報頭數(shù)據(jù)塊所涉及的塊的子塊有關(guān)的數(shù)據(jù);
其中,所述處理電路還被配置為能夠操作以存儲:
對于數(shù)據(jù)陣列所分割成的塊:
表示數(shù)據(jù)陣列的該塊的子塊的數(shù)據(jù);并且
在數(shù)據(jù)陣列的該塊的報頭數(shù)據(jù)塊中存儲指示所存儲的表示報頭數(shù)據(jù)塊所涉及的子塊的數(shù)據(jù)的存儲器位置的指針數(shù)據(jù),其中,指示所存儲的表示子塊的數(shù)據(jù)的存儲器位置的所述指針數(shù)據(jù)利用浮點數(shù)表示來存儲。
本發(fā)明的這些方面和實施方式可(優(yōu)選)包括本文所描述的本發(fā)明的優(yōu)選和可選特征中的任一個或更多個或全部。因此,例如,報頭數(shù)據(jù)塊優(yōu)選包括指示報頭數(shù)據(jù)塊所涉及的子塊集合中的一些或所有(在實施方式中,各個)子塊的數(shù)據(jù)(在存儲器中)的大小的數(shù)據(jù),以及指示報頭數(shù)據(jù)塊所對應(yīng)的子塊集合的數(shù)據(jù)的基礎(chǔ)存儲器位置指針數(shù)據(jù)。類似地,指示報頭數(shù)據(jù)塊所對應(yīng)的子塊集合的數(shù)據(jù)的基礎(chǔ)存儲器位置的指針數(shù)據(jù)優(yōu)選被存儲在報頭數(shù)據(jù)塊中的特定(優(yōu)選預(yù)定義的)位置(字段)中,在優(yōu)選實施方式中包括32位浮點表示(具有5位指數(shù)和27位尾數(shù))。
本發(fā)明也擴(kuò)展至以上述方式存儲然后讀取數(shù)據(jù)陣列的數(shù)據(jù)的方法和系統(tǒng)。
本發(fā)明的方法和設(shè)備可按照任何適當(dāng)?shù)姆绞絹韺崿F(xiàn),例如實現(xiàn)于專用硬件或可編程硬件中,以及實現(xiàn)于(并包括在)任何適當(dāng)?shù)难b置或組件中。
例如,用于以本發(fā)明的方式存儲數(shù)據(jù)的實際裝置或組件將取決于所使用的數(shù)據(jù)陣列的本質(zhì)。因此,例如,在圖形紋理的情況下,(例如,應(yīng)用開發(fā)人員)可使用諸如個人計算機(jī)的適當(dāng)處理器來以本發(fā)明的方式生成并存儲紋理,然后將如此存儲的紋理作為例如游戲內(nèi)容的一部分提供。在所存儲的數(shù)據(jù)陣列是用于顯示的幀的情況下,則相應(yīng)地可由圖形處理器以所需方式生成并存儲數(shù)據(jù)。
類似地,在操作的數(shù)據(jù)讀取(解碼)側(cè),在紋理數(shù)據(jù)的情況下,例如,將由圖形處理器讀取(解碼)所存儲的數(shù)據(jù)陣列,在用于顯示的幀的情況下,可由顯示器的顯示控制器讀取(解碼)所存儲的數(shù)據(jù)陣列。
本發(fā)明的數(shù)據(jù)處理系統(tǒng)可以是任何合適和期望的數(shù)據(jù)處理系統(tǒng),并且可包含任何合適和期望的組件、元件等。因此,例如,數(shù)據(jù)處理系統(tǒng)可(優(yōu)選)包括cpu、圖形處理器、視頻處理器、顯示控制器和/或圖像信號處理器中的任一個或更多個或所有。
數(shù)據(jù)處理系統(tǒng)優(yōu)選還具有顯示器和/或與顯示器通信以用于顯示由數(shù)據(jù)處理系統(tǒng)的組件(例如,由圖形處理器等)生成的圖像。
在優(yōu)選實施方式中,數(shù)據(jù)處理系統(tǒng)包括一個或更多個存儲器和/或存儲器裝置和/或與其通信,其存儲本文所描述的數(shù)據(jù)和/或存儲用于執(zhí)行本文所述的處理的軟件。
在優(yōu)選實施方式中,本發(fā)明被實現(xiàn)于圖形處理器、顯示控制器、圖像信號處理器、視頻解碼器或視頻編碼器中,因此,本發(fā)明還擴(kuò)展至被配置為使用本發(fā)明的方法、或者包括本發(fā)明的設(shè)備、或者根據(jù)本發(fā)明的任一個或更多個實施方式的方法操作的圖形處理器、顯示控制器、圖像信號處理器、視頻解碼器或視頻編碼器。
根據(jù)實現(xiàn)上述特定功能所需的任何硬件,這樣的圖形處理器、顯示控制器、圖像信號處理器、視頻解碼器或視頻編碼器可包括圖形處理器、顯示控制器、圖像信號處理器、視頻解碼器或視頻編碼器所包括的常用功能單元等中的任一個或更多個或所有。在實施方式中,本發(fā)明的方法和設(shè)備被實現(xiàn)于硬件中(在實施方式中,單個半導(dǎo)體平臺上)。
本發(fā)明尤其(但是非排他地)適合用于低功率便攜式裝置。因此,在實施方式中,本發(fā)明被實現(xiàn)于諸如移動電話或平板的便攜式裝置中。
本發(fā)明可實現(xiàn)于任何合適的系統(tǒng)中,例如適當(dāng)配置的基于微處理器的系統(tǒng)。在實施方式中,本發(fā)明實現(xiàn)于基于計算機(jī)和/或微處理器的系統(tǒng)中。
本發(fā)明的各種功能可按照任何期望且合適的方式實現(xiàn)。例如,本發(fā)明的功能可根據(jù)需要以硬件或軟件來實現(xiàn)。因此,例如,本發(fā)明的各種功能元件、級等可包括能夠操作以執(zhí)行各種功能等的合適的處理器、控制器、功能單元、電路、處理邏輯、微處理器結(jié)構(gòu)等,例如適當(dāng)專用的硬件元件(處理電路)和/或可被編程以按照期望的方式操作的可編程硬件元件(處理電路)。
這里還應(yīng)該注意的是,本領(lǐng)域技術(shù)人員將理解,本發(fā)明的各種功能等可被復(fù)制和/或在給定處理器上并行執(zhí)行和/或共享處理電路。
本領(lǐng)域技術(shù)人員還將理解,如果需要,本發(fā)明的所有描述的實施方式可酌情包括本發(fā)明的任一個或更多個或全部優(yōu)選和可選特征。
依據(jù)本發(fā)明的方法可至少部分地利用軟件(例如,計算機(jī)程序)來實現(xiàn)。因此將看出,本發(fā)明的另外的方面包括在安裝在數(shù)據(jù)處理裝置上時具體適于執(zhí)行本文所述的方法的計算機(jī)軟件、包括在程序元件在數(shù)據(jù)處理裝置上運行時執(zhí)行本文所述的方法的計算機(jī)軟件代碼部分的計算機(jī)程序元件、以及包括在程序在數(shù)據(jù)處理系統(tǒng)上運行時適于執(zhí)行本文所述的方法的所有步驟的代碼裝置的計算機(jī)程序。數(shù)據(jù)處理系統(tǒng)可以是微處理器、可編程fpga(現(xiàn)場可編程門陣列)等。
本發(fā)明還擴(kuò)展至包括這種軟件的計算機(jī)軟件載體,其在用于操作圖形處理器、渲染器或包括數(shù)據(jù)處理裝置的其它系統(tǒng)時,與所述數(shù)據(jù)處理裝置結(jié)合使得所述處理器、渲染器或系統(tǒng)執(zhí)行本發(fā)明的方法的步驟。這種計算機(jī)軟件載體可以是諸如rom芯片、ram、閃存、cd-rom或盤的物理存儲介質(zhì)。
還將理解,不是本發(fā)明的方法的所有步驟需要通過計算機(jī)軟件來執(zhí)行,因此本發(fā)明的更廣泛的實施方式包括計算機(jī)軟件,這種軟件安裝在計算機(jī)軟件載體上以用于執(zhí)行本文所闡述的方法的至少一個步驟。
本發(fā)明因此可被適當(dāng)?shù)鼐唧w實現(xiàn)為用于計算機(jī)系統(tǒng)的計算機(jī)程序產(chǎn)品。這種實現(xiàn)方式可包括固定于諸如計算機(jī)可讀介質(zhì)(例如,磁盤、cdrom、rom、ram、閃存或硬盤)的有形的永久介質(zhì)上的一系列計算機(jī)可讀指令。這一系列計算機(jī)可讀指令具體實現(xiàn)本文先前所述的所有或部分功能。
本領(lǐng)域技術(shù)人員將理解,這些計算機(jī)可讀指令可以用許多計算機(jī)架構(gòu)或操作系統(tǒng)所使用的若干編程語言來編寫。另外,這些指令可利用目前或未來的任何存儲器技術(shù)(包括但不限于半導(dǎo)體、磁或光學(xué))來存儲,或者利用目前或未來的任何通信技術(shù)(包括但不限于光學(xué)、紅外或微波)來傳輸??梢韵氲?,這種計算機(jī)程序產(chǎn)品可作為可移除介質(zhì)隨所附的印刷或電子文檔一起分發(fā)(例如,緊縮套裝軟件),用計算機(jī)系統(tǒng)預(yù)先加載到(例如)系統(tǒng)rom或固定盤上,或者經(jīng)由網(wǎng)絡(luò)(例如,互聯(lián)網(wǎng)或萬維網(wǎng))從服務(wù)器或電子公告牌分發(fā)。
附圖說明
現(xiàn)在將僅作為示例參照附圖描述本發(fā)明的若干實施方式,附圖中:
圖1示意性地示出根據(jù)本發(fā)明的實施方式的數(shù)據(jù)陣列的存儲;
圖2示意性地示出在本發(fā)明的第一實施方式中存儲器中的報頭數(shù)據(jù)塊和主體塊之間的數(shù)據(jù)陣列的塊的數(shù)據(jù)的分布;
圖3示意性地示出根據(jù)本發(fā)明的另外的實施方式的數(shù)據(jù)陣列的存儲;
圖4和圖6示意性地示出在本發(fā)明的第二實施方式中存儲器中的報頭數(shù)據(jù)塊和主體緩沖區(qū)中的數(shù)據(jù)的數(shù)據(jù)陣列的塊的布置;
圖5示意性地示出在圖4的實施方式中所存儲的子塊數(shù)據(jù)的順序;
圖7示意性地示出在圖6的實施方式中所存儲的子塊數(shù)據(jù)的順序;
圖8示意性地示出在本發(fā)明的實施方式中當(dāng)確定數(shù)據(jù)塊的所有數(shù)據(jù)位置具有相同數(shù)據(jù)值時報頭數(shù)據(jù)塊的布置;
圖9示出根據(jù)本發(fā)明的實施方式的基于拼塊的圖形處理流水線的示意圖;
圖10示出圖9所示的基于拼塊的圖形處理流水線的操作的流程圖;
圖11示出針對用于圖9和圖10所示的實施方式的示例拼塊使用顏色緩沖器和“干凈位”位圖的示例;并且
圖12示意性地示出可使用根據(jù)本發(fā)明存儲的數(shù)據(jù)陣列的圖形處理系統(tǒng)。
在適當(dāng)?shù)那闆r下,貫穿附圖相似的標(biāo)號用于相似的特征。
具體實施方式
現(xiàn)在將描述本發(fā)明的若干實施方式。
圖1示意性地示出本發(fā)明的第一實施方式中的存儲原始數(shù)據(jù)陣列20的方式。
原始數(shù)據(jù)陣列20是包含多個數(shù)據(jù)元素(包含在陣列內(nèi)的多個特定位置處的數(shù)據(jù)條目)的二維數(shù)據(jù)陣列。數(shù)據(jù)陣列20可以是任何合適和期望的數(shù)據(jù)陣列,但是在圖形處理上下文中,它可以是例如紋理貼圖(即,紋理元素(紋素)陣列)或者表示要顯示的幀的數(shù)據(jù)陣列(在這種情況下數(shù)據(jù)陣列可以是要顯示的像素陣列)。在紋理貼圖的情況下,數(shù)據(jù)陣列中的各個數(shù)據(jù)條目(位置)將表示適當(dāng)紋素值(例如,諸如rgba的顏色值集合,或者亮度和色度、紋素的值)。在用于顯示的幀的情況下,陣列中的各個數(shù)據(jù)條目(位置)將指示要用于在顯示器上顯示幀的顏色值集合(例如,rbg值)。
如圖1所示,為了將數(shù)據(jù)陣列20存儲在存儲器中,數(shù)據(jù)陣列20首先被分割成多個不交疊的大小相等的均勻塊21,各個塊對應(yīng)于數(shù)據(jù)陣列20的特定區(qū)域。在本實施方式中,數(shù)據(jù)陣列的各個塊21對應(yīng)于數(shù)據(jù)陣列20內(nèi)的16×16元素(位置)的塊(即,在紋理貼圖的情況下,16×16紋素的塊)。當(dāng)然,其它布置方式也將是可能的。
數(shù)據(jù)陣列20所分割成的各個塊21被進(jìn)一步再分成十六個不交疊的大小相等的均勻子塊22的集合。在當(dāng)前情況下,由于各個塊21對應(yīng)于數(shù)據(jù)陣列內(nèi)的16×16元素(位置),所以各個子塊22相應(yīng)地對應(yīng)于塊21內(nèi)的4×4數(shù)據(jù)元素區(qū)域(例如,在紋理貼圖的情況下,4×4紋素)。(為了簡單,圖1僅示出數(shù)據(jù)陣列20的幾個塊21被分割成子塊。然而,原始數(shù)據(jù)陣列20所分割成的每一個塊21都被相應(yīng)地再分成多個子塊22的集合。)
為了將數(shù)據(jù)陣列20存儲在存儲器中,首先,針對數(shù)據(jù)陣列20所分割成的各個塊21存儲報頭數(shù)據(jù)塊23。這些報頭數(shù)據(jù)塊被存儲在存儲器中的報頭緩沖區(qū)24中。報頭緩沖區(qū)24在存儲器中在起始地址a處開始,報頭數(shù)據(jù)塊23被各自存儲在報頭緩沖區(qū)24內(nèi)的可預(yù)測存儲器地址處。
圖1示出了針對數(shù)據(jù)陣列20所分割成的一些塊21的報頭數(shù)據(jù)塊23在報頭緩沖區(qū)24中的位置。數(shù)據(jù)陣列20所分割成的各個塊21在報頭緩沖區(qū)24中具有對應(yīng)報頭數(shù)據(jù)塊23。
從報頭數(shù)據(jù)塊23所涉及的塊21在數(shù)據(jù)陣列內(nèi)的位置確定(預(yù)測)在報頭緩沖區(qū)24內(nèi)存儲各個報頭數(shù)據(jù)塊23的位置。具體地講,對于數(shù)據(jù)陣列20內(nèi)的位置x、y處的數(shù)據(jù)陣列元素(例如,紋素或像素),報頭數(shù)據(jù)塊21在報頭緩沖區(qū)24中的地址由下式給出:
報頭數(shù)據(jù)塊地址=a+32*(x/16+(y*xsize)/16)
其中a是報頭緩沖區(qū)的起始地址,xsize和ysize分別是數(shù)據(jù)陣列20的垂直尺寸和水平尺寸,假設(shè)數(shù)據(jù)陣列20被分割成16×16個塊,并且各個報頭數(shù)據(jù)塊占據(jù)32字節(jié)。
在本實施方式中,基于要使用所存儲的數(shù)據(jù)陣列的數(shù)據(jù)處理系統(tǒng)所使用的突發(fā)大小(例如,64字節(jié)),報頭緩沖區(qū)24中的各個報頭數(shù)據(jù)塊23具有相同的固定的大小。這意味著報頭數(shù)據(jù)塊23具有可利用系統(tǒng)友好的突發(fā)大小所提取的大小。
除了在報頭緩沖區(qū)24中針對原始數(shù)據(jù)20所分割成的各個塊21存儲相應(yīng)報頭數(shù)據(jù)塊23之外,本實施方式的數(shù)據(jù)存儲布置方式還能夠存儲給定數(shù)據(jù)塊所分割成的各個子塊22的數(shù)據(jù)。該子塊數(shù)據(jù)在存儲器中被存儲在子塊存儲部或主體塊25(在本實施方式中包括1024字節(jié)的對齊塊)中。(主體塊將子塊數(shù)據(jù)存儲在1024字節(jié)子塊存儲塊中使得能夠通過各個編碼器每次用完空間時經(jīng)由中央儲存器分配新主體塊25利用多個不同的編碼器并行地對數(shù)據(jù)陣列進(jìn)行編碼。)在本實施方式中,主體塊25被直接存儲在報頭緩沖區(qū)24之后(但是可按照隨機(jī)順序出現(xiàn))。這允許報頭數(shù)據(jù)塊中的指針數(shù)據(jù)是相對于報頭緩沖區(qū)24的起點或終點的偏移的形式。(這不是必要的,如果需要,主體塊25可駐留在存儲器中的任何地方。)
各個相應(yīng)子塊集合的數(shù)據(jù)26的集合被一個接一個地存儲在主體塊中,如圖1所示。則這具有這樣的效果:針對給定16×16塊21的子塊22的集合的數(shù)據(jù)可跨越兩個不同的主體塊25(如圖1所示,對于子塊數(shù)據(jù)集合27)。
圖2更詳細(xì)地示出了這種情況。如果假設(shè)針對與數(shù)據(jù)陣列的給定16×16塊對應(yīng)的4×4子塊集合要存儲的“凈荷”數(shù)據(jù)40包括300字節(jié),并且針對該塊要存儲的報頭數(shù)據(jù)41包括62字節(jié),如圖2所示,則如果報頭塊42具有64字節(jié)的容量,則“凈荷”數(shù)據(jù)的前兩個字節(jié)將被存儲在報頭塊中,然后凈荷數(shù)據(jù)的其余字節(jié)分布在一個或兩個主體塊43、44之間(取決于第一主體塊中的可用空間)。(通常,根據(jù)該數(shù)據(jù)的量以及相應(yīng)報頭和主體塊中的可用容量,子塊“凈荷”數(shù)據(jù)將被存儲在報頭塊和0-2主體塊中。)
報頭緩沖區(qū)24和主體塊25可被存儲在所談?wù)摰臄?shù)據(jù)處理系統(tǒng)的任何合適的存儲器中。因此,例如,它們可被存儲在片上存儲器中或外部存儲器(例如,數(shù)據(jù)處理系統(tǒng)的主存儲器)中。在實施方式中它們被存儲在相同的物理存儲器中,但是這不是必要的。
如果需要,在使用中報頭緩沖區(qū)和主體塊中的一些或全部也可被拷貝到本地存儲器(例如,緩存)。
主體塊25中針對各個子塊存儲的數(shù)據(jù)可僅包括數(shù)據(jù)陣列20中的子塊所對應(yīng)的對應(yīng)數(shù)據(jù)元素(條目)的數(shù)據(jù)。然而,在本實施方式中,不是以其完整的原始形式存儲數(shù)據(jù)陣列20,各個數(shù)據(jù)陣列子塊22被編碼以給出原始數(shù)據(jù)的編碼表示,該編碼表示與原始未編碼形式的數(shù)據(jù)相比大小減小。這壓縮了原始數(shù)據(jù),從而使其存儲和處理更高效。任何合適和期望的編碼(壓縮)處理可用于該編碼。
因此,在本實施方式中,原始數(shù)據(jù)陣列20在被存儲之前被編碼并壓縮,因此關(guān)于各個子塊22存儲的數(shù)據(jù)將是可被適當(dāng)?shù)亟獯a以獲得原始數(shù)據(jù)陣列的數(shù)據(jù)條目的數(shù)據(jù)。換言之,關(guān)于各個子塊22存儲的數(shù)據(jù)將是可從其獲得原始數(shù)據(jù)元素(或者至少那些數(shù)據(jù)元素的值的期望近似(例如,在使用有損編碼(壓縮)方案的情況下))的數(shù)據(jù)。它將是可用于針對所談?wù)摰淖訅K中的數(shù)據(jù)元素確定原始數(shù)據(jù)陣列中的數(shù)據(jù)元素的值(或者至少那些原始數(shù)據(jù)值的期望近似)的數(shù)據(jù)。
各個報頭數(shù)據(jù)塊包含指針數(shù)據(jù),該指針數(shù)據(jù)指示主體塊25內(nèi)存儲有該報頭數(shù)據(jù)塊23所涉及的塊21的子塊的數(shù)據(jù)的位置。在給定數(shù)據(jù)塊的子塊數(shù)據(jù)跨越兩個不同的主體塊的情況下(如圖1所示),報頭數(shù)據(jù)塊23將包含第二指針以指示第二主體塊的存儲子塊集合的數(shù)據(jù)的位置。在本實施方式中,該指針包括1024字節(jié)對齊地址的上面22位。(在本實施方式中,各個報頭數(shù)據(jù)塊包含指向第一和第二主體塊二者的指針,而不管給定塊的子塊數(shù)據(jù)是否將延伸至第二主體塊。這是為了顧及這樣的事實:當(dāng)編碼處理開始時,在數(shù)據(jù)被寫入到存儲器之前可能不知道是否將使用第二主體塊。)
在本實施方式中,報頭數(shù)據(jù)塊23中的指針數(shù)據(jù)指示報頭數(shù)據(jù)塊所涉及的相應(yīng)子塊的存儲的數(shù)據(jù)26在存儲器的主體塊25中的起始位置28。為了定位各個4×4子塊的數(shù)據(jù),解碼器相應(yīng)地需要能夠確定各個4×4子塊的數(shù)據(jù)在所談?wù)摰淖訅K的總數(shù)據(jù)集合26內(nèi)的位置。這在本實施方式中通過在報頭數(shù)據(jù)塊23中包括用于(按字節(jié))存儲各個相應(yīng)4×4子塊的數(shù)據(jù)的存儲器大小來實現(xiàn)。
為了在主體塊25中定位各個4×4子塊的數(shù)據(jù),解碼器相應(yīng)地使用報頭數(shù)據(jù)塊23中的指針來確定報頭數(shù)據(jù)塊23所涉及的十六個4×4子塊的集合的數(shù)據(jù)26在主體塊25中的起始位置28,然后使用報頭數(shù)據(jù)塊23中的大小信息來對在所關(guān)注的4×4子塊之前存儲的4×4子塊的存儲的數(shù)據(jù)的大小求和,以針對所關(guān)注的子塊確定數(shù)據(jù)在主體塊25中的起始位置。利用所談?wù)摰淖訅K的所指示的存儲的數(shù)據(jù)大小來相應(yīng)地確定所關(guān)注的子塊的數(shù)據(jù)的結(jié)束位置。
在報頭數(shù)據(jù)塊中包括子塊大小信息使得不再為了識別期望的子塊數(shù)據(jù)的存儲器位置而必須讀取存儲器中的多個不同的地方。
在本實施方式中,如果存在可由報頭數(shù)據(jù)塊中的大小字段指示所存儲的子塊數(shù)據(jù)的一些大小,但是這些大小事實上在使用中不會出現(xiàn)(例如,因為利用所使用的壓縮或編碼方案無法實現(xiàn)這些大小),則那些大小值被預(yù)定義為指示特殊情況,例如未壓縮數(shù)據(jù)塊或者單色塊。這有利于以高效方式將這些特殊情況用信號通知給解碼器。
如果在將指針和子塊大小數(shù)據(jù)包括在報頭數(shù)據(jù)塊23中之后,報頭數(shù)據(jù)塊中存在任何其余空間,則不是留著該空間不用,而是用另外的有用信息(例如(具體地講)確定報頭數(shù)據(jù)塊所涉及的子塊的數(shù)據(jù)元素的值將需要(或可被使用)的數(shù)據(jù)(即,用于對子塊數(shù)據(jù)進(jìn)行解碼的數(shù)據(jù)))填充。
例如,表示原始數(shù)據(jù)陣列的編碼(例如,壓縮)數(shù)據(jù)的將用于報頭數(shù)據(jù)塊所涉及的所有子塊以用于解碼處理的那部分可被包括在報頭數(shù)據(jù)塊中的“備用”空間中。如果在報頭數(shù)據(jù)塊中包括了將由報頭數(shù)據(jù)塊所涉及的所有子塊共同使用(共享)的數(shù)據(jù)之后,報頭數(shù)據(jù)塊中存在任何其余空間,則還可以在報頭數(shù)據(jù)塊中包括針對給定子塊所特定的數(shù)據(jù)。利用諸如此類的其它有用數(shù)據(jù)填充報頭數(shù)據(jù)塊意味著報頭數(shù)據(jù)塊可具有可利用系統(tǒng)友好的突發(fā)大小提取的大小,而不會浪費存儲器空間。
在本實施方式中,使用32字節(jié)報頭數(shù)據(jù)塊,并且報頭數(shù)據(jù)塊的布局通常為指向主體塊(子塊存儲塊)(占據(jù)例如32位)的1字節(jié)精確指針、指向第二主體塊(可為22位,如上所述)的一個主體塊大小的對齊指針、16個子塊大小數(shù)據(jù)集合(通常各自占據(jù)6位),報頭數(shù)據(jù)塊的其余部分利用編碼的子塊數(shù)據(jù)填充。
圖3示意性地示出本文所述的技術(shù)的其它實施方式中的存儲原始數(shù)據(jù)陣列20的方式。
圖3所示的這些實施方式中的存儲布置方式在許多方面與上面參照圖1和圖2描述的布置方式相似。因此以下描述將聚焦于兩個布置方式之間的差異。
如上所述實施方式中一樣,在這些實施方式中,如圖3所示,要存儲的數(shù)據(jù)陣列20被分割成多個不交疊的大小相等的均勻塊21,各個塊對應(yīng)于數(shù)據(jù)陣列20的特定區(qū)域。同樣,在這些實施方式中,數(shù)據(jù)陣列的各個塊21對應(yīng)于數(shù)據(jù)陣列20內(nèi)的16×16元素(位置)的塊(即,在紋理貼圖的情況下,16×16紋素塊)。
數(shù)據(jù)陣列20所分割成的各個塊21然后被進(jìn)一步再分成大小相等的均勻子塊22(未示出),各個子塊對應(yīng)于塊21內(nèi)的4×4數(shù)據(jù)元素區(qū)域(例如,在紋理貼圖的情況下,4×4紋素)。
類似地,為了將數(shù)據(jù)陣列20存儲在存儲器中,針對數(shù)據(jù)陣列20所分割成的各個塊21將報頭數(shù)據(jù)塊23存儲在報頭緩沖區(qū)24中。同樣,報頭緩沖區(qū)24在存儲器中的起始地址a處開始,并且報頭數(shù)據(jù)塊23各自被存儲在報頭緩沖區(qū)24內(nèi)的可預(yù)測存儲器地址處。
在本發(fā)明的這些實施方式中,各個報頭數(shù)據(jù)塊被配置為僅占據(jù)16字節(jié)(如下面將進(jìn)一步討論的,僅包含指向相關(guān)子塊的數(shù)據(jù)的指針數(shù)據(jù))。這同樣意味著報頭數(shù)據(jù)塊23具有可利用系統(tǒng)友好地突發(fā)大小所提取的大小。
報頭緩沖區(qū)24內(nèi)的存儲各個報頭數(shù)據(jù)塊23的位置同樣從報頭數(shù)據(jù)塊23所涉及的塊21在數(shù)據(jù)陣列內(nèi)的位置確定(預(yù)測)。在這些實施方式中,對于數(shù)據(jù)陣列20內(nèi)的位置x、y處的數(shù)據(jù)陣列元素(例如,紋素或像素),報頭數(shù)據(jù)塊21在報頭緩沖區(qū)24中的地址由下式給出:
報頭數(shù)據(jù)塊地址=a+32*(x/16+(y*xsize)/16)
其中a是報頭緩沖區(qū)的起始地址,xsize和ysize分別是數(shù)據(jù)陣列20的垂直尺寸和水平尺寸(假設(shè)數(shù)據(jù)陣列20被分割成16×16個塊,各個報頭數(shù)據(jù)塊占據(jù)16字節(jié))。
除了針對原始數(shù)據(jù)陣列20所分割成的各個塊21在報頭緩沖區(qū)24中存儲相應(yīng)報頭數(shù)據(jù)塊23之外,本實施方式的數(shù)據(jù)存儲布置方式還在主體緩沖區(qū)30中存儲給定數(shù)據(jù)塊所分割成的各個子塊22的數(shù)據(jù)。然而,在這些實施方式中,如圖3所示,子塊的數(shù)據(jù)僅僅以連續(xù)的方式存儲在主體緩沖區(qū)30中(即,主體緩沖區(qū)30未被分割成單獨的對齊的“主體塊”)。
主體緩沖區(qū)30被存儲在報頭緩沖區(qū)24之后。這允許報頭數(shù)據(jù)塊中的指針數(shù)據(jù)是相對于報頭緩沖區(qū)24的起點或終點的偏移的形式。(同樣,這不是必要的,如果需要,主體緩沖區(qū)30可駐留在存儲器中的任何地方。)
報頭緩沖區(qū)24和主體緩沖區(qū)30同樣可被存儲在所談?wù)摰臄?shù)據(jù)處理系統(tǒng)的任何合適的存儲器中。因此,例如,它們可被存儲在片上存儲器中或外部存儲器(例如,數(shù)據(jù)處理系統(tǒng)的主存儲器)中。在實施方式中它們被存儲在相同的物理存儲器中,但是這不是必要的。如果需要,在使用中報頭緩沖區(qū)和主體緩沖區(qū)中的一些或全部也可被拷貝到本地存儲器(例如,緩存)。
主體緩沖區(qū)30中針對子塊存儲的數(shù)據(jù)同樣可包括未壓縮或者壓縮(編碼)形式的數(shù)據(jù)陣列20中的數(shù)據(jù)。在實施方式中,子塊數(shù)據(jù)被編碼以給出原始數(shù)據(jù)的編碼表示,其與原始未編碼形式的數(shù)據(jù)相比大小減小。任何合適和期望的編碼(壓縮)處理可用于該編碼。
此實施方式中的各個報頭數(shù)據(jù)塊23同樣包含指針數(shù)據(jù),該指針數(shù)據(jù)指示主體緩沖區(qū)30內(nèi)存儲有該報頭數(shù)據(jù)塊23所涉及的塊21的子塊的數(shù)據(jù)的位置。
在這些實施方式中,報頭數(shù)據(jù)塊23中的指針數(shù)據(jù)按照相對于報頭緩沖區(qū)24的起始位置a的偏移的形式與報頭數(shù)據(jù)塊所涉及的塊被分割成(編碼為)的各個子塊的“大小”指示值(按字節(jié))一起指示報頭數(shù)據(jù)塊所涉及的相應(yīng)子塊的存儲的數(shù)據(jù)在主體緩沖區(qū)30中的起始位置。
(因此,如之前一樣,為了在主體緩沖區(qū)30中定位各個子塊的數(shù)據(jù),解碼器將使用報頭數(shù)據(jù)塊23中的指針來確定報頭數(shù)據(jù)塊23所涉及的子塊集合的數(shù)據(jù)在主體緩沖區(qū)30中的起始位置,然后使用報頭數(shù)據(jù)塊23中的大小信息來對在所關(guān)注的子塊之前存儲的子塊的存儲的數(shù)據(jù)的大小求和,以確定所關(guān)注的子塊的數(shù)據(jù)在主體緩沖區(qū)30中的起始位置。利用所談?wù)摰淖訅K的所指示的存儲數(shù)據(jù)大小來相應(yīng)地確定所關(guān)注的子塊的數(shù)據(jù)的結(jié)束位置。)
在這些實施方式中,報頭數(shù)據(jù)塊23被配置為僅包含(僅存儲)報頭數(shù)據(jù)塊所涉及的相應(yīng)子塊的存儲的數(shù)據(jù)在主體緩沖區(qū)30的起始位置的指示以及報頭數(shù)據(jù)塊所涉及的各個子塊的相應(yīng)大小指示值。因此,與先前實施方式中不同,報頭數(shù)據(jù)塊不存儲任何“凈荷”子塊數(shù)據(jù)(即,在對給定子塊進(jìn)行解碼時要使用的任何數(shù)據(jù))。這具有這樣的優(yōu)點:在對給定子塊進(jìn)行解碼時僅需要對子塊數(shù)據(jù)進(jìn)行解碼,而無需對報頭數(shù)據(jù)塊中的任何數(shù)據(jù)進(jìn)行解碼。
當(dāng)利用多個不同的編碼器進(jìn)行編碼時,這些實施方式中的編碼處理被配置為確保各個編碼器在開始編碼之前能夠訪問大小為數(shù)據(jù)陣列20的未壓縮塊的大小的存儲器空間的連續(xù)集合。這通過將主體緩沖區(qū)30分割成可用編碼器那么多的不同部分并且向各個編碼器分配主體緩沖區(qū)30的相應(yīng)部分之一來實現(xiàn)。然后,當(dāng)一個編碼器已填充它自己的緩沖區(qū)部分到?jīng)]有足夠的存儲器空間可用于保證數(shù)據(jù)陣列的編碼塊將正好嵌入所分配的空間的程度時,編碼器被配置為拿走為另一編碼器分配的空間的一半(四舍五入為未壓縮的主體緩沖區(qū)的大小)然后繼續(xù)其壓縮。只要所分配的主體緩沖區(qū)部分的粒度和數(shù)據(jù)陣列的編碼塊可占據(jù)的最大大小一樣大,這應(yīng)該不需要任何額外數(shù)據(jù)。
在這些實施方式中,可由報頭數(shù)據(jù)塊23中的大小字段指示的特定子塊大小指示值被預(yù)定義為(被留出用于)指示子塊的特殊情況,以方便以高效的方式將這些特殊情況用信號通知給解碼器。在本實施方式中,用于此目的的大小指示值是在使用中事實上不會出現(xiàn)的大小,即,0或1的大小指示。
大小指示值1用于指示大小指示值所涉及的子塊的數(shù)據(jù)以未壓縮的形式存儲在主體緩沖區(qū)中。
大小指示值0用于指示在對大小指示值0所涉及的子塊進(jìn)行解碼時應(yīng)該被使用與用于在前子塊的數(shù)據(jù)相同的數(shù)據(jù)(即,在對大小指示值0所涉及的子塊n進(jìn)行解碼時應(yīng)該使用與用于子塊n-1的數(shù)據(jù)相同的數(shù)據(jù))。這可有效地用于指示給定子塊可被視為另一子塊的拷貝(因此在解碼時可從另一子塊拷貝)的情況。
在編碼處理中識別出這種拷貝子塊的情況下,則用于拷貝子塊的數(shù)據(jù)不被存儲在主體緩沖區(qū)30中。這可通過避免存儲復(fù)制的子塊數(shù)據(jù)來允許以更壓縮的形式將子塊數(shù)據(jù)存儲在主體緩沖區(qū)30中。
為了進(jìn)一步增強使用“拷貝”子塊大小值指示的可能效果,在這些實施方式中,數(shù)據(jù)陣列的給定塊的子塊按照遵循空間填充曲線的順序(例如,peano曲線、u順序、z順序等)被編碼和存儲,以確保各個子塊總是接著空間上靠近的鄰居子塊被編碼(存儲)。這也可有助于增強緩存任何子塊數(shù)據(jù)的效果。
在本實施方式中,如上所述,使用包含指向主體緩沖區(qū)30中的子塊數(shù)據(jù)的起點的指針以及各個子塊的大小指示值的16字節(jié)報頭塊。各個報頭數(shù)據(jù)塊的基本布局是用于指向所談?wù)摰膲K的子塊集合的數(shù)據(jù)的起點的指針首先出現(xiàn),然后是各個相應(yīng)子塊的大小指示值(按照子塊被編碼并存儲在主體緩沖區(qū)30中的順序)。然而,指針的實際大小和大小指示值以及主體緩沖區(qū)30中的子塊的布局可根據(jù)正被編碼的數(shù)據(jù)的形式(例如,它是rgb還是yuv數(shù)據(jù))而被不同地配置。
圖4至圖8示出當(dāng)編碼并存儲rgb或rgba數(shù)據(jù)時數(shù)據(jù)陣列20的相應(yīng)塊的報頭數(shù)據(jù)塊和子塊數(shù)據(jù)的布置。
圖4和圖5示出不包含任何預(yù)定義的“特殊情況”子塊的數(shù)據(jù)陣列的塊的布置。
圖6和圖7示出包括一些預(yù)定義的特殊情況子塊(即,“拷貝”子塊和未壓縮子塊)的數(shù)據(jù)陣列的塊的布置。
圖8示出所談?wù)摰臄?shù)據(jù)陣列塊的所有數(shù)據(jù)元素(位置)具有相同數(shù)據(jù)值的情況下的報頭數(shù)據(jù)塊布置。
在這些示例中,在數(shù)據(jù)陣列所分割成的各個塊表示16×16數(shù)據(jù)條目的情況下,則對于rgb或rgba數(shù)據(jù),數(shù)據(jù)陣列的各個塊被分割成16個4×4子塊并編碼。各個子塊將相應(yīng)地作為三或四分量紋理被存儲。
如圖4和圖5所示,報頭數(shù)據(jù)塊23包括32位指針40(為相對于主體緩沖區(qū)30中的數(shù)據(jù)塊的子塊數(shù)據(jù)的起點的偏移的形式),然后是16個6位大小指示值41,一個大小指示值41用于數(shù)據(jù)陣列的塊所分割成的每個子塊以用于編碼目的(如上所述),從而總共提供16字節(jié)報頭數(shù)據(jù)塊。如圖4和圖5所示,報頭數(shù)據(jù)塊23中的各個大小指示值指示用于存儲對主體緩沖區(qū)30中的大小指示值所涉及的相應(yīng)子塊進(jìn)行解碼所要使用的數(shù)據(jù)的存儲器大小。
例如,指針40可被存儲為整數(shù)值,或者它可利用浮點表示來存儲(指示)(例如,取決于期望能夠指示的地址空間的大小)。
圖5示出各個數(shù)據(jù)陣列的塊的16個4×4子塊被編碼并存儲的順序??蓮膱D5看出,編碼順序遵循空間填充曲線(在這種情況下,peano曲線)。
圖6和圖7示出在確定第三子塊(子塊編號2)可被視為第二子塊(子塊編號1)的拷貝的情況下塊的rgb或rgba數(shù)據(jù)的數(shù)據(jù)存儲布置。在這種情況下,第三子塊的大小指示值s2被設(shè)定為值“0”(已被預(yù)定義為指示拷貝子塊),并且如圖6和圖7所示,在主體緩沖區(qū)30中針對第三子塊(子塊編號2)沒有存儲子塊數(shù)據(jù),而是解碼器將重用針對第二子塊(子塊編號1)存儲的數(shù)據(jù)來對第三子塊(子塊編號2)進(jìn)行解碼。
圖6還示出示例性未壓縮子塊(子塊5),其大小指示值s5相應(yīng)地被設(shè)定為值1(已被預(yù)定義為指示未壓縮子塊),
圖8示出在所談?wù)摰膲K的所有數(shù)據(jù)元素(位置)被確定為與相同數(shù)據(jù)值關(guān)聯(lián)的情況下的報頭數(shù)據(jù)塊的布置。
在這種情況下,如圖8所示,報頭數(shù)據(jù)塊23的位37:32中的報頭數(shù)據(jù)塊23所涉及的數(shù)據(jù)塊的第一子塊的大小指示值(字段)s0被設(shè)定為值“0”(已被預(yù)定義為指示拷貝子塊)。然而,在這種情況下,在報頭數(shù)據(jù)塊23中的該位置處存在拷貝子塊指示值“0”被當(dāng)作報頭數(shù)據(jù)塊所涉及的數(shù)據(jù)塊中的所有數(shù)據(jù)元素(數(shù)據(jù)位置)具有相同數(shù)據(jù)值(顏色值)的指示。
用于該塊的所有數(shù)據(jù)位置(數(shù)據(jù)元素)的相同數(shù)據(jù)值(顏色值)然后以未壓縮形成包括在報頭數(shù)據(jù)塊的位127:64中,如圖8所示。
如圖8所示,報頭數(shù)據(jù)塊中的其它數(shù)據(jù)字段(因此,指示相對于子塊數(shù)據(jù)的起點的偏移的32位指針以及任何其余子塊大小指示字段)被簡單地設(shè)定為默認(rèn)值(例如,“0”)。
也如圖8所示,在這種情況下,由于報頭數(shù)據(jù)塊中包括了對數(shù)據(jù)元素(數(shù)據(jù)位置)塊進(jìn)行解碼所需的所有信息,所以不存儲對應(yīng)單獨(附加)的子塊數(shù)據(jù)集合。
上述布置方式可用于期望將所有數(shù)據(jù)分量一起存儲在相同編碼子塊中的數(shù)據(jù)。在其它情況下(例如,對于yuv數(shù)據(jù)),不同數(shù)據(jù)分量(例如,y平面數(shù)據(jù)和uv平面數(shù)據(jù))可作為單獨的編碼子塊被存儲,以方便分別讀取和解碼該數(shù)據(jù),并且還允許不同類型的數(shù)據(jù)以不同的分辨率被存儲。
在以上述實施方式的方式對數(shù)據(jù)陣列20進(jìn)行編碼的操作中,適當(dāng)配置和/或編程的處理電路將從存儲器接收和/或提取表示原始數(shù)據(jù)陣列20的數(shù)據(jù)流,并且如上所述操作以將數(shù)據(jù)陣列20分割成塊和子塊,生成并存儲適當(dāng)?shù)膱箢^數(shù)據(jù)塊,并且生成數(shù)據(jù)陣列的子塊的編碼數(shù)據(jù),并將數(shù)據(jù)陣列的子塊的編碼數(shù)據(jù)存儲在存儲器中。如果需要,可向輸入的數(shù)據(jù)陣列中添加填充數(shù)據(jù)以確保它具有能夠按照16均勻地分割的寬度和高度(在對數(shù)據(jù)陣列進(jìn)行解碼時(如果需要),這種填充數(shù)據(jù)然后可被解碼器適當(dāng)?shù)厍谐?crop))。
作為編碼操作的一部分,假定要編碼的數(shù)據(jù)陣列的給定塊將被評估以確定是否該塊的所有數(shù)據(jù)元素(位置)均具有相同數(shù)據(jù)值,然后這樣的數(shù)據(jù)塊(僅)利用圖8所示的形式的報頭數(shù)據(jù)塊來編碼。
例如,可通過從存儲器讀取數(shù)據(jù)陣列的塊的所有數(shù)據(jù)位置的數(shù)據(jù)值并且比較其數(shù)據(jù)值以確定它們是否相同來識別這樣的相同數(shù)據(jù)位置塊。
在優(yōu)選實施方式中,數(shù)據(jù)陣列中的相同數(shù)據(jù)值塊的識別在數(shù)據(jù)陣列的塊正被寫入到緩沖器時確定,然后它們從緩沖器被存儲(寫出)到(主)存儲器?,F(xiàn)在將參照圖9至圖11來描述在基于拼塊的圖形處理系統(tǒng)的上下文中該操作的實施方式。
圖9示出本發(fā)明的該實施方式的基于拼塊的圖形處理流水線91的示意圖。流水線91包括:柵格化器(rasteriser)92,其用于針對與覆蓋拼塊的圖元關(guān)聯(lián)的采樣位置生成要渲染的片段;以及片段著色級94,其從柵格化器92接收柵格化的片段。片段著色級94被配置為渲染柵格化的片段,以針對與所述片段關(guān)聯(lián)的采樣位置生成渲染的片段數(shù)據(jù)(例如,針對拼塊中的采樣位置確定渲染的顏色和透明度(例如,rgbα)值)。
流水線91還包括拼塊緩沖器96,其聯(lián)接至片段著色級94以允許拼塊中的采樣位置的渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器96。拼塊緩沖器96還經(jīng)由寫回單元98聯(lián)接至主存儲器中(即,在流水線91外部)的幀緩沖器97。
寫回單元98被配置為將針對拼塊寫入到拼塊緩沖器96的渲染的片段數(shù)據(jù)的壓縮表示寫出到幀緩沖器97。寫回單元98在將拼塊緩沖器中的渲染的片段數(shù)據(jù)的壓縮表示寫入到幀緩沖器97時使用上面以及申請人的專利us8,542,939b2、us9,014,496b2、us8,990,518b2和us9,116,790b2中所描述的壓縮方案來表示渲染的片段數(shù)據(jù)。因此,如上所述,壓縮表示包括與采樣位置的塊(例如,拼塊)關(guān)聯(lián)的報頭數(shù)據(jù)塊以及與塊關(guān)聯(lián)的子塊數(shù)據(jù)。
圖9所示的流水線91還包括“純色檢查器”處理級(處理電路)93以用于識別所渲染的拼塊中的恒定顏色的塊。純色檢查器93聯(lián)接至柵格化器92和拼塊緩沖器96,以使得它可控制寫回單元98的操作用于將數(shù)據(jù)寫回到幀緩沖器97的(將在下面描述)。
現(xiàn)在將參照圖9、圖10和圖11描述圖9所示的流水線91的操作。圖10示出圖9所示的基于拼塊的圖形處理流水線的操作的流程圖,圖11示出針對用于圖9和圖10所示的實施方式的示例拼塊使用顏色緩沖器和“干凈位”位圖的示例。
在柵格化器92的柵格化處理(步驟101,圖10)之后,基于針對拼塊生成的片段(如果有的話),純色檢查器93確定拼塊是否包含要渲染的任何圖元(多邊形)(步驟102,圖10)。當(dāng)針對拼塊不存在要渲染的圖元(即,甚至沒有圖元至少部分地覆蓋拼塊)時,則柵格化器92將不生成片段,因此拼塊是完全“干凈”的。這也將意味著將不存在要由片段著色級94渲染的片段,因此拼塊中的任何采樣位置的渲染的片段數(shù)據(jù)將不被寫入到拼塊緩沖器96。
在識別出拼塊中不存在圖元和片段時,純色檢查器93用信號通知寫回單元98拼塊將不被寫入(即,它是完全“干凈”的)。寫回單元98然后將針對拼塊的圖8所示的形式的報頭數(shù)據(jù)塊寫出(表示拼塊作為其一部分的所存儲的數(shù)據(jù)陣列中的拼塊)。在這種情況下,報頭數(shù)據(jù)塊中指示的“相同”顏色值是要用于“干凈”采樣位置的默認(rèn)顏色值。
另選地,純色檢查器93將檢測正在渲染的拼塊不包含要渲染的圖元(步驟102,圖10)。在這種情況下,柵格化器92將針對拼塊生成片段,因此片段著色級94將渲染所述片段以針對拼塊中的一個或更多個采樣位置生成將被寫入到拼塊緩沖器96的渲染的片段數(shù)據(jù)。然后,純色檢查器從柵格化器針對拼塊設(shè)定的標(biāo)志確定拼塊何時完全被不透明圖元覆蓋(即,不透明圖元是否覆蓋整個拼塊)(步驟104,圖10)。
當(dāng)拼塊沒有完全被不透明圖元覆蓋,即,拼塊中存在一個或更多個采樣位置是澄清或半透明的(例如,具有小于1的α值)時,則由片段著色級94來渲染拼塊中的圖元的片段,與這些片段關(guān)聯(lián)的采樣位置的渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器96。一旦針對拼塊的所有渲染的片段數(shù)據(jù)均被寫入到拼塊緩沖器96,寫回單元98利用上面所描述的(以及如申請人的專利us8,542,939b2、us9,014,496b2、us8,990,518b2和us9,116,790b2中所描述的)幀緩沖器壓縮技術(shù)將渲染的片段數(shù)據(jù)寫出到幀緩沖器97(步驟105,圖10)。
當(dāng)拼塊完全被不透明圖元覆蓋時,則由片段著色級94來渲染拼塊中的圖元的片段,與這些片段關(guān)聯(lián)的采樣位置的渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器96。
通常,使用“干凈位”位圖200(如圖11所示)來識別拼塊中的沒有渲染的片段數(shù)據(jù)被寫入拼塊緩沖器96中的采樣位置(即,“干凈”的采樣位置)。以這樣的方式跟蹤拼塊中的這些“干凈”采樣位置可允許識別其中具有拼塊中的在拼塊緩沖器96中沒有渲染的片段數(shù)據(jù)被寫入的采樣位置的拼塊或塊(例如,如果在柵格化級處沒有識別出這種塊或拼塊)。然而,一旦純色檢查器93確定了整個拼塊被不透明多邊形覆蓋(步驟104,圖10),就知道不再需要跟蹤拼塊中的“干凈”采樣位置。因此,位圖200然后可被賦予新的用途以在渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器96時用于比較采樣位置的渲染的顏色。
因此,當(dāng)采樣位置的渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器96時,使用位圖200以跟蹤與包括相同顏色值的渲染的片段數(shù)據(jù)關(guān)聯(lián)的采樣位置,即,跟蹤拼塊中被渲染為相同顏色的采樣位置(步驟106,圖10)。
圖11示出使用“干凈位”位圖200來跟蹤拼塊中的被渲染為相同顏色的采樣位置(相對于跟蹤在拼塊緩沖器96中沒有渲染的片段數(shù)據(jù)被寫入的采樣位置,被賦予新的用途)。圖11還示出顏色緩沖器220(作為拼塊緩沖器96的一部分),其示出針對拼塊中的采樣位置的渲染的片段數(shù)據(jù)的顏色。(為了清晰,顏色以灰度來示出,并且拼塊中的采樣位置的數(shù)量被限制為4×4。實際上,可使用任何顏色,并且拼塊可包含諸如16×16或32×8的更多數(shù)量的采樣位置。)
純色檢查器93針對拼塊將當(dāng)該數(shù)據(jù)被寫入到拼塊緩沖器96中的采樣位置時渲染的片段數(shù)據(jù)中的顏色值與寫入到拼塊緩沖器96的第一采樣位置的渲染的片段數(shù)據(jù)中的顏色值進(jìn)行比較,即,識別具有相同顏色值的渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器96的采樣位置(步驟108,圖10)。然后,純色檢查器93使用干凈位位圖200來跟蹤相同顏色值被寫入到拼塊緩沖器96的采樣位置。
干凈位位圖200是與拼塊中的采樣位置陣列對應(yīng)的陣列,陣列中的各個位置具有一位。當(dāng)用于跟蹤正被寫入到拼塊的顏色值時,在此實施方式中,當(dāng)采樣位置的渲染的片段數(shù)據(jù)中的顏色值與寫入到拼塊緩沖器96的第一采樣位置的顏色值相同時,該采樣位置的位被設(shè)定為“1”,或者當(dāng)采樣位置的渲染的片段數(shù)據(jù)中的顏色值不同于寫入到拼塊緩沖器96的第一采樣位置的顏色值時,該采樣位置的位被設(shè)定為“0”。
首先寫入的采樣位置221的渲染的片段數(shù)據(jù)中的顏色值在該采樣位置的渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器時被存儲在拼塊(顏色)緩沖器220中,并且值“1”被寫入到干凈位位圖200中的對應(yīng)位201中。(在此示例中,如圖11所示,假設(shè)首先寫入到拼塊緩沖器220的顏色值221代表白色。)
因此,當(dāng)針對與干凈位位圖200中的位置對應(yīng)的采樣位置,包括與寫入到拼塊緩沖器96的第一采樣位置的顏色值相同的顏色值的渲染的片段數(shù)據(jù)正被寫入到拼塊緩沖器96時,純色檢查器93將“1”寫入到干凈位位圖200中的所述位置(步驟109,圖10)。另選地,當(dāng)針對與干凈位位圖200中的位置對應(yīng)的采樣位置,包括與寫入到拼塊緩沖器96的第一采樣位置的顏色值不同的顏色值的渲染的片段數(shù)據(jù)正被寫入到拼塊緩沖器96時,純色檢查器93將“0”寫入到干凈位位圖200中的所述位置(步驟110,圖10)。
因此,在針對拼塊中的第一采樣位置將渲染的片段數(shù)據(jù)寫入到拼塊緩沖器96之后,純色檢查器93然后確定拼塊中是否還留有任何另外的采樣位置要渲染,即,是否存在拼塊的任何另外的渲染的片段數(shù)據(jù)要被寫入到拼塊緩沖器96(步驟107,圖10)。
如果拼塊中還存在采樣位置要渲染,則當(dāng)采樣位置的渲染的片段數(shù)據(jù)被寫入到拼塊緩沖器96時,將該采樣位置的渲染的片段數(shù)據(jù)中的顏色值與首先寫入的采樣位置221的渲染的片段數(shù)據(jù)中的顏色值進(jìn)行比較(步驟108,圖10)。當(dāng)采樣位置的渲染的片段數(shù)據(jù)中的顏色值與首先寫入的采樣位置221的渲染的片段數(shù)據(jù)中的顏色值相等時,值“1”被寫入到陣列中與該采樣位置對應(yīng)的位置的干凈位位圖200中的位(步驟109,圖10)。當(dāng)采樣位置的渲染的片段數(shù)據(jù)中的顏色值不同于首先寫入的采樣位置221的渲染的片段數(shù)據(jù)中的顏色值時,值“0”被寫入到陣列中與該采樣位置對應(yīng)的位置的干凈位位圖200中的位(步驟110,圖10)。
可從圖11看出,在此示例中,拼塊中的所有采樣位置222在拼塊(顏色)緩沖器220中具有代表白色的顏色值,因此干凈位位圖中的所有對應(yīng)位置202利用值一來標(biāo)記。(在拼塊中的任何采樣位置具有代表與針對拼塊寫入的第一顏色不相同的顏色的顏色值的情況下,干凈位位圖200中的對應(yīng)位置將利用值“0”來標(biāo)記以指示該情況)。
當(dāng)拼塊的所有渲染的片段數(shù)據(jù)已被寫入到拼塊緩沖器96時,純色檢查器93然后確定是否所有采樣位置在渲染的片段數(shù)據(jù)中均與相同的顏色值關(guān)聯(lián),即,是否位圖陣列中的所有值均等于一(步驟111,圖10)。(在圖11所示的示例中,位圖200將指示采樣位置全部與相同的渲染顏色關(guān)聯(lián)。)
當(dāng)純色檢查器93識別出具有與拼塊中的各個采樣位置關(guān)聯(lián)的相同顏色值的拼塊時,純色檢查器93用信號通知寫回單元98拼塊為恒定顏色。然后,寫回單元98針對拼塊寫出圖8所示形式的報頭數(shù)據(jù)塊(表示拼塊作為其一部分的存儲數(shù)據(jù)陣列中的拼塊)。在這種情況下,報頭數(shù)據(jù)塊中指示的“相同”顏色值是已被渲染到拼塊的所有采樣位置的顏色值。
當(dāng)純色檢查器93沒有確定拼塊具有與其各個采樣位置關(guān)聯(lián)的相同顏色值時,寫回單元98利用上面所描述的(以及如申請人的專利us8,542,939b2、us9,014,496b2、us8,990,518b2和us9,116,790b2中所描述的)幀緩沖器壓縮技術(shù)將渲染的片段數(shù)據(jù)寫出到幀緩沖器97(步驟105,圖10)。
最終寫入幀緩沖器97的數(shù)據(jù)然后可被輸出(例如,被顯示)。針對幀中的各個拼塊重復(fù)上面針對一個拼塊描述的處理,然后針對通過圖形處理流水線91所渲染的后續(xù)幀重復(fù)所述處理。
在上述示例中,假設(shè)數(shù)據(jù)陣列被分割成的塊(為其存儲報頭數(shù)據(jù)塊(以及可能另外,子塊數(shù)據(jù)))對應(yīng)于圖形處理器正在生成的拼塊。然而,為了以本實施方式的方式編碼和存儲數(shù)據(jù)陣列,數(shù)據(jù)陣列所分割成的塊也不對應(yīng)于圖形處理器所生成的拼塊。例如,各個塊可僅包括拼塊的部分而非全部(小部分),或者塊可由多個拼塊構(gòu)成。
以上主要描述了在本實施方式中數(shù)據(jù)陣列被處理并存儲在存儲器中以用于使用的方式。當(dāng)要使用如此存儲的數(shù)據(jù)陣列(例如,應(yīng)用于要渲染的片段)時(在所存儲的數(shù)據(jù)陣列是用于圖形處理的紋理貼圖的情況下),則針對所存儲的數(shù)據(jù)陣列的讀取和解碼處理將主要包括上述存儲和編碼處理的逆處理。
因此,諸如圖形處理器(例如,在所存儲的數(shù)據(jù)陣列是紋理貼圖的情況下)或顯示控制器(例如,在所存儲的數(shù)據(jù)陣列是要顯示的幀的情況下)的解碼裝置將首先識別數(shù)據(jù)陣列中的所關(guān)注(即,要確定其值)的特定的一個或多個元素的位置。然后將針對數(shù)據(jù)陣列確定報頭緩沖區(qū)的起始地址a(如果需要,這可例如由控制編碼器和解碼器利用指向報頭緩沖區(qū)的指針設(shè)定控制寄存器的軟件被傳輸給解碼器),然后以上述方式使用該起始地址以及所關(guān)注的數(shù)據(jù)陣列元素的位置以確定數(shù)據(jù)元素位置所落入的數(shù)據(jù)陣列的塊的報頭數(shù)據(jù)塊的位置。
然后,解碼器將從所識別的存儲器位置讀取報頭數(shù)據(jù)塊,并且從其確定指示再現(xiàn)所談?wù)摰臄?shù)據(jù)元素(位置)應(yīng)該使用的數(shù)據(jù)陣列的塊的相關(guān)子塊數(shù)據(jù)的存儲器位置的指針數(shù)據(jù)和子塊大小數(shù)據(jù)。然后,解碼器將例如從所確定的存儲器位置讀取并使用相關(guān)子塊數(shù)據(jù),并且將該數(shù)據(jù)解碼(如果需要,使用存儲在報頭數(shù)據(jù)塊中的任何其它編碼的數(shù)據(jù)(如上所述)),以確定所關(guān)注的數(shù)據(jù)元素(位置)的值。
該解碼處理還應(yīng)該考慮任何預(yù)定義的“特殊情況”子塊大小指示值(如上所述)。因此,如果解碼器在報頭數(shù)據(jù)塊中識別出指示“拷貝”子塊的子塊大小值,則解碼器應(yīng)該相應(yīng)地使用用于(或者將用于)在前塊的子塊數(shù)據(jù)以確定所談?wù)摰臄?shù)據(jù)元素(位置)的值。
相應(yīng)地,如圖8中的報頭數(shù)據(jù)塊配置所示,在針對所談?wù)摰膱箢^數(shù)據(jù)塊所涉及的子塊集合的第一子塊,報頭數(shù)據(jù)塊在大小指示字段包括拷貝塊大小指示值的情況下,則解碼器將從包括在報頭數(shù)據(jù)塊中的數(shù)據(jù)值信息確定用于所談?wù)摰臄?shù)據(jù)元素(位置)的數(shù)據(jù)值,而無需讀取或嘗試讀取所談?wù)摰膲K的任何單獨的子塊數(shù)據(jù)。
然后,可針對所關(guān)注(需要其值)的各個數(shù)據(jù)元素(位置)重復(fù)該處理。
圖12示意性地示出可存儲并使用以本實施方式的方式存儲的數(shù)據(jù)陣列的圖形處理系統(tǒng)1的布置方式。
圖12示出基于拼塊的圖形處理系統(tǒng)。然而,將理解,本發(fā)明也可被實現(xiàn)于圖形處理系統(tǒng)的其它布置方式中(實際上,其它數(shù)據(jù)處理系統(tǒng)中)。
如圖12所示,該系統(tǒng)包括基于拼塊的圖形處理器(gpu)1。該圖形處理器1響應(yīng)于它所接收的渲染圖形對象等的指令生成輸出數(shù)據(jù)陣列(例如,旨在用于顯示在諸如屏幕或打印機(jī)的顯示裝置上的輸出幀)。
如圖12所示,圖形處理器1包括頂點著色器2、分選單元3、狀態(tài)管理單元4、柵格化級5以及渲染流水線形式的渲染級6。
頂點著色器2例如從用于圖形處理器1的驅(qū)動器(未示出)接收要繪制的圖形對象、頂點等的描述,并且對那些對象和頂點等執(zhí)行適當(dāng)頂點著色操作,以例如對那些對象和頂點執(zhí)行適當(dāng)變換和照明操作。
分選單元3針對要生成的輸出所分割成的拼塊(因為如上所述,該示例性圖形處理系統(tǒng)是基于拼塊的圖形處理系統(tǒng))將圖形處理器1要生成的輸出(例如,要顯示的幀)所需的各種圖元、對象等挑選(分選)到適當(dāng)面元(拼塊列表)中。
狀態(tài)管理單元4存儲并控制狀態(tài)數(shù)據(jù)以及圖形處理單元的狀態(tài)以控制圖形處理操作。
柵格化器5以要顯示的圖元作為其輸入,并且將那些圖元柵格化為要渲染的采樣位置和片段。
渲染流水線6從柵格化器5獲得片段并且渲染那些片段以生成輸出數(shù)據(jù)(用于圖形處理器1的輸出的數(shù)據(jù)(例如,要顯示的幀))。
渲染流水線將包括若干不同的處理單元,例如片段著色器、混合器、紋理映射器等。
具體地講,如圖12所示,除了別的以外,渲染單元6將訪問存儲在圖形處理器1能夠訪問的存儲器9中的紋理貼圖10,以能夠?qū)⑾嚓P(guān)紋理應(yīng)用于它正在渲染的片段。存儲有紋理貼圖10的存儲器9可以是圖形處理器1能夠訪問的片上緩沖器或外部存儲器(例如,主系統(tǒng)存儲器)。
圖形處理器1通過生成表示相應(yīng)輸出數(shù)據(jù)陣列的不同區(qū)域的拼塊(因為它是基于拼塊的圖形處理器)來生成其輸出數(shù)據(jù)陣列(例如,輸出幀)。因此,來自渲染流水線6的輸出(渲染的片段)被輸出給拼塊緩沖器7。
然后,拼塊緩沖器的輸出被寫入到幀緩沖器8(例如,用于顯示)。幀緩沖器8可駐留在例如系統(tǒng)(未示出)的主存儲器(該存儲器可以是ddr-sdram)中。如果需要,來自拼塊緩沖器的數(shù)據(jù)在被寫入到幀緩沖器之前可被下采樣。
根據(jù)需要,紋理貼圖10和幀緩沖器8可被存儲在相同的物理存儲器中,或者它們可被存儲在不同的存儲器中。
一段時間后,幀緩沖器3中的數(shù)據(jù)陣列將例如由顯示控制器讀取并且被輸出至用于顯示的顯示裝置(未示出)。
關(guān)于存儲器9中所存儲的紋理貼圖10以及當(dāng)將其輸出數(shù)據(jù)存儲在幀緩沖器8中時,圖12所示的圖形處理系統(tǒng)均使用上述實施方式的數(shù)據(jù)陣列存儲和解碼布置方式。
因此,存儲在存儲器9中以便于渲染單元6使用的各個紋理貼圖10以上述實施方式之一的形式被存儲。因此,當(dāng)渲染單元6需要訪問紋理貼圖時,它將以上述方式來讀取紋理貼圖數(shù)據(jù)并對紋理貼圖數(shù)據(jù)解碼。
類似地,當(dāng)從圖形處理器1生成的輸出數(shù)據(jù)從拼塊緩沖器7被寫入到幀緩沖器8時,以上述方式之一來處理該數(shù)據(jù),以從拼塊緩沖器7獲得數(shù)據(jù)并以上述格式之一將其存儲在幀緩沖器8中。然后,可由例如要顯示幀的顯示器的顯示控制器以上述方式從幀緩沖器8讀取該數(shù)據(jù)并對該數(shù)據(jù)解碼。
將理解,如圖12所示的圖形處理器的級、元件和單元等中的每一個可根據(jù)需要來實現(xiàn),并且將相應(yīng)地包括例如用于執(zhí)行所需操作和功能的適當(dāng)處理電路(例如,處理邏輯、可編程邏輯等),并且將提供用于執(zhí)行本發(fā)明的適當(dāng)控制和處理電路等。
這里還將理解,圖12僅僅示意性地示出了布置方式,因此,例如,本發(fā)明的操作中的數(shù)據(jù)流無需如圖12示出并且可能不如圖12所示,而是可根據(jù)需要例如涉及圖12所示的各種單元和級之間的數(shù)據(jù)的回環(huán)。
盡管上面具體參照本發(fā)明實施方式的技術(shù)與圖形處理器和顯示控制器一起使用描述了本發(fā)明實施方式,本發(fā)明的技術(shù)可用于其它數(shù)據(jù)陣列,特別是圖像處理布置方式。例如,它們可用在圖像信號處理器以及視頻解碼器和編碼器(mpeg/h.264等)中。在這些情況下,例如,本發(fā)明的技術(shù)可用于存儲由正在處理從圖像傳感器接收的數(shù)據(jù)以從其形成可觀看的圖像的圖像信號處理器生成的圖像。例如,視頻編碼器/解碼器可加載以本發(fā)明的形式存儲的圖像(例如,視頻幀),然后利用類似h.264的某些其它標(biāo)準(zhǔn)來壓縮圖像,并且利用本發(fā)明的技術(shù)來相應(yīng)地存儲視頻數(shù)據(jù)的幀(例如,用于提供給圖形處理器或顯示控制器)。
可從上文看出,本發(fā)明(至少在其優(yōu)選實施方式中)提供一種存儲數(shù)據(jù)陣列的方法和設(shè)備,其允許所存儲的數(shù)據(jù)占用較少的存儲器空間(更高效地存儲),減少用于讀取所存儲的數(shù)據(jù)的存儲器業(yè)務(wù)量,和/或使得用于讀取所存儲的數(shù)據(jù)的存儲器業(yè)務(wù)更高效。由此可相應(yīng)地降低功耗。
這(至少在其優(yōu)選實施方式中)通過將要存儲的數(shù)據(jù)陣列分割成多個塊,將數(shù)據(jù)陣列的各個相應(yīng)塊進(jìn)一步分割成子塊集合,并且針對數(shù)據(jù)陣列所分割成的各個塊存儲表示子塊的數(shù)據(jù)和報頭數(shù)據(jù)塊來實現(xiàn)。
進(jìn)一步確定數(shù)據(jù)陣列所分割成的塊的所有數(shù)據(jù)位置是否與相同數(shù)據(jù)值關(guān)聯(lián),并且在這種情況下,數(shù)據(jù)陣列的這種塊的報頭數(shù)據(jù)塊被配置為存儲塊內(nèi)的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)的指示以及與塊中的各個數(shù)據(jù)位置關(guān)聯(lián)的所述相同數(shù)據(jù)值的指示。
在優(yōu)選實施方式中,基于針對塊中的數(shù)據(jù)位置向緩沖器寫入數(shù)據(jù)來識別塊中的所有數(shù)據(jù)位置與相同數(shù)據(jù)值關(guān)聯(lián)的塊。