。在額外實(shí)例中,在發(fā)布繪制調(diào)用命令之前,軟件應(yīng)用24可配置GPU 12W使用一或多個(gè)棋盤形布置技術(shù)來擅染基元。舉例來說,軟件應(yīng)用24可致使實(shí)施棋盤 形布置技術(shù)的一或多個(gè)著色器程序在繪制調(diào)用指令期間在GPU12的一或多個(gè)著色器單元 (例如,殼著色器單元和/或域著色器單元)上執(zhí)行。
[0077] 基元數(shù)據(jù)40可包含指示待擅染的一或多個(gè)基元的數(shù)據(jù)。在一些情況下,基元數(shù)據(jù) 40可幾何學(xué)上界定待擅染的基元。幾何學(xué)上界定基元可指代由一組頂點(diǎn)(或控制點(diǎn))和對(duì) 應(yīng)頂點(diǎn)屬性界定基元。在一些實(shí)例中,基元數(shù)據(jù)40可呈多個(gè)頂點(diǎn)、頂點(diǎn)列表和/或頂點(diǎn)緩 沖器的形式。在其它實(shí)例中,基元數(shù)據(jù)40可采取頂點(diǎn)緩沖器與索引緩沖器組合的形式。在 此些實(shí)例中,頂點(diǎn)緩沖器可界定頂點(diǎn),且索引緩沖器可指定哪些頂點(diǎn)用于界定所述基元中 的每一者。
[0078] 基元數(shù)據(jù)40中包含的頂點(diǎn)中的每一者可包含一或多個(gè)屬性,例如位置坐標(biāo)、正常 坐標(biāo)、紋理坐標(biāo)等。所述頂點(diǎn)可概念上對(duì)應(yīng)于幾何基元(例如,點(diǎn)、線、=角形等)的頂點(diǎn)和 /或?qū)?yīng)于較高階基元(例如,較高階表面,例如貝塞爾表面)的控制點(diǎn)。在某些情況下,所 述頂點(diǎn)中的每一者可分組到一或多個(gè)頂點(diǎn)的群組中,運(yùn)些頂點(diǎn)群組中的每一者可對(duì)應(yīng)于單 一基元。
[00巧]幾何學(xué)上界定的基元的形狀可在一些實(shí)例中由不必包含在基元數(shù)據(jù)40中的額外 數(shù)據(jù)界定。額外數(shù)據(jù)可包含來自一組一或多個(gè)預(yù)定基元類型、一或多個(gè)數(shù)學(xué)函數(shù)和/或一 或多個(gè)棋盤形布置技術(shù)的指定基元類型中的一或多者。
[0080] 在一些實(shí)例中,指定基元類型可作為擅染狀態(tài)變量存儲(chǔ)在GPU12中且可由軟件 應(yīng)用24配置。指定基元類型可在一些情況下界定所得經(jīng)擅染基元(例如,點(diǎn)、線、=角形 等)的形狀和/或基元數(shù)據(jù)40中包含的頂點(diǎn)的連接性(例如,=角形條帶、=角形扇等)。 在一些實(shí)例中,不同基元類型可對(duì)應(yīng)于由處理單元34實(shí)施的圖形管線能夠處理的一組基 元拓?fù)?。在其它?shí)例中,不同基元類型可對(duì)應(yīng)于由圖形API26界定且可供軟件應(yīng)用24使 用的所述組基元拓?fù)洹?br>[0081] 所述一或多個(gè)數(shù)學(xué)函數(shù)和/或所述一或多個(gè)棋盤形布置技術(shù)可在經(jīng)配置W在GPU 12的一或多個(gè)著色器單元(例如,殼著色器單元和/或域著色器單元)上執(zhí)行的一或多個(gè) 著色器程序中指定。數(shù)學(xué)函數(shù)可用于界定具有曲線和/或曲面表面的基元。所述一或多個(gè) 棋盤形布置技術(shù)可用于由近似輸入基元的形狀和/或曲率的多個(gè)經(jīng)棋盤形布置基元來界 定基元。
[0082] 響應(yīng)于接收來自軟件應(yīng)用24的繪制調(diào)用命令,GPU驅(qū)動(dòng)器28可致使GPU12基于 待擅染的所述多個(gè)基元(例如,基元數(shù)據(jù)40)執(zhí)行基于瓦片的擅染。舉例來說,GPU驅(qū)動(dòng)器 28可致使GPU12執(zhí)行裝倉遍次和包含多個(gè)擅染遍次迭代的擅染遍次。在裝倉遍次期間, GPU12可確定基元中的每一者將圖像數(shù)據(jù)(例如,像素?cái)?shù)據(jù))貢獻(xiàn)到擅染目標(biāo)的多個(gè)子區(qū) (例如,倉或瓦片)中的哪一者,且產(chǎn)生指示基元中的每一者將圖像數(shù)據(jù)(例如,像素?cái)?shù)據(jù)) 貢獻(xiàn)到擅染目標(biāo)的所述多個(gè)子區(qū)中的哪一者的裝倉數(shù)據(jù)(例如,來自倉或瓦片的數(shù)據(jù))。一 旦已產(chǎn)生裝倉數(shù)據(jù),GPU12就可基于所述裝倉數(shù)據(jù)和基元數(shù)據(jù)40執(zhí)行包含所述多個(gè)擅染 遍次迭代的擅染遍次W產(chǎn)生基元的復(fù)合光柵化版本。
[0083] 在一些實(shí)例中,為了執(zhí)行裝倉遍次,GPU12中的光柵化器可經(jīng)配置W對(duì)待光柵化 的基元執(zhí)行低分辨率Z緩沖和/或后面剔除。在此些實(shí)例中,可基于在Z緩沖和/或后面 剔除之后可見的基元產(chǎn)生裝倉數(shù)據(jù)。
[0084] 在一些情況下,經(jīng)擅染基元可存儲(chǔ)為多個(gè)像素。像素中的每一者可與擅染目標(biāo)的 一或多個(gè)空間位置相關(guān)聯(lián),且可包含指示相應(yīng)像素的顏色的一或多個(gè)屬性。在一些情況下, 所述像素中的每一者可進(jìn)一步包含指示像素的透明度的一或多個(gè)屬性。在一些實(shí)例中,像 素?cái)?shù)據(jù)可包含每一像素的紅、綠、藍(lán)和a(RGBA)屬性,其中"RGB"分量對(duì)應(yīng)于色彩值且"A" 分量對(duì)應(yīng)于a值。
[00化]本發(fā)明中描述的技術(shù)可在圖2中展示的組件中的任一者中實(shí)施,所述組件包含例 如軟件應(yīng)用24、圖形API26、GPU驅(qū)動(dòng)器28、命令引擎32和處理單元34。舉例來說,GPU驅(qū) 動(dòng)器28、命令引擎32和/或處理單元34可經(jīng)配置W。
[0086] 在其它實(shí)例中,GPU12而非CPU6可執(zhí)行軟件,致使其讀取可在查詢開始時(shí)對(duì)離 散圖形實(shí)體計(jì)數(shù)的運(yùn)行計(jì)數(shù)器W確定開始值。GPU12可在查詢結(jié)束時(shí)讀取運(yùn)行計(jì)數(shù)器W確 定結(jié)束值,且從結(jié)束值減去開始值W確定結(jié)果。
[0087] 在一些實(shí)例中,開始值可存儲(chǔ)在例如存儲(chǔ)器10中的第一存儲(chǔ)器位置中。結(jié)束值可 存儲(chǔ)在例如存儲(chǔ)器10中的第二存儲(chǔ)器位置中。所述結(jié)果可存儲(chǔ)在例如存儲(chǔ)器10中的第= 存儲(chǔ)器位置中。
[0088] 在另一實(shí)例中,開始值可存儲(chǔ)在例如存儲(chǔ)器10中的第一存儲(chǔ)器位置中。結(jié)束值可 存儲(chǔ)在例如存儲(chǔ)器10中的第二存儲(chǔ)器位置中。所述結(jié)果可重寫第一或第二存儲(chǔ)器位置中 的一者。
[0089] 一些實(shí)例可進(jìn)一步包含嵌套第二查詢。嵌套可通過W下操作進(jìn)行:在第二查詢開 始時(shí)讀取運(yùn)行計(jì)數(shù)器W確定第二開始值,在第二查詢結(jié)束時(shí)讀取運(yùn)行計(jì)數(shù)器W確定第二結(jié) 束值,W及從第二結(jié)束值減去第二開始值W確定結(jié)果。
[0090] 圖3為說明基于瓦片的擅染的概念圖。如上文所論述,基于裝倉或瓦片的擅染可 提供一種在稱為"瓦片"或"倉"的較小部分中擅染3D場景的方式。如上文所論述,基于瓦 片的擅染可用于采用場景中的局部空間相干性,W促進(jìn)稍后在圖形管線中有限硬件擅染資 源的使用,或兩者。通常,在基于瓦片的擅染中,系統(tǒng)、設(shè)備或裝置(例如計(jì)算機(jī)圖形裝置) 可將帖劃分為(例如)規(guī)則的柵格。柵格形成瓦片,瓦片是帖或其它區(qū)的部分。在一實(shí)例 中,每一瓦片或倉可使用相同擅染命令流來擅染。 陽0川在圖3的基于瓦片的擅染實(shí)例中,用于繪制多邊形(例如,立角形、TriA、TriB和TriC)的擅染命令可執(zhí)行四次,例如針對(duì)每一瓦片一次。在使用例如遮擋查詢計(jì)數(shù)器等 硬件計(jì)數(shù)器的一實(shí)例中,可僅在不使用嵌套的情況下針對(duì)每一瓦片執(zhí)行用W復(fù)位、開始和 停止遮擋查詢計(jì)數(shù)器的硬件命令。在一些實(shí)例中,如果使用軟件計(jì)數(shù)器,那么軟件命令可執(zhí) 行運(yùn)些操作。在一些實(shí)例中,根據(jù)本發(fā)明的技術(shù),可允許嵌套的遮擋查詢,因此(例如)可 不允許每一瓦片中計(jì)數(shù)器的硬件復(fù)位,因?yàn)榇丝赏ㄟ^在計(jì)數(shù)一或多個(gè)其它查詢當(dāng)中復(fù)位計(jì) 數(shù)器而影響嵌套的一或多個(gè)查詢。舉例來說,假定開始第一查詢且用于所述查詢的計(jì)數(shù)器 在查詢開始時(shí)復(fù)位。此外,假定第二查詢?cè)诘谝徊樵兘Y(jié)束之前開始。第二查詢稱為嵌套查 詢,因?yàn)槠湓谌詧?zhí)行第一查詢時(shí)開始。如果單一計(jì)數(shù)器用于兩個(gè)查詢且計(jì)數(shù)器在第二查詢 開始時(shí)復(fù)位,那么在第一查詢結(jié)束時(shí)從計(jì)數(shù)器讀取的值將很可能不正確。舉例來說,所讀取 的值可通常太小。
[0092] 在一些實(shí)例中,實(shí)施運(yùn)些技術(shù)的系統(tǒng)、方法和裝置可需要存儲(chǔ)每一瓦片的開始和 結(jié)束計(jì)數(shù)器值。運(yùn)些值可存儲(chǔ)在存儲(chǔ)器、寄存器、或某一其它存儲(chǔ)裝置中。舉例來說,開始 值可存儲(chǔ)在存儲(chǔ)器10、寄存器或某一其它存儲(chǔ)器或存儲(chǔ)位置中。結(jié)束值也可存儲(chǔ)在存儲(chǔ)器 10、寄存器或某一其它存儲(chǔ)器或存儲(chǔ)位置中。在另一實(shí)例中,開始值可存儲(chǔ)在例如存儲(chǔ)器10 中的第一存儲(chǔ)器位置中。結(jié)束值可存儲(chǔ)在例如存儲(chǔ)器10中的第二存儲(chǔ)器位置中。所述結(jié) 果可存儲(chǔ)在例如存儲(chǔ)器10中的第=存儲(chǔ)器位置中。在另一實(shí)例中,開始值可存儲(chǔ)在例如存 儲(chǔ)器10中的第一存儲(chǔ)器位置中。結(jié)束值可存儲(chǔ)在例如存儲(chǔ)器10中的第二存儲(chǔ)器位置中。 所述結(jié)果可重寫第一或第二存儲(chǔ)器位置中的一者。在又一實(shí)例中,開始值可存儲(chǔ)在例如存 儲(chǔ)器10中的第一存儲(chǔ)器位置中。結(jié)束值可存儲(chǔ)在寄存器中。結(jié)果可存儲(chǔ)在第一存儲(chǔ)器位 置中。
[0093] 在一些實(shí)例中,基于瓦片的擅染可設(shè)及將擅染目標(biāo)細(xì)分為多個(gè)子區(qū)(例如,倉或 瓦片),W及執(zhí)行包含針對(duì)擅染目標(biāo)的所述子區(qū)中的每一者的單獨(dú)擅染遍次迭代的擅染遍 次。為減少需要在擅染遍次期間處理的基元的數(shù)目,裝倉遍次可在一些實(shí)例中在擅染遍次 之前執(zhí)行。裝倉遍次可用于產(chǎn)生指示待擅染的基元中的每一者將像素?cái)?shù)據(jù)貢獻(xiàn)到擅染目標(biāo) 的多個(gè)子區(qū)中的哪一者的裝倉數(shù)據(jù)??稍谏萌颈榇蔚陂g使用裝倉數(shù)據(jù)W選擇性地擅染 貢獻(xiàn)于在特定擅染遍次迭代期間活躍的子區(qū)的基元,借此減少需要在擅染遍次期間處理的 基元的數(shù)目。
[0094] 擅染可指代將對(duì)應(yīng)于圖形場景中的3D對(duì)象的3D圖形基元轉(zhuǎn)換為2D光柵化圖像 數(shù)據(jù)的過程。擅染通常相對(duì)于擅染目標(biāo)(例如,帖緩沖器)發(fā)生,擅染目標(biāo)通常隨著場景中 的圖形基元中的每一者經(jīng)擅染而更新。因此,不僅擅染目標(biāo)存儲(chǔ)圖形場景的最終2D光柵 化圖像數(shù)據(jù),而且擅染目標(biāo)還可存儲(chǔ)擅染圖形場景時(shí)的中間數(shù)據(jù)。存儲(chǔ)在擅染目標(biāo)中的2D 光柵化圖像數(shù)據(jù)可包含多個(gè)像素,其中所述像素中的每一者包含顏色數(shù)據(jù)、透明度數(shù)據(jù)和/ 或深度數(shù)據(jù)。隨著每一新基元擅染到擅染目標(biāo)中,新基元的2D光柵化圖像數(shù)據(jù)與已經(jīng)存儲(chǔ) 在擅染目標(biāo)中的用于先前經(jīng)擅染基元的現(xiàn)有中間數(shù)據(jù)合并。
[0095] 為合并擅染目標(biāo)中的數(shù)據(jù),通常需要在將新數(shù)據(jù)寫入到擅染目標(biāo)之前從擅染目標(biāo) 讀取中間數(shù)據(jù)。因此,擅染可設(shè)及相對(duì)于含有擅染目標(biāo)的存儲(chǔ)器執(zhí)行大量讀取和寫入操作, 借此導(dǎo)致高存儲(chǔ)器帶寬使用。由于高存儲(chǔ)器帶寬使用,需要針對(duì)擅染目標(biāo)使用專口的高帶 寬忍片上存儲(chǔ)器。然而,在例如移動(dòng)應(yīng)用等區(qū)域有限應(yīng)用中,可能不存在足夠可用區(qū)域來實(shí) 施能夠同時(shí)保存擅染目標(biāo)中的像素中的每一者的所有數(shù)據(jù)的高帶寬忍片上存儲(chǔ)器。
[0096] 基于瓦片的擅染可通過將擅染目標(biāo)細(xì)分為多個(gè)子區(qū)(例如,瓦片或倉)且針對(duì)子 區(qū)中的每一者執(zhí)行包含單獨(dú)擅染遍次迭代的擅染遍次而解決上文提及的問題。子區(qū)中的每 一者可對(duì)應(yīng)于擅染目標(biāo)中的像素的子集(例如,像素的16X16瓦片)。在擅染遍次迭代中 的每一者期間,可擅染與對(duì)應(yīng)子區(qū)相關(guān)聯(lián)的所有圖像數(shù)據(jù),其可包含擅染將像素?cái)?shù)據(jù)貢獻(xiàn) 到子區(qū)的基元中的每一者。足夠大而能夠存儲(chǔ)擅染目標(biāo)的單一子區(qū)的數(shù)據(jù)的高帶寬忍片上 存儲(chǔ)器可用作擅染遍次迭代中的每一者的局部擅染目標(biāo),且在擅染遍次迭代已完成之后, 所述擅染遍次迭代的局部擅染目標(biāo)的內(nèi)容可傳遞到存儲(chǔ)在低帶寬忍片外系統(tǒng)存儲(chǔ)器中的 總體擅染目標(biāo)。通過W每瓦片為基礎(chǔ)執(zhí)行單獨(dú)擅染遍次迭代,基于瓦片的擅染方案可能夠 允許使用高帶寬忍片上存儲(chǔ)器合并即使在并不允許大忍片上存儲(chǔ)器的區(qū)域有限應(yīng)用中的 光柵化圖像數(shù)據(jù)。
[0097] 一種用于執(zhí)行基于瓦片的擅染的方法是針對(duì)擅染目標(biāo)的子區(qū)中的每一者執(zhí)行擅 染遍次迭代,且在擅染遍次迭代中的每一者期間,擅染場景中的所有基元,同時(shí)使用不同剪 刀設(shè)定將輸出限于當(dāng)前正擅染的特定子區(qū)。然而,此方法可能低效,因?yàn)樵谏萌颈榇蔚?的每一者中擅染基元中的每一者而不管所述基元是否實(shí)際上在經(jīng)擅染子區(qū)中可見。
[0098] 為了改進(jìn)基于瓦片的擅染的效率,可在一些實(shí)例中在執(zhí)行擅染遍次之前執(zhí)行裝倉 遍次。裝倉遍次可用于確定基元的裝倉數(shù)據(jù)。對(duì)于待擅染的基元中的每一者,裝倉數(shù)據(jù)可 指示基元中的每一者相對(duì)于擅染目標(biāo)的子區(qū)中的哪一者貢獻(xiàn)像素?cái)?shù)據(jù)。
[0099] 圖4為說明實(shí)例遮擋查詢400的概念圖。在圖4的所說明的實(shí)例中,查詢結(jié)果可 由GPU12W每瓦片的方式輸出且稍后由CPU6累計(jì)。存儲(chǔ)此中間每瓦片結(jié)果所需要的存 儲(chǔ)器的量隨瓦片的數(shù)目增加而線性地增加,且其還增加CPU6進(jìn)行所述累計(jì)所花費(fèi)的時(shí)間 量。圖4說明4個(gè)倉或瓦片402、404、406、408。如圖4中所說明,用于查詢結(jié)果A的存儲(chǔ)器 位置410和用于查詢結(jié)果BC的存儲(chǔ)器位置412可復(fù)位,即計(jì)數(shù)器值可清除414。計(jì)數(shù)器可 針對(duì)查詢A開始416且隨后當(dāng)查詢A418完成時(shí)停止。來自計(jì)數(shù)器的結(jié)果可寫入到用于查 詢A的存儲(chǔ)器位置410。類似地,計(jì)數(shù)器(在一些實(shí)例中相同計(jì)數(shù)器)可針對(duì)查詢BC開始 422且隨后在查詢BC完成時(shí)停止424。來自計(jì)數(shù)器的結(jié)果可寫入到用于查詢BC的存儲(chǔ)器 位置412。在此實(shí)例中,存儲(chǔ)例如遮擋查詢等查詢中的中間每瓦片結(jié)果所需要的存儲(chǔ)器的量 可隨瓦片的數(shù)目增加而線性地增加。瓦片的數(shù)目的增加還增加C