專利名稱:用于存儲(chǔ)和取回圖像數(shù)據(jù)的技術(shù)的制作方法
技術(shù)領(lǐng)域:
本文公開(kāi)的主題總體上涉及用于存儲(chǔ)和取回圖像數(shù)據(jù)的技術(shù)。
背景技術(shù):
在諸如計(jì)算機(jī)游戲、計(jì)算機(jī)動(dòng)畫和醫(yī)學(xué)成像之類的領(lǐng)域中對(duì)于圖形處理的需求是 顯然的。圖形流水線負(fù)責(zé)渲染圖形。已知了多種圖形流水線配置。例如,在Segal,M.和 Akeley, K.的"The OpenGL Graphics System =ASpecification (Version 2.0),,(2004)禾口 The Microsoft DirectX 9 Programmable Graphics Pipe-line, Microsoft Press (2003) 中說(shuō)明了流行的渲染流水線架構(gòu)。當(dāng)代的流水線具有三個(gè)可編程級(jí),一個(gè)用于處理頂點(diǎn) 數(shù)據(jù)(例如,頂點(diǎn)著色器),第二個(gè)用于處理幾何圖元(例如,幾何著色器),第三個(gè)用于 處理像素片段(fragment)(例如,片段或像素著色器)。Microsoft DirectX 10引入 了幾何著色器和幾何流輸出級(jí)。在D. Blythe的“The Direct3D lOSystem”,Microsoft Corporation (2006)中提供了 Direct3D 10系統(tǒng)的概述。DirectX是涉及輸入設(shè)備、音頻和 視頻/圖形的一組應(yīng)用程序接口(API)。
在附圖中示例性而非限制性地示出了本發(fā)明的多個(gè)實(shí)施例,附圖中相似的參考標(biāo) 號(hào)指代相似的單元。圖1以方框圖形式描繪了根據(jù)實(shí)施例的圖形處理流水線的實(shí)例。圖2描繪了根據(jù)多個(gè)實(shí)施例的像素覆蓋遮罩(pixel coverage mask)的常規(guī)像素 著色器處理以及圖塊(tile)中的像素覆蓋遮罩的處理的實(shí)例。圖3描繪了在由單個(gè)核心處理圖塊時(shí)的核心利用情況以及在將單個(gè)圖塊的處理 分配給多個(gè)核心之前及之后的核心利用情況的實(shí)例。圖4描繪了圖元和像素覆蓋遮罩的定制光柵化處理的實(shí)例。圖5描繪了根據(jù)實(shí)施例的以緩存模式存儲(chǔ)圖元和像素覆蓋遮罩的方式的流程圖。圖6描繪了根據(jù)實(shí)施例的以緩存模式取回圖元和像素覆蓋遮罩的方式的流程圖。
具體實(shí)施例方式本說(shuō)明書(shū)通篇中對(duì)“一個(gè)實(shí)施例”或“實(shí)施例”的提及意思是結(jié)合該實(shí)施例說(shuō)明的 具體特征、結(jié)構(gòu)或特性包括在本發(fā)明的至少一個(gè)實(shí)施例中。因此,本說(shuō)明書(shū)通篇中多個(gè)位置 出現(xiàn)的短語(yǔ)“在一個(gè)實(shí)施例中”或“實(shí)施例,,并不一定全都指代相同的實(shí)施例。而且,所述 的具體特征、結(jié)構(gòu)或特性可以被合并在一個(gè)或多個(gè)實(shí)施例中。各個(gè)實(shí)施例提供了一種用以在圖形流水線中的光柵化級(jí)期間或光柵化級(jí)之后存 儲(chǔ)圖元屬性和像素覆蓋信息的方式。修剪后(post-Clip)流輸出級(jí)使用存儲(chǔ)器中的緩存器 的多個(gè)部分來(lái)存儲(chǔ)圖元及與圖元相關(guān)的像素覆蓋遮罩。被稱為圖塊的屏幕的子區(qū)域是屏幕 空間中像素?cái)?shù)據(jù)的空間相干的集合。按照每圖塊來(lái)排序圖元并將其修剪至圖塊邊界,可選地采用像素覆蓋遮罩來(lái)進(jìn)行這些操作。像素覆蓋遮罩確定了像素與圖元的關(guān)系。例如,像 素覆蓋遮罩可以標(biāo)識(shí)像素是在圖元中、圖元外還是在圖元的邊緣上??梢砸远喾N方式讀出 并處理所存儲(chǔ)的圖元和像素覆蓋信息。例如,可以并行地或順序地讀出與同一圖塊相關(guān)的 像素覆蓋遮罩,并且可以將與同一圖塊相關(guān)的多個(gè)像素覆蓋遮罩一起進(jìn)行處理??梢詫?duì)與 同一圖塊相關(guān)聯(lián)的像素覆蓋遮罩執(zhí)行像素處理,以使得處理后的數(shù)據(jù)在可能的情況下可以 重復(fù)用于像素覆蓋遮罩。DirectX 10規(guī)定了在幾何著色器中產(chǎn)生修剪后的三角形數(shù)據(jù)。DirectXlO僅揭示 了在像素著色器中的標(biāo)量模式的被覆蓋的像素覆蓋遮罩。相對(duì)照地,各個(gè)實(shí)施例借助于單 指令多數(shù)據(jù)(SIMD)向量化編碼或者通過(guò)在多個(gè)核心或線程上并行地運(yùn)行任務(wù),使得對(duì)于 并行地處理整個(gè)圖塊而言有多個(gè)每圖元像素覆蓋遮罩可用。圖1以方框圖形式描繪了根據(jù)實(shí)施例的圖形處理流水線100的實(shí)例。在各個(gè)實(shí)施 例中,流水線100是可編程的,至少是基于微軟的DirectX 10或OpenGL 2. 1而可編程的。 在各個(gè)實(shí)施例中,可以使用一個(gè)或多個(gè)應(yīng)用程序接(API)配置全部級(jí)。繪制圖元(例如,三 角形、矩形、正方形、直線、點(diǎn)或具有至少一個(gè)頂點(diǎn)的形狀)在這個(gè)流水線的頂端流入,并被 變換和光柵化為屏幕空間像素,以便在計(jì)算機(jī)屏幕上繪制。輸入?yún)R集器(assembler)級(jí)102用于從多達(dá)8個(gè)頂點(diǎn)緩存器輸入流收集頂點(diǎn)數(shù) 據(jù)??梢詫?duì)其它數(shù)量的頂點(diǎn)緩存器輸入流進(jìn)行收集。在多個(gè)實(shí)施例中,輸入?yún)R集器級(jí)102 還可以支持稱為“實(shí)例化(instancing)”的處理,其中,輸入?yún)R集器級(jí)102僅用一個(gè)繪圖調(diào) 用對(duì)對(duì)象進(jìn)行幾次復(fù)制。頂點(diǎn)著色器(VS)級(jí)104用于將頂點(diǎn)從對(duì)象空間變換到修剪空間。VS級(jí)104用于 讀取單個(gè)頂點(diǎn),并產(chǎn)生單個(gè)變換后的頂點(diǎn)作為輸出。幾何著色器級(jí)106用于取回單個(gè)圖元的頂點(diǎn),并產(chǎn)生0個(gè)或多個(gè)圖元的頂點(diǎn)。幾何 著色器級(jí)106用于輸出圖元和直線作為頂點(diǎn)的已連接帶。在一些情況下,幾何著色器級(jí)106 用于在稱為數(shù)據(jù)放大的處理中,從來(lái)自頂點(diǎn)著色器級(jí)的每個(gè)頂點(diǎn)發(fā)出多達(dá)1024個(gè)頂點(diǎn)。此 外,在一些情況下,幾何著色器級(jí)106用于從頂點(diǎn)著色器級(jí)104取得一組頂點(diǎn),并對(duì)其進(jìn)行 組合以發(fā)出較少的頂點(diǎn)。流輸出級(jí)108用于將來(lái)自幾何著色器級(jí)106的幾何數(shù)據(jù)直接傳遞到存儲(chǔ)器150中 的幀緩存器的一部分中。在數(shù)據(jù)從流輸出級(jí)108移動(dòng)到幀緩存器后,數(shù)據(jù)能夠返回到流水 線中的任何點(diǎn)來(lái)進(jìn)行額外的處理。例如,流輸出級(jí)108可以以順序的方式將由幾何著色器 級(jí)106輸出的頂點(diǎn)信息的子集復(fù)制到存儲(chǔ)器150中的輸出緩存器。光柵化級(jí)110用于執(zhí)行諸如修剪、剔除(culling)、片段產(chǎn)生、裁剪(scissoring)、 角度劃分(perspective dividing)、視區(qū)變換(viewport transformation)、圖元設(shè)置禾口深 度偏移之類的操作。另外,光柵化級(jí)110可以執(zhí)行以下的任意一個(gè)或全部將屏幕空間圖 元與圖塊(例如,屏幕的子區(qū)域)相關(guān)聯(lián)以便進(jìn)行并行化處理;將圖元修剪至圖塊的范圍 (或者在單個(gè)圖塊情況下的整個(gè)屏幕視區(qū));產(chǎn)生像素覆蓋遮罩,其是由每個(gè)圖塊中的圖元 所接觸的像素的列表;和/或?yàn)槊總€(gè)被接觸像素產(chǎn)生表面和材料屬性的內(nèi)插值。光柵化級(jí)110用于提供至少一個(gè)輸出流。輸出流包括兩個(gè)子流一個(gè)子流用于圖 元,一個(gè)子流用于像素覆蓋遮罩??梢砸圆煌俾瘦敵鲎恿?。可以針對(duì)每個(gè)光柵化的圖塊 (一旦其變?yōu)榭捎?獨(dú)立地使用流數(shù)據(jù)。這在多線程環(huán)境中是有利的,多線程環(huán)境中,將工作分配給不同的線程并且對(duì)其進(jìn)行并行處理,同時(shí)在圖形流水線中仍然正在產(chǎn)生其它圖塊 的流數(shù)據(jù)。相關(guān)于像素的流水線排序處理,在流水線中將修剪后流輸出級(jí)112設(shè)置在光柵化 級(jí)Iio之后及像素著色級(jí)114之前。修剪后流輸出級(jí)112用于將圖元流存儲(chǔ)至圖元存儲(chǔ)器 區(qū)152的一部分中,并將像素覆蓋遮罩存儲(chǔ)至圖塊存儲(chǔ)器區(qū)154的一部分中。在一些情況 下,由光柵化級(jí)110產(chǎn)生的像素覆蓋遮罩不存儲(chǔ)在存儲(chǔ)器區(qū)154中。在此情況下,不分配存 儲(chǔ)器區(qū)154。在多個(gè)實(shí)施例中,圖元流包括經(jīng)修剪的屏幕空間圖元,并且是按照繪制順序的,但 不必按照每圖塊進(jìn)行編組。圖元流包括圖元的屏幕空間頂點(diǎn)位置以及用于定制內(nèi)插的每頂 點(diǎn)深度信息?;趯?duì)于存儲(chǔ)器占用區(qū)域、特征和性能的應(yīng)用需求,圖元的其它每頂點(diǎn)屬性包 括紋理坐標(biāo)、顏色、存在時(shí)間、發(fā)光度(radiance)、輻照度(irradiance)和深度及可被包 含在流中的那些屬性。在多個(gè)實(shí)施例中,像素覆蓋流參考圖元,并且按照每修剪后圖元而被編組。像素覆 蓋遮罩定義了哪些屏幕像素被相應(yīng)的圖元所接觸。在一些實(shí)施例中,不存儲(chǔ)這個(gè)像素覆蓋 遮罩流。作為替代,由定制的應(yīng)用側(cè)的覆蓋遮罩產(chǎn)生代碼來(lái)產(chǎn)生像素覆蓋遮罩。產(chǎn)生像素 覆蓋遮罩的應(yīng)用知道圖元的頂點(diǎn)位置,并基于頂點(diǎn)位置來(lái)判斷像素是否與圖元相關(guān)聯(lián)。這 個(gè)應(yīng)用可以在存儲(chǔ)器150中分配緩存器,以將像素覆蓋遮罩存儲(chǔ)至存儲(chǔ)器中所分配的區(qū)域 中。在多個(gè)實(shí)施例中,修剪后流輸出級(jí)112用于以流模式或以緩存模式將圖元數(shù)據(jù)及 可任選的像素覆蓋數(shù)據(jù)存儲(chǔ)至大小可變的存儲(chǔ)器緩存器中,并且其具有鏈接列表式的表 示,該表示使得能夠按照?qǐng)D元和像素覆蓋流的繪制順序進(jìn)行順序地使用。如果產(chǎn)生了像素 覆蓋遮罩,則覆蓋流數(shù)據(jù)結(jié)構(gòu)包含指向圖元流中其相關(guān)圖元的數(shù)據(jù)結(jié)構(gòu)的指針。在流模式中,由應(yīng)用在每圖塊回調(diào)函數(shù)(per-tile call-back function)中處理 圖元數(shù)據(jù)。在流模式中,僅有該流的若干部分(例如,為一個(gè)圖塊的大小)可立即用于該應(yīng) 用。在流模式中,可以在處理之后重寫圖元和像素覆蓋數(shù)據(jù)。在應(yīng)用完成了對(duì)該流的該圖 塊大小的部分的處理之后,則該流的該部分可被重寫。這個(gè)模式使用了較少的存儲(chǔ)器,使得 在多線程環(huán)境中只要數(shù)據(jù)準(zhǔn)備好就能夠處理數(shù)據(jù),但不能實(shí)現(xiàn)圖塊間的工作共享。在緩存模式中,將用于整個(gè)屏幕的數(shù)據(jù)存儲(chǔ)在緩存器中,并在產(chǎn)生了整個(gè)流(例 如,全部圖塊或特定數(shù)量或區(qū)域的圖塊)之后可由應(yīng)用對(duì)其進(jìn)行訪問(wèn)。因此,在緩存模式 中,將一個(gè)幀的全部圖塊的像素覆蓋遮罩存儲(chǔ)在圖塊存儲(chǔ)器區(qū)154中。圖塊存儲(chǔ)器區(qū)154 由修剪后輸出級(jí)112填充,并且如果已存儲(chǔ)了一幀的全部圖塊的像素覆蓋遮罩或者已填滿 了圖塊存儲(chǔ)器區(qū)154,則一幀的圖塊的像素覆蓋遮罩就可用于處理。一個(gè)或多個(gè)應(yīng)用隨后可 以立即處理全部數(shù)據(jù)。在流模式和緩存模式兩者中,將數(shù)據(jù)以流形式輸出至在圖形流水線上管理的存儲(chǔ) 器資源,并且數(shù)據(jù)不是直接可編程的且應(yīng)用不可直接訪問(wèn)數(shù)據(jù)??梢栽趹?yīng)用側(cè)在每圖塊回 調(diào)函數(shù)中處理數(shù)據(jù)??梢栽诓桓蓴_應(yīng)用側(cè)的情況下在后續(xù)的渲染回次(pass)中將數(shù)據(jù)以 流形式傳送回流水線,或者將該數(shù)據(jù)復(fù)制到分級(jí)資源,從而使其可由應(yīng)用異步地讀取。圖形 流水線不需要以任何方式對(duì)數(shù)據(jù)流的產(chǎn)生進(jìn)行調(diào)度,因?yàn)閳D形流水線知道被管理的流存儲(chǔ) 器資源的依存性。如果在后續(xù)的渲染回次中使用流輸出數(shù)據(jù),或者如果在應(yīng)用處理完該數(shù)據(jù)之后可將該數(shù)據(jù)丟棄,則會(huì)發(fā)生存儲(chǔ)器資源的依存性。在緩存模式中,應(yīng)用可以通過(guò)請(qǐng)求 在資源上鎖定或者通過(guò)異步復(fù)制來(lái)訪問(wèn)數(shù)據(jù)。像素著色器級(jí)114用于讀取每個(gè)單一像素片段的屬性,并產(chǎn)生具有顏色值和深度 值的輸出片段。輸出合并器級(jí)116用于對(duì)來(lái)自像素著色器級(jí)114的片段執(zhí)行模板和深度測(cè)試。在 一些情況下,輸出合并器級(jí)116用于執(zhí)行渲染目標(biāo)混合。存儲(chǔ)器150可以被實(shí)現(xiàn)為以下任何一種或其組合易失性存儲(chǔ)器設(shè)備,例如但不 限于隨機(jī)存取存儲(chǔ)器(RAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、靜態(tài)RAM(SRAM),或者任何其他 類型的基于半導(dǎo)體的存儲(chǔ)器或磁存儲(chǔ)器。圖2描繪了根據(jù)多個(gè)實(shí)施例的對(duì)像素的常規(guī)像素著色器處理以及圖塊中像素的 處理的實(shí)例。對(duì)于在已知的圖形流水線中的常規(guī)像素著色器處理,可以將來(lái)自圖元的像素 分布在多個(gè)像素著色器上進(jìn)行處理。然而,在多個(gè)實(shí)施例中,與同一圖塊相關(guān)的像素可用于 進(jìn)行處理。對(duì)與同一圖塊相關(guān)的像素的處理可以提供優(yōu)于常規(guī)像素著色器的像素處理的一 些優(yōu)點(diǎn),但這些優(yōu)點(diǎn)不是任何實(shí)施例的必需特征。首先,可以針對(duì)圖塊中的全部像素預(yù)先計(jì) 算并重復(fù)使用對(duì)于單個(gè)圖元而言是共用的許多計(jì)算。這種計(jì)算的實(shí)例是用于三角形內(nèi)測(cè)試 (inside-triangle test)和早出策略(early-out strategy)的內(nèi)插度量。其次,按每圖元 的處理提供了傳送相鄰像素?cái)?shù)據(jù)的靈活性,并從而在應(yīng)用側(cè)實(shí)現(xiàn)了諸如光暈(bloom)和景 深之類的屏幕空間效果。在已知圖形流水線中,圖塊處理局限于幾何或像素著色器中的單個(gè)核心。然而,多 個(gè)實(shí)施例允許使用多個(gè)核心來(lái)并行地處理圖塊的圖元和像素。在多個(gè)實(shí)施例中,在光柵化 后圖元和像素的可用性允許對(duì)圖元進(jìn)行圖塊化處理,例如,對(duì)圖像子區(qū)域的處理。另外,在 光柵化后圖元和像素的可用性允許用以在應(yīng)用側(cè)將工作并行化并重新分配的能力。例如, 多個(gè)核心可以并行處理圖元和像素。結(jié)果,在光柵化后圖元和像素的可用性與常規(guī)圖形流 水線相比實(shí)現(xiàn)了相當(dāng)大的性能提高。對(duì)于很多趨于在屏幕空間中具有空間一致性的圖形處理技術(shù),按圖塊順序的訪問(wèn) 方式實(shí)現(xiàn)了相當(dāng)大的性能優(yōu)勢(shì)。這種排序?qū)崿F(xiàn)了圖形高速緩存的最佳使用,并避免了高速 緩存誤取數(shù)據(jù)的性能損失。圖3描繪了在單核心處理圖塊時(shí)的核心利用情況以及在將單個(gè)圖塊的處理分配 到多個(gè)核心之后的核心利用情況的實(shí)例。該曲線圖表示隨時(shí)間的向量利用情況。曲線圖 302顯示了每個(gè)圖塊的工作局限于單個(gè)核心。一些核心迅速進(jìn)入空閑狀態(tài),而其他核心仍處 理工作量大的圖塊。曲線圖304顯示了在多個(gè)核心之間重新分配那些圖塊的工作,以實(shí)現(xiàn) 好得多的隨時(shí)間的核心利用情況。在多個(gè)實(shí)施例中,光柵化后圖元和像素的可用性使得能夠進(jìn)行對(duì)圖元和像素覆蓋 遮罩的定制處理。在每次要對(duì)屏幕的一部分進(jìn)行渲染時(shí),可以調(diào)用回調(diào)例程。示例性的回 調(diào)例程是圖塊渲染操作。在流模式中,可以通過(guò)在實(shí)現(xiàn)圖元和像素的定制光柵化處理的回 調(diào)例程中增加代碼來(lái)增加新的圖形特征和效果。圖4描繪了圖元和像素的定制光柵化處理的實(shí)例。例如,定制的光柵化處理可以 包括不規(guī)則的光柵化。不規(guī)則的光柵化包括在渲染圖像時(shí)利用非2D網(wǎng)格數(shù)據(jù)結(jié)構(gòu)的光柵 化。例如,對(duì)于不規(guī)則的光柵化和加陰影應(yīng)用,應(yīng)用可以實(shí)現(xiàn)定制內(nèi)插技術(shù),這是由于按照每屏幕頂點(diǎn)來(lái)提供圖元專用的表面和材料屬性,并且由于圖元頂點(diǎn)值是可用的。定制內(nèi)插 可以包括基于圖元頂點(diǎn)值,來(lái)確定在偏心像素位置處的表面屬性值。此圖元頂點(diǎn)數(shù)據(jù)在常 規(guī)像素著色器中是不可用的,因?yàn)閮H為常規(guī)像素著色器提供了在像素中心處的內(nèi)插值。由 使用流輸出的應(yīng)用進(jìn)行該定制內(nèi)插,并且因此那些結(jié)果可以由該應(yīng)用而不是由圖形流水線 使用。作為第二個(gè)實(shí)例,應(yīng)用可以選擇放棄光柵化器中的規(guī)則的覆蓋遮罩計(jì)算,而改為 計(jì)算定制的覆蓋遮罩。覆蓋遮罩是用于定義哪些像素被圖元接觸的遮罩。例如,設(shè)計(jì)者可 以確定將何種規(guī)則用于確定像素是否接觸圖元。例如,如果像素僅僅接觸圖元但不在圖元 內(nèi)部,則定制的覆蓋遮罩可以允許圖元接觸該像素。應(yīng)用可以使用那些定制的覆蓋遮罩。在 Gregory S. Johnson、William R.Mark 禾口 Christopher A. Burns 的"The Irregular Z-Buffer and its Application to Shadow Mapping”(奧斯丁的得克薩斯大學(xué) 計(jì)算機(jī)科學(xué)系的技術(shù)報(bào)告TR-04-09)中說(shuō)明了不規(guī)則的Z緩存。在該文獻(xiàn)的圖3中,黃色 圓點(diǎn)表示像素內(nèi)的位置,在這些位置處計(jì)算諸如顏色和深度之類的圖元屬性。這個(gè)計(jì)算稱 為“內(nèi)插”。參考該文獻(xiàn)的圖3,在傳統(tǒng)圖形流水線中,在像素中心處計(jì)算深度。相對(duì)照地,對(duì) 于不規(guī)則的Z緩存,在任意位置處確定深度(也稱為“Z”)。在多個(gè)實(shí)施例中,對(duì)圖元和像 素覆蓋遮罩的存儲(chǔ)允許應(yīng)用在任意位置處進(jìn)行內(nèi)插,此舉用于不規(guī)則的Z緩存的實(shí)現(xiàn)中。圖5描繪了根據(jù)實(shí)施例的過(guò)程500的流程圖,其示出了用以以緩存模式存儲(chǔ)圖元 和像素的方式。圖5的過(guò)程可以由處理器執(zhí)行的應(yīng)用來(lái)執(zhí)行。塊502包括在存儲(chǔ)器中分 配圖塊緩存器以存儲(chǔ)與圖塊相關(guān)的像素覆蓋遮罩,并且在存儲(chǔ)器中分配圖元緩存器以存儲(chǔ) 圖元。在應(yīng)用要產(chǎn)生定制的像素覆蓋遮罩的情況下不必執(zhí)行塊502。例如,在應(yīng)用要產(chǎn)生定 制的像素覆蓋遮罩的情況下,可以不執(zhí)行在存儲(chǔ)器中分配圖塊緩存器以存儲(chǔ)與圖塊相關(guān)的 像素覆蓋遮罩的操作。在應(yīng)用要產(chǎn)生定制的像素覆蓋遮罩的情況下,應(yīng)用可以分配緩存器 以存儲(chǔ)該定制的像素覆蓋遮罩。例如,圖塊可以是4X4像素區(qū)域。例如,在以下的偽代碼 中,指令SetFrontEndSOTargets分配這些緩存器。塊504包括發(fā)出調(diào)用以將圖元屬性從光柵化器存儲(chǔ)至圖元緩存器中,并將與圖 元相關(guān)的像素覆蓋遮罩從光柵化器存儲(chǔ)至圖塊緩存器中。在應(yīng)用要產(chǎn)生定制的像素覆蓋遮 罩的情況下,可以不執(zhí)行發(fā)出調(diào)用以將與圖元相關(guān)的像素覆蓋遮罩從光柵化器存儲(chǔ)至圖塊 緩存器中的操作。塊506包括禁止將像素覆蓋遮罩和圖元屬性存儲(chǔ)至所分配的緩存器中。例如在 以下的偽代碼中,指令FrontEndSOSetTargets禁止在所分配的緩存器中進(jìn)行存儲(chǔ)。在應(yīng)用 要產(chǎn)生定制的像素覆蓋遮罩的情況下,可以不執(zhí)行禁止將像素覆蓋遮罩存儲(chǔ)至所分配的緩 存器中的操作。圖6描繪了根據(jù)實(shí)施例的過(guò)程600的流程圖,其示出了用以訪問(wèn)圖元屬性和像素 覆蓋遮罩的方式。過(guò)程600可以由主機(jī)側(cè)的應(yīng)用執(zhí)行。塊602包括確定圖元屬性緩存器 和圖塊緩存器的特性。例如,塊602可以包括取回與每個(gè)緩存器相關(guān)的溢出標(biāo)志,并確定 存儲(chǔ)在圖塊緩存器中的圖塊數(shù)量。在以下的偽代碼中,指令Query_GetData取回溢出標(biāo)志。塊604包括確定是否發(fā)生圖塊緩存器和圖元緩存器的溢出。例如,塊604可以 包括基于溢出標(biāo)志來(lái)確定這些緩存器的溢出。如果檢測(cè)到溢出,則該過(guò)程可以退出。在 多個(gè)實(shí)施例中,該過(guò)程可以請(qǐng)求圖塊緩存器和圖元緩存器的額外的存儲(chǔ)器,以使得這些緩存器的溢出不會(huì)發(fā)生。所述額外的存儲(chǔ)器可以大于為溢出的緩存器所分配的存儲(chǔ)空 間。例如,額外的存儲(chǔ)空間可以允許存儲(chǔ)比在圖塊緩存器中所存儲(chǔ)的圖塊更多的圖塊, 以及存儲(chǔ)比在圖元緩存器中所存儲(chǔ)的圖元更多的圖元。例如,在以下的偽代碼中,指令 SetFrontEndSOTargets分配緩存器的大小。因此,在指令SetFrontEndSOTargets的下一次 執(zhí)行中,可以改變緩存器的大小。塊606包括請(qǐng)求對(duì)存儲(chǔ)了圖元屬性及相關(guān)像素覆蓋遮罩的緩存器或緩存器的多 個(gè)部分進(jìn)行存儲(chǔ)器鎖定。存儲(chǔ)器鎖定可以包括拒絕其他過(guò)程重寫感興趣的緩存器中的數(shù) 據(jù)。在以下的偽代碼中,指令ViewLock導(dǎo)致鎖定圖塊緩存器的一部分。塊608包括取回所存儲(chǔ)的圖元屬性及相關(guān)像素覆蓋遮罩??梢葬尫潘』氐膱D 元數(shù)據(jù)以便以任何方式進(jìn)行處理。例如,參考圖4所述的過(guò)程可以處理所述圖元和像素?cái)?shù) 據(jù)。塊610包括釋放緩存器的被鎖定部分的存儲(chǔ)器鎖定。在以下的偽代碼中,指令 ViewUnlock釋放緩存器的被鎖定部分,以使得緩存器可以由其他過(guò)程讀取或?qū)懭?。以下提供關(guān)于存儲(chǔ)圖元和像素(圖5)及訪問(wèn)所存儲(chǔ)的圖元和像素(圖6)的方式 的偽代碼。/////////////////////////////////////////////////////1.初始化H這些資源是流的句柄,正如普通Omatic資源一樣OMATIC_RESOURCE_HEADER mTriangleStream ;OMATIC_RESOURCE_HEADER mQQuadStream ;//Mode#l-靜態(tài)模式,從用戶側(cè)分配緩存器,當(dāng)存儲(chǔ)器滿時(shí)停止填充0M_U32x dataSize =...void*data = ArchAlignedMalloc(dataSize,CACHE_LINE_SIZE);0MATIC_F0RMAT format = OMATICFMT_STATIC_STREAMDATA ;0M_U32 flags = OMATIC_BIND_STREAM_OUTPUT|OMATIC_BIND_CPU_READ ;Omatic_ResourceInitBuffer(mpDev, &mTriangleStream,data,pitch, dataSize, format, flags);Omatic_ResourceInitBuffer(mpDev, &mQQuadStream, data+offset, pitch, dataSize, format,flags);//Mode#2-動(dòng)態(tài)模式,使得Omaha管理增長(zhǎng)的緩存器0MATIC_F0RMAT format = OMATICFMT_DYNAMIC_STREAMDATA ;Omatic_ResourceInitBuffer(mpDev, &mTriangIeStrearn, NULL,0,0, format, flags);Omatic_ResourceInitBuffer (mpDev, &mQQuadStream, NULL,0,0, format, flags);/////////////////////////////////////////////////////2.渲染時(shí)間H實(shí)現(xiàn)前端流輸出(靜態(tài)或動(dòng)態(tài))
Omatic_SetFrontEndSOTargets (mpDeν, &mTriangleStream, &mQQuadStream);Omatic_Draw(...);Omatic_Draw(...);//DisableOmatic_FrontEndSOSetTargets (mpDev,0,0) ;// 可選的//////////////////////////////////////x3.輸出流的讀回 Omatic_ViewsSubresourcesEnsureRenderingFinished(mpRenderTarget- > pFullView);OMATIC_QUERY_S0_STATISTICS stats ;Omatic_Query_GetData(&stats) ;//我們需要在渲染時(shí)間的開(kāi)始/結(jié)束查詢嗎? assert ( ! stats. Overflow);Omatic_ViewLock(mTriangleStream. pFullView,0,0); Omatic_ViewLock(mQQuadStream. pFullView,0,0);{ const 0MAHA_STREAM0UT_TRIANGLE*triangleData =(const 0MAHA_STREAM0UT_TRIANGLE*)mTriangleStream. pData ;const 0MAHA_STREAM0UT_QQUAD*quadData =(const 0MAHA_STREAM0UT_QQUAD*)mQQuadStream. pData ; const 0MAHA_STREAM0UT_QQUAD*qq = quadData ; for(0M_U64 i = 0 ;i < stats.QQuadCount ;++i){ 0MAHA_STREAM0UT_TRIANGLE*curTriangle = triangleData[qq- >TIndex] dprintf (" QQ ;T#% d, % d% d M ; % x\n" , qq- > TIndex, qq- > X,
qq- > Y, qq- > Mask);++qq ;}}0matic_ViewUnlock(mQQuadStream. pFullView,0); 0matic_ViewUnlock(mTriangleStream. pFullView,0);/////////////////////////////////////////////////// //功能簽名////////////////////////////////////////////////////氺\簡(jiǎn)要設(shè)定前端(修剪后)流輸出指針。暗示無(wú)需后端處理。氺*設(shè)定指針為空,以便開(kāi)啟正常渲染。 氺*\參數(shù)PDev是這個(gè)調(diào)用影響的0MATIC_DEVICE。
參數(shù)pTriangleSOTarget是用以接收經(jīng)修剪的(屏幕空間)三角形的流輸出緩 存器資源
0104]*\參數(shù)pQQuadSOTarget是用以接收正方形流的流輸出緩存器資源
0105]*/
0106]void Omatic_SetFrontEndSOTargets(OMATIC_DEVICE*pDev,
0107]0MATIC_RES0URCE_ HEADER^pTriangleSOTarget,
0108]0MATIC_RES0URCE_ HEADER^pQQuadSOTarget
0109]//void^pfOverfIowFunction
0110]);
0111]//流數(shù)據(jù)格式
0112]typedef struct_0MAHA_STREAM0UT_SCREEN_VERTEX
0113]{
0114]OM FIX8 XX ; // 有符號(hào) 24. 8
0115]OM FIX8 YY; //有符號(hào)24. 8
0116] OM_F32 ZZ;
0117]0M_FIX8 YY 0M_F32 ZZ }0MAHA_STREAM0UT_SCREEN_VERTEX ;
0118]typedef struct_0MAHA_STREAM0UT_INTERP0LANT
0119]{
0120]0M_F32AA
0121] 0M_F32BB
0122]0M_F32CC
0123]}0MAHA_STREAM0UT_INTERP0LANT ;
0124]typedef struct_0MAHA_STREAM0UT_TRIANGLE
0125]{
0126]0MAHA_STREAM0UT_SCREEN_VERTEX V[3];
0127]0MAHA_STREAM0UT_INTERP0LANT Z ;
0128]}0MAHA_STREAM0UT_TRIANGLE ;
0129]typedef struct_0MAHA_STREAM0UT_QQUAD
0130]{
0131]0M_U32x TIndex ;
0132]0M_U16 Mask ;
0133]0M_U8 X ;
0134] 0M_U8 Y ;
0135]}0MAHA_STREAM0UT_QQUAD ;
0136]本發(fā)明的實(shí)施例可以實(shí)現(xiàn)為以下任何一個(gè)或其組合使用主板互連的一個(gè)或多個(gè) 微芯片或集成電路、硬連線邏輯、由存儲(chǔ)器設(shè)備存儲(chǔ)并由微處理器執(zhí)行的軟件、固件、專用 集成電路(ASIC)和/或現(xiàn)場(chǎng)可編程門陣列(FPGA)。示例性地,術(shù)語(yǔ)“邏輯”可以包括軟件或硬件和/或軟件和硬件的組合。可以在多種硬件架構(gòu)中實(shí)現(xiàn)本文所述的圖形和/或視頻處理技術(shù)。例如,圖形和/ 或視頻功能可以集成在芯片組中?;蛘?,可以使用分立的圖形和/或視頻處理器。作為再 另一個(gè)實(shí)施例,可以由包括多核處理器在內(nèi)的通用處理器來(lái)實(shí)現(xiàn)圖形和/或視頻功能。在 另一個(gè)實(shí)施例中,可以在消費(fèi)電子設(shè)備中實(shí)現(xiàn)這些功能,例如,便攜式移動(dòng)計(jì)算機(jī)或具有用 以顯示由圖形流水線處理的圖像或視頻的顯示設(shè)備的移動(dòng)電話。例如,可以作為可包括一個(gè)或多個(gè)機(jī)器可讀介質(zhì)的計(jì)算機(jī)程序產(chǎn)品來(lái)提供本發(fā)明 的實(shí)施例,所述機(jī)器可讀介質(zhì)包括存儲(chǔ)于其上的機(jī)器可執(zhí)行指令,所述機(jī)器可執(zhí)行指令在 由諸如計(jì)算機(jī)、計(jì)算機(jī)網(wǎng)絡(luò)或其他電子設(shè)備之類的一個(gè)或多個(gè)機(jī)器執(zhí)行時(shí),可以使得所述 一個(gè)或多個(gè)機(jī)器執(zhí)行根據(jù)本發(fā)明的實(shí)施例的操作。機(jī)器可讀介質(zhì)可以包括但不限于軟盤、 光盤、CD-ROM(壓縮光盤只讀存儲(chǔ)器)和磁光盤、R0M(只讀存儲(chǔ)器)、RAM(隨機(jī)存取存儲(chǔ) 器)、EPROM(可擦可編程只讀存儲(chǔ)器)、EEPROM(電可擦可編程只讀存儲(chǔ)器)、磁卡或光卡、 閃存或適合于存儲(chǔ)機(jī)器可執(zhí)行指令的其他類型的介質(zhì)/機(jī)器可讀介質(zhì)。附圖和前述說(shuō)明給出了本發(fā)明的實(shí)例。盡管被描繪為多個(gè)不同的功能項(xiàng),但本領(lǐng) 域技術(shù)人員會(huì)意識(shí)到,這些單元中的一個(gè)或多個(gè)也可以組合為單個(gè)功能單元。或者,特定單 元可以分裂為多個(gè)功能單元。來(lái)自一個(gè)實(shí)施例的單元可以添加到另一個(gè)實(shí)施例中。例如,可 以改變本文所述的過(guò)程的順序,而不局限于本文所述的方式。此外,任何流程圖中的操作都 不必以所示的順序來(lái)實(shí)現(xiàn);也并非必然要執(zhí)行全部的操作。此外,不依賴于其他操作的那些 操作可以與所述其他操作并行地執(zhí)行。然而,本發(fā)明的范圍決不局限于這些具體實(shí)例。許多 變更,不論是否在說(shuō)明書(shū)中明確給出,都是可能的,諸如結(jié)構(gòu)、尺寸和材料的使用中的差別。 本發(fā)明的范圍至少與所附權(quán)利要求書(shū)所給出的一致。
權(quán)利要求
1.一種計(jì)算機(jī)實(shí)現(xiàn)的方法,包括在存儲(chǔ)器中分配第一緩存器的一部分,以存儲(chǔ)圖元屬性;請(qǐng)求將所述圖元屬性從光柵化器存儲(chǔ)至所述第一緩存器的一部分中;及允許由獨(dú)立于圖形流水線的應(yīng)用訪問(wèn)所述圖元屬性。
2.如權(quán)利要求1所述的方法,其中,所述圖元屬性包括屏幕空間頂點(diǎn)位置和每頂點(diǎn)深度信息。
3.如權(quán)利要求2所述的方法,其中,所述圖元屬性進(jìn)一步包括經(jīng)修剪的圖塊邊界的確定。
4.如權(quán)利要求1所述的方法,其中,所述圖元屬性包括從以下至少一個(gè)選擇的每頂點(diǎn) 特性紋理坐標(biāo)、顏色、存在時(shí)間、發(fā)光度和輻照度。
5.如權(quán)利要求1所述的方法,其中,所述圖元屬性包括繪制順序。
6.如權(quán)利要求1所述的方法,進(jìn)一步包括請(qǐng)求從所述光柵化器接收與所述圖元屬性相關(guān)的像素覆蓋遮罩;在存儲(chǔ)器中分配第二緩存器的一部分,以存儲(chǔ)與所述圖元屬性相關(guān)的像素覆蓋遮罩;及請(qǐng)求將像素覆蓋遮罩存儲(chǔ)至所述第二緩存器的所述部分中。
7.如權(quán)利要求6所述的方法,其中,所述存儲(chǔ)的像素覆蓋遮罩中的至少一個(gè)像素覆蓋 遮罩確定至少一個(gè)像素與圖元的關(guān)系。
8.如權(quán)利要求1所述的方法,進(jìn)一步包括 允許訪問(wèn)圖元屬性;及允許應(yīng)用基于選擇的圖元屬性來(lái)產(chǎn)生像素覆蓋遮罩,其中,所述選擇的圖元屬性包括 頂點(diǎn)位置和深度。
9.如權(quán)利要求8所述的方法,其中,所述像素覆蓋遮罩確定像素是在圖元內(nèi)、圖元外, 還是在圖元的邊緣上。
10.如權(quán)利要求1所述的方法,進(jìn)一步包括允許訪問(wèn)像素覆蓋遮罩的圖塊,以便由多個(gè)核心并行地處理。
11.如權(quán)利要求1所述的方法,進(jìn)一步包括允許應(yīng)用至少部分地基于從顏色、深度和坐標(biāo)中選擇的圖元頂點(diǎn)屬性,在像素的中心 的外部的位置處內(nèi)插該像素的顏色和深度。
12.一種裝置,包括 存儲(chǔ)器;圖形流水線,其至少包括光柵化器和修剪后流輸出級(jí);及 處理器執(zhí)行的應(yīng)用,用以在所述存儲(chǔ)器中分配第一緩存器的一部分,以存儲(chǔ)來(lái)自所述光柵化器的圖元屬性; 請(qǐng)求所述修剪后流輸出級(jí)將所述圖元屬性存儲(chǔ)至所述第一緩存器的一部分中,及 允許由第二處理器執(zhí)行的應(yīng)用訪問(wèn)所述圖元屬性。
13.如權(quán)利要求12所述的裝置,其中,所述圖元屬性包括屏幕空間頂點(diǎn)位置和每頂點(diǎn) 深度信息。
14.如權(quán)利要求13所述的裝置,其中,所述圖元屬性確定至圖塊邊界的修剪。
15.如權(quán)利要求12所述的裝置,其中,所述圖元屬性包括從以下至少一個(gè)選擇的每頂 點(diǎn)屬性紋理坐標(biāo)、顏色、存在時(shí)間、發(fā)光度和輻照度。
16.如權(quán)利要求12所述的裝置,其中,所述第二應(yīng)用用以請(qǐng)求從所述光柵化器接收與所述圖元屬性相關(guān)的像素覆蓋遮罩;在存儲(chǔ)器中分配第二緩存器的一部分,以存儲(chǔ)與所述圖元屬性相關(guān)的像素覆蓋遮罩;及請(qǐng)求將像素覆蓋遮罩存儲(chǔ)至所述第二緩存器的所述部分中。
17.如權(quán)利要求16所述的裝置,其中,所述像素覆蓋遮罩確定至少一個(gè)像素與圖元的關(guān)系。
18.如權(quán)利要求12所述的裝置,其中,所述第二應(yīng)用用以基于選擇的圖元屬性來(lái)產(chǎn)生像素覆蓋遮罩,其中,選擇的圖元屬性包括頂點(diǎn)位置和深度。
19.如權(quán)利要求18所述的裝置,其中,所述像素覆蓋遮罩確定像素是在圖元內(nèi)、圖元 外,還是在圖元的邊緣上。
20.如權(quán)利要求12所述的裝置,其中,所述第二應(yīng)用用以 分配像素覆蓋遮罩,以便由多個(gè)核心并行地處理。
21.如權(quán)利要求12所述的裝置,其中,所述第二應(yīng)用用以至少部分地基于從顏色、深度和坐標(biāo)中選擇的圖元屬性,在像素的中心的外部的位置 處內(nèi)插該像素的顏色和深度。
22.—種系統(tǒng),包括 顯示器;及 計(jì)算機(jī)系統(tǒng),包括圖形流水線,其能夠處理圖像或視頻以便由所述顯示器渲染,其中,所述圖形流水線至 少包括光柵化器和修剪后流輸出級(jí);及 用于以下的邏輯在存儲(chǔ)器中分配第一緩存器的一部分,以存儲(chǔ)來(lái)自所述光柵化器的圖元屬性; 請(qǐng)求所述修剪后流輸出級(jí)將所述圖元屬性存儲(chǔ)至所述第一緩存器中的一部分中。
23.如權(quán)利要求22所述的系統(tǒng),其中,所述圖元屬性包括屏幕空間頂點(diǎn)位置和每頂點(diǎn) 深度信息。
24.如權(quán)利要求22所述的系統(tǒng),其中,所述存儲(chǔ)的圖元屬性包括從以下至少一個(gè)選擇 的每頂點(diǎn)屬性紋理坐標(biāo)、顏色、存在時(shí)間、發(fā)光度和輻照度。
25.如權(quán)利要求22所述的系統(tǒng),進(jìn)一步包括用以執(zhí)行以下至少一個(gè)的邏輯基于所選擇的圖元屬性來(lái)產(chǎn)生像素覆蓋遮罩,其中,所選擇的圖元屬性包括頂點(diǎn)位置 和深度;及分配像素覆蓋遮罩,以便由多個(gè)核心并行地處理。
全文摘要
本申請(qǐng)?zhí)峁┝擞糜诖鎯?chǔ)和取回圖像數(shù)據(jù)的技術(shù)。在圖形流水線中,在光柵化級(jí)期間或結(jié)束時(shí),修剪后輸出級(jí)存儲(chǔ)圖元,并且像素存儲(chǔ)在存儲(chǔ)器的一部分中。在光柵化級(jí)期間或結(jié)束時(shí)圖元和像素的可用性允許實(shí)現(xiàn)處理圖元和像素的各種方式。
文檔編號(hào)G06T1/60GK101996391SQ20101025817
公開(kāi)日2011年3月30日 申請(qǐng)日期2010年8月18日 優(yōu)先權(quán)日2009年8月21日
發(fā)明者D·布考特, N·加洛坡馮伯里斯, W·A·胡克斯 申請(qǐng)人:英特爾公司