處置光柵操作中的post-z覆蓋數(shù)據(jù)的制作方法
【專利摘要】提供了處置光柵操作中的post-z覆蓋數(shù)據(jù)。公開了用于將post-z覆蓋數(shù)據(jù)存儲在渲染目標(biāo)中的技術(shù)。顏色光柵操作(CROP)單元接收與多個(gè)樣本的一部分相關(guān)聯(lián)的覆蓋掩碼,其中圖形基元相交包括多個(gè)樣本的像素,并且該部分覆蓋至少一個(gè)樣本。CROP單元將覆蓋掩碼存儲在渲染目標(biāo)中的與像素相關(guān)聯(lián)的位置處的數(shù)據(jù)字段中。所公開技術(shù)的一個(gè)優(yōu)勢在于,GPU僅計(jì)算用于如由post-z覆蓋數(shù)據(jù)所確定的可見片段的顏色和其他像素信息。GPU不計(jì)算用于遮蔽片段的顏色和其他像素信息,從而減少總功耗并且改進(jìn)總渲染性能。
【專利說明】處置光柵操作中的post-ζ覆蓋數(shù)據(jù)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明總地涉及三維(3D)圖形處理,并且更具體地,涉及處置光柵操作中的post-z覆蓋數(shù)據(jù)。
【背景技術(shù)】
[0002]包括2D和3D圖形對象的計(jì)算機(jī)生成的圖像典型地使用具有一個(gè)或多個(gè)多級圖形處理管線的圖形處理單元(GPU)來渲染。這類圖形管線包括各種可編程的和固定的功能級??删幊碳壈ǜ鞣N處理單元,該處理單元執(zhí)行著色器程序以渲染圖形對象以及生成與圖形對象相關(guān)聯(lián)的各種視覺效果。固定的功能級實(shí)施不由可編程級所實(shí)施的附加的圖形操作。一個(gè)這類固定功能單元是光柵操作單元,其實(shí)施諸如模板(stencil)、z測試、混合等等的操作以及輸出像素?cái)?shù)據(jù)作為經(jīng)處理的圖形數(shù)據(jù)用于圖形存儲器中的存儲。GPU將圖形對象渲染成一個(gè)或多個(gè)渲染目標(biāo)。每個(gè)渲染目標(biāo)包括畫像元素(像素),并且每個(gè)像素進(jìn)而可以包括多個(gè)樣本。一旦渲染完成,則一個(gè)或多個(gè)渲染目標(biāo)中的像素可以傳送到顯示設(shè)備用于經(jīng)渲染圖像的視覺顯示。
[0003]在渲染期間,GPU確定用于每個(gè)圖形基元的覆蓋信息,其中圖形基元包括3D空間中的點(diǎn)、線和三角形。圖形基元被再分成片段,其中每個(gè)片段與渲染目標(biāo)中的特定像素的一個(gè)或多個(gè)樣本相應(yīng)。一旦GPU確定用于片段的覆蓋信息,則GPU然后可以計(jì)算用于所覆蓋樣本每個(gè)片段的顏色或其他像素信息。該方法的一個(gè)缺點(diǎn)是,GPU可能浪費(fèi)計(jì)算用于在最后經(jīng)渲染圖像中不可見的片段的顏色和其他像素信息的計(jì)算工作量。與特定圖形基元相關(guān)聯(lián)的片段可由與離顯示設(shè)備的屏幕表面較近的不同圖形基元相關(guān)聯(lián)的片段來覆蓋。計(jì)算用于遮蔽(obscured)片段的顏色和其他像素信息減少可用于渲染最后圖像中可見的圖形對象的時(shí)間,因此降低總GPU性能。
[0004]該問題的一個(gè)可能的解決方案是計(jì)算用于通過深度測試的片段的顏色和其他像素信息,其中深度測試基于離屏幕表面的距離來確定哪些片段是可見的以及哪些片段是不可見的。然而,在一些情況下,這類深度測試可以在圖形處理管線中的晚級處實(shí)施。因此,深度測試結(jié)果在計(jì)算顏色和其他像素信息時(shí)是未知的。在其他情況下,典型地實(shí)施這類深度測試的單元可處于低功率狀態(tài)以增加電池壽命。因此,深度測試的結(jié)果在GPU渲染片段時(shí)可能是不可用的。
[0005]如前述所示,本領(lǐng)域需要的是降低針對遮蔽片段所實(shí)施的處理量的、用于渲染圖形處理管線中的片段數(shù)據(jù)的技術(shù)。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的一個(gè)實(shí)施例闡述用于將post-z覆蓋數(shù)據(jù)存儲在渲染目標(biāo)中的方法。方法包括接收與圖形基元的一部分相關(guān)聯(lián)的覆蓋掩碼(mask),其中圖形基元相交包括多個(gè)樣本的像素,并且該部分覆蓋至少一個(gè)樣本。方法進(jìn)一步包括將覆蓋掩碼存儲在渲染目標(biāo)中的與像素相關(guān)聯(lián)的位置處的數(shù)據(jù)字段中。
[0007]其他實(shí)施例包括但不限于,包括指令的計(jì)算機(jī)可讀介質(zhì),指令使處理單元能夠?qū)崿F(xiàn)所公開方法的一個(gè)或多個(gè)方面。其他實(shí)施例包括但不限于,包括配置為實(shí)現(xiàn)所公開方法的一個(gè)或多個(gè)方面的處理單元以及配置為實(shí)現(xiàn)所公開方法的一個(gè)或多個(gè)方面的系統(tǒng)的子系統(tǒng)。
[0008]所公開技術(shù)的一個(gè)優(yōu)勢在于,GPU僅計(jì)算用于如由post-z覆蓋數(shù)據(jù)所確定的可見片段的顏色和其他像素信息。GPU不計(jì)算用于遮蔽片段的顏色和其他像素信息,從而減少總功耗并且改進(jìn)總渲染性能。
【專利附圖】
【附圖說明】
[0009]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考示范性實(shí)施例得到對如上面所簡要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對其范圍的限制,本發(fā)明可以具有其他等效的實(shí)施例。
[0010]圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖;
[0011]圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于圖1的計(jì)算機(jī)系統(tǒng)的并行處理子系統(tǒng)的框圖;
[0012]圖3A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的PPU中的一個(gè)內(nèi)的分區(qū)單元的框圖;
[0013]圖3B是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的通用處理集群(GPC)內(nèi)的流多處理器(SM)的一部分的框圖;
[0014]圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的并行處理單元中的一個(gè)或多個(gè)可配置為實(shí)現(xiàn)其的圖形處理管線的示意圖。
[0015]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖4的片段處理單元和光柵操作單元。
[0016]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、如存儲在圖2的分區(qū)單元中的一個(gè)或多個(gè)中的渲染目標(biāo)的集合。
[0017]圖7A-7D示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、相交多個(gè)圖形基元的像素;以及
[0018]圖8闡述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于存儲post-z覆蓋數(shù)據(jù)的方法步驟的流程圖。
【具體實(shí)施方式】
[0019]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)踐。
[0020]系統(tǒng)概述
[0021]圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括經(jīng)由可以包括存儲器橋105的互連路徑通信的中央處理單元(CPU) 102和系統(tǒng)存儲器104。存儲器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(Hyper Transport)鏈路)連接到I/O (輸入/輸出)橋107。I/O橋107,其可以是例如南橋芯片,從一個(gè)或多個(gè)用戶輸入設(shè)備108 (例如鍵盤、鼠標(biāo))接收用戶輸入并且經(jīng)由通信路徑106和存儲器橋105將該輸入轉(zhuǎn)發(fā)到CPU102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCI)Express、加速圖形端口或超傳輸鏈路)耦連到存儲器橋105 ;在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110的圖形子系統(tǒng),該顯示設(shè)備110可以是任何常規(guī)的基于陰極射線管、液晶顯示器、發(fā)光二極管顯示器等等。系統(tǒng)盤114也連接到I/O橋107并可配置為存儲內(nèi)容應(yīng)用和數(shù)據(jù)用于由CPU102和并行處理子系統(tǒng)112使用。系統(tǒng)盤114為應(yīng)用和數(shù)據(jù)提供非易失性存儲并且可以包括固定的或可移動的硬盤驅(qū)動器、閃存設(shè)備以及CD-ROM (壓縮光盤只讀存儲器)、DVD-R0M (數(shù)字多用光盤-ROM)、藍(lán)光、HD-DVD (高清晰度DVD)或其他磁性、光學(xué)或固態(tài)存儲設(shè)備。
[0022]交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮光盤(⑶)驅(qū)動器、數(shù)字多用光盤(DVD)驅(qū)動器、膠片錄制設(shè)備及類似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。
[0023]在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于圖形和視頻處理的電路,包括例如視頻輸出電路,并且構(gòu)成圖形處理單元(GPU)。在另一個(gè)實(shí)施例中,并行處理子系統(tǒng)112包含經(jīng)優(yōu)化用于通用處理的電路,同時(shí)保留底層(underlying)的計(jì)算架構(gòu),本文將更詳細(xì)地進(jìn)行描述。在又一個(gè)實(shí)施例中,可以將并行處理子系統(tǒng)112與一個(gè)或多個(gè)其他系統(tǒng)元件集成在單個(gè)子系統(tǒng)中,諸如結(jié)合存儲器橋105、CPU102以及I/O橋107,以形成片上系統(tǒng)(SoC)。
[0024]應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)?,包括橋的?shù)目和布置、CPU102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲器104直接連接到CPU102而不是通過橋,并且其他設(shè)備經(jīng)由存儲器橋105和CPU102與系統(tǒng)存儲器104通信。在其他替代性拓?fù)渲?,并行處理子系統(tǒng)112連接到I/O橋107或直接連接到CPU102,而不是連接到存儲器橋105。而在其他實(shí)施例中,I/O橋107和存儲器橋105可能被集成到單個(gè)芯片上而不是作為一個(gè)或多個(gè)分立設(shè)備存在。大型實(shí)施例可以包括兩個(gè)或更多個(gè)CPU102以及兩個(gè)或更多個(gè)并行處理子系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數(shù)目的插卡或外圍設(shè)備都可能得到支持。在一些實(shí)施例中,交換器116被去掉,網(wǎng)絡(luò)適配器118和插卡120、121直接連接到I/O橋107。
[0025]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的并行處理子系統(tǒng)112。如所示的,并行處理子系統(tǒng)112包括一個(gè)或多個(gè)并行處理單元(PI3U) 202,每個(gè)并行處理單元202都耦連到本地并行處理(PP)存儲器204。通常,并行處理子系統(tǒng)包括U個(gè)PPU,其中U≥I。(本文中,類似對象的多個(gè)實(shí)例需要時(shí)以標(biāo)識對象的參考數(shù)字和標(biāo)識實(shí)例的括號中的數(shù)字來表示。)PPU202和并行處理存儲器204可使用一個(gè)或多個(gè)集成電路設(shè)備來實(shí)現(xiàn),諸如可編程處理器、專用集成電路(ASIC)或存儲器設(shè)備,或者以任何其他技術(shù)可行的方式來實(shí)現(xiàn)。
[0026]再參考圖1以及圖2,在一些實(shí)施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線的圖形處理器,其可以配置為實(shí)施與下述相關(guān)的各種操作:經(jīng)由存儲器橋105和第二通信路徑113從CPU102和/或系統(tǒng)存儲器104所供應(yīng)的圖形數(shù)據(jù)生成像素?cái)?shù)據(jù),與本地并行處理存儲器204 (可被用作圖形存儲器,包括例如常規(guī)幀緩沖區(qū)(buffer))交互以存儲和更新像素?cái)?shù)據(jù),傳遞像素?cái)?shù)據(jù)到顯示設(shè)備110等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個(gè)或多個(gè)作為圖形處理器而操作的PPU202以及一個(gè)或多個(gè)用于通用計(jì)算的其他PPU202。這些PTO可以是同樣的或不同的,并且每個(gè)PPU可具有專用并行處理存儲器設(shè)備或不具有專用并行處理存儲器設(shè)備。并行處理子系統(tǒng)112中的一個(gè)或多個(gè)PPU202可輸出數(shù)據(jù)到顯示設(shè)備110,或者并行處理子系統(tǒng)112中的每個(gè)PPU202可輸出數(shù)據(jù)到一個(gè)或多個(gè)顯示設(shè)備110。
[0027]在操作中,CPU102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,CPU102發(fā)出控制PPU202的操作的命令。在一些實(shí)施例中,CPU102寫入用于每個(gè)PPU202的命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),該數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲器104、并行處理存儲器204、或CPU102和PPU202都可訪問的其他存儲位置中。將指向每個(gè)數(shù)據(jù)結(jié)構(gòu)的指針寫到入棧緩沖區(qū)(pushbuffer)以發(fā)起對數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。PPU202從一個(gè)或多個(gè)入棧緩沖區(qū)讀取命令流,然后相對于CPU102的操作異步地執(zhí)行命令??梢越?jīng)由設(shè)備驅(qū)動程序103由應(yīng)用程序?yàn)槊總€(gè)入棧緩沖區(qū)指定執(zhí)行優(yōu)先級以控制對不同入棧緩沖區(qū)的調(diào)度。
[0028]現(xiàn)在返回參考圖2和圖1,每個(gè)PPU202包括經(jīng)由連接到存儲器橋105 (或者,在一個(gè)替代性實(shí)施例中,直接連接到CPU102)的通信路徑113與計(jì)算機(jī)系統(tǒng)100的其余部分通信的I/O (輸入/輸出)單元205。PPU202到計(jì)算機(jī)系統(tǒng)100的其余部分的連接也可以變化。在一些實(shí)施例中,并行處理子系統(tǒng)112可實(shí)現(xiàn)為可插入到計(jì)算機(jī)系統(tǒng)100的擴(kuò)展槽中的插卡。在其他實(shí)施例中,PPU202可以和諸如存儲器橋105或I/O橋107的總線橋集成在單個(gè)芯片上。而在其他實(shí)施例中,PPU202的一些或所有元件可以和CPU102集成在單個(gè)芯片上。
[0029]在一個(gè)實(shí)施例中,通信路徑113是PCI Express鏈路,如本領(lǐng)域所知的,其中專用通道被分配到每個(gè)PPU202。也可以使用其他通信路徑。I/O單元205生成用于在通信路徑113上傳送的包(或其他信號),并且還從通信路徑113接收所有傳入的包(或其他信號),將傳入的包引導(dǎo)到PPU202的適當(dāng)部件。例如,可將與處理任務(wù)相關(guān)的命令引導(dǎo)到主機(jī)接口206,而將與存儲器操作相關(guān)的命令(例如,對并行處理存儲器204的讀取或?qū)懭?引導(dǎo)到存儲器交叉開關(guān)單元210。主機(jī)接口 206讀取每個(gè)入棧緩沖區(qū),并且將存儲在入棧緩沖區(qū)中的命令流輸出到前端212。
[0030]有利地,每個(gè)PPU202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PPU202 (O)包括處理集群陣列230,該陣列230包括C個(gè)通用處理集群(GPC)208,其中C≥I。每個(gè)GPC208能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個(gè)線程是程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的GPC208用于處理不同類型的程序或用于實(shí)施不同類型的計(jì)算。GPC208的分配可以取決于因每種類型的程序或計(jì)算所產(chǎn)生的工作量而變化。
[0031]GPC208從任務(wù)/工作單元207內(nèi)的工作分布單元接收所要執(zhí)行的處理任務(wù)。工作分布單元接收指向編碼為任務(wù)元數(shù)據(jù)(TMD)并存儲在存儲器中的處理任務(wù)的指針。指向TMD的指針包括在存儲為入棧緩沖區(qū)并由前端單元212從主機(jī)接口 206接收的命令流中??梢跃幋a為TMD的處理任務(wù)包括所要處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序?qū)⒈粓?zhí)行)的狀態(tài)參數(shù)和命令。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個(gè)TMD所指定的處理發(fā)起前,將GPC208配置為有效狀態(tài)??梢詾槊總€(gè)TMD指定用來調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先級。還可從處理集群陣列230接收處理任務(wù)??蛇x地,TMD可包括控制將TMD添加到處理任務(wù)列表(或指向處理任務(wù)的指針的列表)的頭部還是尾部的參數(shù),從而提供除優(yōu)先級以外的另一級別的控制。
[0032]存儲器接口 214包括D個(gè)分區(qū)單元215,每個(gè)分區(qū)單元215直接耦連到并行處理存儲器204的一部分,其中D > I。如所示的,分區(qū)單元215的數(shù)目一般等于動態(tài)隨機(jī)存取存儲器(DRAM) 220的數(shù)目。在其他實(shí)施例中,分區(qū)單元215的數(shù)目也可以不等于存儲器設(shè)備的數(shù)目。本領(lǐng)域的普通技術(shù)人員應(yīng)該理解DRAM220可以用其他合適的存儲設(shè)備來替代并且可以是一般常規(guī)的設(shè)計(jì)。因此省略了詳細(xì)描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標(biāo)可以跨DRAM220加以存儲,這允許分區(qū)單元215并行寫入每個(gè)渲染目標(biāo)的各部分以有效地使用并行處理存儲器204的可用帶寬。
[0033]任何一個(gè)GPC208都可以處理要被寫到并行處理存儲器204內(nèi)的任何DRAM220的數(shù)據(jù)。交叉開關(guān)單元210配置為路由每個(gè)GPC208的輸出到任何分區(qū)單元215的輸入或到另一個(gè)GPC208用于進(jìn)一步處理。GPC208通過交叉開關(guān)單元210與存儲器接口 214通信,以對各種外部存儲器設(shè)備進(jìn)行讀取或?qū)懭搿T谝粋€(gè)實(shí)施例中,交叉開關(guān)單元210具有到存儲器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲器204的連接,從而使得在不同GPC208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲器104或?qū)τ赑PU202而言非本地的其他存儲器通信。在圖2所示的實(shí)施例中,交叉開關(guān)單元210直接與I/O單元205連接。交叉開關(guān)單元210可使用虛擬信道來分開GPC208與分區(qū)單元215之間的業(yè)務(wù)流。
[0034]另外,GPC208可被編程以執(zhí)行與種類繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過濾、建模操作(例如,應(yīng)用物理定律以確定對象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分著色器、頂點(diǎn)著色器、幾何著色器、和/或像素著色器程序)等等。PPU202可將數(shù)據(jù)從系統(tǒng)存儲器104和/或本地并行處理存儲器204轉(zhuǎn)移到內(nèi)部(片上)存儲器中,處理該數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲器104和/或本地并行處理存儲器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)部件訪問,所述其他系統(tǒng)部件包括CPU102或另一個(gè)并行處理子系統(tǒng)112。
[0035]PPU202可配備有任何容量(amount)的本地并行處理存儲器204,包括沒有本地存儲器,并且可以以任何組合方式使用本地存儲器和系統(tǒng)存儲器。例如,在統(tǒng)一存儲器架構(gòu)(UMA)實(shí)施例中,PPU202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專用的圖形(并行處理)存儲器,并且PPU202會以排他或幾乎排他的方式使用系統(tǒng)存儲器。在UMA實(shí)施例中,PPU202可集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PCI Express)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信手段將PPU202連接到系統(tǒng)存儲器。
[0036]如上所示,在并行處理子系統(tǒng)112中可以包括任何數(shù)目的PPU202。例如,可在單個(gè)插卡上提供多個(gè)PPU202、或可將多個(gè)插卡連接到通信路徑113、或可將一個(gè)或多個(gè)PPU202集成到橋式芯片中。在多PPU系統(tǒng)中的PPU202可以彼此同樣或不同。例如,不同的PPU202可能具有不同數(shù)目的處理內(nèi)核、不同容量的本地并行處理存儲器等等。在存在多個(gè)PPU202的情況下,可并行操作那些PI3U從而以高于單個(gè)PPU202所可能達(dá)到的吞吐量來處理數(shù)據(jù)。包含一個(gè)或多個(gè)PPU202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括臺式電腦、筆記本電腦或手持式個(gè)人計(jì)算機(jī)、服務(wù)器、工作站、游戲控制臺、嵌入式系統(tǒng)等等。
[0037]圖3A是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的PPU中的一個(gè)內(nèi)的分區(qū)單元215的框圖。如所示,分區(qū)單元215包括L2高速緩存350、幀緩沖區(qū)(FB)DRAM接口 355以及光柵操作單元(R0P)360。L2高速緩存350是配置為實(shí)施從交叉開關(guān)單元210和R0P360所接收的加載和存儲操作。讀未命中和緊急回寫請求由L2高速緩存350輸出到FB DRAM接口 355用于處理。臟(dirty)更新也發(fā)送到FB355用于伺機(jī)性(opportunistic)處理。FB355直接與DRAM220配合,輸出讀和寫請求以及接收從DRAM220所讀取的數(shù)據(jù)。
[0038]在圖形應(yīng)用中,R0P360是實(shí)施光柵操作以及輸出像素?cái)?shù)據(jù)作為經(jīng)處理的圖形數(shù)據(jù)用于圖形存儲器中的存儲的處理單元,所述光柵操作諸如模板、z測試、混合等等。在本發(fā)明的實(shí)施例中,ROP包括在每個(gè)GPC208而不是分區(qū)單元215內(nèi),并且像素讀和寫請求在交叉開關(guān)單元210而不是像素片段數(shù)據(jù)之上進(jìn)行傳送。
[0039]經(jīng)處理的圖形數(shù)據(jù)可以顯示在顯示設(shè)備110上或者被路由用于由CPU102或由并行處理子系統(tǒng)112內(nèi)的處理實(shí)體中的一個(gè)進(jìn)一步處理。每個(gè)分區(qū)單元215包括R0P360以分布光柵操作的處理。在一些實(shí)施例中,R0P360可配置為壓縮被寫到存儲器的z或顏色數(shù)據(jù)以及解壓縮從存儲器所讀取的z或顏色數(shù)據(jù)。
[0040]圖3B為根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的通用處理集群(GPC) 208內(nèi)的流多處理器(SM)310的一部分的框圖。每個(gè)GPC208可配置為并行執(zhí)行大量線程,其中術(shù)語“線程”是指在特定輸入數(shù)據(jù)集上執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,單指令、多數(shù)據(jù)(SMD)指令發(fā)出技術(shù)用于在不提供多個(gè)獨(dú)立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實(shí)施例中,單指令、多線程(SMT)技術(shù)用于使用配置為向GPC208中的每一個(gè)內(nèi)的處理引擎集發(fā)出指令的公共指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行通過給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員應(yīng)該理解SMD處理機(jī)制代表SMT處理機(jī)制的功能子集。
[0041]經(jīng)由將處理任務(wù)分布到一個(gè)或多個(gè)流多處理器(SM)310的管線管理器(未示出)來有利地控制GPC208的操作。其中每個(gè)SM310配置為處理一個(gè)或多個(gè)線程組。每個(gè)SM310包括配置為經(jīng)由GPC208內(nèi)的L1.5高速緩存(未示出)從存儲器接收指令和常量的LI高速緩存370。線程束(warp)調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常量并且根據(jù)指令和常量來控制本地寄存器堆304和SM310功能單元。SM310功能單元包括N個(gè)exec (執(zhí)行或處理)單元302和P個(gè)加載-存儲單元(LSU) 303。SM功能單元可以是管線化的,其允許在前一個(gè)指令完成之前發(fā)出新指令??商峁┕δ軋?zhí)行單元的任何組合。在一個(gè)實(shí)施例中,功能單元支持各種各樣的操作,包括整數(shù)和浮點(diǎn)運(yùn)算(例如加法和乘法)、比較操作、布爾操作(AND、0R、X0R)、移位和各種代數(shù)函數(shù)的計(jì)算(例如平面插值、三角函數(shù)、指數(shù)函數(shù)和對數(shù)函數(shù)等等);以及相同功能單元硬件可均衡地用來實(shí)施不同的操作。
[0042]如本文之前所定義的,傳送到特定GPC208的一系列指令構(gòu)成線程,并且跨SM310內(nèi)的并行處理引擎(未示出)的某一數(shù)目的并發(fā)執(zhí)行線程的集合在本文中稱為“線程束”或“線程組”。如本文所使用的,“線程組”是指對不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,所述組的一個(gè)線程被指派到SM310內(nèi)的不同處理引擎。線程組可以包括比SM310內(nèi)的處理引擎數(shù)目少的線程,在這種情況下一些處理引擎將在該線程組正在被處理的周期期間處于閑置狀態(tài)。線程組還可以包括比SM310內(nèi)的處理引擎數(shù)目多的線程,在這種情況下處理將在連續(xù)的時(shí)鐘周期內(nèi)發(fā)生。因?yàn)槊總€(gè)SM310可以并發(fā)支持多達(dá)G個(gè)線程組,結(jié)果是包括M個(gè)流多處理器310的GPC208中的系統(tǒng)在任何給定時(shí)間在GPC208中可以執(zhí)行多達(dá)G*M個(gè)線程組。
[0043]此外,多個(gè)相關(guān)線程組可以在SM310內(nèi)同時(shí)活動(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數(shù)目并且通常是SM310內(nèi)的并行處理引擎數(shù)目的整數(shù)倍,以及m是SM310內(nèi)同時(shí)活動的線程組的數(shù)目。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲器或寄存器的容量來確定。
[0044]在本發(fā)明的實(shí)施例中,使用計(jì)算系統(tǒng)的PPU202或其他處理器來使用線程陣列執(zhí)行通用計(jì)算是可取的。為線程陣列中的每個(gè)線程指派在線程的執(zhí)行期間對于線程可訪問的唯一的線程標(biāo)識符(“線程ID”)。可被定義為一維或多維數(shù)值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線程將要產(chǎn)生或?qū)戄敵鰯?shù)據(jù)集的哪部分。
[0045]每線程指令序列可包括定義線程陣列的代表性線程和一個(gè)或多個(gè)其他線程之間的協(xié)作行為的至少一個(gè)指令。例如,每線程指令序列可能包括在序列中的特定點(diǎn)處掛起用于代表性線程的操作執(zhí)行直到諸如其他線程的一個(gè)或多個(gè)到達(dá)該特定點(diǎn)的時(shí)間為止的指令、用于代表性線程將數(shù)據(jù)存儲在其他線程的一個(gè)或多個(gè)有權(quán)訪問的共享存儲器中的指令、用于代表性線程原子地讀取和更新存儲在其他線程的一個(gè)或多個(gè)基于它們的線程ID有權(quán)訪問的共享存儲器中的數(shù)據(jù)的指令等等。CTA程序還可以包括計(jì)算數(shù)據(jù)將從其讀取的共享存儲器中的地址的指令,該地址是線程ID的函數(shù)。通過定義合適的函數(shù)并提供同步技術(shù),可以以可預(yù)測的方式由CTA的一個(gè)線程將數(shù)據(jù)寫入共享存儲器中的給定位置并由同一個(gè)CTA的不同線程從該位置讀取數(shù)據(jù)。因此,數(shù)據(jù)在線程之間共享的任何期望模式可以得到支持,以及CTA中的任何線程可以與同一個(gè)CTA中的任何其他線程共享數(shù)據(jù)。如果存在數(shù)據(jù)在CTA的線程之間的共享,則其范圍由CTA程序確定;因此,應(yīng)該理解的是,在使用CTA的特定應(yīng)用中,CTA的線程可能會或可能不會真正互相共享數(shù)據(jù),這取決于CTA程序,術(shù)語“CTA”和“線程陣列”在本文作為同義詞使用。
[0046]SM310提供具有不同級別的可訪問性的片上(內(nèi)部)數(shù)據(jù)存儲。特殊寄存器(未示出)對于LSU303可讀但不可寫并且用于存儲定義每個(gè)線程的“位置”的參數(shù)。在一個(gè)實(shí)施例中,特殊寄存器包括每線程(或SM310內(nèi)的每exec單元302) —個(gè)的存儲線程ID的寄存器;每個(gè)線程ID寄存器僅由各自的exec單元302可訪問。特殊寄存器還可以包括附加寄存器,其對于執(zhí)行由任務(wù)元數(shù)據(jù)(TMD)(未示出)所代表的同一個(gè)處理任務(wù)的所有線程(或由所有LSU303)可讀,其存儲CTA標(biāo)識符、CTA維數(shù)、CTA所屬網(wǎng)格(grid)的維數(shù)(或隊(duì)列位置,如果TMD編碼隊(duì)列任務(wù)而不是網(wǎng)格任務(wù)的話)、以及CTA被指派到的TMD的標(biāo)識符。
[0047]如果TMD是網(wǎng)格TMD,則TMD的執(zhí)行會啟動和執(zhí)行固定數(shù)目的CTA以處理存儲在隊(duì)列525中的固定量的數(shù)據(jù)。將CTA的數(shù)目指定為網(wǎng)格寬度、高度和深度的乘積。可以將固定量的數(shù)據(jù)存儲在TMD中或TMD可以存儲指向?qū)⒂蒀TA所處理的數(shù)據(jù)的指針。TMD還存儲由CTA所執(zhí)行的程序的開始地址。
[0048]如果TMD是隊(duì)列TMD,那么使用TMD的隊(duì)列特點(diǎn),這意味著將要被處理的數(shù)據(jù)量不一定是固定的。隊(duì)列條目存儲用于由指派到TMD的CTA所處理的數(shù)據(jù)。隊(duì)列條目還可以代表在線程執(zhí)行期間由另一個(gè)TMD所生成的子任務(wù),從而提供嵌套并行性。通常線程或包括線程的CTA的執(zhí)行被掛起直到子任務(wù)的執(zhí)行完成。可以將隊(duì)列存儲在TMD中或與TMD分開存儲,在該情況下TMD存儲指向該隊(duì)列的隊(duì)列指針。有利地,當(dāng)代表子任務(wù)的TMD正在執(zhí)行時(shí)可以將由子任務(wù)所生成的數(shù)據(jù)寫到隊(duì)列。隊(duì)列可以實(shí)現(xiàn)為循環(huán)隊(duì)列以使得數(shù)據(jù)的總量不限于隊(duì)列的大小。
[0049]屬于網(wǎng)格的CTA具有指示網(wǎng)格內(nèi)各自CTA的位置的隱含網(wǎng)格寬度、高度和深度參數(shù)。在初始化期間響應(yīng)于經(jīng)由前端212從設(shè)備驅(qū)動程序103所接收的命令來寫特殊寄存器并且在處理任務(wù)的執(zhí)行期間特殊寄存器不改變。前端212調(diào)度每個(gè)處理任務(wù)用于執(zhí)行。每個(gè)CTA與具體TMD相關(guān)聯(lián)用于一個(gè)或多個(gè)任務(wù)的并發(fā)執(zhí)行。此外,單個(gè)GPC208可以并發(fā)執(zhí)行多個(gè)任務(wù)。
[0050]參數(shù)存儲器(未示出)存儲可由同一個(gè)CTA內(nèi)的任何線程(或任何LSU303)讀取但不可由其寫入的運(yùn)行時(shí)間參數(shù)(常量)。在一個(gè)實(shí)施例中,設(shè)備驅(qū)動程序103在引導(dǎo)SM310開始執(zhí)行使用參數(shù)的任務(wù)之前將這些參數(shù)提供給參數(shù)存儲器。任何CTA內(nèi)的任何線程(或SM310內(nèi)的任何exec單元302)可以通過存儲器接口 214訪問全局存儲器。可以將全局存儲器的各部分存儲在LI高速緩存320中。
[0051]每個(gè)線程將本地寄存器堆304用作暫存空間;每個(gè)寄存器被分配以專用于一個(gè)線程,并且在本地寄存器堆304的任何部分中的數(shù)據(jù)僅對于寄存器被分配到的線程可訪問。本地寄存器堆304可以實(shí)現(xiàn)為物理上或邏輯上分為P個(gè)通道的寄存器堆,每個(gè)通道具有一定數(shù)目的條目(其中每個(gè)條目可以存儲例如32位字)。將一個(gè)通道指派到N個(gè)exec單元302和P個(gè)下載-存儲單元LSU303的每一個(gè),并且利用用于執(zhí)行同一個(gè)程序的不同線程的數(shù)據(jù)來填充不同通道中的相應(yīng)條目以幫助SIMD執(zhí)行??梢詫⑼ǖ赖牟煌糠址峙涞紾個(gè)并發(fā)線程組中的不同線程組,以使得本地寄存器堆304中的給定條目僅對于特定線程可訪問。在一個(gè)實(shí)施例中,保留本地寄存器堆304內(nèi)的某些條目用于存儲線程標(biāo)識符,實(shí)現(xiàn)特殊寄存器之一。此外,一致LI高速緩存375存儲用于N個(gè)exec單元302和P個(gè)下載-存儲單元LSU303的每個(gè)通道的一致值或常量值。
[0052]共享存儲器306對于單個(gè)CTA內(nèi)的線程可訪問;換言之,共享存儲器306中的任何位置對于同一個(gè)CTA內(nèi)的任何線程(或?qū)τ赟M310內(nèi)的任何處理引擎)可訪問。共享存儲器306可以實(shí)現(xiàn)為具有允許任何處理引擎對共享存儲器中的任何位置讀取或?qū)懭氲幕ミB的共享寄存器堆或共享片上高速緩存存儲器。在其他實(shí)施例中,共享狀態(tài)空間可能映射到片外存儲器的每CTA區(qū)上并被高速緩存在LI高速緩存320中。參數(shù)存儲器可以實(shí)現(xiàn)為在實(shí)現(xiàn)共享存儲器306的同一個(gè)共享寄存器堆或共享高速緩存存儲器內(nèi)的指定部分,或者實(shí)現(xiàn)為LSU303對其具有只讀訪問權(quán)限的分開的共享寄存器堆或片上高速緩存存儲器。在一個(gè)實(shí)施例中,實(shí)現(xiàn)參數(shù)存儲器的區(qū)域還用于存儲CTA ID和任務(wù)ID,以及CTA和網(wǎng)格維數(shù)或隊(duì)列位置,實(shí)現(xiàn)特殊寄存器的各部分。SM310中的每個(gè)LSU303耦連到統(tǒng)一地址映射單元352,統(tǒng)一地址映射單元352將為在統(tǒng)一存儲器空間中所指定的加載和存儲指令所提供的地址轉(zhuǎn)換為每個(gè)各異存儲器空間中的地址。因此,指令可以用于通過指定統(tǒng)一存儲器空間中的地址來訪問本地、共享或全局存儲器空間中的任何一個(gè)。
[0053]每個(gè)SM310中的LI高速緩存320可以用于高速緩存私有的每線程本地?cái)?shù)據(jù)還有每應(yīng)用全局?jǐn)?shù)據(jù)。在一些實(shí)施例中,可以將每CTA共享數(shù)據(jù)高速緩存在LI高速緩存320中。LSU303經(jīng)由存儲器和高速緩存互連380耦連到共享存儲器306和LI高速緩存320。
[0054]應(yīng)該理解,本文所描述的核心架構(gòu)是示例性的并且變化和修改是可能的。任何數(shù)目的處理單元例如SM310可以包括在GPC208內(nèi)。進(jìn)一步地,如圖2所示,PPU202可以包括任何數(shù)目的GPC208,其有利地功能上彼此類似使得執(zhí)行行為不取決于哪個(gè)GPC208接收特定處理任務(wù)。進(jìn)一步地,每個(gè)GPC208有利地使用分開并且各異的處理單元、LI高速緩存獨(dú)立于其他GPC208進(jìn)行操作以執(zhí)行用于一個(gè)或多個(gè)應(yīng)用程序的任務(wù)。
[0055]本領(lǐng)域普通技術(shù)人員將理解的是,圖1-3B所描述的架構(gòu)決不限制本發(fā)明的范圍并且本文所教導(dǎo)的技術(shù)可以實(shí)現(xiàn)在任何經(jīng)適當(dāng)配置的處理單元上而不脫離本發(fā)明的范圍,所述處理單元包括但不限于一個(gè)或多個(gè)CPU、一個(gè)或多個(gè)多核心CPU、一個(gè)或多個(gè)PPU202、一個(gè)或多個(gè)GPC208、一個(gè)或多個(gè)圖形或?qū)S锰幚韱卧鹊取?br>
[0056]圖形管線架構(gòu)
[0057]圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的PPU202中的一個(gè)或多個(gè)可配置為實(shí)現(xiàn)其的圖形處理管線400的示意圖。例如,SM310中的一個(gè)可配置為實(shí)現(xiàn)以下各項(xiàng)中的一個(gè)或多個(gè)的各功能:頂點(diǎn)處理單元415、曲面細(xì)分初始化處理單元420、曲面細(xì)分處理單元440、幾何處理單元445以及片段處理單元460?;植计骱晚旤c(diǎn)屬性獲取410、任務(wù)生成單元425、任務(wù)分布器430、拓?fù)渖蓡卧?35、視口縮放、剔除以及修剪單元450、光柵器455以及光柵操作單元465的各功能也可由GPC208內(nèi)的其他處理引擎以及相應(yīng)的分區(qū)單元215來實(shí)施。替代地,圖形處理管線400可以使用用于一個(gè)或多個(gè)功能的專用處理單元來實(shí)現(xiàn)。
[0058]圖形處理管線還包括本地于SM310內(nèi)的圖形處理管線400的共享存儲器306。如下文進(jìn)一步所描述的,共享存儲器306內(nèi)的級間緩沖區(qū)(未示出)由圖形處理管線400內(nèi)的各處理單元按需要進(jìn)行分配和解除分配。處理單元從一個(gè)或多個(gè)級間緩沖區(qū)讀取輸入數(shù)據(jù),處理輸入數(shù)據(jù)以產(chǎn)生輸出數(shù)據(jù),以及將產(chǎn)生的輸出數(shù)據(jù)存儲在一個(gè)或多個(gè)級間緩沖區(qū)中。隨后的處理單元處理數(shù)據(jù)并且將輸出數(shù)據(jù)存儲在一個(gè)或多個(gè)級間緩沖區(qū)中等等。共享存儲器306和圖形處理管線的各其他級經(jīng)由存儲器接口 214與外部存儲器連接。
[0059]基元分布器410處理單元采集用于高階表面的頂點(diǎn)數(shù)據(jù)、基元等等,并且將包括頂點(diǎn)屬性的頂點(diǎn)數(shù)據(jù)輸出到頂點(diǎn)處理單元415。在一些實(shí)施例中,基元分布器410包括檢索頂點(diǎn)屬性和將頂點(diǎn)屬性存儲在共享存儲器306中的頂點(diǎn)屬性獲取單元(未示出)。頂點(diǎn)處理單元415是可編程執(zhí)行單元,其配置為執(zhí)行頂點(diǎn)著色器程序,照明和變換如由頂點(diǎn)著色器程序所指定的頂點(diǎn)數(shù)據(jù)。例如,頂點(diǎn)處理單元415可被編程以將頂點(diǎn)數(shù)據(jù)從基于對象的坐標(biāo)表示(對象空間)變換到可替代地基于的坐標(biāo)系,諸如世界空間或規(guī)格化設(shè)備坐標(biāo)(NDC)空間。頂點(diǎn)處理單元415可通過基元分布器410來讀取存儲在共享存儲器306、LI高速緩存320、并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù)用于在處理頂點(diǎn)數(shù)據(jù)中使用。頂點(diǎn)處理單元415將經(jīng)處理的頂點(diǎn)存儲在共享存儲器306內(nèi)的級間緩沖區(qū)中。
[0060]曲面細(xì)分初始化處理單元420是配置為執(zhí)行曲面細(xì)分初始化著色器程序的可編程執(zhí)行單元。曲面細(xì)分初始化處理單元420處理由頂點(diǎn)處理單元415所產(chǎn)生的頂點(diǎn)并且生成被稱為補(bǔ)丁(patch)的圖形基元。曲面細(xì)分初始化處理單元420還生成各種補(bǔ)丁屬性。曲面細(xì)分初始化處理單元420然后將補(bǔ)丁數(shù)據(jù)和補(bǔ)丁屬性存儲在共享存儲器306內(nèi)的級間緩沖區(qū)中。在一些實(shí)施例中,曲面細(xì)分初始化著色器程序可以叫做外殼(hull)著色器或曲面細(xì)分控制著色器。
[0061]任務(wù)生成單元425檢索用于來自共享存儲器306的級間緩沖區(qū)的頂點(diǎn)和補(bǔ)丁的數(shù)據(jù)和屬性。任務(wù)生成單元425生成用于處理頂點(diǎn)的任務(wù)以及用于由圖形處理管線400中的稍后的級處理的補(bǔ)丁。
[0062]任務(wù)分布器430重新分布由任務(wù)生成單元425所產(chǎn)生的任務(wù)。由頂點(diǎn)著色器程序和曲面細(xì)分初始化程序的各實(shí)例所產(chǎn)生的任務(wù)可以在一個(gè)圖形處理管線400和另一個(gè)圖形處理管線400之間顯著地變化。任務(wù)分布器430重新分布這些任務(wù),使得每個(gè)圖形處理管線400在稍后管線級期間具有接近相同的工作量。
[0063]拓?fù)渖蓡卧?35檢索由任務(wù)分布器430所分布的任務(wù)。拓?fù)渖蓡卧?35對包括與補(bǔ)丁相關(guān)聯(lián)的頂點(diǎn)的頂點(diǎn)進(jìn)行索引并且計(jì)算與頂點(diǎn)相應(yīng)的紋理坐標(biāo)。拓?fù)渖蓡卧?35然后將經(jīng)索引的頂點(diǎn)存儲在共享存儲器306內(nèi)的級間緩沖區(qū)中。
[0064]曲面細(xì)分處理單元440是配置為執(zhí)行曲面細(xì)分著色器程序的可編程執(zhí)行單元。曲面細(xì)分處理單元440從共享存儲器306的級間緩沖區(qū)讀取輸入數(shù)據(jù)并且將輸出數(shù)據(jù)寫到共享存儲器306的級間緩沖區(qū)。級間緩沖區(qū)中的該輸出數(shù)據(jù)被移交到下一個(gè)著色器級幾何處理單元445作為輸入數(shù)據(jù)。在一些實(shí)施例中,曲面細(xì)分著色器程序可以叫做域著色器或曲面細(xì)分評估著色器。
[0065]幾何處理單元445是配置為執(zhí)行幾何著色器程序從而變換圖形基元的可編程執(zhí)行單元。頂點(diǎn)被分組以構(gòu)建圖形基元用于處理,其中圖形基元包括三角形、線段、點(diǎn)等等。例如,幾何處理單元445可經(jīng)編程以將圖形基元再分成一個(gè)或多個(gè)新圖形基元以及計(jì)算用來將新圖形基元進(jìn)行光柵化的參數(shù),諸如平面方程系數(shù)。
[0066]在一些實(shí)施例中,幾何處理單元445也可以添加或刪除幾何流中的元素。幾何處理單元445將指定新圖形基元的參數(shù)和頂點(diǎn)輸出到視口縮放、剔除以及修剪單元450。幾何處理單元445可以讀取存儲在共享存儲器306、并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù)用于在處理幾何數(shù)據(jù)中使用。視口縮放、剔除和修剪單元450實(shí)施修剪、剔除和視口縮放并且將經(jīng)處理的圖形基元輸出到光柵器455。
[0067]光柵器455掃描對新圖形基元進(jìn)行轉(zhuǎn)換并且將片段和覆蓋數(shù)據(jù)輸出到片段處理單元460。此外,光柵器455可配置為實(shí)施z剔除以及其他基于z的優(yōu)化。
[0068]片段處理單元460是配置為執(zhí)行片段著色器程序的可編程執(zhí)行單元,其變換由片段著色器程序所指定、從光柵器455所接收的片段。例如,片段處理單元460可被編程以實(shí)施諸如透視校正、紋理映射、著色、混合等等的操作以產(chǎn)生被輸出到光柵操作單元465的經(jīng)著色片段。片段處理單元460可以讀取存儲在共享存儲器306、并行處理存儲器204或系統(tǒng)存儲器104中的數(shù)據(jù)用于在處理片段數(shù)據(jù)中使用。片段可以在像素、樣本或其他粒度(granularity)上進(jìn)行著色,這取決于所編程的采樣率。
[0069]光柵操作單元465是實(shí)施光柵操作以及輸出像素?cái)?shù)據(jù)作為經(jīng)處理的圖形數(shù)據(jù)用于圖形存儲器中的存儲的處理單元,所述光柵操作諸如模板、z測試、混合等等。經(jīng)處理的圖形數(shù)據(jù)可以包括在圖形存儲器例如并行處理存儲器204和/或系統(tǒng)存儲器104中用于顯示設(shè)備110上的顯示或者用于由CPU102或并行處理子系統(tǒng)112進(jìn)一步處理。在本發(fā)明的一些實(shí)施例中,光柵操作單元465配置為壓縮寫到存儲器的z或顏色數(shù)據(jù)以及解壓縮從存儲器讀取的z或顏色數(shù)據(jù)。在各實(shí)施例中,R0P465可以位于存儲器接口 214、GPC208、GPC外的處理集群陣列230或PPU202內(nèi)的分開的單元(未示出)中。
[0070]處置光柵操作中的post-z覆蓋數(shù)據(jù)
[0071]在圖形處理管線400的某些級處實(shí)施z測試允許圖形處理管線400提早丟棄某些片段,使得進(jìn)一步的處理周期不浪費(fèi)在最后的經(jīng)渲染圖像中不可見的片段上。典型地,這類Z測試的結(jié)果不直接存儲在渲染目標(biāo)中。如下文所進(jìn)一步描述的,一些應(yīng)用從將Z測試結(jié)果存儲在渲染目標(biāo)中用于隨后的處理操作中獲益。
[0072]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖4的片段處理單元460和光柵操作單元465。如所示,片段處理單元460包括早Z-光柵(z-raster)操作(ZROP)單元510、pre_z/post-z多路復(fù)用器520以及片段著色器530。如進(jìn)一步所示,光柵操作單元465包括晚ZROP單元540、顏色/覆蓋多路復(fù)用器545以及顏色光柵操作(CROP)單元550。
[0073]早ZROP單元510從光柵器455接收片段數(shù)據(jù),其中片段數(shù)據(jù)包括但不限于z平面方程數(shù)據(jù)、用于顏色分量和紋理坐標(biāo)的平面方程數(shù)據(jù)、屏幕空間位置(x,y)以及光柵化覆蓋掩碼。早ZROP單元510使用由多樣本模式所指定的樣本位置和由光柵器455所提供的平面方程數(shù)據(jù)計(jì)算用于每個(gè)樣本的z信息。早ZROP單元510將用于當(dāng)前樣本的z值比作先前所存儲的用于相應(yīng)樣本位置的z值。這類過程常規(guī)地被稱為“z測試”或“隱藏面消除”。在一些實(shí)施例中,早ZROP單元510可將通過z測試的樣本的z值寫到經(jīng)配置作為深度(或z)緩沖區(qū)的渲染目標(biāo)。早ZROP單元510丟棄未通過z測試的樣本,并且早ZROP單元510不寫入任何用于這些所丟棄樣本的z值。
[0074]早ZROP單元510還基于給定像素的哪些樣本由當(dāng)前被處理的片段所覆蓋來計(jì)算覆蓋信息。當(dāng)早ZROP單元510單獨(dú)地基于當(dāng)前被處理的片段計(jì)算覆蓋掩碼時(shí),這類覆蓋掩碼被稱為pre-z覆蓋信息570。當(dāng)早ZROP單元510基于當(dāng)前被處理的片段和先前經(jīng)渲染的片段數(shù)據(jù)二者來計(jì)算覆蓋掩碼時(shí),這類覆蓋掩碼被稱為post-z覆蓋信息580。早ZROP單元510將用于每個(gè)片段的覆蓋掩碼提供到pre-z/post-z多路復(fù)用器520。在一些實(shí)施例中,早ZROP單元510也可以計(jì)算當(dāng)確定特定樣本通過或者未通過z測試時(shí)結(jié)合z值使用的模板值。
[0075]pre-z/post-z多路復(fù)用器520基于控制信號560的狀態(tài)選擇從早ZROP單元510傳達(dá)到片段著色器530的pre-z覆蓋信息570或post-z覆蓋信息580。pre-z/post-z多路復(fù)用器520從SM310中的機(jī)構(gòu)(未示出)接收控制信號560作為狀態(tài)屬性。然而,圖形處理管線400中的任何技術(shù)上可行的單元可以提供控制信號560。
[0076]片段著色器530使用經(jīng)由pre-z/post-z多路復(fù)用器520從光柵器455所接收的片段數(shù)據(jù)來計(jì)算和處理用于像素的一個(gè)或多個(gè)樣本位置的顏色值和其他像素信息。在一些實(shí)施例中,片段著色器530還可以使用由光柵器455所提供的平面方程數(shù)據(jù)針對一個(gè)或多個(gè)樣本位置來修改從pre-z/post-z多路復(fù)用器520所接收的z值??商娲?,片段著色器530可以計(jì)算新z值而不使用由光柵器455所提供的平面方程數(shù)據(jù)。可替代地,片段著色器530可在沒有修改的情況下傳達(dá)從從pre-z/post-z多路復(fù)用器520所接收的z值。片段著色器530將顏色信息582傳送到顏色/覆蓋多路復(fù)用器545。
[0077]除晚ZROP單元在片段著色器530完成對片段的處理之后實(shí)施z測試之外,晚ZROP單元540功能本質(zhì)上與早ZROP單元510相同。當(dāng)片段著色器530針對一個(gè)或多個(gè)片段創(chuàng)建z信息時(shí)、當(dāng)片段著色器530修改與一個(gè)或多個(gè)片段相關(guān)聯(lián)的現(xiàn)存的z信息時(shí)或者當(dāng)可由早ZROP單元510計(jì)算的z信息否則無效時(shí),晚ZROP單元540用于z測試。晚ZROP單元540將覆蓋信息572傳達(dá)到顏色/覆蓋多路復(fù)用器545。
[0078]顏色/覆蓋多路復(fù)用器545基于控制信號562的狀態(tài)選擇傳達(dá)到CROP單元550的來自片段著色器530的顏色信息582或者來自晚ZROP單元540的覆蓋信息572??刂?覆蓋多路復(fù)用器545從SM310中的機(jī)構(gòu)(未示出)接收控制信號562作為狀態(tài)屬性。然而,圖形處理管線400中的任何技術(shù)上可行的單元可以提供控制信號562。
[0079]CROP單元550對從片段著色器530所接收的像素信息和存儲在一個(gè)或多個(gè)著色器目標(biāo)中的像素信息實(shí)施各種混合或合成操作。CROP單元550基于從片段著色器所接收的pre-z或post-z覆蓋信息將這類混合或合成操作的結(jié)果存儲在一個(gè)或多個(gè)渲染目標(biāo)中。如下文所進(jìn)一步描述的,補(bǔ)充或者取代存儲混合或合成操作的結(jié)果,CROP單元550將post-z覆蓋信息存儲在一個(gè)或多個(gè)渲染目標(biāo)中。CROP單元550經(jīng)由分區(qū)單元215將信息存儲在渲染目標(biāo)中。
[0080]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、如經(jīng)由圖2的分區(qū)單元215中的一個(gè)或多個(gè)所存儲的渲染目標(biāo)的集合600。如所示,渲染目標(biāo)的集合600包括8個(gè)分開的渲染目標(biāo)610 (O) -610 (7)。
[0081]第一渲染目標(biāo)610 (O)包括表示與相應(yīng)樣本或片段相關(guān)聯(lián)的透明度信息和顏色的4個(gè)字段。如所示,4個(gè)字段包括紅值615、綠值620、藍(lán)值625以及阿爾法(alpha)或透明度值630。
[0082]第二渲染目標(biāo)610 (O)包括表示與相應(yīng)樣本或片段相關(guān)聯(lián)的深度和模板信息的2個(gè)字段。如所示,2個(gè)字段包括z或者深度值635和模板掩碼640。如所示,z值635比模板掩碼640包括更多的位。
[0083]第三渲染目標(biāo)610 (2)包括表不與相應(yīng)樣本或片段相關(guān)聯(lián)的表面法向量信息的4個(gè)字段。如所不,4個(gè)字段包括X軸法向量645、y軸法向量650、z軸法向量655。在用于第三渲染目標(biāo)610 (2)的該特定配置中,第四字段是未使用的660。
[0084]第四渲染目標(biāo)610 (3)包括表示與相應(yīng)樣本或片段相關(guān)聯(lián)的post-z覆蓋信息665的單個(gè)字段。如本文所描述的,CROP單元550將post-z覆蓋信息存儲在渲染目標(biāo)中。在一個(gè)實(shí)施例中,CROP單元可將這類post-z覆蓋信息存儲在第四渲染目標(biāo)610 (3)的post-z覆蓋信息665中。
[0085]剩余的渲染目標(biāo)610 (4)-610 (7)配置為存儲與相應(yīng)樣本或片段相關(guān)聯(lián)的附加的信息。這類配置(未示出)包括用于各種信息的存儲,包括但不限于3D位置數(shù)據(jù)、漫射照明信息以及反射照明信息。
[0086]應(yīng)該理解,本文所描述的架構(gòu)僅是示例性的并且變化和修改是可能的。在一個(gè)示例中,本文在給定配置中的8個(gè)渲染目標(biāo)610的上下文中描述了技術(shù)。然而,所描述的技術(shù)可使用任何數(shù)目的渲染目標(biāo)610加以采用。每個(gè)渲染目標(biāo)可獨(dú)立于其他渲染目標(biāo)配置為包括任何數(shù)目的字段。渲染目標(biāo)內(nèi)的每個(gè)字段可獨(dú)立于其他字段配置為包括任何數(shù)目的位。在另一個(gè)不例中,渲染目標(biāo)的集合600包括具有用于post-z覆蓋信息665的存儲的單個(gè)字段的渲染目標(biāo)610(3)。然而,只要字段包括足夠數(shù)量的位以存儲post-z覆蓋信息,post-z覆蓋信息就可以存儲在任何渲染目標(biāo)610中的任何技術(shù)上可行的字段中。具體地,post-z覆蓋信息可以存儲在第三渲染目標(biāo)610 (2)的第四未使用字段660中??商娲?,當(dāng)具體應(yīng)用不使用模板掩碼時(shí),post-z覆蓋信息可以存儲在第二渲染目標(biāo)610 (I)的目標(biāo)掩碼字段640中。
[0087]在另一個(gè)示例中,CROP單元550可嘗試將post-z覆蓋信息存儲在被認(rèn)為無資格存儲這類信息的字段中。在這種情況下,CROP單元550可實(shí)施任何合適的操作,包括但不限于,將post-z覆蓋信息存儲在無資格字段中,丟棄存儲操作使得存儲在字段中的數(shù)據(jù)不被覆寫,或者基于由當(dāng)前應(yīng)用所指示的偏好實(shí)施存儲或丟棄。在又一個(gè)示例中,如上文所描述的,CROP單元550將post-z覆蓋信息存儲在渲染目標(biāo)610中。然而,圖形處理管線400內(nèi)的任何技術(shù)上可行的單元可將post-z覆蓋數(shù)據(jù)存儲在渲染目標(biāo)610中,包括但不限于片段著色器530、早ZROP單元510以及晚ZROP單元540。在另一個(gè)示例中,本文所描述的系統(tǒng)包括用于Z-光柵操作的兩個(gè)分開的單元,具體地早ZROP單元510和晚ZROP單元540。然而,本文所描述的技術(shù)可以結(jié)合具有可配置為實(shí)施早Z-光柵操作或晚Z-光柵操作的單個(gè)ZROP單元(未示出)的技術(shù)來使用。這類共享ZROP單元經(jīng)由通信路徑、多路復(fù)用器等等將可配置為在片段著色器530之前實(shí)施z測試(早z測試)或者在片段著色器530之后實(shí)施z測試(晚z測試)。
[0088]圖7A-7D示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、相交多個(gè)圖形基元730735740的像素710。如圖7A所示,每個(gè)像素710再分成16個(gè)樣本720 (0)-720 (15)。如本文所進(jìn)一步描述的,post-z覆蓋數(shù)據(jù)基于由圖形基元730735740所覆蓋的樣本720來針對圖形基元730735740中的每一個(gè)進(jìn)行計(jì)算。在一個(gè)實(shí)施例中,post-z覆蓋數(shù)據(jù)可由位掩碼表示,其中圖中的每個(gè)位包括用于給定樣本720的post-z覆蓋數(shù)據(jù)。這類位掩碼可以是16位寬,以包括像素710的16個(gè)樣本720 (O) -720 (15)的post-z覆蓋數(shù)據(jù)。位掩碼的最高有效位可以與樣本720 (15)相應(yīng),而最低有效位可以與樣本720 (O)相應(yīng)。位掩碼中的位位置(bit posit1n)中的“I”值可以指示圖形基元730735740覆蓋相應(yīng)的樣本720,而位掩碼的位位置中的“O”可以指示圖形基元730735740不覆蓋相應(yīng)的樣本720。
[0089]如圖7B所示,第一圖形基元730與像素710相交。圖形基元730覆蓋陰影樣本720 (0),720 (1),720 (4),720 (5),720 (8),720 (9),720 (12)以及 720 (13)。相應(yīng)的位掩碼可以是0x3333,反映由圖形基元730覆蓋的像素710的8個(gè)樣本。CROP單元550將渲染目標(biāo)610中的該post-z覆蓋位掩碼存儲在與像素710相應(yīng)并且與圖形基元730相關(guān)聯(lián)的位置處。post-z覆蓋位掩碼可以存儲在渲染目標(biāo)中的多個(gè)位置中,其中每個(gè)位置表示被覆蓋在相同像素710內(nèi)的樣本720。
[0090]如圖7C所示,第二圖形基元735與像素710相交。圖形基元735覆蓋陰影樣本720 (2),720 (3),720 (6),720 (7),720 (10),720 (11),720 (14)以及 720 (15)。相應(yīng)的位掩碼可以是OxCCCC,反映由圖形基元735覆蓋的像素710的8個(gè)樣本。CROP單元550將渲染目標(biāo)610中的該post-z覆蓋位掩碼存儲在與像素710相應(yīng)并且與圖形基元735相關(guān)聯(lián)的位置處。post-z覆蓋位掩碼可以存儲在渲染目標(biāo)中的多個(gè)位置中,其中每個(gè)位置表示被覆蓋在相同像素710內(nèi)的樣本720。
[0091]如圖7D所示,第三圖形基元740與像素710相交。圖形基元740在圖形基元730前面并且在圖形基元735后面。在z測試之前,圖形基元740覆蓋6個(gè)樣本720 (9)、720 (10),720 (11),720 (13),720 (14)以及 720 (15)。相應(yīng)的 pre-ζ 覆蓋位掩碼可以是OxEEOO,反映z測試之前由圖形基元740覆蓋的像素710的6個(gè)樣本。在z測試之后,圖形基元740覆蓋陰影樣本720 (9)和720 (13)。相應(yīng)的post-z覆蓋位掩碼可以是0x2200,反映z測試之后由圖形基元740覆蓋的像素710的2個(gè)樣本。CROP單元550將渲染目標(biāo)610中的該post-z覆蓋位掩碼存儲在與像素710相應(yīng)并且與圖形基元740相關(guān)聯(lián)的位置處。POSt-Z覆蓋位掩碼可以存儲在渲染目標(biāo)中的多個(gè)位置中,其中每個(gè)位置表示被覆蓋在相同像素710內(nèi)的樣本720。
[0092]在渲染圖形基元740之后,圖形基元730僅覆蓋6個(gè)樣本720 (0),720 (1),720
(4),720 (5),720 (8)以及720 (12)。然而,如上文結(jié)合圖7A所描述的,圖形基元730在圖形基元730原始被渲染時(shí)覆蓋8個(gè)樣本。在一個(gè)實(shí)施例中,截至每個(gè)圖形基元被首次渲染時(shí),post-z覆蓋掩碼可以表示post-z覆蓋。在這種情況下,用于圖形基元730的post-z覆蓋位掩碼可以保持為0x3333,反映在渲染時(shí)由圖形基元730覆蓋的像素710的8個(gè)樣本。在另一個(gè)實(shí)施例中,在場景中的所有圖形基元被渲染之后,post-z覆蓋掩碼可以表示post-z覆蓋。在這種情況下,用于圖形基元730的post-z覆蓋位掩碼可以修改到0x1133,反映渲染圖形基元740之后由圖形基元730覆蓋的像素710的6個(gè)樣本。
[0093]在一些實(shí)施例中,像素710包括已通過可見性測試的樣本。這類可見性測試可以包括確定樣本是否在最后經(jīng)渲染圖像中可見的任何一個(gè)或多個(gè)測試,包括但不限于以任何組合的深度測試、模板測試、阿爾法測試以及深度限度測試??梢娦詼y試可以在樣本已由片段著色器530處理之后實(shí)施。在可替代實(shí)施例中,樣本可以不由片段著色器530處理。在這種情況下,片段著色器530可被斷電或處于低功率狀態(tài)中。
[0094]post-z覆蓋信息可以使用在除典型3D渲染技術(shù)之外的各種應(yīng)用中。在一個(gè)示例中,post-z覆蓋信息可以用來支持延遲渲染(deferred rendering)。利用延遲渲染,片段處理單元460或ROP單元465將片段數(shù)據(jù)直接存儲在一個(gè)或多個(gè)渲染目標(biāo)610中而不對片段數(shù)據(jù)進(jìn)行渲染。在渲染目標(biāo)610積累與多個(gè)圖形基元相關(guān)聯(lián)的片段數(shù)據(jù)之后,片段處理單元460或ROP單元465從渲染目標(biāo)610檢索片段數(shù)據(jù),對所檢索的片段數(shù)據(jù)實(shí)施一個(gè)或多個(gè)混合或合成操作,以及將產(chǎn)生的顏色值或其他像素信息存儲在渲染目標(biāo)中。post-z覆蓋數(shù)據(jù)可以用來確定由所存儲片段中的每一個(gè)所影響的樣本的集合。
[0095]在另一個(gè)示例中,post-z覆蓋信息可以用來支持路徑渲染。路徑渲染是2D圖形渲染技術(shù),其中場景指定為分辨率獨(dú)立的輪廓線(outline)的序列,輪廓線被稱為可以填充或劃掉的(stroked)路徑。這些路徑,也稱為輪廓線,指定對象依照用于畫連接線、曲線和弧線的命令的序列進(jìn)行渲染。這些路徑可以是凹的,可以自相交,可以包含孔并且可以是任意復(fù)雜的。這類路徑可以利用常量顏色、線性或徑向梯度、或者概述為形成(所劃掉的)路徑的相反圖樣的(所填充的)圖像。隨著特定路徑被遍歷,post-z覆蓋信息可以用來確定樣本是在由路徑所劃定的空間之內(nèi)還是之外。用于樣本的集合的post-z覆蓋信息可以初始化到O。隨著片段被處理,著色器程序530可以實(shí)施對用于當(dāng)前片段的post-z覆蓋信息與存儲在渲染目標(biāo)中的post-z覆蓋信息的XOR操作。樣本第一次與片段相交時(shí),post-z覆蓋信息可以設(shè)定到I。post-z覆蓋信息可在樣本第二次與片段相交時(shí)重新設(shè)定到0,在樣本第三次與片段相交時(shí)返回設(shè)定到I等等。一旦遍歷完成,則“I”值可以指示樣本在由路徑所劃定的空間內(nèi)部,而“O”值可以指示樣本在由路徑所劃定的空間外部。
[0096]可替代地,由路徑所劃定的空間可以隨著路徑被遍歷而進(jìn)行填充。著色器程序530可以實(shí)施對用于當(dāng)如片段的post-z覆蓋彳目息與存儲在?宣染目標(biāo)中的post-z覆蓋彳目息的OR操作。一旦遍歷完成,則“I”值可以指示樣本在遍歷期間被填充,而“O”值可以指示樣本在遍歷期間未被填充。
[0097]在又一個(gè)實(shí)施例中,post-z覆蓋信息可以用來支持目標(biāo)獨(dú)立光柵化。利用目標(biāo)獨(dú)立光柵化,每像素樣本的數(shù)目可獨(dú)立于針對存儲經(jīng)渲染圖像所分配的存儲器來進(jìn)行指定。例如,圖形處理管線可配置為對每像素8個(gè)樣本進(jìn)行光柵化,而CROP單元550配置為寫到可配置為存儲每像素I個(gè)樣本的單個(gè)渲染目標(biāo)。這類配置可以叫做8:1模式。在這種情況下,光柵化可以以與渲染目標(biāo)的配置無關(guān)的速率行進(jìn)。post-z覆蓋可以用來確定由一個(gè)或多個(gè)圖形基元覆蓋的給定像素中樣本的數(shù)目。如果16個(gè)中的8個(gè)樣本被覆蓋,那么像素具有50%覆蓋率,如果16個(gè)中的12個(gè)樣本被覆蓋,那么像素具有75%覆蓋率等等。CROP單元550然后可以計(jì)算用于如由覆蓋率的百分比所加權(quán)的像素的單個(gè)顏色值。
[0098]最后,post-z覆蓋信息可以用來確定片段的pre-z或post-z覆蓋質(zhì)心(centroid)。返回參考圖7D,像素710的質(zhì)心是處于由像素710覆蓋的區(qū)域的中心處的點(diǎn)。然而,該點(diǎn)不是由圖形基元740覆蓋的像素710的一部分的質(zhì)心。如上文所描述的,圖形基元 740 的 pre-z 覆蓋包括 6 個(gè)樣本 720 (9),720 (10),720 (11),720 (13),720 (14)以及720 (15)。通過檢查pre-z覆蓋數(shù)據(jù),像素710與圖形基元740的相交的pre-z質(zhì)心可以確定為鄰近樣本720 (10)和720 (14)的線段的中點(diǎn)。圖形基元740的post-z覆蓋包括2個(gè)樣本720 (9)和720 (13)。通過檢查post-z覆蓋數(shù)據(jù),像素710與圖形基元740的相交的post-z質(zhì)心可以確定為鄰近樣本720 (9)和720 (13)的線段的中點(diǎn)。
[0099]圖8闡述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于存儲post-z覆蓋數(shù)據(jù)的方法步驟的流程圖。盡管結(jié)合圖1-6的系統(tǒng)描述了方法步驟,但是本領(lǐng)域普通技術(shù)人員將理解的是,配置為以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0100]如所示,方法800開始于步驟802,其中CROP單元550接收與包括一個(gè)或多個(gè)樣本的片段相關(guān)聯(lián)的post-z覆蓋信息。在步驟804,CROP單元550接收與片段相關(guān)聯(lián)的顏色或其他信息。在步驟806,CROP單元550確定應(yīng)用是否配置為對post-z覆蓋信息實(shí)施邏輯操作。例如,CROP單元550可以對當(dāng)前所接收post-z覆蓋信息與從渲染目標(biāo)610所檢索的、先前存儲的post-z覆蓋信息實(shí)施邏輯OR或XOR操作。如果應(yīng)用配置為實(shí)施邏輯操作,那么方法800行進(jìn)到步驟808,其中CROP單元550從渲染目標(biāo)610檢索現(xiàn)存的post-z覆蓋信肩、O
[0101]在步驟810, CROP單元550基于所接收的post_z覆蓋信息和所檢索的post_z覆蓋信息實(shí)施邏輯操作。在步驟812,CROP單元550確定post-z覆蓋信息的存儲操作是否針對有資格渲染目標(biāo)610。如果存儲操作針對有資格渲染目標(biāo),那么方法800行進(jìn)到步驟814,其中CROP單元550將post-z覆蓋信息存儲在渲染目標(biāo)610中。在步驟816,CROP單元550確定附加的片段是否可用于處理。如果附加的片段可用于處理,那么方法800返回到步驟802,如上文所描述的。如果沒有附加的片段可用于處理,那么方法800終止。
[0102]返回到步驟812,如果存儲操作針對無資格渲染目標(biāo),那么方法800行進(jìn)到上文所描述的步驟816。
[0103]返回到步驟806,如果應(yīng)用不配置為實(shí)施邏輯操作,那么方法800行進(jìn)到上文所描述的步驟812。
[0104]總而言之,光柵操作單元將post-z覆蓋數(shù)據(jù)存儲到渲染目標(biāo)。post-z覆蓋數(shù)據(jù)可由早Z測試單元、晚Z測試單元或片段著色單元來計(jì)算。光柵操作單元將post-z覆蓋數(shù)據(jù)存儲到單個(gè)分量渲染目標(biāo)??商娲?,光柵操作單元將post-z覆蓋數(shù)據(jù)存儲到多個(gè)分量渲染目標(biāo)的一個(gè)分量。GPU然后基于post-ζ覆蓋數(shù)據(jù)計(jì)算用于樣本的顏色和其他像素信息。post-z覆蓋數(shù)據(jù)也可以用來支持其他渲染技術(shù)諸如延遲渲染、路徑渲染,以及計(jì)算片段的post-z覆蓋質(zhì)心。
[0105]所公開技術(shù)的一個(gè)優(yōu)勢在于,GPU僅計(jì)算用于如由post-z覆蓋數(shù)據(jù)所確定的可見片段的顏色和其他像素信息。GPU不計(jì)算用于遮蔽片段的顏色和其他像素信息,從而降低總功耗并且改進(jìn)總渲染性能。
[0106]本發(fā)明的一個(gè)實(shí)施例可被實(shí)施為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。該程序產(chǎn)品的程序定義實(shí)施例的各功能(包括本文中描述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲介質(zhì)上。示例性計(jì)算機(jī)可讀存儲介質(zhì)包括但不限于:(i)不可寫的存儲介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲器設(shè)備,諸如可由CD-ROM驅(qū)動器讀取的光盤只讀存儲器(CD-ROM)盤、閃存、只讀存儲器(ROM)芯片或任何類型的固態(tài)非易失性半導(dǎo)體存儲器),在其上存儲永久性信息jP(ii)可寫的存儲介質(zhì)(例如,磁盤驅(qū)動器或硬盤驅(qū)動器內(nèi)的軟盤或者任何類型的固態(tài)隨機(jī)存取半導(dǎo)體存儲器),在其上存儲可更改的信息。
[0107]以上已參照特定實(shí)施例對本發(fā)明進(jìn)行了描述。然而,本領(lǐng)域普通技術(shù)人員將理解的是,可對此做出各種修改和變化而不脫離如隨附權(quán)利要求書中所闡述的本發(fā)明的較寬精神和范圍。因此,前面的描述以及附圖應(yīng)被視為是例示性而非限制性的意義。
[0108]因此,本發(fā)明的實(shí)施例的范圍由下面的權(quán)利要求書進(jìn)行闡述。
【權(quán)利要求】
1.一種子系統(tǒng),包括: 光柵操作單元,其配置為通過實(shí)施以下步驟將覆蓋信息存儲在渲染目標(biāo)中: 接收與第一圖形基元的第一部分相關(guān)聯(lián)的第一覆蓋掩碼,其中所述第一圖形基元相交包括多個(gè)樣本的像素,并且所述第一部分覆蓋包括在所述多個(gè)樣本中的至少一個(gè)樣本;以及 將所述第一覆蓋掩碼存儲在所述渲染目標(biāo)中的與所述像素相關(guān)聯(lián)的第一位置處的數(shù)據(jù)字段中。
2.根據(jù)權(quán)利要求1所述的子系統(tǒng),其中所述光柵操作單元進(jìn)一步配置為實(shí)施包括檢測所述渲染目標(biāo)有資格存儲覆蓋信息的步驟。
3.根據(jù)權(quán)利要求1所述的子系統(tǒng),其中所述光柵操作單元進(jìn)一步配置為實(shí)施以下步驟: 從所述第一位置檢索第二覆蓋掩碼;以及 在存儲所述第一覆蓋掩碼之前,通過基于所述第一覆蓋掩碼和所述第 二覆蓋掩碼實(shí)施邏輯操作來修改所述第一覆蓋掩碼。
4.根據(jù)權(quán)利要求 1所述的子系統(tǒng),其中所述數(shù)據(jù)字段選自與所述渲染目標(biāo)相關(guān)聯(lián)的多個(gè)數(shù)據(jù)字段。
5.根據(jù)權(quán)利要求1所述的子系統(tǒng),其中所述第一覆蓋掩碼包括多個(gè)位,并且其中每個(gè)位與所述多個(gè)樣本中的不同樣本相對應(yīng)。
6.根據(jù)權(quán)利要求1所述的子系統(tǒng),其中所述第一覆蓋掩碼指示哪些樣本由所述第一圖形基元的所述第一部分覆蓋。
7.根據(jù)權(quán)利要求1所述的子系統(tǒng),其中所述光柵操作單元進(jìn)一步配置為實(shí)施基于所述第一覆蓋掩碼計(jì)算所述像素的由所述第一圖形基元的所述第一部分覆蓋的百分比的步驟。
8.根據(jù)權(quán)利要求1所述的子系統(tǒng),其中所述光柵操作單元進(jìn)一步配置為實(shí)施以下步驟: 接收與第二圖形基元的第二部分相關(guān)聯(lián)的第二覆蓋掩碼,其中所述第二基元相交所述像素,并且所述第二部分覆蓋包括在所述多個(gè)樣本中的至少一個(gè)樣本;以及 將所述第二覆蓋掩碼存儲在所述渲染目標(biāo)中的與所述像素相關(guān)聯(lián)的第二位置處的數(shù)據(jù)字段中; 其中所述第二覆蓋掩碼指示哪些樣本由所述第二圖形基元的所述第二部分覆蓋并且不被所述第一圖形基元的所述第一部分遮蔽。
9.根據(jù)權(quán)利要求8所述的子系統(tǒng),其中所述光柵操作單元進(jìn)一步配置為實(shí)施基于所述第二覆蓋掩碼計(jì)算所述第二部分的質(zhì)心的步驟。
10.根據(jù)權(quán)利要求8所述的子系統(tǒng),其中所述光柵操作單元進(jìn)一步配置為實(shí)施以下步驟: 將與所述第一圖形基元的所述第一部分相關(guān)聯(lián)的第一屬性存儲在所述渲染目標(biāo)中的與所述像素相關(guān)聯(lián)的第三位置處的數(shù)據(jù)字段中; 將與所述第二圖形基元的所述第二部分相關(guān)聯(lián)的第二屬性存儲在所述渲染目標(biāo)中的與所述像素相關(guān)聯(lián)的第四位置處的數(shù)據(jù)字段中; 基于所述第一覆蓋掩碼和所述第二覆蓋掩碼中的至少一個(gè)對所述第一屬性和所述第二屬性實(shí)施混合操作;以及 將所述混合操作的結(jié)果存儲在所述渲染目標(biāo)中的與所述像素相關(guān)聯(lián)的第五位置處的數(shù)據(jù)字段 中。
【文檔編號】G06T15/00GK104050705SQ201310752242
【公開日】2014年9月17日 申請日期:2013年12月31日 優(yōu)先權(quán)日:2013年3月13日
【發(fā)明者】埃里克·B·盧姆, 魯伊·巴斯托斯, 杰爾姆·F·小杜魯克, 亨利·帕爾德·莫爾頓, 尤里·Y·烏拉爾斯基 申請人:輝達(dá)公司