染性能可得以改進(jìn)而不影響 最終渲染的場(chǎng)景。
[0022] 圖1為說(shuō)明根據(jù)本發(fā)明的一些方面用于渲染三維場(chǎng)景的處理器、圖形處理單元和 系統(tǒng)存儲(chǔ)器的框圖。處理器102可執(zhí)行軟件應(yīng)用112、操作系統(tǒng)114和圖形驅(qū)動(dòng)器116。系 統(tǒng)存儲(chǔ)器118可包含間接緩沖器和陰影間接緩沖器,其存儲(chǔ)用于渲染基元的命令流以及待 由GPU 120執(zhí)行的次級(jí)命令。GPU 120可包含圖形存儲(chǔ)器122。圖形存儲(chǔ)器122可為上文 描述的GMEM。在一些實(shí)例中,圖形存儲(chǔ)器122可與GPU 120在"芯片上"。在一些情況下, 圖1中展示的所有硬件元件可在(例如)芯片上系統(tǒng)(SoC)設(shè)計(jì)中的芯片上。
[0023] 在圖1的實(shí)例中,處理器102、系統(tǒng)存儲(chǔ)器118和GPU 120可為裝置的一部分。裝 置的實(shí)例包含(但不限于)視頻裝置、媒體播放器、機(jī)頂盒、無(wú)線手持機(jī)(例如移動(dòng)電話和 所謂的智能電話)、個(gè)人數(shù)字助理(PDA)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、游戲控制臺(tái)、視頻會(huì) 議單元、平板計(jì)算裝置等等。
[0024] 處理器102可為中央處理單元(CPU)。GPU 120可為處理單元,其經(jīng)配置以執(zhí)行例 如產(chǎn)生和輸出圖形數(shù)據(jù)以供在顯示器上呈現(xiàn)等圖形相關(guān)功能,以及執(zhí)行采用由GPU 120提 供的大規(guī)模處理并行性的非圖形相關(guān)功能。舉例來(lái)說(shuō),GPU 120可執(zhí)行圖形應(yīng)用和非圖形 應(yīng)用兩者。因?yàn)镚PU 120可除圖形處理能力之外還提供通用處理能力,所以GPU 120可被 稱為通用GPU (GP-GPU)。
[0025] 處理器102和GPU 120的實(shí)例包含(但不限于)數(shù)字信號(hào)處理器(DSP)、通用微 處理器、專用集成電路(ASIC)、現(xiàn)場(chǎng)可編程邏輯陣列(FPGA)或其它等效集成或離散邏輯電 路。在一些實(shí)例中,GPU 120可為微處理器,其經(jīng)設(shè)計(jì)用于例如提供用于處理圖形以及用于 執(zhí)行非圖形相關(guān)應(yīng)用的大規(guī)模并行處理等特定用途。此外,盡管處理器102和GPU 120說(shuō) 明為單獨(dú)組件,但本發(fā)明的各方面不限于此。舉例來(lái)說(shuō),處理器102和GPU 120可駐留在共 同集成電路(1C)中。
[0026] 在CPU 102上執(zhí)行的軟件應(yīng)用112可包含一或多個(gè)圖形渲染指令,其指示CPU 102 致使將圖形數(shù)據(jù)渲染到顯示器(未圖示)。在一些實(shí)例中,圖形渲染指令可包含軟件指令, 其可符合圖形應(yīng)用編程接口(API),例如開(kāi)放式圖形庫(kù)(〇pcnGLK)API、開(kāi)放式圖形庫(kù)嵌入 系統(tǒng)(OpenGL ES)API、Direct3D API、X3D API、RenderMan API、WebGL API,或任何其它公 共或?qū)S袠?biāo)準(zhǔn)圖形API。為了處理圖形渲染指令,CPU 102可將一或多個(gè)圖形渲染命令發(fā)布 到GPU 120 (例如,經(jīng)由圖形驅(qū)動(dòng)器116)以致使GPU 120執(zhí)行對(duì)圖形數(shù)據(jù)的一些或全部渲 染。在一些實(shí)例中,待渲染的圖形數(shù)據(jù)可包含例如點(diǎn)、線、三角形、四邊形、三角形帶等圖形 基元的列表。
[0027] GPU 120可經(jīng)配置以執(zhí)行圖形操作以將一或多個(gè)圖形基元渲染到顯示器。因此,當(dāng) 在CPU 102上執(zhí)行的軟件應(yīng)用中的一者需要圖形處理時(shí),CPU 102可將圖形命令和圖形數(shù) 據(jù)提供到GPU 120用于渲染到顯示器。所述圖形數(shù)據(jù)可包含(例如)繪制命令、狀態(tài)信息、 基元信息、紋理信息等。在一些情況下,GPU 120可內(nèi)置有高度并行結(jié)構(gòu),所述高度并行結(jié) 構(gòu)提供復(fù)合圖形相關(guān)操作的比CPU 102更有效的處理。舉例來(lái)說(shuō),GPU 120可包含經(jīng)配置 而以并行方式對(duì)多個(gè)頂點(diǎn)或像素操作的多個(gè)處理元件。在一些情況下,GPU120的高度并行 性質(zhì)允許GPU 120比使用CPU 102直接將場(chǎng)景繪制到顯示器更快速地將圖形圖像(例如, ⑶I和二維(2D)及/或三維(3D)圖形場(chǎng)景)繪制到顯示器上。
[0028] GPU 120可直接耦合到圖形存儲(chǔ)器122。換句話說(shuō),GPU 120可使用本地存儲(chǔ)裝置 代替芯片外存儲(chǔ)器而在本地處理數(shù)據(jù)。此允許GPU 120通過(guò)消除GPU 120經(jīng)由總線讀取 和寫(xiě)入數(shù)據(jù)的需要而以更有效的方式操作,其中經(jīng)由總線操作可經(jīng)歷繁重的總線業(yè)務(wù)。然 而,在一些情況下,GPU 120可不包含單獨(dú)存儲(chǔ)器,而是利用系統(tǒng)存儲(chǔ)器118。圖形存儲(chǔ)器 122可包含一或多個(gè)易失性或非易失性存儲(chǔ)器或存儲(chǔ)裝置,例如隨機(jī)存取存儲(chǔ)器(RAM)、靜 態(tài)RAM (SRAM)、動(dòng)態(tài)RAM (DRAM)和一或多個(gè)寄存器。
[0029] CPU 102和/或GPU 120可將經(jīng)渲染圖像數(shù)據(jù)存儲(chǔ)在幀緩沖器124中。幀緩沖器 124可為獨(dú)立存儲(chǔ)器或可分配在系統(tǒng)存儲(chǔ)器118內(nèi)。顯示處理器(未圖示)可從幀緩沖器 124檢索經(jīng)渲染圖像數(shù)據(jù)且在顯示器上顯示所述經(jīng)渲染圖像數(shù)據(jù)。
[0030] 系統(tǒng)存儲(chǔ)器118為裝置的系統(tǒng)存儲(chǔ)器且駐留在處理器102和GPU 120外部,即相 對(duì)于處理器102在芯片外,且相對(duì)于GPU 120在芯片外。系統(tǒng)存儲(chǔ)器118可存儲(chǔ)由處理器 102和GPU 120執(zhí)行的應(yīng)用。此外,系統(tǒng)存儲(chǔ)器118可存儲(chǔ)所執(zhí)行應(yīng)用對(duì)其進(jìn)行操作的數(shù) 據(jù),以及由應(yīng)用產(chǎn)生的數(shù)據(jù)。然而,并非所有此數(shù)據(jù)在每一實(shí)例中都需要存儲(chǔ)在系統(tǒng)存儲(chǔ)器 118中。在一些情況下,數(shù)據(jù)可本地存儲(chǔ)在處理器102或GPU 120上。舉例來(lái)說(shuō),所述數(shù)據(jù) 中的一些或全部可本地存儲(chǔ)在芯片上GPU存儲(chǔ)器(例如,圖形存儲(chǔ)器122)內(nèi)。
[0031] 系統(tǒng)存儲(chǔ)器118可存儲(chǔ)可由CPU 102存取以用于執(zhí)行的程序模塊和/或指令,及/ 或由在CPU 102上執(zhí)行的程序使用的數(shù)據(jù)。舉例來(lái)說(shuō),系統(tǒng)存儲(chǔ)器118可存儲(chǔ)窗口管理器 應(yīng)用,其由CPU 102使用以在顯示器上呈現(xiàn)圖形用戶接口(⑶I)。此外,系統(tǒng)存儲(chǔ)器118可 存儲(chǔ)用戶應(yīng)用和與所述應(yīng)用相關(guān)聯(lián)的應(yīng)用表面數(shù)據(jù)。系統(tǒng)存儲(chǔ)器118可充當(dāng)用于GPU120 的裝置存儲(chǔ)器,且可存儲(chǔ)待由GPU 120操作的數(shù)據(jù)以及由GPU 120所執(zhí)行的操作產(chǎn)生的數(shù) 據(jù)。舉例來(lái)說(shuō),系統(tǒng)存儲(chǔ)器118可存儲(chǔ)紋理緩沖器、深度緩沖器、模板緩沖器、頂點(diǎn)緩沖器、 幀緩沖器或其類似者的任何組合。
[0032] 系統(tǒng)存儲(chǔ)器118可為計(jì)算機(jī)可讀存儲(chǔ)媒體的實(shí)例。舉例來(lái)說(shuō),系統(tǒng)存儲(chǔ)器118可 存儲(chǔ)指令,其致使處理器102和GPU 120執(zhí)行在本發(fā)明中歸于每一者的功能。系統(tǒng)存儲(chǔ)器 118可被認(rèn)為是包括指令的計(jì)算機(jī)可讀存儲(chǔ)媒體,所述指令致使一或多個(gè)處理器(例如,處 理器102或GPU 120)執(zhí)行各種功能。
[0033] 系統(tǒng)存儲(chǔ)器118的實(shí)例包含(但不限于)隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器 (ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPR0M),或可用以攜載或存儲(chǔ)呈指令或數(shù)據(jù)結(jié)構(gòu)的形 式的所要程序代碼且可由計(jì)算機(jī)或處理器存取的任何其它媒體。作為一個(gè)實(shí)例,系統(tǒng)存儲(chǔ) 器118可從所述裝置移除,且移動(dòng)到另一裝置。作為另一實(shí)例,大體類似于系統(tǒng)存儲(chǔ)器118 的存儲(chǔ)裝置可插入到所述裝置中。
[0034] 根據(jù)本發(fā)明的技術(shù),CPU 102可將一或多個(gè)圖形渲染命令發(fā)布到GPU 120以渲染 由基元組成的圖形場(chǎng)景。GPU 120可執(zhí)行裝倉(cāng)遍次以將構(gòu)成圖形場(chǎng)景的基元分類到多個(gè)倉(cāng) 中使得基元的每一倉(cāng)在渲染時(shí)可完全配合到圖形存儲(chǔ)器122中。GPU 120在執(zhí)行裝倉(cāng)遍次 時(shí)還可針對(duì)所述多個(gè)倉(cāng)中的每一倉(cāng)創(chuàng)建可見(jiàn)性流。與倉(cāng)相關(guān)聯(lián)的可見(jiàn)性流可指示所述倉(cāng)是 否與將在最后渲染的場(chǎng)景中可見(jiàn)的至少一個(gè)基元相關(guān)聯(lián)。
[0035] 所述多個(gè)倉(cāng)中的每一倉(cāng)可與用于渲染相關(guān)聯(lián)倉(cāng)中的基元的指令相關(guān)聯(lián)。對(duì)于所述 多個(gè)倉(cāng)中的每一者,相關(guān)聯(lián)指令可依次逐倉(cāng)存儲(chǔ)在存儲(chǔ)器118中的間接緩沖器中。存儲(chǔ)到 間接緩沖器中的倉(cāng)的相關(guān)聯(lián)指令可包含所述相關(guān)聯(lián)指令以及次級(jí)指令。次級(jí)指令可為與倉(cāng) 中的基元的渲染不相關(guān)的指令。然而,所述次級(jí)指令可在一些情況下為圖像相關(guān)操作。次 級(jí)指令可包含線內(nèi)操作,例如從場(chǎng)景的多個(gè)區(qū)域清除像素的快速清除、將圖像塊(例如,像 素的群組)從場(chǎng)景的一個(gè)部分傳遞到另一部分的線內(nèi)/可形成瓦片的位塊傳輸,和其它位 塊傳遞;以及其它狀態(tài)更新。如果間接緩沖器包含針對(duì)倉(cāng)的一或多個(gè)次級(jí)指令,那么針對(duì) 所述倉(cāng)的相同一或多個(gè)次級(jí)指令可存儲(chǔ)在存儲(chǔ)器118中的陰影間接緩沖器中。在一些實(shí)例 中,次級(jí)指令與所述倉(cāng)相關(guān)聯(lián),因?yàn)榇渭?jí)指令在與所述倉(cāng)相關(guān)聯(lián)的瓦片內(nèi)操作。舉例來(lái)說(shuō), 相關(guān)聯(lián)瓦片可包含除基元外的像素,且由快速清除次級(jí)操作清除的場(chǎng)景的區(qū)域中的一者可 包含所述相關(guān)聯(lián)瓦片的至少一部分。在另一實(shí)例中,可形成瓦片的位塊傳輸次級(jí)操作可將 圖像塊從相關(guān)聯(lián)瓦片傳遞或傳遞到所述相關(guān)聯(lián)瓦片。
[0036] GPU 120可通過(guò)逐倉(cāng)渲染構(gòu)成圖形場(chǎng)景的基元而渲染所述圖形場(chǎng)景。GPU 120可 針對(duì)每一倉(cāng)基于所述倉(cāng)的可見(jiàn)性流確定是否執(zhí)行存儲(chǔ)在間接緩沖器中的倉(cāng)的指令或是否 執(zhí)行存儲(chǔ)在陰影間接緩沖器中的倉(cāng)的指令。存儲(chǔ)在間接緩沖器中的指令可包含用于渲染與 所述多個(gè)倉(cāng)中的所述倉(cāng)相關(guān)聯(lián)的基元的指令。存儲(chǔ)在間接緩沖器中的指令可進(jìn)一步包含一 或多個(gè)次級(jí)操作。如上文所論述,次級(jí)操作可為與倉(cāng)的基元的渲染不相關(guān)的操作。響應(yīng)于 基于可見(jiàn)性流確定不執(zhí)行存儲(chǔ)在間接緩沖器中的指令,GPU 120可執(zhí)行存儲(chǔ)在陰影間接緩 沖器中的倉(cāng)的指令,其中存儲(chǔ)在陰影間接緩沖器中的指令包含所述一或多個(gè)次級(jí)指令?;?者,響應(yīng)于基于可見(jiàn)性流確定要執(zhí)行存儲(chǔ)在間接緩沖器中的指令,GPU 120可執(zhí)行存儲(chǔ)在間 接緩沖器中的倉(cāng)的指令用于渲染與所述多個(gè)倉(cāng)中的倉(cāng)相關(guān)聯(lián)的基元以及還執(zhí)行存儲(chǔ)在間 接緩沖器中的所述一或多個(gè)次級(jí)操作。
[0037] 圖2為說(shuō)明根據(jù)本發(fā)明的一些方面用于使用基于瓦片的GPU渲染圖形場(chǎng)景的過(guò)程 的流程圖。如圖2中所展示,渲染圖形場(chǎng)景的GPU 120可執(zhí)行裝倉(cāng)遍次以確定場(chǎng)景的每一 倉(cāng)中包含的基元(202)。倉(cāng)可表示來(lái)自場(chǎng)景的所述多個(gè)瓦片的瓦片,且倉(cāng)中包含的基元還 可包含在由所述倉(cāng)表示的瓦片中。除使用裝倉(cāng)遍次以確定每一倉(cāng)中包含的基元外,GPU 120 還可使用裝倉(cāng)遍次以產(chǎn)生可見(jiàn)性流,所述可見(jiàn)性流指示倉(cāng)中的特定基元是否實(shí)際上在最終 渲染的場(chǎng)景中可見(jiàn)。舉例來(lái)說(shuō),一些基元可在場(chǎng)景中的另一基元后方,且在一些情形中(例 如,當(dāng)前方的基元為不透明時(shí)或當(dāng)不使用摻合時(shí))將不可見(jiàn)。更確切地說(shuō),在