本發(fā)明的實(shí)施例總體地涉及圖形處理,并且更具體地,涉及屏幕空間管線中的多通道渲染。
背景技術(shù):
常規(guī)的圖形處理單元(gpu)包括一個(gè)或多個(gè)圖形管線,其配置為在三維(3d)場(chǎng)景內(nèi)生成幾何圖形。給定的圖形管線可以相對(duì)于場(chǎng)景被最終渲染的觀看位置以特定順序繪制圖形場(chǎng)景中的幾何圖形。例如,圖形管線可以相對(duì)于觀看位置生成與場(chǎng)景的背景相關(guān)聯(lián)的幾何圖形,然后隨后生成與場(chǎng)景的前景相關(guān)聯(lián)的幾何圖形。在這個(gè)示例中,場(chǎng)景幾何圖形是“從后向前”生成的。生成幾何圖形的順序通常由依賴于gpu進(jìn)行圖形處理操作的軟件應(yīng)用控制。該順序在本領(lǐng)域中被稱為應(yīng)用程序編程接口(api)順序。該軟件應(yīng)用可以是,例如,在負(fù)責(zé)渲染3d場(chǎng)景的圖像以供顯示的計(jì)算機(jī)系統(tǒng)上執(zhí)行的視頻游戲或3d模擬程序。
在圖形管線中,在生成幾何圖形后,通常執(zhí)行硬件或軟件著色器,以生成基于3d場(chǎng)景中的幾何圖形的像素值。著色器通常根據(jù)最初生成幾何圖形的api順序?qū)缀螆D形進(jìn)行操作。這樣,返回到上述示例,著色器將生成3d場(chǎng)景的背景的像素值,然后生成3d場(chǎng)景的前景的像素值。然而,當(dāng)前景的元素遮擋背景的部分時(shí),使得這些部分從觀看位置不可見,這種方法會(huì)產(chǎn)生低效率。特別地,基于幾何圖形的遮擋部分生成的任何像素值對(duì)最終渲染的圖像沒有貢獻(xiàn),因此浪費(fèi)了用于生成那些像素值所消耗的工作。
該問題的一個(gè)解決方案是通過軟件應(yīng)用對(duì)gpu進(jìn)行編程,以實(shí)施被稱為“z預(yù)通道(zpre-pass)”的操作。當(dāng)實(shí)施z預(yù)通道的操作時(shí),圖形管線僅渲染與幾何圖形相關(guān)聯(lián)的位置,然后在所有得到的像素或樣本上實(shí)施深度測(cè)試,以識(shí)別被遮擋的像素和被遮擋的樣本。然后,當(dāng)實(shí)施隨后的著色操作時(shí),圖形管線可以忽略被遮擋的像素或樣本。盡管該方法避免了實(shí)施與被遮擋的幾何圖形相關(guān)的著色操作,但是該方法要求整個(gè)3d場(chǎng)景被渲染兩次,這導(dǎo)致附加的處理開銷。
例如,諸如頂點(diǎn)屬性獲取、頂點(diǎn)著色和頂點(diǎn)曲面細(xì)分的操作必須實(shí)施兩次,以便為z預(yù)通道和隨后再一次的著色通道的場(chǎng)景做渲染。這些操作需要附加處理周期并消耗附加功率。特別地,頂點(diǎn)屬性獲取操作通常需要訪問片外動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dram),從功率的角度來看這可能是相當(dāng)昂貴的。還必須從存儲(chǔ)器獲得圖形基元用于每次渲染。實(shí)施這樣的操作消耗了存儲(chǔ)器帶寬,并且也增加了中央處理單元(cpu)的負(fù)載,這同樣增加了功率消耗。
功率考慮在所有類型的計(jì)算機(jī)系統(tǒng)實(shí)現(xiàn)中變得越來越重要,但是在移動(dòng)實(shí)現(xiàn)中已經(jīng)變得尤其重要,因?yàn)橐苿?dòng)設(shè)備具有有限的功率資源。因此,在可能的情況下,應(yīng)盡可能避免導(dǎo)致附加處理周期和功率消耗的不必要操作,如上所述的關(guān)于被遮擋的幾何圖形的操作。
如前所述,所需要的是用于渲染包括被遮擋的幾何圖形的圖形場(chǎng)景的更有效的技術(shù)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的一個(gè)實(shí)施例闡述了一種用于處理圖形基元的圖形子系統(tǒng),該子系統(tǒng)包括經(jīng)配置以在多通道中處理圖形基元的屏幕空間管線,以及包括緩沖器的多通道單元,所述多通道單元經(jīng)配置以從所述緩沖器的第一部分提取第一圖形基元,以用于在通過所述屏幕空間管線的第一通道中進(jìn)行處理,以及從所述緩沖器的所述第一部分提取所述第一圖形基元,以用于在通過所述屏幕空間管線的第二通道中進(jìn)行處理。
本文所描述技術(shù)的至少一個(gè)優(yōu)勢(shì)在于,所述屏幕空間管線可以經(jīng)配置以采用經(jīng)緩沖的基元實(shí)施各種z通道,然后,隨后采用相同的經(jīng)緩沖的基元實(shí)施顏色著色通道。因此,可以正確地渲染某些類型的圖形場(chǎng)景,而不需要從存儲(chǔ)器重新獲取圖形數(shù)據(jù)。這些技術(shù)可以減少功率消耗,并且因此提高移動(dòng)設(shè)備的電池壽命。
附圖說明
因此,可以詳細(xì)理解本發(fā)明的上述特征的方式、對(duì)如上面所簡(jiǎn)要概括的本發(fā)明更具體的描述,可通過參考實(shí)施例得到,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對(duì)其范圍的限制,本發(fā)明可以具有其他等效的實(shí)施例。
圖1是示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)的框圖;
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、包括在圖1的并行處理子系統(tǒng)中的并行處理單元的框圖;
圖3a是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、包括在圖2的并行處理單元中的通用處理集群的框圖;
圖3b是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、可在圖2的并行處理單元內(nèi)實(shí)現(xiàn)的圖形處理管線的概念圖;
圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖3b的圖形處理管線可經(jīng)配置以生成和處理的高速緩存像素塊的概念圖;
圖5是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖3b的圖形處理管線的一部分,其經(jīng)配置以在多通道中處理基元數(shù)據(jù);
圖6a-6h是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖5的多通道(mp)單元如何產(chǎn)生用于配置圖3b的屏幕空間管線的通道數(shù)據(jù)的示例圖;
圖7是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于在圖形處理管線內(nèi)實(shí)施多通道的方法步驟的流程圖;
圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于跨多通道保持圖形處理管線的狀態(tài)的方法步驟的流程圖;
圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖5的mp單元如何配置圖3b的屏幕空間管線以實(shí)施多通道的概念圖;
圖10是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、由圖5的mp單元實(shí)施的操作如何可以提高渲染的效率和準(zhǔn)確度的概念圖;
圖11是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于配置圖形處理管線以在多個(gè)間隔中實(shí)施多通道的方法步驟的流程圖;
圖12示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、經(jīng)配置以同時(shí)實(shí)施涉及不同高速緩存像素塊的不同通道的圖3b的屏幕空間管線的一部分;
圖13是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于同時(shí)處理多個(gè)高速緩存像素塊的方法步驟的流程圖;以及
圖14是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于實(shí)施依賴通道的顏色著色的方法步驟的流程圖。
具體實(shí)施方式
在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對(duì)本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)施。
系統(tǒng)概述
圖1為示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。如圖所示,計(jì)算機(jī)系統(tǒng)100包括但不限于中央處理單元(cpu)102和經(jīng)由存儲(chǔ)器橋105和路徑通信113耦連到并行處理子系統(tǒng)112的系統(tǒng)存儲(chǔ)器104。存儲(chǔ)器橋105還經(jīng)由通信路徑106耦連到i/o(輸入/輸出)橋107,并且i/o橋107又耦連到交換器116。
在操作中,i/o橋107經(jīng)配置為從輸入設(shè)備108(諸如鍵盤或鼠標(biāo))接收用戶輸入信息,并且經(jīng)由通信路徑106和存儲(chǔ)器橋105將該輸入信息轉(zhuǎn)發(fā)到cpu102用于處理。交換器116經(jīng)配置為提供i/o橋107與計(jì)算機(jī)系統(tǒng)100的其他部件(例如網(wǎng)絡(luò)適配器118和各種插卡120和121)之間的連接。
如還示出的,i/o橋107耦連到系統(tǒng)盤114,系統(tǒng)盤114可以經(jīng)配置為存儲(chǔ)內(nèi)容和應(yīng)用以及數(shù)據(jù)以供cpu102和并行處理子系統(tǒng)112使用。作為一般情況,系統(tǒng)盤114為應(yīng)用和數(shù)據(jù)提供非易失性存儲(chǔ),并且可以包括固定或可移動(dòng)硬盤驅(qū)動(dòng)器、閃存設(shè)備和cd-rom(光盤只讀存儲(chǔ)器)、dvd-rom(數(shù)字通用光盤-rom)、藍(lán)光、hd-dvd(高清晰度dvd)或其他磁、光或固態(tài)存儲(chǔ)設(shè)備。最后,雖然未明確示出,但是諸如通用串行總線或其它端口連接、光盤驅(qū)動(dòng)器、數(shù)字通用光盤驅(qū)動(dòng)器、膠片記錄裝置等的其它部件也可以連接到i/o橋107。
在各種實(shí)施例中,存儲(chǔ)器橋105可以是北橋芯片,并且i/o橋107可以是南橋芯片。另外,通信路徑106和113以及計(jì)算機(jī)系統(tǒng)100內(nèi)的其它通信路徑可以使用任何技術(shù)上適合的協(xié)議實(shí)現(xiàn),包括但不限于agp(加速圖形端口)、超傳輸或者任何本領(lǐng)域已知的其他總線或點(diǎn)到點(diǎn)通信協(xié)議。
在一些實(shí)施例中,并行處理子系統(tǒng)112包含將像素傳遞到顯示設(shè)備110的圖形子系統(tǒng),所述顯示設(shè)備110可以是任何常規(guī)陰極射線管、液晶顯示器、發(fā)光二極管顯示器等。在這樣的實(shí)施例中,并行處理子系統(tǒng)112包括被優(yōu)化以用于圖形和視頻處理的電路,例如,包括視頻輸出電路。如下面在圖2中更詳細(xì)地描述的,這種電路可以并入跨并行處理子系統(tǒng)112中包括的一個(gè)或多個(gè)并行處理單元(ppu)。在其他實(shí)施例中,并行處理子系統(tǒng)112并入為了通用目的和/或計(jì)算處理而優(yōu)化的電路。同樣,這樣的電路可以并入跨并行處理子系統(tǒng)112中包括的經(jīng)配置為實(shí)施這種通用和/或計(jì)算操作的一個(gè)或多個(gè)ppu。在其他實(shí)施例中,包括在并行處理子系統(tǒng)112內(nèi)的一個(gè)或多個(gè)ppu可以經(jīng)配置為實(shí)施圖形處理、通用處理和計(jì)算處理操作。系統(tǒng)存儲(chǔ)器104包括經(jīng)配置為管理并行處理子系統(tǒng)112內(nèi)的一個(gè)或多個(gè)ppu的處理操作的至少一個(gè)設(shè)備驅(qū)動(dòng)器103。
在各種實(shí)施例中,并行處理子系統(tǒng)112可以與圖1的一個(gè)或多個(gè)其他元件集成,以形成單個(gè)系統(tǒng)。例如,并行處理子系統(tǒng)112可以與cpu102以及其他連接電路集成在單個(gè)芯片上,以形成片上系統(tǒng)(soc)。
應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)?,包括橋的?shù)目和布置、cpu102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲(chǔ)器104可以直接連接到cpu102而不是通過存儲(chǔ)器橋105,并且其他設(shè)備將經(jīng)由存儲(chǔ)器橋105和cpu102與系統(tǒng)存儲(chǔ)器104通信。在其他替代性拓?fù)渲?,并行處理子系統(tǒng)112可以連接到i/o橋107或直接連接到cpu102,而不是連接到存儲(chǔ)器橋105。而在其他實(shí)施例中,i/o橋107和存儲(chǔ)器橋105可能被集成到單個(gè)芯片上而不是作為一個(gè)或多個(gè)分立設(shè)備存在。最后,在一些實(shí)施例中,圖1所示的一個(gè)或多個(gè)部件可以不存在。例如,交換器116可以被去掉,網(wǎng)絡(luò)適配器118和插卡120、121將直接連接到i/o橋107。
圖2是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、包括在圖1的并行處理子系統(tǒng)112中的并行處理單元(ppu)202的框圖。盡管圖2描繪了一個(gè)ppu202,如上所述的,并行處理子系統(tǒng)112可以包括任何數(shù)量的ppus202。如圖所示,ppu202耦連到本地并行處理(pp)存儲(chǔ)器204。ppu202和pp存儲(chǔ)器204可使用一個(gè)或多個(gè)集成電路設(shè)備來實(shí)現(xiàn),諸如可編程處理器、專用集成電路(asic)或存儲(chǔ)器設(shè)備,或者以任何其他技術(shù)可行的方式來實(shí)現(xiàn)。
在一些實(shí)施例中,ppu202包括圖形處理單元(gpu),其可經(jīng)配置為實(shí)現(xiàn)圖形渲染管線以實(shí)施與基于由cpu102和/或系統(tǒng)存儲(chǔ)器104提供的圖形數(shù)據(jù)生成像素?cái)?shù)據(jù)相關(guān)的各種操作。當(dāng)處理圖形數(shù)據(jù)時(shí),pp存儲(chǔ)器204可被用作存儲(chǔ)一個(gè)或多個(gè)常規(guī)幀緩沖區(qū)(buffer)以及(如果需要)一個(gè)或多個(gè)其它渲染目標(biāo)的圖形存儲(chǔ)器。其中,pp存儲(chǔ)器204可以用于存儲(chǔ)和更新像素?cái)?shù)據(jù),并將最終的像素?cái)?shù)據(jù)或顯示幀傳遞到顯示設(shè)備110用于顯示。在一些實(shí)施例中,ppu202還可以被配置用于通用處理和計(jì)算操作。
在操作中,cpu102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,cpu102發(fā)出控制ppu202的操作的命令。在一些實(shí)施例中,cpu102寫入用于ppu202的命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),該數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲(chǔ)器104、pp存儲(chǔ)器204、或cpu102和ppu202都可訪問的其他存儲(chǔ)位置中。將指向數(shù)據(jù)結(jié)構(gòu)的指針寫到入棧緩沖區(qū)(pushbuffer)以發(fā)起對(duì)數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。ppu202從入棧緩沖區(qū)讀取命令流,然后相對(duì)于cpu102的操作異步地執(zhí)行命令。在生成多個(gè)入棧緩沖區(qū)的實(shí)施例中,可以經(jīng)由設(shè)備驅(qū)動(dòng)器103由應(yīng)用程序?yàn)槊總€(gè)入棧緩沖區(qū)指定執(zhí)行優(yōu)先級(jí)以控制對(duì)不同入棧緩沖區(qū)的調(diào)度。
還如圖所示,ppu202包括經(jīng)由通信路徑113和存儲(chǔ)器橋105,與計(jì)算機(jī)系統(tǒng)100的其余部分通信的i/o(輸入/輸出)單元205。i/o單元205產(chǎn)生用于在通信路徑113上傳輸?shù)姆纸M(或其他信號(hào)),并且還從通信路徑113接收所有輸入分組(或其它信號(hào)),將輸入分組引導(dǎo)到ppu202的適當(dāng)部件。例如,與處理任務(wù)相關(guān)的命令可以被引導(dǎo)到主機(jī)接口206,而與存儲(chǔ)器操作(例如,從pp存儲(chǔ)器204讀取或?qū)懭雙p存儲(chǔ)器204)相關(guān)的命令可以被引導(dǎo)到交叉開關(guān)單元210。主機(jī)接口206讀取每個(gè)入棧緩沖區(qū)并將存儲(chǔ)在入棧緩沖區(qū)中的命令流傳送到前端212。
如上結(jié)合圖1所述,ppu202到計(jì)算機(jī)系統(tǒng)100的其余部分的連接可以變化。在一些實(shí)施例中,并行處理子系統(tǒng)112包括至少一個(gè)ppu202,可實(shí)現(xiàn)為可插入到計(jì)算機(jī)系統(tǒng)100的擴(kuò)展槽中的插卡。在其他實(shí)施例中,ppu202可以和諸如存儲(chǔ)器橋105或i/o橋107的總線橋集成在單個(gè)芯片上。而在其他實(shí)施例中,ppu202的一些或所有元件可以和cpu102集成在單個(gè)集成電路或芯片系統(tǒng)(soc)上。
在操作中,前端212將從主機(jī)接口206接收的處理任務(wù)傳送到任務(wù)/工作單元207內(nèi)的工作分布單元(未示出)。工作分布單元接收指向編碼為任務(wù)元數(shù)據(jù)(tmd)并存儲(chǔ)在存儲(chǔ)器中的處理任務(wù)的指針。指向tmd的指針包括在存儲(chǔ)為入棧緩沖區(qū)并由前端單元212從主機(jī)接口206接收的命令流中。指向tmd的指針包括在存儲(chǔ)為入棧緩沖區(qū)并由前端單元212從主機(jī)接口206接收的命令流中??梢跃幋a為tmd的處理任務(wù)包括與所要處理的數(shù)據(jù)相關(guān)聯(lián)的索引,以及定義數(shù)據(jù)將被如何處理的狀態(tài)參數(shù)和命令。例如,狀態(tài)參數(shù)和命令可定義要對(duì)數(shù)據(jù)執(zhí)行的程序。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個(gè)tmd所指定的處理任務(wù)發(fā)起前,將gpc208配置為有效狀態(tài)??梢詾槊總€(gè)tmd指定用來調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先級(jí)。還可從處理集群陣列230接收處理任務(wù)??蛇x地,tmd可包括控制將tmd添加到處理任務(wù)列表(或指向處理任務(wù)的指針的列表)的頭部還是尾部的參數(shù),從而提供除執(zhí)行優(yōu)先級(jí)以外的另一級(jí)別的控制。
有利地,ppu202實(shí)現(xiàn)基于處理集群陣列230的高度并行處理架構(gòu),該陣列230包括c個(gè)通用處理集群(gpc)208,其中c≥1。每個(gè)gpc208能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個(gè)線程是程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的gpc208用于處理不同類型的程序或用于實(shí)施不同類型的計(jì)算。gpc208的分配可以取決于因每種類型的程序或計(jì)算所產(chǎn)生的工作量而變化。
存儲(chǔ)器接口214包括一組d個(gè)分區(qū)單元215,其中d≥1。每個(gè)分區(qū)單元215耦連到駐留在ppm存儲(chǔ)器204內(nèi)的一個(gè)或多個(gè)動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(drams)220。在一個(gè)實(shí)施例中,分區(qū)單元215的數(shù)目等于dram220的數(shù)目,并且每個(gè)分區(qū)單元215耦連到不同的dram220。在其他實(shí)施例中,分區(qū)單元215的數(shù)目也可以不等于dram220的數(shù)目。本領(lǐng)域的普通技術(shù)人員應(yīng)該理解dram220可以用任何其他技術(shù)上合適的存儲(chǔ)設(shè)備來替代。在操作中,諸如紋理映射或幀緩沖區(qū)的各種渲染目標(biāo)可以跨dram220加以存儲(chǔ),這允許分區(qū)單元215并行寫入每個(gè)渲染目標(biāo)的各部分以有效地使用pp存儲(chǔ)器204的可用帶寬。
給定的gpc208可以處理要被寫到pp存儲(chǔ)器204內(nèi)的任何dram220的數(shù)據(jù)。交叉開關(guān)單元210配置為路由每個(gè)gpc208的輸出到任何分區(qū)單元215的輸入或到任何其他gpc208用于進(jìn)一步處理。gpc208經(jīng)由交叉開關(guān)單元210與存儲(chǔ)器接口214通信,以對(duì)各種drams220進(jìn)行讀取或?qū)懭?。在一個(gè)實(shí)施例中,除了經(jīng)由存儲(chǔ)器接口214連接到pp存儲(chǔ)器204外,交叉開關(guān)單元210還具有到i/o單元205的連接,從而使得在不同gpc208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲(chǔ)器104或?qū)τ趐pu202而言非本地的其他存儲(chǔ)器通信。在圖2的實(shí)施例中,交叉開關(guān)單元210直接與i/o單元205連接。在各種實(shí)施例中,交叉開關(guān)單元210可使用虛擬信道來分開gpc208與分區(qū)單元215之間的業(yè)務(wù)流。
另外,gpc208可被編程以執(zhí)行與種類繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過濾、建模操作(例如,應(yīng)用物理定律以確定對(duì)象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分(tessellation)著色器、頂點(diǎn)著色器、幾何著色器、和/或像素/片段著色器程序)、通用計(jì)算操作等等。在操作中,ppu202被配置為將數(shù)據(jù)從系統(tǒng)存儲(chǔ)器104和/或pp存儲(chǔ)器204轉(zhuǎn)移到一個(gè)或多個(gè)片上存儲(chǔ)器單元中,處理該數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫回到系統(tǒng)存儲(chǔ)器104和/或pp存儲(chǔ)器204。然后,該結(jié)果數(shù)據(jù)可以由其他系統(tǒng)部件訪問,所述其他系統(tǒng)部件包括cpu102、并行處理子系統(tǒng)112內(nèi)的另一個(gè)ppu202、或計(jì)算機(jī)系統(tǒng)100內(nèi)的另一個(gè)并行處理子系統(tǒng)112。
如上所示,在并行處理子系統(tǒng)112中可以包括任何數(shù)目的ppu202。例如,可在單個(gè)插卡上提供多個(gè)ppu202、或可將多個(gè)插卡連接到通信路徑113、或可將一個(gè)或多個(gè)ppu202集成到橋式芯片中。在多ppu系統(tǒng)中的ppu202可以彼此同樣或不同。例如,不同的ppu202可能具有不同數(shù)目的處理內(nèi)核和/或不同容量(amount)的pp存儲(chǔ)器204。在存在多個(gè)ppu202的實(shí)現(xiàn)方案中,可并行操作那些ppu從而以高于單個(gè)ppu202所可能達(dá)到的吞吐量來處理數(shù)據(jù)。包含一個(gè)或多個(gè)ppu202的系統(tǒng)可以以各種配置和形式因素來實(shí)現(xiàn),包括但不限于臺(tái)式電腦、筆記本電腦、手持式個(gè)人計(jì)算機(jī)或其他手持設(shè)備、服務(wù)器、工作站、游戲控制臺(tái)、嵌入式系統(tǒng)等等。
圖3a為根據(jù)本發(fā)明的一個(gè)實(shí)施例的圖2的ppu202中所包括的gpc208的框圖。在操作中,gpc208可以被配置為并行地執(zhí)行大量線程以實(shí)施圖形、一般處理和/或計(jì)算操作。如本發(fā)明所使用的,“線程”是指在特定的一組輸入數(shù)據(jù)上執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,單指令、多數(shù)據(jù)(simd)指令發(fā)出技術(shù)用于在不提供多個(gè)獨(dú)立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實(shí)施例中,單指令、多線程(simt)技術(shù)用于使用配置為向gpc208內(nèi)的處理引擎集發(fā)出指令的公共指令單元來支持大量一般來說同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的simd執(zhí)行機(jī)制,simt執(zhí)行通過給定程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員應(yīng)該理解simd處理機(jī)制代表simt處理機(jī)制的功能子集。
經(jīng)由將從任務(wù)/工作單元207內(nèi)的工作分布單元(未示出)接收的處理任務(wù)分布到一個(gè)或多個(gè)流多處理器(sm)310的管線管理器305來控制gpc208的操作。管線管理器305還可配置為通過為由sm310所輸出的處理數(shù)據(jù)指定目的地來控制工作分布交叉開關(guān)330。
在一個(gè)實(shí)施例中,gpc208包括一組m個(gè)sm310,其中m≥1。另外,每個(gè)sm310包括一組功能執(zhí)行單元(未示出),例如執(zhí)行單元和加載-存儲(chǔ)單元。特定于任何功能執(zhí)行單元的處理操作可以被管線化,這使得能夠在前一個(gè)指令已經(jīng)完成執(zhí)行之前執(zhí)行將發(fā)出的新指令。可提供給定sm310內(nèi)的功能執(zhí)行單元的任何組合。在各種實(shí)施例中,功能執(zhí)行單元可配置為支持各種各樣不同的操作,包括整數(shù)和浮點(diǎn)運(yùn)算(例如加法和乘法)、比較操作、布爾操作(and、or、xor)、移位和各種代數(shù)函數(shù)的計(jì)算(例如平面插值和三角函數(shù)、指數(shù)函數(shù)和對(duì)數(shù)函數(shù)等等)。有利地,相同功能執(zhí)行單元可配置為實(shí)施不同的操作。
在操作中,每個(gè)sm310配置為處理一個(gè)或多個(gè)線程組。如本文所使用的,“線程組”或“線程束(warp)”是指對(duì)不同輸入數(shù)據(jù)并發(fā)執(zhí)行相同程序的一組線程,所述組的一個(gè)線程被指派到sm310內(nèi)的不同執(zhí)行單元。線程組可以包括比sm310內(nèi)的處理執(zhí)行單元少的線程,在這種情況下一些執(zhí)行單元可在該線程組正在被處理的周期期間處于閑置狀態(tài)。線程組還可以包括比sm310內(nèi)的執(zhí)行單元數(shù)目多的線程,在這種情況下處理可在連續(xù)的時(shí)鐘周期內(nèi)發(fā)生。因?yàn)槊總€(gè)sm310可以并發(fā)支持多達(dá)g個(gè)線程組,結(jié)果是在任何給定時(shí)間在gpc208中可以執(zhí)行多達(dá)g*m個(gè)線程組。
此外,多個(gè)相關(guān)線程組可以在sm310內(nèi)同時(shí)活動(dòng)(在執(zhí)行的不同階段)。該線程組集合在本文中稱為“協(xié)作線程陣列”(“cta”)或“線程陣列”。特定cta的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數(shù)目,其通常是sm310內(nèi)的執(zhí)行單元數(shù)目的整數(shù)倍,以及m是sm310內(nèi)同時(shí)活動(dòng)的線程組的數(shù)目。
雖然在圖3a中未示出,但是每個(gè)sm310包含一級(jí)(l1)高速緩存或使用sm310外部的相應(yīng)l1高速緩存中的空間以另外支持由執(zhí)行單元實(shí)施的加載和存儲(chǔ)操作。每個(gè)sm310都還有權(quán)訪問在ppu202中的所有g(shù)pc208之間共享的二級(jí)(l2)高速緩存(未示出)。l2高速緩存可以用于在線程之間傳輸數(shù)據(jù)。最后,sm310還有權(quán)訪問片外“全局”存儲(chǔ)器,所述“全局”存儲(chǔ)器可以包括pp存儲(chǔ)器204和/或系統(tǒng)存儲(chǔ)器104。應(yīng)該理解,ppu202外部的任何存儲(chǔ)器可用作全局存儲(chǔ)器。此外,如圖3a所示,一點(diǎn)五級(jí)(l1.5)高速緩存335可以包括在gpc208內(nèi),其配置為接收并保持由sm310經(jīng)由存儲(chǔ)器接口214從存儲(chǔ)器所請(qǐng)求的數(shù)據(jù)。這樣的數(shù)據(jù)可以包括但不限于指令、一致(uniform)數(shù)據(jù)和常數(shù)數(shù)據(jù)。在gpc208中具有多個(gè)sm310的實(shí)施例中,sm310可有利地共享高速緩存在l1.5高速緩存335中的公共指令和數(shù)據(jù)。
每個(gè)gpc208可以具有配置為將虛擬地址映射到物理地址的相關(guān)聯(lián)的存儲(chǔ)器管理單元(mmu)320。在各種實(shí)施例中,mmu320可以駐留在gpc208內(nèi)或存儲(chǔ)器接口214內(nèi)。mmu320包括用于將虛擬地址映射到像素塊(tile)或存儲(chǔ)頁面的物理地址的頁表?xiàng)l目(pte)集和可選地包括高速緩存行索引。mmu320可以包括地址轉(zhuǎn)譯后備緩沖區(qū)(tlb)或可以駐留在sm310或一個(gè)或多個(gè)l1高速緩存或gpc208內(nèi)的高速緩存。
在圖形和計(jì)算應(yīng)用中,gpc208可配置為使得每個(gè)sm310耦連到用于實(shí)施紋理映射操作諸如確定紋理樣本位置、讀取紋理數(shù)據(jù)以及過濾紋理數(shù)據(jù)的紋理單元315。
在操作中,為了將所處理的任務(wù)提供給另一個(gè)gpc208用于進(jìn)一步處理或?yàn)榱私?jīng)由交叉開關(guān)單元210將所處理的任務(wù)存儲(chǔ)在l2高速緩存(未示出)、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中,每個(gè)sm310將所處理的任務(wù)傳送到工作分布交叉開關(guān)330。另外,預(yù)光柵操作(prerop)單元325配置為從sm310接收數(shù)據(jù)、將數(shù)據(jù)引導(dǎo)到分區(qū)單元215內(nèi)的一個(gè)或多個(gè)光柵操作(rop)單元以及針對(duì)顏色混合實(shí)施優(yōu)化、組織像素顏色數(shù)據(jù)和實(shí)施地址轉(zhuǎn)譯。
應(yīng)該理解本文所述的內(nèi)核架構(gòu)是示例性的并且變化和修改都是可能的。此外,任何數(shù)目的處理單元例如sm310、紋理單元315,或prerop325可以包括在gpc208內(nèi)。進(jìn)一步地,如上結(jié)合圖2所述,ppu202可以包括任何數(shù)目的gpc208,所述gpc208配置為在功能上彼此相似以使得執(zhí)行行為不取決于哪個(gè)gpc208接收特定處理任務(wù)。進(jìn)一步地,每個(gè)gpc208獨(dú)立于ppu202中的其他gpc208操作以為一個(gè)或多個(gè)應(yīng)用程序執(zhí)行任務(wù)。鑒于上述內(nèi)容,本領(lǐng)域普通技術(shù)人員將理解的是,圖1-3a中描述的架構(gòu)絕不限制本發(fā)明的范圍。
圖形管線架構(gòu)
圖3b是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、可在圖2的ppu202內(nèi)實(shí)現(xiàn)的圖形處理管線350的概念圖。如圖所示,圖形處理管線350包括但不限于基元分配器(pd)355;頂點(diǎn)屬性獲取單元(vaf)360;頂點(diǎn)、曲面細(xì)分、幾何處理單元(vtg)365;視口縮放、剔除和裁剪單元(vpc)370;分塊單元(tilingunit)375、設(shè)置單元(設(shè)置)380、光柵化器(光柵)385;片段處理單元,也被識(shí)別為像素著色單元(ps)390、以及光柵操作單元(rop)395。
pd355從前端212收集與高階表面、圖形基元等相關(guān)聯(lián)的頂點(diǎn)數(shù)據(jù),并將頂點(diǎn)數(shù)據(jù)傳送到vaf360。
vaf360從共享存儲(chǔ)器檢索與每個(gè)輸入頂點(diǎn)相關(guān)聯(lián)的頂點(diǎn)屬性,并將頂點(diǎn)數(shù)據(jù)連同相關(guān)聯(lián)的頂點(diǎn)屬性存儲(chǔ)在共享存儲(chǔ)器中。
vtg365是被配置為執(zhí)行頂點(diǎn)著色器程序、曲面細(xì)分程序和幾何程序的可編程執(zhí)行單元。這些程序處理從vaf360接收的頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性,并且產(chǎn)生圖形基元,以及圖形基元的每個(gè)頂點(diǎn)處的顏色值、表面法線向量和透明度值,用于在圖形處理管線350內(nèi)進(jìn)一步處理。雖然未明確示出,但是在一些實(shí)施例中,vtg365可以包括頂點(diǎn)處理單元、曲面細(xì)分初始化處理單元、任務(wù)生成單元、任務(wù)分布器、拓?fù)渖蓡卧?、曲面?xì)分處理單元和幾何處理單元中的一個(gè)或多個(gè)。
頂點(diǎn)處理單元是可編程執(zhí)行單元,其配置為執(zhí)行頂點(diǎn)著色器程序,按頂點(diǎn)著色器程序所指定的來照明和變換頂點(diǎn)數(shù)據(jù)。例如,頂點(diǎn)處理單元可被編程以將頂點(diǎn)數(shù)據(jù)從基于對(duì)象的坐標(biāo)表示(對(duì)象空間)變換到可替代地基于諸如世界空間或規(guī)格化設(shè)備坐標(biāo)(ndc)空間的坐標(biāo)系。頂點(diǎn)處理單元可讀取由vaf所存儲(chǔ)在共享存儲(chǔ)器中的頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性,并且可以處理頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性。頂點(diǎn)處理單元415將處理后的頂點(diǎn)存儲(chǔ)在共享存儲(chǔ)器中。
曲面細(xì)分初始化處理單元是可編程執(zhí)行單元,其配置為執(zhí)行曲面細(xì)分初始化著色器程序。曲面細(xì)分初始化處理單元處理由頂點(diǎn)處理單元產(chǎn)生的頂點(diǎn),并生成稱為補(bǔ)丁的圖形基元。曲面細(xì)分初始化處理單元還生成各種補(bǔ)丁屬性。然后,曲面細(xì)分初始化處理單元將補(bǔ)丁數(shù)據(jù)和補(bǔ)丁屬性存儲(chǔ)在共享存儲(chǔ)器中。在一些實(shí)施例中,曲面細(xì)分初始化著色器程序可被稱為外殼著色器或曲面細(xì)分控制著色器。
任務(wù)生成單元從共享存儲(chǔ)器檢索頂點(diǎn)和補(bǔ)丁的數(shù)據(jù)和屬性。任務(wù)生成單元生成用于處理頂點(diǎn)和補(bǔ)丁以便由圖形處理管線350中的后續(xù)級(jí)(stage)進(jìn)行處理的任務(wù)。
任務(wù)分布器重新分布由任務(wù)生成單元產(chǎn)生的任務(wù)。由頂點(diǎn)著色器程序和曲面細(xì)分初始化程序的各種實(shí)例產(chǎn)生的任務(wù)可在一個(gè)圖形處理管線350與另一個(gè)之間顯著變化。任務(wù)分布器重新分布這些任務(wù),使得每個(gè)圖形處理管線350在后續(xù)的管線級(jí)期間具有大致相同的工作負(fù)載。
拓?fù)渖蓡卧獧z索由任務(wù)分布器分布的任務(wù)。拓?fù)渖蓡卧獙?duì)頂點(diǎn)進(jìn)行索引,包括與補(bǔ)丁相關(guān)聯(lián)的頂點(diǎn),并且計(jì)算用于曲面細(xì)分頂點(diǎn)的(u,v)坐標(biāo)以及連接曲面細(xì)分的頂點(diǎn)的索引,以形成圖形基元。拓?fù)渖蓡卧S后將索引的頂點(diǎn)存儲(chǔ)在共享存儲(chǔ)器中。
曲面細(xì)分處理單元是可編程執(zhí)行單元,其配置為執(zhí)行曲面細(xì)分著色器程序。曲面細(xì)分處理單元從共享存儲(chǔ)器讀取輸入數(shù)據(jù)并將輸出數(shù)據(jù)寫入共享存儲(chǔ)器。共享存儲(chǔ)器中的該輸出數(shù)據(jù)被傳遞到下一個(gè)著色器級(jí),幾何處理單元445作為輸入數(shù)據(jù)。在一些實(shí)施例中,曲面細(xì)分著色器程序可稱為域著色器或曲面細(xì)分評(píng)估著色器。
幾何處理單元是可編程執(zhí)行單元,其配置為執(zhí)行幾何著色器程序,從而變換圖形基元。將頂點(diǎn)分組以構(gòu)造用于處理的圖形基元,圖形基元包括三角形、線段、點(diǎn)等等。例如,幾何處理單元可被編程以將圖形基元細(xì)分成一個(gè)或多個(gè)新圖形基元并計(jì)算用來將新圖形基元光柵化的參數(shù),諸如平面方程系數(shù)。
幾何處理單元將指定新圖形基元的參數(shù)和頂點(diǎn)傳送到vpc370。幾何處理單元可以讀取存儲(chǔ)在共享存儲(chǔ)器中的數(shù)據(jù),以用于在處理幾何數(shù)據(jù)中使用。vpc370實(shí)施裁剪、剔除、透視校正和視口變換,以確定哪些圖形基元在最終渲染圖像中是潛在可見的,哪些圖形基元不是潛在可見的。然后,vpc370將處理后的圖形基元傳輸?shù)椒謮K單元375。
分塊單元375是圖形基元分類引擎,其駐留在世界空間管線352和屏幕空間管線354之間,如本發(fā)明進(jìn)一步描述的。圖形基元在世界空間管線352中被處理,然后被傳送到分塊單元375。屏幕空間被劃分為高速緩存像素塊,其中每個(gè)高速緩存像素塊與屏幕空間的一部分相關(guān)聯(lián)。對(duì)于每一圖形基元,分塊單元375識(shí)別與圖形基元相交的高速緩存像素塊集合,本文中稱為“分塊(tiling)”的過程。在分塊一定數(shù)量的圖形基元之后,分塊單元375在高速緩存像素塊基礎(chǔ)上處理圖形基元,其中與特定高速緩存像素塊相關(guān)聯(lián)的圖形基元被傳送到設(shè)置單元380。分塊單元375一次一個(gè)高速緩存像素塊地將圖形基元傳輸?shù)皆O(shè)置單元380。與多個(gè)高速緩存像素塊相交的圖形基元通常在世界空間管線352中被處理一次,但是隨后被多次傳送到屏幕空間管線354。
這樣的技術(shù)改善了在屏幕空間管線354的處理期間高速緩存存儲(chǔ)器局部性,其中與第一高速緩存像素塊相關(guān)聯(lián)的多個(gè)存儲(chǔ)器操作訪問l2高速緩存的區(qū)域或任何其他技術(shù)上可行的高速緩存存儲(chǔ)器,其在第一高速緩存像素塊的屏幕空間處理期間可保持駐留。一旦與第一高速緩存像素塊相關(guān)聯(lián)的圖形基元由屏幕空間管線354處理,則可以刷新(flush)與第一高速緩存像素塊相關(guān)聯(lián)的l2高速緩存的部分,并且分塊單元可傳送與第二高速緩存像素塊相關(guān)聯(lián)的圖形基元。然后,與第二高速緩存像素塊相關(guān)聯(lián)的多個(gè)存儲(chǔ)器操作可以訪問在第二高速緩存像素塊的屏幕空間處理期間可以保持駐留的l2高速緩存的區(qū)域。因此,可以減少到l2高速緩存和渲染目標(biāo)的總體存儲(chǔ)器流量。在一些實(shí)施例中,對(duì)于給定圖形基元執(zhí)行一次世界空間計(jì)算,而不管與圖形基元相交的屏幕空間中的高速緩存像素塊的數(shù)量。
設(shè)置單元380經(jīng)由分塊單元375從vpc370接收頂點(diǎn)數(shù)據(jù),并計(jì)算與圖形基元相關(guān)聯(lián)的參數(shù),包括但不限于邊緣方程、局部平面方程和深度平面方程。然后,設(shè)置單元380將經(jīng)處理的圖形基元傳送到光柵化器385。
光柵化器385掃描轉(zhuǎn)換新的圖形基元并將片段和覆蓋數(shù)據(jù)傳送到像素著色單元390。另外,光柵化器385可配置為實(shí)施z剔除(z-culling)和其他基于z的優(yōu)化。
像素著色單元390是可編程執(zhí)行單元,如片段著色器程序所指定的,其配置為執(zhí)行片段著色器程序、從光柵化器385接收的變換片段。片段著色器程序可以以像素級(jí)粒度著色片段,其中這樣的著色器程序可稱為像素著色器程序??商娲?,片段著色器程序可以以樣本級(jí)粒度著色片段,其中每個(gè)像素包括多個(gè)樣本,并且每個(gè)樣本表示像素的一部分??商娲兀沃鞒绦蚩梢砸匀魏纹渌夹g(shù)上可行的粒度來對(duì)片段進(jìn)行著色,這取決于所編程的采樣率。
在各種實(shí)施例中,片段處理單元460可經(jīng)編程以實(shí)施例如透視校正、紋理映射、陰影、混合等的操作,以產(chǎn)生傳送到rop395的經(jīng)著色的片段。像素著色單元390可以讀取存儲(chǔ)在共享存儲(chǔ)器中的數(shù)據(jù)。
rop395是處理單元,其實(shí)施諸如模板(stencil)、z測(cè)試、混合等的光柵操作,并且經(jīng)由存儲(chǔ)器接口214傳輸像素?cái)?shù)據(jù)作為經(jīng)處理的圖形數(shù)據(jù)用以存儲(chǔ)在圖形存儲(chǔ)器中,其中圖形存儲(chǔ)器通常被構(gòu)造為一個(gè)或多個(gè)渲染目標(biāo)。經(jīng)處理的圖形數(shù)據(jù)可以存儲(chǔ)在圖形存儲(chǔ)器、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中,用于在顯示設(shè)備110上顯示或用于由cpu102或并行處理子系統(tǒng)112進(jìn)一步處理。在一些實(shí)施例中,rop395配置為壓縮寫入存儲(chǔ)器的z或顏色數(shù)據(jù)以及解壓縮存儲(chǔ)器讀取的z或顏色數(shù)據(jù)。在各種實(shí)施例中,rop395可以位于存儲(chǔ)器接口214中、位于gpc208中、位于gpc外部的處理集群陣列230中、或位于ppu202內(nèi)的單獨(dú)單元(未示出)中。
圖形處理管線可以由ppu202內(nèi)的任何一個(gè)或多個(gè)處理元件來實(shí)現(xiàn)。例如,圖3a的sm310中的一個(gè)可配置為實(shí)施vtg365和像素著色單元390中的一個(gè)或多個(gè)功能。pd355、vaf360、vpc450、分塊單元375、設(shè)置單元380、光柵化器385和rop395的功能也可以結(jié)合相應(yīng)的分區(qū)單元215,通過特定gpc208內(nèi)的處理元件實(shí)施。可替代地,可用上文列出功能中的一個(gè)或多個(gè)專用固定功能處理元件來實(shí)施圖形處理管線350。在各種實(shí)施例中,ppu202可配置為實(shí)現(xiàn)一個(gè)或多個(gè)圖形處理管線350。
在一些實(shí)施例中,圖形處理管線350可以被劃分為世界空間管線352和屏幕空間管線354。世界空間管線352處理3d空間中的圖形對(duì)象,其中每個(gè)圖形對(duì)象的位置相對(duì)于其他圖形對(duì)象和相對(duì)于3d坐標(biāo)系是已知的。屏幕空間管線354處理已經(jīng)從3d坐標(biāo)系投影到表示顯示設(shè)備110表面的2d平面上的圖形對(duì)象。例如,世界空間管線352可包括從pd355到vpc370的圖形處理管線350中的管線級(jí)。屏幕空間管線354可包括從設(shè)置單元380到rop395的圖形處理管線350中的管線級(jí)。分塊單元375將跟隨世界空間管線352的最后級(jí),即vpc370。分塊單元375在屏幕空間管線354的第一級(jí),即設(shè)置單元380之前。
如下文結(jié)合圖5-13更詳細(xì)地描述的,分塊單元375可包括多通道單元,其經(jīng)配置以為通過屏幕空間管線354的多個(gè)通道緩沖圖形基元數(shù)據(jù)。圖形基元數(shù)據(jù)可包括標(biāo)識(shí)存儲(chǔ)器中的不同圖形基元的圖形基元或基元索引。多通道單元可以基于由設(shè)備驅(qū)動(dòng)器103提供的狀態(tài)束,不同地為每個(gè)通道配置屏幕空間管線354。以這種方式,設(shè)備驅(qū)動(dòng)器103和多通道單元交互操作以協(xié)調(diào)通過屏幕空間管線354的多個(gè)通道。如下文結(jié)合圖5-13更詳細(xì)地描述的,使用該方法,可以改進(jìn)某些類型的渲染場(chǎng)景。
在一些實(shí)施例中,世界空間管線352可進(jìn)一步分為α(alpha)階段管線和β(beta)階段管線。例如,α階段管線可包括圖形處理管線350中從pd355到任務(wù)生成單元的管線級(jí)。β階段管線可包括圖形處理管線350中從拓?fù)渖蓡卧絭pc370的管線級(jí)。圖形處理管線350在α階段管線的處理期間實(shí)施第一組操作,以及在β階段管線的處理期間實(shí)施第二組操作。如本文所用的,一組操作被定義為由單個(gè)線程、線程組或者一致地工作的多個(gè)線程組執(zhí)行的一個(gè)或多個(gè)指令。
在具有多個(gè)圖形處理管線350的系統(tǒng)中,可以劃分與一組圖形對(duì)象相關(guān)聯(lián)的頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性,使得每個(gè)圖形處理管線350在α階段中具有大致相同的工作量。α階段處理可以顯著地?cái)U(kuò)展頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性的量,使得由任務(wù)生成單元產(chǎn)生的頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性的量顯著大于由pd355和vaf360處理的頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性的量。此外,即使兩個(gè)圖形處理管線350在α階段管線的開始時(shí)處理相同數(shù)量的屬性,與一個(gè)圖形處理管線350相關(guān)聯(lián)的任務(wù)生成單元,與和另一圖形處理管線350相關(guān)聯(lián)的任務(wù)生成單元相比,可產(chǎn)生明顯更大量的頂點(diǎn)數(shù)據(jù)和頂點(diǎn)屬性。在這種情況下,任務(wù)分布器重新分布由α階段管線產(chǎn)生的屬性,使得每個(gè)圖形處理管線350在β階段管線的開始時(shí)具有大致相同的工作負(fù)荷。
如本文所用的,對(duì)共享存儲(chǔ)器的引用可包括任何一個(gè)或多個(gè)技術(shù)上可行的存儲(chǔ)器,包括但不限于由一個(gè)或多個(gè)sm310共享的本地存儲(chǔ)器,或者可經(jīng)由存儲(chǔ)器接口214訪問的存儲(chǔ)器,諸如高速緩存存儲(chǔ)器、并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104。還如本文所用的,對(duì)高速緩存存儲(chǔ)器的引用可包括任何一個(gè)或多個(gè)技術(shù)上可行的存儲(chǔ)器,包括但不限于l1高速緩存、l1.5高速緩存和l2高速緩存。
分塊的高速緩存
圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖3b的圖形處理管線350可經(jīng)配置以生成和處理的高速緩存像素塊410(0)的概念圖。如圖所示,高速緩存像素塊410(0)表示屏幕空間400的一部分,并且被劃分為多個(gè)光柵像素塊420。
屏幕空間400表示配置為存儲(chǔ)經(jīng)渲染的圖像數(shù)據(jù)和由圖形處理管線350內(nèi)的功能單元傳輸?shù)钠渌麛?shù)據(jù)的一個(gè)或多個(gè)存儲(chǔ)緩沖器。在一些實(shí)施例中,一個(gè)或多個(gè)存儲(chǔ)器緩沖器可配置為一個(gè)或多個(gè)渲染目標(biāo)。屏幕空間表示配置為存儲(chǔ)由圖形處理管線渲染的圖像的存儲(chǔ)器緩沖器。屏幕空間400可以與任何數(shù)目的渲染目標(biāo)相關(guān)聯(lián),其中每個(gè)渲染目標(biāo)可以配置為獨(dú)立于其他渲染目標(biāo)以包括任何數(shù)量的字段。渲染目標(biāo)內(nèi)的每個(gè)字段可以配置為獨(dú)立于其他字段以包括任何數(shù)目的位。每個(gè)渲染目標(biāo)可以包括多個(gè)圖像元素(像素),并且每個(gè)像素又可以包括多個(gè)樣本。在一些實(shí)施例中,每個(gè)高速緩存像素塊的大小可以基于與屏幕空間相關(guān)聯(lián)的渲染目標(biāo)的大小和配置。在操作中,一旦渲染完成,可以將一個(gè)或多個(gè)渲染目標(biāo)中的像素傳送到顯示設(shè)備,以顯示渲染的圖像。
作為示例,用于屏幕空間400的一組渲染目標(biāo)可以包括八個(gè)渲染目標(biāo)。第一渲染目標(biāo)可以包括表示顏色的四個(gè)字段,包括紅色、綠色和藍(lán)色組成色,以及與相應(yīng)片段相關(guān)聯(lián)的透明度信息。第二渲染目標(biāo)可以包括表示與相應(yīng)片段相關(guān)聯(lián)的深度和模板信息的兩個(gè)字段。第三渲染目標(biāo)可以包括表示表面法線向量信息的三個(gè)字段,該表面法線向量包括與相應(yīng)片段相關(guān)聯(lián)的x軸法線向量、y軸法線向量和z軸法線向量。剩余的五個(gè)渲染目標(biāo)可配置為存儲(chǔ)與相應(yīng)片段相關(guān)聯(lián)的附加信息。這樣的配置可以包括用于各種信息的存儲(chǔ),所述各種信息包括但不限于3d位置數(shù)據(jù)、漫射照明信息和鏡面照明信息。
每個(gè)高速緩存像素塊410代表屏幕空間400的一部分。為了清楚起見,在圖4中僅示出了五個(gè)高速緩存像素塊410(0)-410(4)。在一些實(shí)施例中,高速緩存像素塊可以在x和y屏幕空間中具有任意大小。例如,如果高速緩存像素塊將駐留在也用于存儲(chǔ)其他數(shù)據(jù)的高速緩存存儲(chǔ)器中,則高速緩存像素塊可以被調(diào)整大小以僅消耗高速緩存存儲(chǔ)器的特定部分。高速緩存像素塊的大小可以基于多個(gè)因素,包括與屏幕空間400相關(guān)聯(lián)的渲染目標(biāo)的數(shù)目和配置、每個(gè)像素的樣本數(shù)量,以及存儲(chǔ)在高速緩存像素塊中的數(shù)據(jù)是否被壓縮。作為一般情況,高速緩存像素塊的大小被設(shè)置為增加高速緩存像素塊數(shù)據(jù)保持駐留在高速緩存存儲(chǔ)器中的可能性,直到與高速緩存像素塊相關(guān)聯(lián)的所有圖形基元被完全處理。
光柵像素塊420代表高速緩存像素塊410(0)的一部分。如圖所示,高速緩存像素塊410(0)包括以四個(gè)光柵像素塊420為寬和四個(gè)光柵像素塊420為高的陣列布置的十六個(gè)光柵像素塊420(0)-420(15)。在包括多個(gè)gpc208的系統(tǒng)中,與給定高速緩存像素塊410(0)相關(guān)聯(lián)的處理可在可用gpc208之間進(jìn)行劃分。在所示的示例中,如果高速緩存像素塊410(0)的十六個(gè)光柵像素塊由四個(gè)不同的gpc208處理,則每個(gè)gpc208可以被指派以處理高速緩存像素塊410(0)的十六個(gè)光柵像素塊420中的四個(gè)。具體地,第一gpc208可以被指派以處理光柵像素塊420(0)、420(7)、420(10)和420(13)。第二gpc208可以被指派以處理光柵像素塊420(1)、420(4)、420(11)和420(14)。第三gpc208可以被指派以處理光柵像素塊420(2)、420(5)、420(8)和420(15)。然后第四gpc208將被指派以處理光柵像素塊420(3)、420(6)、420(9)和420(12)。在其它實(shí)施例中,給定高速緩存像素塊內(nèi)的不同光柵像素塊的處理可以以任何技術(shù)上可行的方式分布在gpc208或計(jì)算機(jī)系統(tǒng)100內(nèi)包括的任何其它處理實(shí)體中。
多通道渲染技術(shù)
圖5示出根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖3b的圖形處理管線的一部分,其經(jīng)配置以在多通道中處理基元數(shù)據(jù)。如圖所示,部分500包括駐留在屏幕空間管線354上部的多通道(mp)單元510。mp單元510可駐留在圖3b中所示的分塊單元375內(nèi)。mp單元510耦連到被配置為存儲(chǔ)基元數(shù)據(jù)和狀態(tài)束的緩沖器520。存儲(chǔ)在緩沖器520中的數(shù)據(jù)通常與一個(gè)或多個(gè)高速緩存像素塊相對(duì)應(yīng)。在一個(gè)實(shí)施例中,緩沖器520是隨機(jī)存取存儲(chǔ)器(ram)單元。緩沖器520包括基元數(shù)據(jù)pd0至pdn,如圖所示。如下面更詳細(xì)地描述的,緩沖器520中的每個(gè)基元數(shù)據(jù)包括圖形基元或圖形基元索引和基元掩碼。緩沖器520還包括狀態(tài)束sb0至sbm,如圖所示。緩沖器520中的每個(gè)狀態(tài)束包括一個(gè)或多個(gè)狀態(tài)設(shè)置和狀態(tài)掩碼,如下所述。
mp單元510經(jīng)配置以實(shí)施緩沖器520的一個(gè)或多個(gè)遍歷,以便在穿過屏幕空間管線354的一個(gè)或多個(gè)相應(yīng)通道中處理其中存儲(chǔ)的一些或所有基元數(shù)據(jù)。對(duì)于每個(gè)這樣的通道,mp單元510基于緩沖器520中的特定狀態(tài)束來配置屏幕空間管線354。因此,屏幕空間管線354可以針對(duì)每個(gè)不同的通道而不同地配置。另外,對(duì)于每一不同通道,mp單元510可將從緩沖器520提取的圖形基元的不同子集傳送到屏幕空間管線354用于處理。
mp單元510包括通道掩碼512,其指示待實(shí)施的通道數(shù)目和當(dāng)前的通道號(hào)。通道掩碼512中的位的數(shù)目反映要實(shí)施的通道的數(shù)目。通道掩碼512的每個(gè)位相應(yīng)于不同的通道號(hào)。當(dāng)mp單元510實(shí)施具有具體通道號(hào)的特定通道時(shí),通道掩碼512中的相應(yīng)位被設(shè)置為1。例如,通道掩碼512可以是4位掩碼,指示將實(shí)施的四個(gè)通道。4位通道掩碼的每個(gè)不同位將對(duì)應(yīng)于不同的通道號(hào)。因此,0001的通道掩碼將指示當(dāng)前的通道是通道0,或者,可替代地,通道掩碼0100將指示當(dāng)前通道是通道2。當(dāng)遍歷緩沖器520時(shí),mp單元510依賴于通道掩碼512以便濾出與當(dāng)前通道相關(guān)的基元數(shù)據(jù)和狀態(tài)束。
如上所述,存儲(chǔ)在緩沖器520中的每個(gè)基元數(shù)據(jù),諸如pd0或pd1,包括圖形基元或圖形基元索引以及基元掩碼。基元掩碼指示通過屏幕空間管線354的特定通道,在此期間應(yīng)處理圖形基元?;诖a通常具有與通道掩碼512相等的大小。返回到上述示例,當(dāng)mp單元510配置為實(shí)施四通道并且因此依賴于4位通道掩碼512時(shí),各種基元數(shù)據(jù)內(nèi)的每個(gè)基元掩碼同樣將是4位掩碼。基元掩碼的每個(gè)位將指示相關(guān)聯(lián)的圖形基元是否應(yīng)在相應(yīng)的通道號(hào)期間被處理。例如,基元掩碼0011將指示應(yīng)在通道0和通道1期間而不是在通道2和通道3期間處理圖形基元。
如上所述,存儲(chǔ)在緩沖器520中的每個(gè)狀態(tài)束,諸如sb0或sb1,包括一個(gè)或多個(gè)狀態(tài)設(shè)置和狀態(tài)掩碼。每個(gè)狀態(tài)設(shè)置通常反映屏幕空間管線354的特定狀態(tài)的配置。例如,屏幕空間管線354的狀態(tài)通常可以反映要使用的深度函數(shù),并且該狀態(tài)的狀態(tài)設(shè)置可以是要由rop395執(zhí)行的特定深度函數(shù)。另一狀態(tài)可以是深度緩沖器狀態(tài),并且相應(yīng)的狀態(tài)設(shè)置可以反映深度緩沖器被禁用。本領(lǐng)域技術(shù)人員將理解的是,“狀態(tài)”是意在捕獲屏幕空間管線354的一般可配置特征的寬泛術(shù)語,并且“狀態(tài)設(shè)置”表示該特征的特定配置。
給定狀態(tài)束內(nèi)的狀態(tài)掩碼指示基于該狀態(tài)束內(nèi)的狀態(tài)設(shè)置應(yīng)當(dāng)實(shí)施的、通過屏幕空間管線354的特定通道。狀態(tài)掩碼通常具有與通道掩碼512相同的大小。返回到上述示例,當(dāng)mp單元510配置為實(shí)施四通道并且因此依賴于4位通道掩碼512時(shí),不同狀態(tài)束內(nèi)的每個(gè)狀態(tài)掩碼將同樣是4位掩碼。給定狀態(tài)掩碼的每個(gè)位指示相關(guān)聯(lián)的狀態(tài)設(shè)置是否應(yīng)當(dāng)用于在相應(yīng)的通道號(hào)期間配置屏幕空間管線354。例如,狀態(tài)掩碼0101將指示與該掩碼相關(guān)聯(lián)的狀態(tài)設(shè)置應(yīng)當(dāng)在通道0和2而不是在通道1和3期間被使用以配置屏幕空間管線354。每個(gè)狀態(tài)束通常包括一個(gè)狀態(tài)掩碼和任何數(shù)目的不同狀態(tài)設(shè)置。與特定通道相關(guān)聯(lián)的基元和狀態(tài)設(shè)置可被稱為駐留在與特定通道相應(yīng)的“桶(bucket)”內(nèi)。在操作中,mp單元510可以在處理特定通道時(shí)過濾出用于放置到桶中的基元和狀態(tài)設(shè)置。
在一個(gè)實(shí)施例中,以上述方式,對(duì)于每個(gè)通道實(shí)現(xiàn)的狀態(tài)設(shè)置與通道掩碼的每個(gè)位不具有一對(duì)一的關(guān)系。具體地,當(dāng)設(shè)備驅(qū)動(dòng)器103配置通道掩碼時(shí),設(shè)備驅(qū)動(dòng)器103還可以指派每個(gè)通道處理哪個(gè)狀態(tài)桶。例如,當(dāng)配置為兩個(gè)通道時(shí),mp單元510可以對(duì)于通道0指定桶1,并且對(duì)于通道1使用狀態(tài)桶0。可以應(yīng)用這種類型的間接,使得可以使用狀態(tài)桶0建立“穩(wěn)態(tài)”處理,然后可以使用狀態(tài)桶1建立特殊的“預(yù)處理”。然后,mp單元510可以使用狀態(tài)桶1(預(yù)處理狀態(tài))、然后是狀態(tài)桶0(穩(wěn)態(tài)處理)實(shí)施兩個(gè)通道。
在操作中,對(duì)于給定通過屏幕空間管線354的通道,mp單元510生成通道數(shù)據(jù)530,該通道數(shù)據(jù)530包括將用于針對(duì)當(dāng)前通道配置屏幕空間管線354的狀態(tài)設(shè)置540,以及在當(dāng)前通道期間進(jìn)行處理的基元550。然后,mp單元510可以基于狀態(tài)設(shè)置540配置屏幕空間管線354,然后使用經(jīng)配置的屏幕空間管線354處理基元550。對(duì)于隨后的通道,mp單元510可以實(shí)施類似的操作。然而,由于通道掩碼512基于當(dāng)前通道號(hào)而不同,因此,從緩沖器520提取的用于后續(xù)通道的特定狀態(tài)設(shè)置540和基元550與前一個(gè)通道相比可以不同。使用此方法,圖形處理管線350能夠多次處理基元數(shù)據(jù)且采用屏幕空間管線354的不同配置,而不需要多次從存儲(chǔ)器獲取圖形基元。在各種實(shí)施例中,圖形處理管線350可多次從l2高速緩存獲取圖形基元,而不需要多次從系統(tǒng)存儲(chǔ)器獲取那些基元。
圖1所示的設(shè)備驅(qū)動(dòng)器103通常配置為管理mp單元510的整體操作。這樣做時(shí),設(shè)備驅(qū)動(dòng)器103可以用基元數(shù)據(jù)和狀態(tài)束填充緩沖器520,使得能夠?qū)嵤└行У匿秩绢愋?。此功能可減輕應(yīng)用程序開發(fā)人員的編程負(fù)擔(dān)。例如,設(shè)備驅(qū)動(dòng)器103可配置mp單元510以實(shí)施緩沖器520的兩個(gè)通道。在通道0中,設(shè)備驅(qū)動(dòng)器103將配置mp單元510以實(shí)現(xiàn)僅z(z-only)通道。在該通道期間,mp單元510可實(shí)施深度測(cè)試并確定哪些圖形基元應(yīng)當(dāng)被著色。在通道1中,設(shè)備驅(qū)動(dòng)器103將配置mp單元510以實(shí)現(xiàn)z+顏色(z+color)通道。在該通道期間,如果需要,mp單元510將實(shí)施z操作,然后還實(shí)施顏色著色。使用這種方法,可以提高渲染效率,特別是在從后到前渲染的情況下。特別地,被前景基元遮擋的背景基元在第二通道中不會(huì)被遮蔽。此外,當(dāng)實(shí)施附加通道時(shí),將不需要從存儲(chǔ)器獲取圖形基元,因?yàn)槟切┗獙⒃诰彌_器520內(nèi)緩沖。下面結(jié)合圖6a-6h,通過舉例的方式,描述到目前為止所描述的技術(shù)。
圖6a-6h是根據(jù)本發(fā)明的一個(gè)實(shí)施例的圖5的多通道(mp)單元如何生成用于配置圖3b的屏幕空間管線的通道數(shù)據(jù)的示例性說明。圖6a-6h中的每一個(gè)示出了與四個(gè)示例性通道中的一個(gè)相關(guān)聯(lián)的示例性數(shù)據(jù),示例性通道是由兩個(gè)示例性高速緩存像素塊中的一個(gè)實(shí)施的。具體來說,圖6a示出在高速緩存像素塊0的通道0中處理的數(shù)據(jù)。圖6b示出了在高速緩存像素塊0的通道1中處理的數(shù)據(jù)。圖6c示出了在高速緩存像素塊0的通道2中處理的數(shù)據(jù)。圖6d示出了在高速緩存像素塊0的通道3中處理的數(shù)據(jù)。圖6e示出了在高速緩存像素塊1的通道0中處理的數(shù)據(jù)。圖6f示出了在高速緩存像素塊1的通道1中處理的數(shù)據(jù)。圖6g示出了在高速緩存像素塊1的通道2中處理的數(shù)據(jù)。圖6h示出了在高速緩存像素塊1的通道3中處理的數(shù)據(jù)。
如圖6a-6h中的每一個(gè)所示,緩沖器520包括根據(jù)api順序設(shè)置在緩沖器520內(nèi)的基元掩碼(pm)612、狀態(tài)掩碼(sm)614、各種基元和各種狀態(tài)設(shè)置。同樣,如圖所示,各種狀態(tài)設(shè)置s0、s1、s2、s3、s4、s5和s6應(yīng)用于屏幕空間管線354之前。在結(jié)合這些圖描述的示例中,這些狀態(tài)設(shè)置的修改版本示為諸如s0'、s0”、s0”'。
每個(gè)pm612與基元的子集相關(guān)聯(lián),每個(gè)sm614與狀態(tài)設(shè)置的子集相關(guān)聯(lián)。例如,pm612(0)與基元p0相關(guān)聯(lián)。sm614(0)與狀態(tài)設(shè)置s0'和s1'相關(guān)聯(lián),而狀態(tài)設(shè)置s0'和s1'再次反映狀態(tài)設(shè)置s0和s1的修改版本。每個(gè)基元通常與最新的基元掩碼相關(guān)聯(lián)。例如,基元p1與pm612(0)相關(guān)聯(lián)。每組狀態(tài)設(shè)置和相關(guān)聯(lián)的狀態(tài)掩碼可形成狀態(tài)束,例如圖5所示的各種sb。例如,sm614(1)和狀態(tài)設(shè)置s2'、s3'和s4'可以形成狀態(tài)束。
通常,給定狀態(tài)束的狀態(tài)掩碼指示與相關(guān)聯(lián)狀態(tài)設(shè)置相關(guān)的特定通道。同樣,與特定基元子集相關(guān)聯(lián)的基元掩碼指示期間應(yīng)當(dāng)處理該基元子集的通道。例如,sm614(0)指示適用于所有通道的狀態(tài)設(shè)置s1'和s0',因?yàn)閟m614(0)具有設(shè)置為1的所有位。同樣,pm612(0)指示應(yīng)在所有通道中處理的基元p0,因?yàn)閜m612(0)具有設(shè)置為1的所有位。
圖6a-6h中的每一個(gè)還示出了不同的管線數(shù)據(jù)600和更改狀態(tài)(dirtystate)610。特定管線數(shù)據(jù)600指示對(duì)于特定高速緩存像素塊的特定通道,傳送到屏幕空間管線354的特定基元和狀態(tài)設(shè)置。每個(gè)更改狀態(tài)610示出了在完成當(dāng)前通道之后發(fā)送的狀態(tài)設(shè)置,以便為給定高速緩存像素塊的隨后通道做準(zhǔn)備?,F(xiàn)在將各自描述圖6a-6h。
如圖6a所示,管線數(shù)據(jù)600(0-0)包括結(jié)合實(shí)施高速緩存像素塊0的通道0而發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(0-0)還示出了更改位,其被設(shè)置以便跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(0-0)中,修改的狀態(tài)設(shè)置s0'、s1'、s2'、s3'和s4'被發(fā)送,因此這些改變被記錄在相應(yīng)的更改位中。當(dāng)完成高速緩存像素塊0的通道0時(shí),mp單元510傳送包括狀態(tài)設(shè)置s0、s1、s2、s3和s4的更改狀態(tài)610(0-0),以便為高速緩存像素塊0的通道1準(zhǔn)備屏幕空間管線354。
如圖6b所示,管線數(shù)據(jù)600(0-1)包括結(jié)合實(shí)施高速緩存像素塊0的通道1而發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(0-1)還示出了更改位,其被設(shè)置以便跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(0-1)中,狀態(tài)設(shè)置s0、s1、s2、s3和s4被修改為s0'、s1'、s2'、s3'和s4',并且這些改變被記錄在相應(yīng)的更改位中。由于在s2'、s3'和s4'之后沒有發(fā)送基元,所以該狀態(tài)不會(huì)被發(fā)送到屏幕空間管線354。相反,更新的狀態(tài)保持在存儲(chǔ)器中,直到發(fā)送下一個(gè)基元或者通道結(jié)束。當(dāng)完成高速緩存像素塊0的通道1時(shí),mp單元510傳送包括狀態(tài)設(shè)置s0、s1、s2、s3和s4的更改狀態(tài)610(0-1),以便為高速緩存像素塊0的通道2準(zhǔn)備屏幕空間管線354。
如圖6c所示,管線數(shù)據(jù)600(0-2)包括結(jié)合實(shí)施高速緩存像素塊0的通道2而發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(0-2)還示出了更改位,其被設(shè)置以跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(0-2)中,修改的狀態(tài)設(shè)置s0'、s1'、s4”和s5'被發(fā)送,因此這些改變被記錄在相應(yīng)的更改位中。狀態(tài)設(shè)置s2被發(fā)送,因?yàn)楦奈蝗匀槐辉O(shè)置;然而,狀態(tài)設(shè)置s2在通道2中沒有改變,因此發(fā)送的最后值是s2(不是s2')。在一個(gè)實(shí)施例中,mp單元510實(shí)現(xiàn)過濾機(jī)制,以在相關(guān)聯(lián)的值沒有改變時(shí)過濾狀態(tài)設(shè)置。因此,盡管在通道3的準(zhǔn)備期間s2被發(fā)送出mp單元510,但是過濾機(jī)制防止s2再次發(fā)送到屏幕空間管線354,因?yàn)樵撝禌]有改變。當(dāng)完成高速緩存像素塊0的通道2時(shí),mp單元510傳送包括狀態(tài)設(shè)置s0、s1、s2、s3、s4和s5的更改狀態(tài)610(0-2),以便為緩存像素塊0的通道3準(zhǔn)備屏幕空間管線354。
如圖6d所示,管線數(shù)據(jù)600(0-3)包括結(jié)合實(shí)施高速緩存像素塊0的通道3而發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(0-3)還示出了更改位,其被設(shè)置以便跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(0-3)中,修改的狀態(tài)設(shè)置s0'、s1'、s4”、s5'、s6'和s1”被發(fā)送,因此這些改變被記錄在相應(yīng)的更改位中。當(dāng)完成高速緩存像素塊0的通道3時(shí),mp單元510傳送包括狀態(tài)設(shè)置s0、s1、s2、s3、s4、s5和s6的更改狀態(tài)610(0-3),以便為高速緩存像素塊1的通道0準(zhǔn)備屏幕空間管線354。當(dāng)應(yīng)用上述過濾機(jī)制時(shí),狀態(tài)設(shè)置s2和s3將被過濾并且不會(huì)被發(fā)送到屏幕空間管線354,因?yàn)檫@些設(shè)置沒有被更新為先前通道的一部分。
如圖6e所示,管線數(shù)據(jù)600(1-0)包括結(jié)合實(shí)施高速緩存像素塊1的通道0而發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(1-0)還示出了更改位,其被設(shè)置以便跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(1-0)中,修改的狀態(tài)設(shè)置s0'、s1'、s2'、s3'和s4'被發(fā)送,因此這些改變被記錄在相應(yīng)的更改位中。當(dāng)完成高速緩存像素塊1的通道0時(shí),mp單元510傳送包括狀態(tài)設(shè)置s0、s1、s2、s3、s4、s5和s6的更改狀態(tài)610(1-0),以便為高速緩存像素塊1的通道1準(zhǔn)備屏幕空間管線354。當(dāng)應(yīng)用上述過濾機(jī)制時(shí),狀態(tài)設(shè)置s5和s6將被過濾,并且不會(huì)被發(fā)送到屏幕空間管線354,因?yàn)檫@些設(shè)置沒有更新為先前通道的一部分。
如圖6f所示,管線數(shù)據(jù)600(1-1)包括結(jié)合實(shí)施高速緩存像素塊1的通道1而發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(1-1)還示出了更改位,其被設(shè)置以便跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(1-1)中,修改的狀態(tài)設(shè)置s0'、s1'、s2'、s3'和s4'被發(fā)送,因此這些改變被記錄在相應(yīng)的更改位中。當(dāng)完成高速緩存像素塊1的通道1時(shí),mp單元510傳送包括狀態(tài)設(shè)置s0、s1、s2、s3、s4、s5和s6的更改狀態(tài)610(1-1),以便為高速緩存像素塊1的通道2準(zhǔn)備屏幕空間管線354。當(dāng)應(yīng)用上述的過濾機(jī)制時(shí),狀態(tài)設(shè)置s5和s6將被過濾并且不會(huì)被發(fā)送到屏幕空間管線354,因?yàn)檫@些設(shè)置沒有被更新為先前通道的一部分。
如圖6g所示,管線數(shù)據(jù)600(1-2)包括結(jié)合實(shí)施高速緩存像素塊1的通道2發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(1-2)還示出了更改位,其被設(shè)置以便跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(1-2)中,修改的狀態(tài)設(shè)置s0'、s1'、s4”和s5'被發(fā)送,因此這些改變被記錄在相應(yīng)的更改位中。當(dāng)完成高速緩存像素塊1的通道2時(shí),mp單元510傳送包括狀態(tài)設(shè)置s0、s1、s2、s3、s4、s5和s6的更改狀態(tài)610(1-2),以便為高速緩存像素塊1的通道3準(zhǔn)備屏幕空間管線354。當(dāng)應(yīng)用上述過濾機(jī)制時(shí),狀態(tài)設(shè)置s2、s3和s6將被過濾并且不被發(fā)送到屏幕空間管線354,因?yàn)檫@些設(shè)置沒有被更新為先前通道的一部分。
如圖6h所示,管線數(shù)據(jù)600(1-3)包括結(jié)合高速緩存像素塊1的通道3發(fā)送到屏幕空間管線354的數(shù)據(jù)。管線數(shù)據(jù)600(1-3)還示出了更改位,其被設(shè)置以便跟蹤哪些狀態(tài)設(shè)置偏離了先前配置的值。在管線數(shù)據(jù)600(1-3)中,修改的狀態(tài)設(shè)置s0'、s1'、s4”、s5'、s6'和s1”被發(fā)送,因此這些改變被記錄在相應(yīng)的更改位中。在最后一個(gè)高速緩存像素塊的最后一個(gè)通道結(jié)束時(shí),針對(duì)具有相關(guān)聯(lián)的狀態(tài)掩碼集的所有位的任何狀態(tài)設(shè)置,更改位可以被清除。在該示例中,在高速緩存像素塊1的通道3后,更改位將是0x7e(十六進(jìn)制),這意味著對(duì)于所有四個(gè)通道而言,s1、s2、s3、s4、s5和s6不具有相同的值,在隨后的重演(replay)中必須設(shè)置每個(gè)通道的值。四個(gè)通道中的每一個(gè)的起始值示于圖6h中。
以這種方式,mp單元510跟蹤哪些狀態(tài)設(shè)置在通道之間改變,然后在需要時(shí)僅傳送更新的狀態(tài)設(shè)置。這種方法可以增加屏幕空間管線354的吞吐量,因?yàn)樵谕ǖ乐g需要更少的配置。至此在圖6a-6h中描述的技術(shù)也分別結(jié)合圖7和8以分步方式描述。
圖7是根據(jù)本發(fā)明的一個(gè)實(shí)施例的用于在圖形處理管線內(nèi)實(shí)施多通道的方法步驟的流程圖。雖然結(jié)合圖1-6b的系統(tǒng)描述了方法步驟,但是本領(lǐng)域技術(shù)人員將理解的是,經(jīng)配置以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
如圖所示,方法700開始于步驟702,其中mp單元510發(fā)起緩沖器520的處理。這樣做時(shí),mp單元510開始遍歷存儲(chǔ)在緩沖器520中的數(shù)據(jù)并接收基元數(shù)據(jù)和狀態(tài)束。在步驟704中,mp單元510確定是否接收到基元數(shù)據(jù)?;獢?shù)據(jù)通常包括與圖形基元相關(guān)聯(lián)的數(shù)據(jù)或索引,以及指示基元應(yīng)當(dāng)在哪些通道中被處理的通道的基元掩碼。如果在步驟704中沒有接收到基元數(shù)據(jù),則方法700進(jìn)行到如下所述的步驟710。否則,方法700進(jìn)行到步驟706。
在步驟706中,mp單元510將通道掩碼512與包括在基元數(shù)據(jù)中的基元掩碼進(jìn)行比較,以確定是否應(yīng)當(dāng)在當(dāng)前通道中處理相關(guān)聯(lián)的圖形基元。如果比較指示不應(yīng)在當(dāng)前通道中處理圖形基元,則方法700進(jìn)行到如下所述的步驟710。否則,方法700進(jìn)行到步驟708。在步驟708中,mp單元510包括與當(dāng)前通道的通道數(shù)據(jù)630中的基元數(shù)據(jù)相關(guān)聯(lián)的基元。然后,方法700進(jìn)行到步驟710。
在步驟710中,mp單元510確定是否接收到狀態(tài)束。狀態(tài)束通常包括一個(gè)或多個(gè)狀態(tài)設(shè)置和狀態(tài)掩碼,所述狀態(tài)掩碼指示應(yīng)根據(jù)那些一個(gè)或多個(gè)狀態(tài)設(shè)置來配置哪些通道。如果在步驟710沒有接收到狀態(tài)束,則該方法進(jìn)行到如下所述的步驟716。如果mp單元510確定在步驟710中接收到狀態(tài)束,則方法700進(jìn)行到步驟712。
在步驟712中,mp單元510將通道掩碼512與包括在狀態(tài)束中的狀態(tài)掩碼進(jìn)行比較,以確定包括在狀態(tài)束中的一個(gè)或多個(gè)狀態(tài)設(shè)置是否應(yīng)當(dāng)用于為當(dāng)前通道配置屏幕空間管線354。如果比較指示不應(yīng)基于那些狀態(tài)設(shè)置來配置屏幕空間管線354,則所述方法進(jìn)行到如下所述的步驟716。否則,方法700進(jìn)行到步驟714。在步驟714中,mp單元510包括用于當(dāng)前通道的通道數(shù)據(jù)630中的一個(gè)或多個(gè)狀態(tài)設(shè)置。然后,方法700進(jìn)行到步驟716。
在步驟716中,mp單元510確定緩沖器520的遍歷是否完成。如果遍歷完成,則方法700結(jié)束。否則,方法700返回到步驟702,并繼續(xù)處理緩沖器520。
對(duì)于通過屏幕空間管線的每個(gè)通道,方法700可以被實(shí)施一次或多次。結(jié)合實(shí)施方法700,mp單元510還可實(shí)施用于跟蹤哪些狀態(tài)設(shè)置需要被重新發(fā)送以用于后續(xù)通道的其他技術(shù),如下文結(jié)合圖8更詳細(xì)地描述的。
圖8是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于跨多通道保持圖形處理管線的狀態(tài)的方法步驟的流程圖。雖然結(jié)合圖1-6b的系統(tǒng)描述了方法步驟,但本領(lǐng)域技術(shù)人員將理解的是,經(jīng)配置以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)都在本發(fā)明的范圍內(nèi)。
如圖所示,方法800開始于步驟802,其中mp單元510開始處理緩沖器520。在步驟804中,mp單元510確定是否從緩沖器520接收到任何狀態(tài)設(shè)置。如果沒有接收到狀態(tài)設(shè)置,則方法800進(jìn)行到步驟816,其中mp單元510確定附加數(shù)據(jù)是否駐留在緩沖器520中。如果實(shí)際上有更多數(shù)據(jù)包括在緩沖器520中,則方法800返回到步驟802。
如果在步驟804中,從緩沖器520接收到狀態(tài)設(shè)置,則方法800進(jìn)行到步驟806,其中mp單元510確定分塊的高速緩存是否是激活(active)的。如果分塊的高速緩存未激活,則方法800跳過步驟808和810,并進(jìn)行到步驟812。否則,方法800進(jìn)行到步驟808,其中mp單元510確定是否正在重演最后一個(gè)高速緩存像素塊。如果最后一個(gè)高速緩存像素塊沒有被重演,則方法800進(jìn)行到步驟818。否則,方法800進(jìn)行到步驟810。在步驟810中,mp單元510確定是否正在重演間隔的最后一個(gè)通道。如果最后一個(gè)通道未被重演,則方法800進(jìn)行到步驟818。否則,方法800進(jìn)行到步驟812。在步驟812中,mp單元510確定狀態(tài)掩碼是否針對(duì)所有通道使能狀態(tài)。如果事實(shí)上狀態(tài)掩碼確實(shí)針對(duì)所有通道使能狀態(tài),則方法800進(jìn)行到步驟814。在步驟814中,mp單元510針對(duì)受影響狀態(tài)清除更改位。在步驟812中,如果狀態(tài)掩碼沒有針對(duì)所有通道使能狀態(tài),則方法800進(jìn)行到步驟818,其中對(duì)于受影響的狀態(tài)設(shè)置更改位。然后,該方法進(jìn)行到步驟816,并如上所述進(jìn)行。當(dāng)在緩沖器520中沒有發(fā)現(xiàn)附加數(shù)據(jù)時(shí),方法800完成。
mp單元510可實(shí)施方法800以便跟蹤哪些狀態(tài)設(shè)置在通道之間改變。mp單元510可因此操作,以將屏幕空間管線354的總體狀態(tài)恢復(fù)到每一單獨(dú)通道所需的初始狀態(tài)。使用此方法,mp單元510可通過避免重新配置屏幕空間管線354來節(jié)省資源,除非需要。至止描述的技術(shù)還可以適于對(duì)緩沖器520的部分實(shí)施多通道,然后對(duì)緩沖器520的其他部分實(shí)施多通道。該方法對(duì)于涉及修改z緩沖器的透明層的某些圖形場(chǎng)景可能是有價(jià)值的,如下結(jié)合圖9-11更詳細(xì)地描述的。
跨多間隔邊界的多通道渲染
圖9是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖5的mp單元如何配置圖3b的屏幕空間管線以實(shí)施多通道的概念圖。在本文所討論的示例中,mp單元510配置為實(shí)施兩個(gè)通道。
如圖所示,mp單元510配置為處理緩沖器920。緩沖器920通常類似于圖5-6b所示的緩沖器520。然而,與緩沖器520相比,緩沖器920被不同地組織,并且包括不同的數(shù)據(jù)。具體地,緩沖器920被劃分為間隔數(shù)據(jù)900(0)和900(1)。間隔數(shù)據(jù)900(0)位于間隔邊界b0和b1之間。間隔數(shù)據(jù)900(1)位于間隔邊界b1和b2之間。每個(gè)間隔數(shù)據(jù)900包括具有2位基元掩碼的基元數(shù)據(jù)和具有2位狀態(tài)掩碼的狀態(tài)束,如圖所示。
對(duì)于每組間隔數(shù)據(jù)900,mp單元510利用一個(gè)或多個(gè)通道處理所包括的基元數(shù)據(jù)和狀態(tài)設(shè)置,以生成通道數(shù)據(jù)930。通道數(shù)據(jù)930包括源自緩沖器520的基元和狀態(tài)設(shè)置。每個(gè)不同的通道數(shù)據(jù)組930與不同的間隔和不同的通道相關(guān)聯(lián)。對(duì)于給定的間隔和給定的通道,屏幕空間管線354以與上面結(jié)合圖6a-6h所描述的相同的方式、基于相應(yīng)的狀態(tài)設(shè)置處理相關(guān)聯(lián)的通道數(shù)據(jù)中的基元。對(duì)于每個(gè)間隔,由mp單元510實(shí)施的通道的每一個(gè)會(huì)在下面描述。
對(duì)于間隔0、通道0,mp單元510生成包括基元p0和p1以及狀態(tài)設(shè)置s0的通道數(shù)據(jù)930(00)。這樣做時(shí),mp單元510解析來自邊界b0和b1之間的、適用于通道0的基元和狀態(tài)設(shè)置。然后,mp單元510可以基于所提取的狀態(tài)設(shè)置來配置屏幕空間管線354,并使配置的屏幕空間管線354處理所提取的基元。
對(duì)于間隔0、通道1,mp單元510生成包括基元p0和p1以及狀態(tài)設(shè)置s1的通道數(shù)據(jù)930(01)。這樣做時(shí),mp單元510解析來自邊界b0和b1之間的、適用于通道1的基元和狀態(tài)設(shè)置。然后,mp單元510可以基于所提取的狀態(tài)設(shè)置配置屏幕空間管線354,并使配置的屏幕空間管線354處理提取的基元。
當(dāng)完成間隔0的通道1時(shí),mp單元510可接著進(jìn)行到間隔1并處理間隔數(shù)據(jù)900(1)。然而,這樣做之前,mp單元510將屏幕空間管線354的狀態(tài)設(shè)置恢復(fù)為通道0所需的狀態(tài)設(shè)置。mp單元510可依賴于上文結(jié)合圖6a-6h所述的類似方法來恢復(fù)那些設(shè)置。一旦屏幕空間管線354為通道0被配置,mp單元510可接著進(jìn)行到間隔1。
對(duì)于間隔1、通道0,mp單元510生成包括基元p2和狀態(tài)設(shè)置s0的通道數(shù)據(jù)930(10)。這樣做時(shí),mp單元510解析邊界b1和b2之間的、適用于通道0的基元和狀態(tài)設(shè)置。然后,mp單元510可以基于所提取的狀態(tài)設(shè)置來配置屏幕空間管線354,并使配置的屏幕空間管線354處理提取的基元。
對(duì)于間隔1、通道1,mp單元510生成包括基元p2和狀態(tài)設(shè)置s1的通道數(shù)據(jù)930(11)。這樣做時(shí),mp單元510解析邊界b1和b2之間的、適用于通道1的基元和狀態(tài)設(shè)置。然后,mp單元510可以基于所提取的狀態(tài)設(shè)置來配置屏幕空間管線354,并使配置的屏幕空間管線354處理提取的基元。
當(dāng)完成間隔1的通道1時(shí),mp單元510可接著移動(dòng)到后續(xù)的像素塊,且因此處理緩沖器920內(nèi)的不同基元數(shù)據(jù)和狀態(tài)設(shè)置。然而,這樣做之前,mp單元510在像素塊的開始處將屏幕空間管線354的狀態(tài)設(shè)置恢復(fù)到通道0所需的狀態(tài)設(shè)置。mp單元510可依賴于與上文結(jié)合圖6a到圖6h所描述的方法類似的方法來恢復(fù)那些設(shè)置。具體來說,mp單元510可維持更改位,所述更改位指示在準(zhǔn)備新像素塊時(shí)需要重新發(fā)送哪些狀態(tài)設(shè)置。一旦屏幕空間管線354被配置用于下一個(gè)像素塊,則mp單元510可接著進(jìn)行到該像素塊的間隔0、通道0。
本文描述的方法可適用于涉及復(fù)雜透明度層的圖形場(chǎng)景,以便在移動(dòng)到其它層的處理之前使某些層的處理完成。下面結(jié)合圖10更詳細(xì)地描述可有效應(yīng)用本文所描述技術(shù)的示例性圖形場(chǎng)景。
圖10是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、由圖5的mp單元實(shí)施的操作如何可以提高渲染的效率和準(zhǔn)確度的概念圖。具體來說,mp單元510經(jīng)配置以將特定基元集的渲染分離為不同間隔,以便支持那些基元的適當(dāng)渲染。該功能可以在各種不同的渲染情況下實(shí)現(xiàn)。下面描述一個(gè)這樣的示例性情況。在該示例中,當(dāng)多個(gè)不透明和透明層被一起渲染時(shí),mp單元510將基元的渲染分離。
如圖所示,圖形場(chǎng)景1000包括幾何圖形的層1010、1020和1030。層1010是不透明層,其包括由p1表示的一組不透明基元,層1020是透明層,其包括由p2表示的一組透明基元,層1030是不透明層,其包括由p3表示的一組不透明基元。圖形場(chǎng)景1000的層內(nèi)的基元以應(yīng)用編程接口(api)順序從觀看位置1040被渲染。首先層1010的基元p1被渲染,再次層1020的基元p2被渲染,最后層1030的基元p3被渲染。在本文討論的示例性場(chǎng)景中,層1020內(nèi)的基元p2的渲染涉及更新z。
如果層1020的基元p2將與層1010的基元p1在相同間隔中一起被渲染,則基元p2可能被不正確地渲染。具體地,因?yàn)榛猵2的渲染涉及更新z,并且那些基元從位置1040的視角遮擋一些基元p1,所以層1010中被遮擋的基元不會(huì)被渲染。因此,基元p2將不會(huì)混合在層1010的被遮擋的基元內(nèi)。因此,盡管層1020是透明的,并且應(yīng)當(dāng)顯示與層1010混合的一定程度,但是這種混合將不存在。
然而,為了避免諸如這樣的問題,設(shè)備驅(qū)動(dòng)器103配置mp單元510以將層1010、1020和1030的渲染分離成三個(gè)不同的間隔。因此,基元p1、p2和p3將受制于(subjectto)與那些不同間隔相關(guān)聯(lián)的不同z通道,并且層1010內(nèi)的被遮擋的基元不會(huì)為了層1020的基元而被舍棄。層1010中的基元p1將在第一間隔中被渲染,層1020中的基元p2將在第二間隔中被渲染,層1030中的基元p3將在第三間隔中被渲染。因此,當(dāng)在第二間隔中處理基元p2時(shí),屏幕空間管線354將渲染層1020內(nèi)的基元p2以示出與層1010內(nèi)的基元p1的適當(dāng)混合,因?yàn)榛猵1已在先前間隔中被渲染。
作為一般情況,設(shè)備驅(qū)動(dòng)器103可以檢測(cè)需要間隔的情況,然后相應(yīng)地配置mp單元510。這樣做時(shí),設(shè)備驅(qū)動(dòng)器103可以跟蹤由創(chuàng)建基元層的應(yīng)用所使用的狀態(tài),然后確定在涉及寫入z的透明層和不透明層之間那些層何時(shí)交替。然后,設(shè)備驅(qū)動(dòng)器103可以配置mp單元510以將透明層和不透明層分離成不同的間隔。在檢測(cè)透明層中,設(shè)備驅(qū)動(dòng)器103可檢查α混合透明度、確定片段著色器是否丟棄像素、識(shí)別z通道像素計(jì)數(shù)何時(shí)啟用,以及識(shí)別各種其它條件以確定可能需要的一個(gè)或多個(gè)間隔。
通過示例的方式在此描述的技術(shù)的優(yōu)勢(shì)是mp單元510不需要在不透明層和透明層之間清除緩沖器520以便保持適當(dāng)?shù)匿秩?。因此,圖形場(chǎng)景內(nèi)的基元可被深度分箱(bin),從而提高性能。本領(lǐng)域技術(shù)人員將理解的是,本文所討論的示例僅意味著傳達(dá)一種示例性情形,其中跨間隔分離基元的處理可能是有利的。作為一般情況,上面結(jié)合圖9描述的技術(shù)可以應(yīng)用于各種各樣的不同場(chǎng)景中以改善渲染。下面結(jié)合圖11以分步方式描述該技術(shù)。
圖11是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于配置圖形處理管線以在多個(gè)間隔中實(shí)施多通道的方法步驟的流程圖。雖然結(jié)合圖1-6b及9-10的系統(tǒng)描述了方法步驟,但本領(lǐng)域技術(shù)人員將理解的是,經(jīng)配置以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
如圖所示,方法1100開始于步驟1102,其中mp單元510發(fā)起緩沖器920的處理。緩沖器920包括基元數(shù)據(jù)和狀態(tài)束,類似于圖5的緩沖器520。如上結(jié)合圖9所述,緩沖器920還包括間隔邊界。在步驟1104中,mp單元510接收間隔邊界。在步驟1106中,基于間隔邊界,mp單元510確定通過屏幕空間管線354的、要實(shí)施的通道的數(shù)目。在步驟1108中,mp單元510為間隔中的每一個(gè)通道配置屏幕空間管線354,以處理所述間隔內(nèi)的圖形基元。在實(shí)施多通道時(shí),mp單元510依賴于結(jié)合圖6a-6h所描述的類似技術(shù)。
在步驟1110中,mp單元510確定是否完成當(dāng)前間隔。如果未完成該間隔,則方法1100返回到步驟1108。如果完成該間隔,意味著間隔中的所有基元已跨過所指示的通道數(shù)目而被處理,然后,所述方法繼續(xù)到步驟1112。
在步驟1112中,mp單元510將屏幕空間管線354返回到與最近的所完成的間隔的第一通道相關(guān)聯(lián)的初始狀態(tài)。這樣做為隨后的間隔做好管線準(zhǔn)備。在實(shí)施步驟1112時(shí),mp單元510可依賴更改位寄存器660。在步驟1114中,mp單元510確定是否完成當(dāng)前像素塊。如果尚未完成該像素塊,則方法1100返回到步驟1102,并繼續(xù)下一個(gè)間隔。否則,方法1100進(jìn)行到步驟1116。在步驟1116中,mp單元510將屏幕空間管線354返回到處理像素塊所需的初始狀態(tài)。當(dāng)實(shí)施步驟1114時(shí),mp單元510可依賴更改位寄存器660或用于跟蹤像素塊的初始狀態(tài)的另一組更改位。
本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到的是,方法1100可以分別結(jié)合上面結(jié)合圖7和8描述的方法700和800來實(shí)現(xiàn)。例如,可以應(yīng)用方法700中實(shí)施的技術(shù)來實(shí)施方法1100的步驟1108。同樣,可以應(yīng)用方法800中實(shí)施的技術(shù)來實(shí)施方法1100的步驟1112和/或1116。
上述多通道技術(shù)可在屏幕空間管線354內(nèi)的一些或全部硬件上實(shí)施。此外,一些通道可僅需要屏幕空間管線254的一部分,而其他通道可僅需要不同的部分。例如,可以在sm310上實(shí)施像素著色操作,而在rop395內(nèi)發(fā)生各種rop操作。為了實(shí)現(xiàn)這樣的并行處理,可以以下面結(jié)合圖12-13描述的類似方式來配置圖形處理管線350。
通道的并行執(zhí)行
圖12示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、經(jīng)配置以同時(shí)實(shí)施涉及不同高速緩存像素塊的不同通道的圖3b的屏幕空間管線的一部分。如圖所示,屏幕空間管線354包括設(shè)置380、光柵385、prop1205、zrop1210、先進(jìn)先出(fifo)1225和sm310。pro1205和zrop1210可以包括在圖3b的rop395內(nèi)。sm310配置為執(zhí)行像素著色器程序,并且因此可以實(shí)現(xiàn)也在圖3b中示出的ps390。prop1205經(jīng)由數(shù)據(jù)通路1215耦連到zrop1210。prop1205還經(jīng)由數(shù)據(jù)通路1220耦連到sm310。fifo1225駐留在數(shù)據(jù)通路1220內(nèi)。
屏幕空間管線354實(shí)現(xiàn)上文結(jié)合圖5-11所討論的多通道技術(shù),以對(duì)高速緩存像素塊實(shí)施不同的通道。某些類型的通道依賴于數(shù)據(jù)路徑1215,而其他類型的通道依賴于數(shù)據(jù)路徑1220。例如,對(duì)于涉及早期z工作的類型的通道,prop1205經(jīng)由數(shù)據(jù)路徑1215將像素塊數(shù)據(jù)發(fā)送到zrop1210用于處理。然而,對(duì)于涉及顏色著色的類型的通道,prop1205經(jīng)由數(shù)據(jù)通路1220將像素塊數(shù)據(jù)發(fā)送到sm310用于處理。
屏幕空間管線354可跨數(shù)據(jù)路徑1215和1220傳送不同的像素塊數(shù)據(jù),以分別由zrop1210和sm310同時(shí)處理,從而并行化某些類型的通道。例如,假設(shè)屏幕空間管線354經(jīng)配置以在高速緩存像素塊上實(shí)施兩個(gè)通道,僅z通道,隨后是顏色通道。prop1205可以接收像素塊1230,并且經(jīng)由路徑1215將該像素塊發(fā)送到zrop1210用于早期z通道。當(dāng)針對(duì)像素塊1230完成早期z處理時(shí),然后,prop1205將經(jīng)所處理的像素塊推送到fifo1225中。然后,prop1205可以接收像素塊1240,并且經(jīng)由路徑1215將該像素塊傳送到zrop1210,用于早期z通道。在zrop1210在像素塊1240上實(shí)施早期z通道的同時(shí),sm310可以使fifo1225流出(drain)并且對(duì)像素塊1230實(shí)施顏色通道。該功能可以通過同時(shí)利用多個(gè)數(shù)據(jù)路徑以提高屏幕空間管線354可以實(shí)施通道的速度,從而隱藏每個(gè)這樣的途徑潛在產(chǎn)生的延時(shí)。
一般來說,fifo1225經(jīng)調(diào)整大小以容納與整個(gè)高速緩存像素塊相關(guān)聯(lián)的所有數(shù)據(jù)包。因此,prop1205可以在fifo1225內(nèi)存儲(chǔ)所有像素塊1230,然后重新獲取足夠的存儲(chǔ)器資源以將像素塊1240的一些或全部傳送到zrop1210。如果缺少fifo1225,在隨后的像素塊由prop1205接收到之前,sm310可能不能接收給定像素塊的所有包。在上面討論的示例中,如果沒有fifo1225,prop1205可能不能將用于顏色通道的所有像素塊1230傳送到sm310。這可以背壓(backpressure)prop1205,并且因此像素塊1240的早期z處理將被中止,潛在地串行化屏幕空間管線254。然而,以所描述的方式實(shí)現(xiàn)fifo1225避免了這個(gè)問題,并且允許對(duì)不同的像素塊并行化不同的通道。本領(lǐng)域技術(shù)人員將理解的是,除了涉及以上文所述的示例方式所描述的特定硬件的方式之外,可以以本文所述的方式并行化各種其他類型的通道。
屏幕空間管線354還配置為與設(shè)備驅(qū)動(dòng)器103交互操作以基于每個(gè)通道配置sm310。具體地,設(shè)備驅(qū)動(dòng)器103可以配置在sm310上執(zhí)行的像素著色器,以根據(jù)當(dāng)前通道實(shí)施不同類型的著色操作。該功能可以提高多通道配置的效率,其中,在一個(gè)通道期間激活后期z,接著在隨后的通道中進(jìn)行顏色著色。在常規(guī)配置中,在執(zhí)行后期z操作時(shí),像素著色器時(shí)將實(shí)施顏色著色以計(jì)算可見性。然而,在多通道配置中,不需要實(shí)施顏色著色,直到實(shí)際的顏色著色通道。
因此,設(shè)備驅(qū)動(dòng)器103可以配置sm310以在后期z通道期間執(zhí)行僅計(jì)算可見性并且不實(shí)施全色著色的輕量級(jí)(lightweight)著色器程序。后期z通道可能只影響z剔除單元。然后,在隨后的顏色著色通道期間,設(shè)備驅(qū)動(dòng)器103可以使sm310實(shí)施全徑(full-bore)顏色著色。該方法通常可以應(yīng)用于使用z預(yù)通道和z剔除的組合來減少顏色著色。
設(shè)備驅(qū)動(dòng)器103將sm310配置為使用狀態(tài)束實(shí)施依賴通道的著色。設(shè)備驅(qū)動(dòng)器103可以向sm310傳送狀態(tài)束,其指示一個(gè)或多個(gè)通道以及與那些通道相關(guān)的配置數(shù)據(jù)。然后,sm310可以基于所包括的配置數(shù)據(jù)對(duì)所指示的通道實(shí)施某些操作。例如,設(shè)備驅(qū)動(dòng)器103可以傳送狀態(tài)束,其指示在第一通道期間,sm310應(yīng)當(dāng)僅計(jì)算可見性并避免實(shí)施重的顏色著色工作。然后,隨后的狀態(tài)束可指示sm310應(yīng)在第二通道期間執(zhí)行的特定的著色器程序。sm310經(jīng)配置以讀取所接收的狀態(tài)束內(nèi)的數(shù)據(jù),然后實(shí)施相關(guān)操作。在一個(gè)實(shí)施例中,設(shè)備驅(qū)動(dòng)器103向sm310傳送狀態(tài)束,其包括類似于上面結(jié)合圖5-11描述的狀態(tài)掩碼的狀態(tài)掩碼。所包括的狀態(tài)掩碼以先前描述的方式指示配置數(shù)據(jù)與哪些通路相關(guān)。
圖13是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于同時(shí)處理多個(gè)高速緩存像素塊的方法步驟的流程圖。雖然結(jié)合圖1-6h,9-10和12的系統(tǒng)描述了方法步驟,但是本領(lǐng)域技術(shù)人員將理解的是,經(jīng)配置以任何次序序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
如圖所示,方法1300開始于步驟1302,其中屏幕空間管線354接收為著色通道做好準(zhǔn)備的第一像素塊。屏幕空間管線354已經(jīng)使用zrop1210對(duì)第一像素塊實(shí)施之前的僅z通道。在步驟1304中,fifo1225緩沖第一像素塊。fifo1225通常被調(diào)整大小以容納整個(gè)高速緩存像素塊,從而消除了從prop1205存儲(chǔ)該像素塊的部分的負(fù)擔(dān)。在步驟1306中,prop1205接收為僅z通道做好準(zhǔn)備的第二像素塊。然后,prop1205可將第二像素塊傳送到zrop1210用于處理。在步驟1308中,sm310用第一像素塊執(zhí)行著色通道,同時(shí),zrop1210用第二像素塊執(zhí)行僅z通道。隨后方法1300結(jié)束。
屏幕空間管線1300可以實(shí)現(xiàn)方法1300,以并行化兩個(gè)另外的串行任務(wù),從而隱藏延時(shí)并加速像素塊的處理。上述技術(shù)也可以在其他情況中實(shí)現(xiàn)。作為一般情況,將屏幕空間管線354中的不同通道并行化的任何方法均落在本發(fā)明的范圍內(nèi)。
圖14是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于實(shí)施依賴通道的顏色著色的方法步驟的流程圖。雖然結(jié)合圖1-6h、9-10和12的系統(tǒng)描述了方法步驟,但是本領(lǐng)域技術(shù)人員將理解的是,經(jīng)配置以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
如圖所示,方法1400開始于步驟1402,其中sm310從設(shè)備驅(qū)動(dòng)器103接收第一狀態(tài)束,其包括用于第一通道的第一配置數(shù)據(jù)。第一狀態(tài)束可以包括狀態(tài)掩碼,其指示應(yīng)當(dāng)將第一配置數(shù)據(jù)應(yīng)用于第一通道。第一配置數(shù)據(jù)可以是諸如特殊值或程序代碼等等。第一通道可以包括與后期z模式相關(guān)聯(lián)的可見性計(jì)算。在步驟1404中,sm310基于用于第一通道的第一配置來用高速緩存像素塊執(zhí)行著色器程序。這樣做時(shí),sm310可以在不實(shí)施顏色著色的情況下針對(duì)高速緩存圖塊計(jì)算可見性數(shù)據(jù)。
在步驟1406中,sm310從設(shè)備驅(qū)動(dòng)器103接收第二狀態(tài)束,其包括用于第二通道的第二配置數(shù)據(jù)。第二狀態(tài)束可以包括狀態(tài)掩碼,其指示應(yīng)當(dāng)將第二配置數(shù)據(jù)應(yīng)用于第二通道。第二配置數(shù)據(jù)可以是諸如特殊值或程序代碼等等。第二通道可以包括與后期z模式相關(guān)聯(lián)的顏色著色操作。在步驟1408中,sm310基于第二通道的第二配置,用高速緩存像素塊執(zhí)行著色器程序。這樣做時(shí),sm310可以用高速緩存像素塊實(shí)施顏色著色操作。
上述技術(shù)可以被應(yīng)用,以在處理高速緩存像素塊時(shí),減少所需的顏色著色的量。具體地,方法1400可以被實(shí)現(xiàn),以在不需要顯著顏色著色的通道期間減少顏色著色操作,以及僅對(duì)涉及重的顏色著色操作的通道實(shí)施顯著的顏色著色操作。本領(lǐng)域技術(shù)人員將認(rèn)識(shí)到的是,分別結(jié)合圖13和圖14分別描述的方法1300和1400可以彼此結(jié)合實(shí)施,以進(jìn)一步提高屏幕空間管線354的效率。例如,方法1300可以被實(shí)現(xiàn),以提高第一和第二像素塊在跨那些涉及早期z工作的像素塊的第一和第二通道期間被處理的效率。然后,方法1400可以被應(yīng)用以提高第一和第二像素塊在涉及后期z工作的那些像素塊的第三和第四通道期間被處理的效率。
總而言之,多通道單元與設(shè)備驅(qū)動(dòng)器交互操作以配置屏幕空間管線,以用緩沖的圖形基元實(shí)施多個(gè)處理通道。多通道單元從設(shè)備驅(qū)動(dòng)器接收基元數(shù)據(jù)和狀態(tài)束。基元數(shù)據(jù)包括圖形基元和基元掩碼?;诖a指示特定的通道,在所述特定的通道期間圖形基元應(yīng)當(dāng)被處理。狀態(tài)束包括一個(gè)或多個(gè)狀態(tài)設(shè)置和狀態(tài)掩碼。狀態(tài)掩碼指示狀態(tài)設(shè)置應(yīng)當(dāng)被應(yīng)用的特定通道。對(duì)于給定的通道,多通道單元提取用于該通道的狀態(tài)設(shè)置,然后根據(jù)那些狀態(tài)設(shè)置來配置屏幕空間管線。多通道單元還提取在該通道中要處理的圖形基元。然后,多通道單元使配置的屏幕空間管線處理所提取的圖形基元。
本文所描述的技術(shù)的至少一個(gè)優(yōu)勢(shì)在于,屏幕空間管線可經(jīng)配置以采用經(jīng)緩沖的基元實(shí)施各種z通道,并且隨后采用那些相同的經(jīng)緩沖的基元實(shí)施顏色著色通道。因此,可以正確地渲染某些類型的圖形場(chǎng)景,而不需要從存儲(chǔ)器重新獲取圖形數(shù)據(jù)。這些技術(shù)可以減少功率消耗,并因此提高移動(dòng)設(shè)備的電池壽命。
已經(jīng)出于說明的目的給出了各種實(shí)施例的描述,但是這些描述并不旨在窮舉或限于所公開的實(shí)施例。在不脫離所描述的實(shí)施例的范圍和精神的情況下,許多修改和變化對(duì)于本領(lǐng)域的普通技術(shù)人員將是顯而易見的。
本實(shí)施例的各方面可以具體化為系統(tǒng)、方法或計(jì)算機(jī)程序產(chǎn)品。因此,本發(fā)明的各方面可以采取如下形式:完全硬件實(shí)施例、完全軟件實(shí)施例(包括固件、常駐軟件、微代碼等)或者結(jié)合軟件和硬件方面實(shí)施例,其在本文中可以全部統(tǒng)稱為“電路”、“模塊”或“系統(tǒng)”。進(jìn)一步,本發(fā)明的各方面可以采取計(jì)算機(jī)程序產(chǎn)品的形式,具體化在一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)中,其上具有計(jì)算機(jī)可讀程序代碼。
可以使用一個(gè)或多個(gè)計(jì)算機(jī)可讀介質(zhì)的任何組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是但不限于諸如電、磁、光、電磁、紅外或半導(dǎo)體系統(tǒng)、裝置或設(shè)備或前述的任何合適的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的示例(非窮舉列表)將包括以下:具有一個(gè)或多個(gè)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可擦除可編程只讀存儲(chǔ)器(eprom或閃存)、光纖、便攜式光盤只讀存儲(chǔ)器(cd-rom)、光存儲(chǔ)設(shè)備、磁存儲(chǔ)設(shè)備或前述的任何適當(dāng)組合。在本文的上下文中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何有形介質(zhì),其可以包含或存儲(chǔ)程序,用于由指令執(zhí)行系統(tǒng)、裝置或設(shè)備使用或與指令執(zhí)行系統(tǒng)、裝置或設(shè)備結(jié)合使用。
以上參考根據(jù)本發(fā)明的實(shí)施例的方法、裝置(系統(tǒng))和計(jì)算機(jī)程序產(chǎn)品的流程圖說明和/或框圖描述了本發(fā)明的各方面。應(yīng)當(dāng)理解的是,流程圖說明和/或框圖的每個(gè)塊以及流程圖說明和/或框圖中的塊的組合可以由計(jì)算機(jī)程序指令實(shí)現(xiàn)。這些計(jì)算機(jī)程序指令可以提供給通用計(jì)算機(jī)、專用計(jì)算機(jī)的處理器或其他可編程數(shù)據(jù)處理裝置以產(chǎn)生機(jī)器,這樣,經(jīng)由計(jì)算機(jī)的處理器或其他可編程數(shù)據(jù)處理裝置執(zhí)行的指令,使得在流程圖和/或框圖中指定的功能/動(dòng)作能夠?qū)崿F(xiàn)。這種處理器可以是但不限于是,通用處理器、專用處理器、應(yīng)用程序指定的處理器,或現(xiàn)場(chǎng)可編程。
附圖中的流程圖和框圖示出了根據(jù)本發(fā)明的各種實(shí)施例的系統(tǒng)、方法和計(jì)算機(jī)程序產(chǎn)品的可能實(shí)現(xiàn)的架構(gòu)、功能和操作。在這點(diǎn)上,流程圖或框圖中的每個(gè)塊可以代表代碼的模塊、片段或部分,其包括用于實(shí)現(xiàn)指定的邏輯功能的一個(gè)或多個(gè)可執(zhí)行指令。還應(yīng)注意的是,在一些替代實(shí)施方式中,框中標(biāo)注的功能可以不按照附圖中所示的順序發(fā)生。例如,實(shí)際上,連續(xù)示出的兩個(gè)塊可以基本同時(shí)執(zhí)行,或者這些塊有時(shí)可以以相反的順序執(zhí)行,這取決于其所涉及的功能。還將注意到的是,框圖和/或流程圖圖示中的每個(gè)框以及框圖和/或流程圖中的框的組合可以由實(shí)施指定功能或動(dòng)作的、基于專用硬件系統(tǒng)或者專用硬件和計(jì)算機(jī)指令的組合來實(shí)現(xiàn)。
雖然前述內(nèi)容針對(duì)本公開的實(shí)施例,但是在不脫離本公開的基本范圍的情況下,可以設(shè)計(jì)本公開的其他和進(jìn)一步的實(shí)施例,并且本公開的范圍由隨附權(quán)利要求確定。