利用每像素著色器線程的高效超級(jí)采樣的制作方法
【專(zhuān)利摘要】利用每像素著色器線程的高效超級(jí)采樣。公開(kāi)了用于分派圖形處理管線中的像素信息的技術(shù)。片段處理單元基于由第一線程所接收的圖形基元的第一部分生成包括多個(gè)樣本的第一像素。片段處理單元針對(duì)第一像素計(jì)算第一值,其中第一值針對(duì)該像素僅被計(jì)算一次。片段處理單元針對(duì)樣本計(jì)算第一值集,其中第一值集中的每個(gè)值與不同樣本相對(duì)應(yīng),并針對(duì)相對(duì)應(yīng)的樣本僅被計(jì)算一次。片段處理單元將第一值與第一值集中的每個(gè)值進(jìn)行組合以創(chuàng)建第二值集。片段處理單元?jiǎng)?chuàng)建一個(gè)或多個(gè)個(gè)分派消息以將第二值集存儲(chǔ)在輸出寄存器集中。所公開(kāi)的技術(shù)的一個(gè)優(yōu)點(diǎn)是像素著色器程序以增加的效率實(shí)施每樣本操作。
【專(zhuān)利說(shuō)明】利用每像素著色器線程的高效超級(jí)采樣
【技術(shù)領(lǐng)域】
[0001]本發(fā)明總地涉及三維(3D)圖形處理,并且更具體地,涉及利用每像素著色器線程的高效超級(jí)采樣。
【背景技術(shù)】
[0002]典型地,使用帶有一個(gè)或多個(gè)多級(jí)圖形處理管線的圖形處理單元(GPU)來(lái)渲染包括3D圖形對(duì)象的由計(jì)算機(jī)所生成的圖像。這類(lèi)圖形管線包括各種可編程的和固定的功能級(jí)(stage)。可編程級(jí)包括各種處理單元,其執(zhí)行著色器程序以渲染圖形對(duì)象并生成各種與圖形對(duì)象相關(guān)聯(lián)的視覺(jué)效果。可編程級(jí)的一個(gè)示例是包括像素著色器程序的片段處理單元。像素著色器程序接收諸如線段和三角形的幾何片段,并計(jì)算每個(gè)像素的顏色信息、深度信息以及其他屬性。所得的像素信息存儲(chǔ)在輸出寄存器中。輸出寄存器隨后由被稱(chēng)為光柵操作單元或ROP的固定功能級(jí)進(jìn)行讀取。ROP從像素著色器程序接收像素顏色、深度和其他信息、將該像素信息與存儲(chǔ)在一個(gè)或多個(gè)渲染目標(biāo)中的相應(yīng)像素信息進(jìn)行混合、并將經(jīng)混合的像素信息存儲(chǔ)回一個(gè)或多個(gè)渲染目標(biāo)中。典型地,ROP中的混合操作限于固定功能操作集。
[0003]由于ROP的固定功能性質(zhì),所以某些混合效果在ROP內(nèi)是不可完成的。為了創(chuàng)建這類(lèi)混合效果,像素著色器程序可包括一個(gè)或多個(gè)可編程混合特征,此處像素著色器程序直接從渲染目標(biāo)讀取像素信息(目標(biāo)像素信息)、將像素信息與像素著色器程序所計(jì)算的像素信息(源像素信息)進(jìn)行混合、并將經(jīng)混合的像素信息存儲(chǔ)到輸出寄存器中。像素著色器程序靈活地對(duì)像素信息實(shí)施可編程混合。因此,混合不受包括在ROP中的固定功能混合操作的限制。該方法的一個(gè)缺點(diǎn)是,在帶有像素著色器程序的多個(gè)實(shí)例同時(shí)運(yùn)行、或在帶有圖形處理管線的GPU中通常無(wú)法保證像素著色器的處理次序。如果圖形對(duì)象被以特定次序混合,那么混合操作的某些順序集將正常實(shí)施。在一個(gè)示例中,兩個(gè)圖形對(duì)象可與給定像素相交。第一圖形對(duì)象可由第一圖形處理管線混合到渲染目標(biāo)中。第二圖形對(duì)象可由第二圖形處理管線混合到渲染目標(biāo)中。然而,混合操作的結(jié)果可能是不同的,取決于第一圖形對(duì)象是在第二圖形對(duì)象之前還是在第二圖形對(duì)象之后被混合到渲染目標(biāo)中。結(jié)果,GPU將不能正確地一致地混合圖形對(duì)象。
[0004]在一些應(yīng)用中,通過(guò)針對(duì)每個(gè)像素渲染多個(gè)樣本來(lái)改善圖像質(zhì)量,此處每個(gè)樣本可表示相應(yīng)像素所覆蓋的區(qū)域子集。這類(lèi)模式被稱(chēng)為超級(jí)采樣模式。在配置為超級(jí)采樣的渲染目標(biāo)中,每個(gè)像素被存儲(chǔ)為多個(gè)樣本,此處每個(gè)樣本可包括顏色信息、深度信息和其他屬性。利用超級(jí)采樣,像素著色器程序的單個(gè)實(shí)例僅針對(duì)一個(gè)樣本計(jì)算并存儲(chǔ)顏色、深度和相關(guān)信息。一旦渲染完成,針對(duì)給定像素的樣本被組合,這導(dǎo)致用于在顯示設(shè)備上顯示的最終的像素顏色。該方法的一個(gè)缺點(diǎn)是,像素著色器程序的每個(gè)實(shí)例消耗GPU中的分開(kāi)的處理元件。針對(duì)包括四個(gè)樣本的像素,與每像素僅消耗一個(gè)像素著色器相比,超級(jí)采樣消耗四倍的像素著色器資源。
[0005]如前述所示,本領(lǐng)域所需要的是用于在圖形處理管線中實(shí)施像素著色操作的改進(jìn)的技術(shù)。
【發(fā)明內(nèi)容】
[0006]本發(fā)明的一個(gè)實(shí)施例闡述了一種用于分派(dispatch)圖形處理管線中的像素信息的方法。方法包括基于由第一線程所接收的圖形基元的第一部分生成包括多個(gè)樣本的像素。方法進(jìn)一步包括針對(duì)像素計(jì)算第一值,其中第一值針對(duì)像素僅被計(jì)算一次。方法進(jìn)一步包括針對(duì)多個(gè)樣本中的樣本計(jì)算第一值集,其中第一值集中的每個(gè)值與多個(gè)樣本中的不同樣本相對(duì)應(yīng),并針對(duì)相對(duì)應(yīng)的樣本僅被計(jì)算一次。方法進(jìn)一步包括將第一值與第一值集中的每個(gè)值進(jìn)行組合以創(chuàng)建第二值集。方法進(jìn)一步包括創(chuàng)建一個(gè)或多個(gè)分派消息以將第二值集存儲(chǔ)在輸出寄存器集中。
[0007]其他實(shí)施例包括但不限于包括使處理單元能夠?qū)崿F(xiàn)所公開(kāi)的方法的一個(gè)或多個(gè)方面的指令的計(jì)算機(jī)可讀介質(zhì)。其他實(shí)施例包括但不限于包括配置為實(shí)現(xiàn)所公開(kāi)的方法的一個(gè)或多個(gè)方面的處理單元的子系統(tǒng)以及配置為實(shí)現(xiàn)所公開(kāi)的方法的一個(gè)或多個(gè)方面的系統(tǒng)。
[0008]所公開(kāi)的技術(shù)的一個(gè)優(yōu)點(diǎn)是,像素著色器程序以增加的效率實(shí)施每樣本操作。在典型的場(chǎng)景中,像素著色器程序以接近于每像素著色的性能達(dá)到每樣本像素著色的較高的圖像質(zhì)量。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0009]因此,可以詳細(xì)地理解本發(fā)明的上述特征,并且可以參考實(shí)施例得到對(duì)如上面所簡(jiǎn)要概括的本發(fā)明更具體的描述,其中一些實(shí)施例在附圖中示出。然而,應(yīng)當(dāng)注意的是,附圖僅示出了本發(fā)明的典型實(shí)施例,因此不應(yīng)被認(rèn)為是對(duì)其范圍的限制,本發(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的PTO之一內(nèi)的分區(qū)單元的框圖;
[0013]圖3B是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的通用處理集群(GPC)內(nèi)的流多處理器(SM)的一部分的框圖;
[0014]圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的并行處理單元中的一個(gè)或多個(gè)可經(jīng)配置以實(shí)現(xiàn)的圖形處理管線的概念圖;
[0015]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖4的圖形處理管線的片段處理單元;
[0016]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖5的片段處理單元內(nèi)的像素著色器程序;
[0017]圖7A示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖5的片段處理單元內(nèi)的輸出寄存器的一部分;
[0018]圖7B示出了根據(jù)本發(fā)明的另一個(gè)實(shí)施例的、圖5的片段處理單元內(nèi)的輸出寄存器的一部分;
[0019]圖7C示出了根據(jù)本發(fā)明的再一個(gè)實(shí)施例的、圖5的片段處理單元內(nèi)的輸出寄存器的一部分;
[0020]圖8示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、與多個(gè)像素相交的幾何基元;
[0021]圖9闡述了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、用于分派(dispatch)來(lái)自圖形處理管線中的像素著色器程序的像素值的方法步驟的流程圖;以及
[0022]圖10闡述了根據(jù)本發(fā)明的另一個(gè)實(shí)施例的、用于分派來(lái)自圖形處理管線中的像素著色器程序的像素值的方法步驟的流程圖。
【具體實(shí)施方式】
[0023]在下面的描述中,將闡述大量的具體細(xì)節(jié)以提供對(duì)本發(fā)明更透徹的理解。然而,本領(lǐng)域的技術(shù)人員應(yīng)該清楚,本發(fā)明可以在沒(méi)有一個(gè)或多個(gè)這些具體細(xì)節(jié)的情況下得以實(shí)施。在其他實(shí)例中,未描述公知特征以避免對(duì)本發(fā)明造成混淆。
[0024]系統(tǒng)概述
[0025]圖1為示出了配置為實(shí)現(xiàn)本發(fā)明的一個(gè)或多個(gè)方面的計(jì)算機(jī)系統(tǒng)100的框圖。計(jì)算機(jī)系統(tǒng)100包括經(jīng)由可以包括存儲(chǔ)器橋105的互連路徑通信的中央處理單元(CPU) 102和系統(tǒng)存儲(chǔ)器104。存儲(chǔ)器橋105可以是例如北橋芯片,經(jīng)由總線或其他通信路徑106 (例如超傳輸(HyperTransport)鏈路)連接到輸入/輸出(I/O)橋107。I/O橋107,其可以是例如南橋芯片,從一個(gè)或多個(gè)用戶(hù)輸入設(shè)備108 (例如鍵盤(pán)、鼠標(biāo))接收用戶(hù)輸入并且經(jīng)由通信路徑106和存儲(chǔ)器橋105將該輸入轉(zhuǎn)發(fā)到CPU102。并行處理子系統(tǒng)112經(jīng)由總線或第二通信路徑113 (例如外圍部件互連(PCI)Express、加速圖形端口或超傳輸鏈路)耦連到存儲(chǔ)器橋105 ;在一個(gè)實(shí)施例中,并行處理子系統(tǒng)112是將像素傳遞到顯示設(shè)備110的圖形子系統(tǒng),所述顯示設(shè)備110可以是任何常規(guī)的陰極射線管、液晶顯示器、發(fā)光二極管顯示器等等。系統(tǒng)盤(pán)114也連接到I/O橋107并可配置為存儲(chǔ)內(nèi)容和應(yīng)用和數(shù)據(jù)用于由CPU102和并行處理子系統(tǒng)112使用。系統(tǒng)盤(pán)114提供用于應(yīng)用和數(shù)據(jù)的非易失性存儲(chǔ)并可包括固定或可移動(dòng)硬盤(pán)驅(qū)動(dòng)器、閃速存儲(chǔ)器設(shè)備以及壓縮光盤(pán)只讀存儲(chǔ)器(CD-ROM)、數(shù)字通用光盤(pán)ROM (DVD-ROM)、藍(lán)光、高清晰度DVD (HD-DVD)或其他磁、光、或固態(tài)存儲(chǔ)設(shè)備。
[0026]交換器116提供I/O橋107與諸如網(wǎng)絡(luò)適配器118以及各種插卡120和121的其他部件之間的連接。其他部件(未明確示出),包括通用串行總線(USB)或其他端口連接、壓縮光盤(pán)(CD)驅(qū)動(dòng)器、數(shù)字通用光盤(pán)(DVD)驅(qū)動(dòng)器、膠片錄制設(shè)備及類(lèi)似部件,也可以連接到I/O橋107。圖1所示的各種通信路徑包括具體命名的通信路徑106和113可以使用任何適合的協(xié)議實(shí)現(xiàn),諸如PC1-EXpreSS、AGP (加速圖形端口)、超傳輸或者任何其他總線或點(diǎn)到點(diǎn)通信協(xié)議,并且如本領(lǐng)域已知的,不同設(shè)備間的連接可使用不同協(xié)議。
[0027]在一個(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é)合存儲(chǔ)器橋105、CPU102以及I/O橋107,以形成片上系統(tǒng)(SoC)。
[0028]應(yīng)該理解,本文所示系統(tǒng)是示例性的,并且變化和修改都是可能的。連接拓?fù)?,包括橋的?shù)目和布置、CPU102的數(shù)目以及并行處理子系統(tǒng)112的數(shù)目,可根據(jù)需要修改。例如,在一些實(shí)施例中,系統(tǒng)存儲(chǔ)器104直接連接到CPU102而不是通過(guò)橋,并且其他設(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í)施例可以包括兩個(gè)或更多個(gè)CPU102以及兩個(gè)或更多個(gè)并行處理子系統(tǒng)112。本文所示的特定部件是可選的;例如,任何數(shù)目的插卡或外圍設(shè)備都可能得到支持。在一些實(shí)施例中,交換器116被去掉,網(wǎng)絡(luò)適配器118和插卡120、121直接連接到I/O橋107。
[0029]圖2示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的并行處理子系統(tǒng)112。如所示的,并行處理子系統(tǒng)112包括一個(gè)或多個(gè)并行處理單元(PI3U) 202,每個(gè)并行處理單元202都耦連到本地并行處理(PP)存儲(chǔ)器204。通常,并行處理子系統(tǒng)包括U個(gè)PPU,其中U≥I。(本文中,類(lèi)似對(duì)象的多個(gè)實(shí)例需要時(shí)以標(biāo)識(shí)對(duì)象的參考數(shù)字和標(biāo)識(shí)實(shí)例的括號(hào)中的數(shù)字來(lái)表示。)PPU202和并行處理存儲(chǔ)器204可使用一個(gè)或多個(gè)集成電路設(shè)備來(lái)實(shí)現(xiàn),諸如可編程處理器、專(zhuān)用集成電路(ASIC)或存儲(chǔ)器設(shè)備,或者以任何其他技術(shù)可行的方式來(lái)實(shí)現(xiàn)。[0030]再參考圖1以及圖2,在一些實(shí)施例中,并行處理子系統(tǒng)112中的一些或所有PPU202是具有渲染管線的圖形處理器,其可以配置為實(shí)施與下述相關(guān)的各種操作:經(jīng)由存儲(chǔ)器橋105和第二通信路徑113從CPU102和/或系統(tǒng)存儲(chǔ)器104所供應(yīng)的圖形數(shù)據(jù)生成像素?cái)?shù)據(jù),與本地并行處理存儲(chǔ)器204 (可被用作圖形存儲(chǔ)器,包括例如常規(guī)幀緩沖區(qū)(buffer))交互以存儲(chǔ)和更新像素?cái)?shù)據(jù),傳遞像素?cái)?shù)據(jù)到顯示設(shè)備110等等。在一些實(shí)施例中,并行處理子系統(tǒng)112可包括一個(gè)或多個(gè)作為圖形處理器而操作的PPU202以及一個(gè)或多個(gè)用于通用計(jì)算的其他PPU202。這些PTO可以是同樣的或不同的,并且每個(gè)PPU可具有專(zhuān)用并行處理存儲(chǔ)器設(shè)備或不具有專(zhuān)用并行處理存儲(chǔ)器設(shè)備。并行處理子系統(tǒng)112中的一個(gè)或多個(gè)PPU202可輸出數(shù)據(jù)到顯示設(shè)備110,或者并行處理子系統(tǒng)112中的每個(gè)PPU202可輸出數(shù)據(jù)到一個(gè)或多個(gè)顯示設(shè)備110。
[0031]在操作中,CPU102是計(jì)算機(jī)系統(tǒng)100的主處理器,控制和協(xié)調(diào)其他系統(tǒng)部件的操作。具體地,CPU102發(fā)出控制PPU202的操作的命令。在一些實(shí)施例中,CPU102寫(xiě)入用于每個(gè)PPU202的命令流到數(shù)據(jù)結(jié)構(gòu)中(在圖1或圖2中未明確示出),該數(shù)據(jù)結(jié)構(gòu)可位于系統(tǒng)存儲(chǔ)器104、并行處理存儲(chǔ)器204、或CPU102和PPU202都可訪問(wèn)的其他存儲(chǔ)位置中。將指向每個(gè)數(shù)據(jù)結(jié)構(gòu)的指針寫(xiě)到入棧緩沖區(qū)(pushbuffer)以發(fā)起對(duì)數(shù)據(jù)結(jié)構(gòu)中的命令流的處理。PPU202從一個(gè)或多個(gè)入棧緩沖區(qū)讀取命令流,然后相對(duì)于CPU102的操作異步地執(zhí)行命令??梢越?jīng)由設(shè)備驅(qū)動(dòng)程序103由應(yīng)用程序?yàn)槊總€(gè)入棧緩沖區(qū)指定執(zhí)行優(yōu)先級(jí)以控制對(duì)不同入棧緩沖區(qū)的調(diào)度。
[0032]現(xiàn)在返回參考圖2和圖1,每個(gè)PPU202包括經(jīng)由連接到存儲(chǔ)器橋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可以和諸如存儲(chǔ)器橋105或I/O橋107的總線橋集成在單個(gè)芯片上。而在其他實(shí)施例中,PPU202的一些或所有元件可以和CPU102集成在單個(gè)芯片上。
[0033]在一個(gè)實(shí)施例中,通信路徑113是PCI Express鏈路,如本領(lǐng)域所知的,其中專(zhuān)用通道被分配到每個(gè)PPU202。也可以使用其他通信路徑。I/O單元205生成用于在通信路徑113上傳送的包(或其他信號(hào)),并且還從通信路徑113接收所有傳入的包(或其他信號(hào)),將傳入的包引導(dǎo)到PPU202的適當(dāng)部件。例如,可將與處理任務(wù)相關(guān)的命令引導(dǎo)到主機(jī)接口206,而將與存儲(chǔ)器操作相關(guān)的命令(例如,對(duì)并行處理存儲(chǔ)器204的讀取或?qū)懭?引導(dǎo)到存儲(chǔ)器交叉開(kāi)關(guān)單元210。主機(jī)接口 206讀取每個(gè)入棧緩沖區(qū),并且將存儲(chǔ)在入棧緩沖區(qū)中的命令流輸出到前端212。
[0034]有利地,每個(gè)PPU202都實(shí)現(xiàn)高度并行處理架構(gòu)。如詳細(xì)示出的,PPU202 (O)包括處理集群陣列230,該陣列230包括C個(gè)通用處理集群(GPC)208,其中C≥1。每個(gè)GPC208能夠并發(fā)執(zhí)行大量的(例如,幾百或幾千)線程,其中每個(gè)線程是程序的實(shí)例(instance)。在各種應(yīng)用中,可分配不同的GPC208用于處理不同類(lèi)型的程序或用于實(shí)施不同類(lèi)型的計(jì)算。GPC208的分配可以取決于因每種類(lèi)型的程序或計(jì)算所產(chǎn)生的工作量而變化。
[0035]GPC208從任務(wù)/工作單元207內(nèi)的工作分布單元接收所要執(zhí)行的處理任務(wù)。工作分布單元接收指向編碼為任務(wù)元數(shù)據(jù)(TMD)并存儲(chǔ)在存儲(chǔ)器中的處理任務(wù)的指針。指向TMD的指針包括在存儲(chǔ)為入棧緩沖區(qū)并由前端單元212從主機(jī)接口 206接收的命令流中??梢跃幋a為T(mén)MD的處理任務(wù)包括所要處理的數(shù)據(jù)的索引,以及定義數(shù)據(jù)將被如何處理(例如,什么程序?qū)⒈粓?zhí)行)的狀態(tài)參數(shù)和命令。任務(wù)/工作單元207從前端212接收任務(wù)并確保在每一個(gè)TMD所指定的處理發(fā)起前,將GPC208配置為有效狀態(tài)??梢詾槊總€(gè)TMD指定用來(lái)調(diào)度處理任務(wù)的執(zhí)行的優(yōu)先級(jí)。還可從處理集群陣列230接收處理任務(wù)??蛇x地,TMD可包括控制將TMD添加到處理任務(wù)列表(或指向處理任務(wù)的指針的列表)的頭部還是尾部的參數(shù),從而提供除優(yōu)先級(jí)以外的另一級(jí)別的控制。
[0036]存儲(chǔ)器接口 214包括D個(gè)分區(qū)單元215,每個(gè)分區(qū)單元215直接耦連到并行處理存儲(chǔ)器204的一部分,其中D≥1。如所示的,分區(qū)單元215的數(shù)目一般等于動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM) 220的數(shù)目。在其他實(shí)施例中,分區(qū)單元215的數(shù)目也可以不等于存儲(chǔ)器設(shè)備的數(shù)目。本領(lǐng)域的普通技術(shù)人員應(yīng)該理解DRAM220可以用其他合適的存儲(chǔ)設(shè)備來(lái)替代并且可以是一般常規(guī)的設(shè)計(jì)。因此省略了詳細(xì)描述。諸如幀緩沖區(qū)或紋理映射圖的渲染目標(biāo)可以跨DRAM220加以存儲(chǔ),這允許分區(qū)單元215并行寫(xiě)入每個(gè)渲染目標(biāo)的各部分以有效地使用并行處理存儲(chǔ)器204的可用帶寬。
[0037]任何一個(gè)GPC208都可以處理要被寫(xiě)到并行處理存儲(chǔ)器204內(nèi)的任何DRAM220的數(shù)據(jù)。交叉開(kāi)關(guān)單元210配置為路由每個(gè)GPC208的輸出到任何分區(qū)單元215的輸入或到另一個(gè)GPC208用于進(jìn)一步處理。GPC208通過(guò)交叉開(kāi)關(guān)單元210與存儲(chǔ)器接口 214通信,以對(duì)各種外部存儲(chǔ)器設(shè)備進(jìn)行讀取或?qū)懭搿T谝粋€(gè)實(shí)施例中,交叉開(kāi)關(guān)單元210具有到存儲(chǔ)器接口 214的連接以和I/O單元205通信,以及到本地并行處理存儲(chǔ)器204的連接,從而使得在不同GPC208內(nèi)的處理內(nèi)核能夠與系統(tǒng)存儲(chǔ)器104或?qū)τ赑PU202而言非本地的其他存儲(chǔ)器通信。在圖2所示的實(shí)施例中,交叉開(kāi)關(guān)單元210直接與I/O單元205連接。交叉開(kāi)關(guān)單元210可使用虛擬信道來(lái)分開(kāi)GPC208與分區(qū)單元215之間的業(yè)務(wù)流。
[0038]另外,GPC208可被編程以執(zhí)行與種類(lèi)繁多的應(yīng)用相關(guān)的處理任務(wù),包括但不限于,線性和非線性數(shù)據(jù)變換、視頻和/或音頻數(shù)據(jù)過(guò)濾、建模操作(例如,應(yīng)用物理定律以確定對(duì)象的位置、速率和其他屬性)、圖像渲染操作(例如,曲面細(xì)分(tessellation)著色器、頂點(diǎn)著色器、幾何著色器、和/或像素著色器程序)等等。PPU202可將數(shù)據(jù)從系統(tǒng)存儲(chǔ)器104和/或本地并行處理存儲(chǔ)器204轉(zhuǎn)移到內(nèi)部(片上)存儲(chǔ)器中,處理該數(shù)據(jù),并且將結(jié)果數(shù)據(jù)寫(xiě)回到系統(tǒng)存儲(chǔ)器104和/或本地并行處理存儲(chǔ)器204,其中這樣的數(shù)據(jù)可以由其他系統(tǒng)部件訪問(wèn),所述其他系統(tǒng)部件包括CPU102或另一個(gè)并行處理子系統(tǒng)112。
[0039]PPU202可配備有任何容量(amount)的本地并行處理存儲(chǔ)器204,包括沒(méi)有本地存儲(chǔ)器,并且可以以任何組合方式使用本地存儲(chǔ)器和系統(tǒng)存儲(chǔ)器。例如,在統(tǒng)一存儲(chǔ)器架構(gòu)(UMA)實(shí)施例中,PPU202可以是圖形處理器。在這樣的實(shí)施例中,將不提供或幾乎不提供專(zhuān)用的圖形(并行處理)存儲(chǔ)器,并且PPU202會(huì)以排他或幾乎排他的方式使用系統(tǒng)存儲(chǔ)器。在UMA實(shí)施例中,PPU202可集成到橋式芯片中或處理器芯片中,或作為具有高速鏈路(例如,PCI Express)的分立芯片提供,所述高速鏈路經(jīng)由橋式芯片或其他通信手段將PPU202連接到系統(tǒng)存儲(chǔ)器。
[0040]如上所示,在并行處理子系統(tǒng)112中可以包括任何數(shù)目的PPU202。例如,可在單個(gè)插卡上提供多個(gè)PPU202、或可將多個(gè)插卡連接到通信路徑113、或可將一個(gè)或多個(gè)PPU202集成到橋式芯片中。在多PPU系統(tǒng)中的PPU202可以彼此同樣或不同。例如,不同的PPU202可能具有不同數(shù)目的處理內(nèi)核、不同容量的本地并行處理存儲(chǔ)器等等。在存在多個(gè)PPU202的情況下,可并行操作那些PI3U從而以高于單個(gè)PPU202所可能達(dá)到的吞吐量來(lái)處理數(shù)據(jù)。包含一個(gè)或多個(gè)PPU202的系統(tǒng)可以以各種配置和形式因素來(lái)實(shí)現(xiàn),包括臺(tái)式電腦、筆記本電腦或手持式個(gè)人計(jì)算機(jī)、服務(wù)器、工作站、游戲控制臺(tái)、嵌入式系統(tǒng)等等。
[0041]圖3A為根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的PPU202之一內(nèi)的分區(qū)單元215的框圖。如所示的,分區(qū)單元215包括L2高速緩存350、幀緩沖區(qū)(FB)DRAM接口 355以及光柵操作單元(ROP) 360。L2高速緩存350是配置為實(shí)施從交叉開(kāi)關(guān)單元210和R0P360所接收的加載和存儲(chǔ)操作的讀/寫(xiě)高速緩存。讀未命中(miss)和緊急寫(xiě)回請(qǐng)求由L2高速緩存350輸出至FB DRAM接口 355用于處理。臟(dirty)更新也被發(fā)送到FB355用于伺機(jī)處理。
[0042]在圖形應(yīng)用中,R0P360是實(shí)施諸如模板、z測(cè)試、混合等等的光柵操作、并輸出像素?cái)?shù)據(jù)作為經(jīng)處理的圖形數(shù)據(jù)用于存儲(chǔ)在圖形存儲(chǔ)器中的處理單元。在本發(fā)明的一些實(shí)施例中,R0P360包括在每個(gè)GPC208內(nèi)而不是分區(qū)單元215內(nèi),并且通過(guò)交叉開(kāi)關(guān)單元210傳送像素讀和寫(xiě)請(qǐng)求而不是像素片段數(shù)據(jù)。
[0043]經(jīng)處理的圖形數(shù)據(jù)可顯示在顯示設(shè)備110上或被路由用于由GPU或并行處理子系統(tǒng)112內(nèi)的處理實(shí)體之一進(jìn)行進(jìn)一步處理。每個(gè)分區(qū)單元215包括R0P360以分布光柵操作的處理。在一些實(shí)施例中,R0P360可配置為壓縮寫(xiě)入到存儲(chǔ)器的z或顏色數(shù)據(jù)以及解壓縮從存儲(chǔ)器讀取的z或顏色數(shù)據(jù)。
[0044]圖3B為根據(jù)本發(fā)明的一個(gè)實(shí)施例的、在圖2的通用處理集群(GPC) 208內(nèi)的流多處理器(SM) 310的一部分的框圖。每個(gè)GPC208可配置為并行執(zhí)行大量線程,其中術(shù)語(yǔ)“線程”是指在特定輸入數(shù)據(jù)集上執(zhí)行的特定程序的實(shí)例。在一些實(shí)施例中,單指令、多數(shù)據(jù)(SMD)指令發(fā)出技術(shù)用于在不提供多個(gè)獨(dú)立指令單元的情況下支持大量線程的并行執(zhí)行。在其他實(shí)施例中,單指令、多線程(SMT)技術(shù)用于使用配置為向GPC208中的每一個(gè)內(nèi)的處理引擎集發(fā)出指令的公共指令單元來(lái)支持大量一般來(lái)說(shuō)同步的線程的并行執(zhí)行。不同于所有處理引擎通常都執(zhí)行同樣指令的SMD執(zhí)行機(jī)制,SIMT執(zhí)行通過(guò)給定線程程序允許不同線程更容易跟隨分散執(zhí)行路徑。本領(lǐng)域普通技術(shù)人員應(yīng)該理解SMD處理機(jī)制代表SMT處理機(jī)制的功能子集。
[0045]經(jīng)由將處理任務(wù)分布到一個(gè)或多個(gè)流多處理器(SM)310的管線管理器(未示出)來(lái)有利地控制GPC208的操作。其中每個(gè)SM310配置為處理一個(gè)或多個(gè)線程組。每個(gè)SM310包括指令LI高速緩存370,其配置為經(jīng)由GPC208內(nèi)的L1.5高速緩存(未示出)從存儲(chǔ)器接收指令和常量。線程束調(diào)度器和指令單元312從指令LI高速緩存370接收指令和常量并根據(jù)該指令和常量控制本地寄存器堆304和SM310功能單元。SM310功能單元包括N個(gè)exec(執(zhí)行或處理)單元302和P個(gè)加載-存儲(chǔ)單元(LSU) 303。如本領(lǐng)域已知的,SM功能單元可被管線化,這允許在前一個(gè)指令完成之前發(fā)出新指令。可提供功能執(zhí)行單元的任何組合。在一個(gè)實(shí)施例中,功能單元支持各種各樣的操作,包括整數(shù)和浮點(diǎn)運(yùn)算(例如加法和乘法)、比較操作、布爾操作(AND、OR、XOR)、移位和各種代數(shù)函數(shù)的計(jì)算(例如平面插值、三角函數(shù)、指數(shù)函數(shù)和對(duì)數(shù)函數(shù)等等);以及相同功能單元硬件可均衡地用來(lái)實(shí)施不同的操作。
[0046]如本文之前所定義的,傳送到特定GPC208的一系列指令構(gòu)成線程,并且跨SM310內(nèi)的并行處理引擎(未示出)的某一數(shù)目的并發(fā)執(zhí)行線程的集合在本文中稱(chēng)為“線程束(warp)”或“線程組”。如本文所使用的,“線程組”是指對(duì)不同輸入數(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中的、在任何給定時(shí)間在GPC208中可以執(zhí)行多達(dá)G*M個(gè)線程組的系統(tǒng)。
[0047]此外,多個(gè)相關(guān)線程組可以在SM310內(nèi)同時(shí)活動(dòng)(在執(zhí)行的不同階段)。該線程組集合在本文中稱(chēng)為“協(xié)作線程陣列”(“CTA”)或“線程陣列”。特定CTA的大小等于m*k,其中k是線程組中并發(fā)執(zhí)行線程的數(shù)目并且通常是SM310內(nèi)的并行處理引擎數(shù)目的整數(shù)倍,以及m是SM310內(nèi)同時(shí)活動(dòng)的線程組的數(shù)目。CTA的大小一般由編程者以及可用于CTA的硬件資源諸如存儲(chǔ)器或寄存器的容量來(lái)確定。
[0048]在本發(fā)明的實(shí)施例中,使用計(jì)算系統(tǒng)的PPU202或其他處理器來(lái)使用線程陣列執(zhí)行通用計(jì)算是可取的。為線程陣列中的每個(gè)線程指派在線程的執(zhí)行期間對(duì)于線程可訪問(wèn)的唯一的線程標(biāo)識(shí)符(“線程ID”)??杀欢x為一維或多維數(shù)值的線程ID控制線程處理行為的各方面。例如,線程ID可用于確定線程將要處理輸入數(shù)據(jù)集的哪部分和/或確定線程將要產(chǎn)生或?qū)戄敵鰯?shù)據(jù)集的哪部分。
[0049]每線程指令序列可包括定義線程陣列的代表性線程和一個(gè)或多個(gè)其他線程之間的協(xié)作行為的至少一個(gè)指令。例如,每線程指令序列可能包括在序列中的特定點(diǎn)處掛起用于代表性線程的操作執(zhí)行直到諸如其他線程的一個(gè)或多個(gè)到達(dá)該特定點(diǎn)的時(shí)間為止的指令、用于代表性線程將數(shù)據(jù)存儲(chǔ)在其他線程的一個(gè)或多個(gè)有權(quán)訪問(wèn)的共享存儲(chǔ)器中的指令、用于代表性線程原子地讀取和更新存儲(chǔ)在其他線程的一個(gè)或多個(gè)基于它們的線程ID有權(quán)訪問(wèn)的共享存儲(chǔ)器中的數(shù)據(jù)的指令等等。CTA程序還可以包括計(jì)算數(shù)據(jù)將從其讀取的共享存儲(chǔ)器中的地址的指令,該地址是線程ID的函數(shù)。通過(guò)定義合適的函數(shù)并提供同步技術(shù),可以以可預(yù)測(cè)的方式由CTA的一個(gè)線程將數(shù)據(jù)寫(xiě)入共享存儲(chǔ)器中的給定位置并由同一個(gè)CTA的不同線程從該位置讀取數(shù)據(jù)。因此,數(shù)據(jù)在線程之間共享的任何期望模式可以得到支持,以及CTA中的任何線程可以與同一個(gè)CTA中的任何其他線程共享數(shù)據(jù)。如果存在數(shù)據(jù)在CTA的線程之間的共享,則其范圍由CTA程序確定;因此,應(yīng)該理解的是,在使用CTA的特定應(yīng)用中,CTA的線程可能會(huì)或可能不會(huì)真正互相共享數(shù)據(jù),這取決于CTA程序,術(shù)語(yǔ)“CTA”和“線程陣列”在本文作為同義詞使用。
[0050]SM310提供具有不同級(jí)別的可訪問(wèn)性的片上(內(nèi)部)數(shù)據(jù)存儲(chǔ)。特殊寄存器(未示出)對(duì)于LSU303可讀但不可寫(xiě)并且用于存儲(chǔ)定義每個(gè)線程的“位置”的參數(shù)。在一個(gè)實(shí)施例中,特殊寄存器包括每線程(或SM310內(nèi)的每exec單元302) —個(gè)的存儲(chǔ)線程ID的寄存器;每個(gè)線程ID寄存器僅由各自的exec單元302可訪問(wèn)。特殊寄存器還可以包括附加寄存器,其對(duì)于執(zhí)行由任務(wù)元數(shù)據(jù)(TMD)(未示出)所代表的同一個(gè)處理任務(wù)的所有線程(或由所有LSU303)可讀,其存儲(chǔ)CTA標(biāo)識(shí)符、CTA維數(shù)、CTA所屬網(wǎng)格(grid)的維數(shù)(或隊(duì)列位置,如果TMD編碼隊(duì)列任務(wù)而不是網(wǎng)格任務(wù)的話)、以及CTA被指派到的TMD的標(biāo)識(shí)符。
[0051]如果TMD是網(wǎng)格TMD,則TMD的執(zhí)行會(huì)啟動(dòng)和執(zhí)行固定數(shù)目的CTA以處理存儲(chǔ)在隊(duì)列525中的固定量的數(shù)據(jù)。將CTA的數(shù)目指定為網(wǎng)格寬度、高度和深度的乘積??梢詫⒐潭康臄?shù)據(jù)存儲(chǔ)在TMD中或TMD可以存儲(chǔ)指向?qū)⒂蒀TA所處理的數(shù)據(jù)的指針。TMD還存儲(chǔ)由CTA所執(zhí)行的程序的開(kāi)始地址。
[0052]如果TMD是隊(duì)列TMD,那么使用TMD的隊(duì)列特點(diǎn),這意味著將要被處理的數(shù)據(jù)量不一定是固定的。隊(duì)列條目存儲(chǔ)用于由指派到TMD的CTA所處理的數(shù)據(jù)。隊(duì)列條目還可以代表在線程執(zhí)行期間由另一個(gè)TMD所生成的子任務(wù),從而提供嵌套并行性。通常線程或包括線程的CTA的執(zhí)行被掛起直到子任務(wù)的執(zhí)行完成??梢詫㈥?duì)列存儲(chǔ)在TMD中或與TMD分開(kāi)存儲(chǔ),在該情況下TMD存儲(chǔ)指向該隊(duì)列的隊(duì)列指針。有利地,當(dāng)代表子任務(wù)的TMD正在執(zhí)行時(shí)可以將由子任務(wù)所生成的數(shù)據(jù)寫(xiě)到隊(duì)列。隊(duì)列可以實(shí)現(xiàn)為循環(huán)隊(duì)列以使得數(shù)據(jù)的總量不限于隊(duì)列的大小。
[0053]屬于網(wǎng)格的CTA具有指示網(wǎng)格內(nèi)各自CTA的位置的隱含網(wǎng)格寬度、高度和深度參數(shù)。在初始化期間響應(yīng)于經(jīng)由前端212從設(shè)備驅(qū)動(dòng)程序103所接收的命令來(lái)寫(xiě)特殊寄存器并且在處理任務(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ù)。
[0054]參數(shù)存儲(chǔ)器(未示出)存儲(chǔ)可由同一個(gè)CTA內(nèi)的任何線程(或任何LSU303)讀取但不可由其寫(xiě)入的運(yùn)行時(shí)間參數(shù)(常數(shù))。在一個(gè)實(shí)施例中,設(shè)備驅(qū)動(dòng)程序103在引導(dǎo)SM310開(kāi)始執(zhí)行使用參數(shù)的任務(wù)之前將這些參數(shù)提供給參數(shù)存儲(chǔ)器。任何CTA內(nèi)的任何線程(或SM310內(nèi)的任何exec單元302)可以通過(guò)存儲(chǔ)器接口 214訪問(wèn)全局存儲(chǔ)器??梢詫⑷执鎯?chǔ)器的各部分存儲(chǔ)在LI高速緩存320中。
[0055]每個(gè)線程將本地寄存器堆304用作暫存空間;每個(gè)寄存器被分配以專(zhuān)用于一個(gè)線程,并且在本地寄存器堆304的任何部分中的數(shù)據(jù)僅對(duì)于寄存器被分配到的線程可訪問(wèn)。本地寄存器堆304可以實(shí)現(xiàn)為物理上或邏輯上分為P個(gè)通道的寄存器堆,每個(gè)通道具有一定數(shù)目的條目(其中每個(gè)條目可以存儲(chǔ)例如32位字)。將一個(gè)通道指派到N個(gè)exec單元302和P個(gè)下載-存儲(chǔ)單元LSU303的每一個(gè),并且利用用于執(zhí)行同一個(gè)程序的不同線程的數(shù)據(jù)來(lái)填充不同通道中的相應(yīng)條目以幫助SIMD執(zhí)行??梢詫⑼ǖ赖牟煌糠址峙涞紾個(gè)并發(fā)線程組中的不同線程組,以使得本地寄存器堆304中的給定條目?jī)H對(duì)于特定線程可訪問(wèn)。在一個(gè)實(shí)施例中,保留本地寄存器堆304內(nèi)的某些條目用于存儲(chǔ)線程標(biāo)識(shí)符,實(shí)現(xiàn)特殊寄存器之一。此外,一致LI高速緩存375存儲(chǔ)用于N個(gè)exec單元302和P個(gè)下載-存儲(chǔ)單元LSU303的每個(gè)通道的一致值或常數(shù)值。
[0056]共享存儲(chǔ)器306對(duì)于單個(gè)CTA內(nèi)的線程可訪問(wèn);換言之,共享存儲(chǔ)器306中的任何位置對(duì)于同一個(gè)CTA內(nèi)的任何線程(或?qū)τ赟M310內(nèi)的任何處理引擎)可訪問(wèn)。共享存儲(chǔ)器306可以實(shí)現(xiàn)為具有允許任何處理引擎對(duì)共享存儲(chǔ)器中的任何位置讀取或?qū)懭氲幕ミB的共享寄存器堆或共享片上高速緩存存儲(chǔ)器。在其他實(shí)施例中,共享狀態(tài)空間可能映射到片外存儲(chǔ)器的每CTA區(qū)上并被高速緩存在LI高速緩存320中。參數(shù)存儲(chǔ)器可以實(shí)現(xiàn)為在實(shí)現(xiàn)共享存儲(chǔ)器306的同一個(gè)共享寄存器堆或共享高速緩存存儲(chǔ)器內(nèi)的指定部分,或者實(shí)現(xiàn)為L(zhǎng)SU303對(duì)其具有只讀訪問(wèn)權(quán)限的分開(kāi)的共享寄存器堆或片上高速緩存存儲(chǔ)器。在一個(gè)實(shí)施例中,實(shí)現(xiàn)參數(shù)存儲(chǔ)器的區(qū)域還用于存儲(chǔ)CTA ID和任務(wù)ID,以及CTA和網(wǎng)格維數(shù)或隊(duì)列位置,實(shí)現(xiàn)特殊寄存器的各部分。SM310中的每個(gè)LSU303耦連到統(tǒng)一地址映射單元352,統(tǒng)一地址映射單元352將為在統(tǒng)一存儲(chǔ)器空間中所指定的加載和存儲(chǔ)指令所提供的地址轉(zhuǎn)換為每個(gè)各異存儲(chǔ)器空間中的地址。因此,指令可以用于通過(guò)指定統(tǒng)一存儲(chǔ)器空間中的地址來(lái)訪問(wèn)本地、共享或全局存儲(chǔ)器空間中的任何一個(gè)。
[0057]每個(gè)SM310中的LI高速緩存320可以用于高速緩存私有的每線程本地?cái)?shù)據(jù)還有每應(yīng)用全局?jǐn)?shù)據(jù)。在一些實(shí)施例中,可以將每CTA共享數(shù)據(jù)高速緩存在LI高速緩存320中。LSU303經(jīng)由存儲(chǔ)器和高速緩存互連380耦連到共享存儲(chǔ)器306和LI高速緩存320。
[0058]應(yīng)該理解本文所述的內(nèi)核架構(gòu)是示例性的并且變化和修改都是可能的。任何數(shù)目的處理單元例如SM310可以包括在GPC208內(nèi)。進(jìn)一步地,如圖2所示,PPU202可以包括任何數(shù)目的GPC208,所述GPC208有利地在功能上彼此相似以使得執(zhí)行行為不取決于哪個(gè)GPC208接收特定處理任務(wù)。進(jìn)一步地,每個(gè)GPC208有利地使用分開(kāi)且各異的處理單元、LI高速緩存來(lái)獨(dú)立于其他GPC208操作以為一個(gè)或多個(gè)應(yīng)用程序執(zhí)行任務(wù)。
[0059]本領(lǐng)域普通技術(shù)人員應(yīng)該理解圖1-3所描述的架構(gòu)決不限制本發(fā)明的范圍并且在不脫離本發(fā)明范圍的情況下本文所教導(dǎo)的技術(shù)可以在任何經(jīng)適當(dāng)配置的處理單元上實(shí)現(xiàn),所述處理單元包括但不限于一個(gè)或多個(gè)CPU、一個(gè)或多個(gè)多核CPU、一個(gè)或多個(gè)PPU202、一個(gè)或多個(gè)GPC208、一個(gè)或多個(gè)圖形或?qū)S锰幚韱卧鹊取?br>
[0060]圖形管線架構(gòu)
[0061]圖4是根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖2的PPU202中的一個(gè)或多個(gè)可經(jīng)配置以實(shí)現(xiàn)的圖形處理管線400的概念圖。例如,SM310中的一個(gè)可配置為實(shí)施頂點(diǎn)處理單元415、幾何處理單元425、片段處理單元460中的一個(gè)或多個(gè)的功能。還可由GPC208內(nèi)的其他處理引擎和相應(yīng)的分區(qū)單元215實(shí)施數(shù)據(jù)匯編器410、基元匯編器420、光柵化器455和光柵操作單元465的功能??商娲兀墒褂糜糜谝粋€(gè)或多個(gè)功能的專(zhuān)用處理單元來(lái)實(shí)現(xiàn)圖形處理管線400。
[0062]數(shù)據(jù)匯編器410處理單元收集用于高階表面、基元等的頂點(diǎn)數(shù)據(jù),并將包括頂點(diǎn)屬性的頂點(diǎn)數(shù)據(jù)輸出到頂點(diǎn)處理單元415。頂點(diǎn)處理單元415是可編程執(zhí)行單元,其配置為執(zhí)行頂點(diǎn)著色器程序,按頂點(diǎn)著色器程序所指定的來(lái)亮化和變換頂點(diǎn)數(shù)據(jù)。例如,頂點(diǎn)處理單元415可被編程以將頂點(diǎn)數(shù)據(jù)從基于對(duì)象的坐標(biāo)表示(對(duì)象空間)變換到可替代地基于諸如世界空間或規(guī)格化設(shè)備坐標(biāo)(NDC)空間的坐標(biāo)系。頂點(diǎn)處理單元415可讀取由數(shù)據(jù)匯編器410所存儲(chǔ)在LI高速緩存320、并行處理存儲(chǔ)器204、或系統(tǒng)存儲(chǔ)器104中的數(shù)據(jù)用于在處理頂點(diǎn)數(shù)據(jù)中使用。[0063]基元匯編器420從頂點(diǎn)處理單元415接收頂點(diǎn)屬性、按需要讀取所存儲(chǔ)的頂點(diǎn)屬性、并構(gòu)建圖形基元用于由幾何處理單元425處理。圖形基元包括三角形、線段、點(diǎn)等等。幾何處理單元425是可編程執(zhí)行單元,其配置為執(zhí)行幾何著色器程序,按幾何著色器程序所指定的來(lái)變換從基元匯編器420所接收的圖形基元。例如,幾何處理單元425可被編程以將圖形基元細(xì)分成一個(gè)或多個(gè)新圖形基元并計(jì)算用來(lái)將新圖形基元光柵化的參數(shù),諸如平面方程系數(shù)。
[0064]在一些實(shí)施例中,幾何處理單元425還可在幾何流中添加或刪除元素。幾何處理單元425將指定新圖形基元的參數(shù)和頂點(diǎn)輸出到視口縮放、剔除(cull)和裁剪(clip)單元450。幾何處理單元425可讀取存儲(chǔ)在并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中的數(shù)據(jù)用于在處理幾何數(shù)據(jù)中使用。視口縮放、剔除和裁剪單元450實(shí)施裁剪、剔除和視口縮放,并將所處理的圖形基元輸出到光柵化器455。
[0065]光柵化器455掃描轉(zhuǎn)換新圖形基元并將片段和覆蓋數(shù)據(jù)輸出到片段處理單元460。此外,光柵化器455可配置為實(shí)施z剔除(z-culling)和其他基于z的優(yōu)化。
[0066]互鎖445檢測(cè)片段處理單元460何時(shí)正對(duì)渲染目標(biāo)中的、與在另一個(gè)圖形處理管線400中的片段處理單元460相同的位置進(jìn)行寫(xiě)。在一些實(shí)施例中,兩個(gè)片段處理單元460可配置為對(duì)渲染目標(biāo)中的相同(x,y)位置進(jìn)行寫(xiě),此處(x,y)表示像素的屏幕坐標(biāo)。在這類(lèi)情況下,在片段處理單元460上執(zhí)行的片段著色器程序可能不在與在不同的片段處理單元460上的尚未完成的片段著色器程序相同的位置處被啟動(dòng)?;ユi455使在后的片段著色器程序停頓,并阻止在后的著色器程序啟動(dòng),直到第一片段著色器程序?qū)o定(x,y)位置完成讀-修改-寫(xiě)操作。該方法確保在后的片段著色器程序從指向相同(x,y)位置的在先的片段著色器程序接收最終值。一旦在先的片段著色器程序完成對(duì)(x,y)位置的寫(xiě),互鎖455就釋放在后的片段著色器程序用于執(zhí)行。
[0067]片段處理單元460是可編程的執(zhí)行單元,其配置為執(zhí)行片段著色器程序,按片段著色器程序所指定的來(lái)變換從光柵化器455所接收的片段。例如,片段處理單元460可被編程以實(shí)施諸如透視校正、紋理映射、著色、混合等操作,以產(chǎn)生輸出到光柵操作單元465的經(jīng)著色的片段。片段處理單元460可讀取存儲(chǔ)在并行處理存儲(chǔ)器204或系統(tǒng)存儲(chǔ)器104中的數(shù)據(jù)用于在處理片段數(shù)據(jù)中使用??梢韵袼?、樣本、或其他粒度對(duì)片段著色,這取決于所編程的米樣率。
[0068]光柵操作單元465是處理單元,其實(shí)施諸如模板(Stencil)、Z測(cè)試、混合等的光柵操作,并輸出像素?cái)?shù)據(jù)作為經(jīng)處理的圖形數(shù)據(jù)用于存儲(chǔ)在圖形存儲(chǔ)器中。經(jīng)處理的圖形數(shù)據(jù)可存儲(chǔ)在圖形存儲(chǔ)器例如并行處理存儲(chǔ)器204和/或系統(tǒng)存儲(chǔ)器104中,用于在顯示設(shè)備110上顯示或用于由CPU102或并行處理子系統(tǒng)112進(jìn)一步處理。在本發(fā)明的一些實(shí)施例中,光柵操作單元465配置為壓縮寫(xiě)入到存儲(chǔ)器的z或顏色數(shù)據(jù)以及解壓縮從存儲(chǔ)器中讀取的z或顏色數(shù)據(jù)。在各實(shí)施例中,R0P465可位于存儲(chǔ)器接口 214中、GPC208中、GPC之外的處理集群陣列230中、或PPU202內(nèi)的分開(kāi)的單元(未示出)中。
[0069]利用每像素著色器線程的高效超級(jí)采樣
[0070]如上文結(jié)合所描述的,片段處理單元460配置為以像素、樣本或其他粒度執(zhí)行片段著色器程序,這取決于可編程的采樣率。例如,片段處理單元460可執(zhí)行對(duì)像素著色的像素著色器程序或分開(kāi)地對(duì)給定像素的每個(gè)樣本著色的樣本著色器程序。片段處理單元460可通過(guò)以樣本粒度、以與像素粒度相比減少的性能進(jìn)行著色來(lái)達(dá)到較高的圖形質(zhì)量。如下文結(jié)合圖5-9所進(jìn)一步描述的,片段處理單元460可配置為盡可能每像素實(shí)施一次計(jì)算。在這類(lèi)情況下,片段處理單元460將檢測(cè)像素著色器程序何時(shí)有可能產(chǎn)生用于多個(gè)樣本的相同結(jié)果,并且在這類(lèi)情況下,針對(duì)多個(gè)樣本實(shí)施一次每像素計(jì)算。
[0071]圖5示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖4的圖形處理管線400的片段處理單元460。如所示的,片段處理單元460包括輸入寄存器510、像素著色器程序520、輸出屏蔽(mask) 530以及輸出寄存器540。
[0072]輸入寄存器510組成片段處理單元460的本地寄存器集。輸入寄存器510存儲(chǔ)從光柵化器455所接收的片段和覆蓋數(shù)據(jù)。片段表示已被光柵化并為片段或像素著色做好準(zhǔn)備的圖形基元的一部分。片段與可能被篡改(interpolate)的各種數(shù)據(jù)參數(shù)相關(guān)聯(lián),包括但不限于屏幕空間中的片段的位置、片段的深度值、諸如顏色或紋理元素或曲面法線的值、與片段相關(guān)聯(lián)的模板屏蔽、以及用于片段的透明度值。覆蓋數(shù)據(jù)包括屏幕空間中與片段相交的像素集或像素樣本集。片段和覆蓋數(shù)據(jù)隨后被像素著色器程序520讀取用于進(jìn)一步處理。
[0073]像素著色器程序520是在片段處理單元460中的處理器(未示出)上執(zhí)行的一系列指令。像素著色器程序520是如結(jié)合圖4所描述的片段著色器程序的一種形式。如下文所進(jìn)一步描述的,像素著色器程序520處理存儲(chǔ)在輸入寄存器中的片段和覆蓋數(shù)據(jù),并將經(jīng)處理的數(shù)據(jù)傳送到輸出寄存器540和輸出屏蔽530。取決于像素著色器程序520中的指令,所傳送的數(shù)據(jù)可以像素信息的形式、或以如上文所描述的片段和覆蓋數(shù)據(jù)的形式。像素信息包括但不限于典型地表示為紅、綠、藍(lán)分量的顏色信息以及深度信息。覆蓋數(shù)據(jù)經(jīng)由輸出屏蔽530被傳送,其指示輸出寄存器540中的數(shù)據(jù)所覆蓋的樣本。
[0074]在一個(gè)示例中,像素著色器程序520包括實(shí)施可編程混合的指令?;旌喜僮靼ㄆ渲袕匿秩灸繕?biāo)讀取像素信息、根據(jù)給定功能修改像素信息以及將經(jīng)修改的像素信息寫(xiě)回到渲染目標(biāo)的任何像素操作。典型地,以原子方式實(shí)施這類(lèi)混合操作,例如無(wú)需任何干預(yù)(intervene)的讀或?qū)懖僮鞫瓿勺?至渲染目標(biāo)的讀操作和其成對(duì)的寫(xiě)操作。利用可編程混合,像素著色器程序520可根據(jù)所編程的指令來(lái)實(shí)施混合操作。正因如此,混合操作將不限于R0P465中的固定功能的混合操作。由像素著色器程序520所計(jì)算的像素信息針對(duì)給定像素中的每個(gè)樣本可能是不同的,因?yàn)榧词乖粗滇槍?duì)所有樣本可能是相同的,目標(biāo)值針對(duì)每個(gè)樣本也可能是不同的。可替代地,由像素著色器程序520所計(jì)算的像素信息針對(duì)給定像素中的兩個(gè)或更多個(gè)樣本可能是相同的。像素著色器程序520可從渲染目標(biāo)讀取數(shù)據(jù)并根據(jù)著色器程序520內(nèi)所定義的混合功能來(lái)實(shí)施混合操作。像素著色器程序520隨后將經(jīng)由輸出寄存器540把結(jié)果像素信息傳送到渲染目標(biāo),并經(jīng)由輸出屏蔽530選擇受到影響的樣本。像素著色器程序520可經(jīng)由多個(gè)分派器(dispatcher)傳送像素信息,其中每個(gè)分派器將具有不同的輸出屏蔽530,從而選擇不同的樣本。通常,像素中的全部樣本與輸出屏蔽530中的位存在 對(duì)應(yīng)關(guān)系。
[0075]如果像素信息針對(duì)每個(gè)樣本是不同的,那么像素著色器程序520將針對(duì)每個(gè)樣本傳送一個(gè)分派器。相應(yīng)的輸出屏蔽530將僅使能正確的樣本用于寫(xiě)。如果像素信息針對(duì)兩個(gè)或更多個(gè)樣本是相同的,那么像素著色器程序520將針對(duì)具有相同像素信息的樣本集傳送一個(gè)分派器。相應(yīng)的輸出屏蔽530將僅使能正確的多個(gè)樣本用于寫(xiě)。像素著色器程序520可檢測(cè)用于像素的所有樣本與在渲染目標(biāo)中所存儲(chǔ)的是同樣的、并且由像素著色器程序520所計(jì)算的像素信息針對(duì)所有樣本是相同的的條件。在這類(lèi)情況中,像素著色器程序520實(shí)施僅操作一次的每樣本可編程混合,并通過(guò)單個(gè)分派器傳送一次結(jié)果像素信息。相應(yīng)的輸出屏蔽530將使能用于像素的所有樣本用于寫(xiě)。
[0076]在應(yīng)用可編程接口(API)級(jí)別,這類(lèi)可編程混合功能可被暴露為像素著色器程序520,所述像素著色器程序520包括每像素傳遞(pass)和程序可選擇的數(shù)目的基于樣本的傳遞,此處每個(gè)基于樣本的傳遞可影響多個(gè)樣本。每個(gè)基于樣本的傳遞將最多實(shí)施一個(gè)分派。像素著色器程序520可將多個(gè)基于樣本的傳遞組合成單個(gè)分派,此處像素信息針對(duì)相應(yīng)的樣本是同樣的。正因如此,像素著色器程序520將在單個(gè)線程中高效地執(zhí)行,首先執(zhí)行每像素計(jì)算,并且隨后執(zhí)行每樣本計(jì)算。在API級(jí)別將該特征暴露為多個(gè)分派有利地對(duì)像素著色器程序520提供靈活性,其可在渲染時(shí)間將多個(gè)分派組合成單個(gè)分派。
[0077]在另一個(gè)示例中,像素著色器程序520包括在混合(hybrid)模式中實(shí)施前向渲染的指令,此處像素著色器程序520的一部分將每像素執(zhí)行一次,并且像素著色器程序520的第二部分將每樣本執(zhí)行一次。典型地,圖形處理管線400操作在多采樣模式或超級(jí)采樣模式這兩個(gè)模式之一中。在多采樣模式中,圖形處理管線400針對(duì)每個(gè)像素位置處理一個(gè)像素信息集,其中像素信息表示顏色和深度值,典型地在每個(gè)像素的中心處。在圖形處理管線400的最終輸出處生成多個(gè)樣本,例如,如R0P465中的混合操作。在超級(jí)采樣模式中,圖形處理管線400針對(duì)每個(gè)樣本位置處理一個(gè)像素信息集,其中像素信息表示針對(duì)像素中的每個(gè)樣本的顏色和深度值。每像素多個(gè)樣本被從光柵化器455到圖形處理管線400的其余部分所處理。超級(jí)采樣模式以減少的性能達(dá)到較高的圖像質(zhì)量。例如,在每個(gè)像素包括四個(gè)樣本的情況下,超級(jí)采樣模式將以多采樣模式的四分之一的性能來(lái)執(zhí)行。也就是說(shuō),超級(jí)采樣模式將以比多采樣模式慢四倍的速度來(lái)執(zhí)行。可替代地,超級(jí)采樣模式將消耗圖形處理管線400內(nèi)的片段處理單元460的四倍于多采樣模式的資源。
[0078]利用混合模式中的前向渲染,將達(dá)到性能接近于多采樣模式的性能的超級(jí)采樣模式的圖像質(zhì)量。圖形處理管線400中是片段處理單元460的上游的級(jí)操作在多采樣模式中。圖形處理管線中時(shí)片段處理單元460的下游的級(jí)操作在超級(jí)采樣模式中。在片段處理單元460中執(zhí)行的像素著色器程序520操作在混合模式中,實(shí)施每像素一次的一些操作和每樣本一次的其他操作,如下文結(jié)合圖6所描述的。
[0079]在又一個(gè)實(shí)施例中,像素著色器程序520包括實(shí)施延遲(defer)渲染的指令。利用延遲渲染,輸入寄存器510將針對(duì)像素中的每個(gè)樣本被寫(xiě)入與高頻屬性相對(duì)應(yīng)的片段數(shù)據(jù),此處屬性存儲(chǔ)在幾何緩沖區(qū)(G-buffer)(未示出)中。像素著色器程序520可將來(lái)自輸入寄存器510的片段和覆蓋數(shù)據(jù)直接傳遞到輸出寄存器540。像素著色器程序520可處理片段或?qū)⑵蝹鬟f到輸出寄存器540而不對(duì)其進(jìn)行處理。一個(gè)片段將被存儲(chǔ)在渲染目標(biāo)中的一個(gè)樣本位置中。正因如此,當(dāng)像素著色器程序520分派片段時(shí),相應(yīng)的輸出屏蔽530使分派能夠被寫(xiě)入到單個(gè)樣本位置中。在稍后的時(shí)間,當(dāng)多個(gè)片段已存儲(chǔ)在渲染目標(biāo)中時(shí),像素著色器程序520從渲染目標(biāo)檢索片段。像素著色器程序520將處理片段,并針對(duì)與給定像素相關(guān)聯(lián)的一個(gè)或多個(gè)樣本位置來(lái)計(jì)算像素信息。像素著色器程序520可經(jīng)由一個(gè)或多個(gè)分派將樣本傳送到輸出寄存器540。輸出寄存器將隨后經(jīng)由存儲(chǔ)器接口 214把像素信息轉(zhuǎn)移到渲染目標(biāo),或?qū)严袼匦畔魉偷絉0P465用于ROP混合。[0080]在一些實(shí)施例中,互鎖機(jī)制可檢測(cè)多個(gè)像素著色器程序520何時(shí)正針對(duì)渲染目標(biāo)中的相同(x,y)位置實(shí)施操作?;ユi機(jī)制可在另一個(gè)像素著色器程序520正對(duì)相同(x,y)位置實(shí)施混合操作(諸如讀-修改-寫(xiě))時(shí)阻止像素著色器程序520訪問(wèn)渲染目標(biāo)中的特定(X,y)位置。如果像素著色器程序520正實(shí)施有序的混合操作,那么圖形對(duì)象以特定次序被混合到渲染目標(biāo)中。諸如結(jié)合圖4所描述的互鎖445的互鎖機(jī)制可使在后的像素著色器程序520停頓,直到在先的像素著色器程序520完成對(duì)(x,y)位置的混合操作。該技術(shù)允許在后的像素著色器程序520可靠地使用來(lái)自針對(duì)相同(x,y)位置運(yùn)行的在先的像素著色器程序520的結(jié)果。
[0081]可替代地,像素著色器程序520可配置為無(wú)序(non-order)的混合操作。在這類(lèi)情況中,互鎖機(jī)制不需要確保特定混合次序。反而,互鎖機(jī)制可允許像素著色器程序520以任何次序訪問(wèn)渲染目標(biāo)中的位置。在這類(lèi)情況中,互鎖機(jī)制可采用軟件鎖來(lái)確保混合操作被原子地實(shí)施。像素著色器程序520在對(duì)(x,y)位置實(shí)施混合操作之前針對(duì)該給定(x,y)位置請(qǐng)求鎖定。如果針對(duì)給定(x,y)位置的鎖定是可用的,那么像素著色器程序520可獲取鎖定并完成對(duì)(x,y)位置的讀-修改-寫(xiě)。像素著色器程序520可隨后釋放鎖定。如果針對(duì)給定(X,y)位置的鎖定是不可用的,那么另一個(gè)像素著色器程序520可正對(duì)相同(X,y)位置實(shí)施混合操作。像素著色器程序可等待直到鎖定變成可用的。當(dāng)鎖定變成可用的時(shí),像素著色器程序520可獲取鎖定并完成對(duì)(X,y)位置的讀-修改-寫(xiě)。像素著色器程序520可隨后釋放鎖定。
[0082]輸出屏蔽530是使能或禁用從著色器程序520所接收的數(shù)據(jù)的一系列位。輸出屏蔽530確定哪個(gè)樣本被寫(xiě)入來(lái)自輸出寄存器540的數(shù)據(jù)。如果具體位被設(shè)置為I,那么相應(yīng)的樣本存儲(chǔ)位置將被寫(xiě)入由像素著色器程序520所計(jì)算的并被寫(xiě)入到輸出寄存器540的數(shù)據(jù)。如果具體位被設(shè)置為0,那么相應(yīng)的樣本存儲(chǔ)位置將不被寫(xiě)入數(shù)據(jù)。在另一個(gè)示例中,輸入屏蔽530中的四位字段可與渲染目標(biāo)中的四個(gè)樣本存儲(chǔ)位置的具體集相對(duì)應(yīng),此處四個(gè)樣本組成特定像素。如果四位字段被設(shè)置為[1111],那么所有的四個(gè)相應(yīng)樣本存儲(chǔ)位置將被寫(xiě)入由像素著色器程序520所計(jì)算的數(shù)據(jù)。如果四位字段被設(shè)置為[0000],那么四個(gè)相應(yīng)樣本存儲(chǔ)位置將均不被寫(xiě)入數(shù)據(jù)。如果四位字段被設(shè)置為[0100],那么僅第二個(gè)相應(yīng)仰恩存儲(chǔ)位置被寫(xiě)入數(shù)據(jù)。如利用多個(gè)分派的進(jìn)一步的示例,利用[1000]的第一分派將把輸出寄存器值的第一集寫(xiě)入第一樣本,利用[0100]的第二分派將把輸出寄存器值的第二集寫(xiě)入第二樣本,等等。每個(gè)分派可通過(guò)使輸出寄存器值的多個(gè)子集中的每個(gè)被寫(xiě)入到相應(yīng)的渲染目標(biāo)來(lái)對(duì)多個(gè)渲染目標(biāo)進(jìn)行寫(xiě)。
[0083]輸出寄存器540包括寄存器集,其是片段處理單元460的本地寄存器集。輸出寄存器540存儲(chǔ)來(lái)自像素著色器程序520的數(shù)據(jù)。如上文所描述的,這類(lèi)數(shù)據(jù)可以是以像素信息的形式,包括顏色信息、深度信息和像素的其他屬性??商娲?,數(shù)據(jù)可以是以片段和覆蓋數(shù)據(jù)的形式,諸如在延遲渲染的情況中。取決于像素著色器程序520中的具體指令和圖形處理管線400的狀態(tài),輸出寄存器540中的數(shù)據(jù)可被傳送到R0P465,或通過(guò)經(jīng)由交叉開(kāi)關(guān)單元210將數(shù)據(jù)傳送到存儲(chǔ)器接口 214而被直接寫(xiě)入到渲染目標(biāo)。
[0084]在一些實(shí)施例中,輸出寄存器540可能不直接支持來(lái)自像素著色器程序520的多個(gè)分派。在這類(lèi)情況中,像素著色器輸出寄存器540可以是標(biāo)準(zhǔn)的單個(gè)分派的著色器寄存器。在這類(lèi)架構(gòu)中,當(dāng)著色器程序520結(jié)束時(shí),單獨(dú)的進(jìn)程(未示出)讀輸出寄存器540并將相應(yīng)值向下游發(fā)送到渲染目標(biāo)或R0P465。對(duì)于支持多個(gè)分派的像素著色器的輸出寄存器540,可經(jīng)由任何技術(shù)上可行的方法來(lái)完成到渲染目標(biāo)的轉(zhuǎn)移,包括但不限于:(i)在每個(gè)分派之后使像素著色器程序520停頓直到輸出寄存器540已被讀,并且隨后發(fā)出下一個(gè)分派;(ii)將數(shù)據(jù)存儲(chǔ)到專(zhuān)用于特定分派的輸出寄存器540中;(iii)將數(shù)據(jù)存儲(chǔ)到寄存器的雙緩沖集中,其中在所述寄存器中兩個(gè)緩沖區(qū)在分派之間被交換;(iv)將專(zhuān)用數(shù)據(jù)存儲(chǔ)到單緩沖寄存器集中并將每樣本輸出數(shù)據(jù)存儲(chǔ)到雙緩沖寄存器集中。
[0085]圖6示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖5的片段處理單元460內(nèi)的像素著色器程序520。如所示的,像素著色器程序520包括多個(gè)級(jí),包括陰影映射級(jí)610、環(huán)境光遮蔽級(jí)620、子面(subsurface)散射級(jí)630、漫反射光照級(jí)640、阿爾法(alpha)測(cè)試級(jí)650以及鏡面光照級(jí)660。
[0086]陰影映射級(jí)610創(chuàng)建在圖形對(duì)象阻塞光源路徑時(shí)產(chǎn)生的陰影。陰影映射級(jí)610在確定可見(jiàn)像素比在相同光路徑中的另一個(gè)像素更靠近光源時(shí)創(chuàng)建陰影。陰影映射級(jí)610將陰影映射操作的結(jié)果傳送到環(huán)境光遮蔽級(jí)620。
[0087]環(huán)境光遮蔽級(jí)620近似光源的輻射,此處圖像中每個(gè)像素處的照明基于場(chǎng)景中的其他圖形對(duì)象。環(huán)境光遮蔽級(jí)620將環(huán)境光遮蔽操作的結(jié)果傳送到子面散射級(jí)630。
[0088]子面散射級(jí)630近似在下述情況下的效果:光在具體點(diǎn)處部分地穿透透明(translucent)圖形對(duì)象的表面、被透明對(duì)象內(nèi)部地散射并隨后在不同點(diǎn)處退出透明對(duì)象。子面散射級(jí)630將子面散射操作的結(jié)果傳送到漫反射光照級(jí)640。
[0089]漫反射光照級(jí)640近似下述情況下的效果:光觸擊(strike)到圖形對(duì)象并被表面反射到許多方向中。漫反射光照以具有不規(guī)則或無(wú)光澤表面的對(duì)象為特點(diǎn),并與下文所描述的鏡面光照形成對(duì)比。漫反射光照級(jí)640將漫反射光照操作的結(jié)果傳送到阿爾法測(cè)試級(jí)650。
[0090]典型地,由陰影映射級(jí)610、環(huán)境光遮蔽級(jí)620、子面散射級(jí)630以及漫反射光照級(jí)640所實(shí)施的計(jì)算展示低的空間頻率。也就是說(shuō),來(lái)自這些級(jí)的像素信息在相鄰像素之間可能不會(huì)明顯地改變。正因如此,這些級(jí)可以每像素執(zhí)行一次而在圖像質(zhì)量上沒(méi)有顯著損耗。在這些級(jí)完成之后,像素信息的單個(gè)集被傳送到阿爾法測(cè)試級(jí)650(0) - 650(3),此處每個(gè)阿爾法測(cè)試級(jí)650每樣本執(zhí)行一次。
[0091]阿爾法測(cè)試級(jí)650對(duì)比先前存儲(chǔ)在渲染目標(biāo)中的像素來(lái)測(cè)試由像素著色器程序所計(jì)算的像素。如果所計(jì)算的像素具有的深度值小于渲染目標(biāo)中的深度值,那么所計(jì)算的像素被存儲(chǔ)在渲染目標(biāo)中,否則所計(jì)算的像素被丟棄。在一些實(shí)施例中,所計(jì)算的像素基于各自的深度值和其他參數(shù)與所存儲(chǔ)的像素混合。典型地,由阿爾法測(cè)試級(jí)650所實(shí)施的計(jì)算展示高的空間頻率。也就是說(shuō),來(lái)自阿爾法測(cè)試級(jí)650的結(jié)果像素信息在相鄰像素之間可明顯地改變。正因如此,實(shí)施阿爾法測(cè)試每像素一次可導(dǎo)致圖像質(zhì)量的顯著損耗。因此,阿爾法測(cè)試被每樣本實(shí)施一次。阿爾法測(cè)試級(jí)650 (O)針對(duì)第一樣本實(shí)施阿爾法測(cè)試,阿爾法測(cè)試級(jí)650(1)針對(duì)第二樣本實(shí)施阿爾法測(cè)試,以此類(lèi)推。每個(gè)阿爾法測(cè)試級(jí)650 (O) - 650 (3)將阿爾法測(cè)試操作的結(jié)果傳送到相應(yīng)的鏡面光照級(jí)660 (O) - 660 (3)。
[0092]鏡面光照級(jí)660近似下述效果:光觸擊到圖形對(duì)象的表面并被表面反射到單個(gè)方向中。鏡面光照以具有平滑的、高度反光的表面的對(duì)象為特點(diǎn),并與上文所描述的漫反射光照形成對(duì)比。典型地,由鏡面光照級(jí)660所實(shí)施的計(jì)算展示高的空間頻率。也就是說(shuō),來(lái)自鏡面光照級(jí)660的結(jié)果像素信息在相鄰像素之間可明顯地改變。正因如此,實(shí)施鏡面光照每像素一次可導(dǎo)致圖像質(zhì)量的顯著損耗。因此,鏡面光照被每樣本實(shí)施一次,如上文所描述的。鏡面光照級(jí)660通過(guò)使用樣本屏蔽530的不同值來(lái)將鏡面光照操作的結(jié)果傳送到輸出寄存器540作為像素著色器程序520的每樣本的輸出。
[0093]圖7示出了根據(jù)本發(fā)明的一個(gè)實(shí)施例的、圖5的片段處理單元460內(nèi)的輸出寄存器700的一部分。如所示的,輸出寄存器700的一部分包括多個(gè)渲染目標(biāo)(MRT)緩沖區(qū)710,其被在片段處理單元460上同時(shí)執(zhí)行的多個(gè)線程720所寫(xiě)。
[0094]MRT緩沖區(qū)710是輸出寄存器700的一部分內(nèi)的寄存器組。每個(gè)MRT緩沖區(qū)710包括與不同的渲染目標(biāo)相對(duì)應(yīng)的位置集。MRT緩沖區(qū)710 (O)與渲染目標(biāo)O相對(duì)應(yīng),MRT緩沖區(qū)710(1)與渲染目標(biāo)I相對(duì)應(yīng),以此類(lèi)推。每個(gè)MRT緩沖區(qū)710包括存儲(chǔ)與特定樣本相對(duì)應(yīng)的像素信息的數(shù)個(gè)樣本位置730、740、750、760。線程720是像素著色器程序520的實(shí)例,并且八個(gè)線程720針對(duì)MRT緩沖區(qū)710(0)中的八個(gè)相應(yīng)像素的第一樣本在樣本位置730 (O) - 730(7)處存儲(chǔ)樣本信息。同樣地,線程720針對(duì)MRT緩沖區(qū)710 (I)中的第二樣本在樣本位置740(0) - 740(7)處、針對(duì)MRT緩沖區(qū)710(2)中的第三樣本在樣本位置750(0) - 750(7)處、針對(duì)MRT緩沖區(qū)710(3)中的第四樣本在樣本位置760 (O) - 760(7)處存儲(chǔ)樣本信息。在該安排中,針對(duì)特定線程的MRT緩沖區(qū)710針對(duì)特定渲染目的像素內(nèi)的多個(gè)樣本存儲(chǔ)數(shù)據(jù),而不是如在現(xiàn)有技術(shù)中的針對(duì)跨越多個(gè)渲染目標(biāo)的單個(gè)像素。
[0095]線程720表示像素著色器程序520的分開(kāi)的實(shí)例,此處每個(gè)實(shí)例針對(duì)給定像素中的一些樣本計(jì)算像素信息。典型地,像素著色器程序520在給定MRT緩沖區(qū)710中僅對(duì)一個(gè)像素位置進(jìn)行寫(xiě),但對(duì)于給定線程720,渲染目標(biāo)中的特定像素內(nèi)的所有樣本均由與該線程相對(duì)應(yīng)的MRT緩沖區(qū)710的部分所覆蓋。正因如此,像素著色器程序520在線程720 (O)處的實(shí)例將樣本730 (O)寫(xiě)到被指向第一渲染目標(biāo)的MRT緩沖區(qū)710 (O),像素著色器程序520在線程720 (O)處的實(shí)例將樣本740 (O)寫(xiě)到被指向第二渲染目標(biāo)的MRT緩沖區(qū)710 (I),以此類(lèi)推。結(jié)果,線程720 (O)針對(duì)第一組的四個(gè)樣本計(jì)算像素信息并存儲(chǔ)樣本730 (O)、740 (O)、750(0)和760(0)中的像素信息。這四個(gè)樣本分別與MRT緩沖區(qū)710 (O) -710(3)相對(duì)應(yīng)。類(lèi)似地,線程720 (I)針對(duì)第二組的四個(gè)樣本計(jì)算像素信息,并在樣本位置730 (I)、740 (I)、750(1)和760(1)處存儲(chǔ)像素信息,以此類(lèi)推。一旦所有線程720(0) - 720(7)均填充了樣本位置730、740、750、760,MRT緩沖區(qū)710 (O) - 710(3)可被轉(zhuǎn)移到多個(gè)渲染目標(biāo)中的相應(yīng)像素。在一些實(shí)施例中,輸出屏蔽530針對(duì)每個(gè)線程720可能是不同的。例如,針對(duì)線程720(0)的輸出屏蔽可僅使能樣本730 (O)和740 (O)用于在給定分派中寫(xiě),線程720 (I)可僅使能樣本760(1)用于寫(xiě),并且線程720 (2)可使能在相同分派中的所有四個(gè)樣本730(2)、740 (2)、750 (2)和 760(2)用于寫(xiě)。
[0096]圖7B示出了根據(jù)本發(fā)明另一個(gè)實(shí)施例的、圖5的片段處理單元460內(nèi)的輸出寄存器770的一部分。如所示的,輸出寄存器770的一部分包括由線程720所填充的MRT緩沖區(qū)710。MRT緩沖區(qū)710和線程720的運(yùn)作大體上與結(jié)合圖7A所描述的相同,除了下文所進(jìn)一步描述的。
[0097]如所示的,線程720中的每一個(gè)針對(duì)渲染目標(biāo)中的相應(yīng)像素775計(jì)算像素信息。線程720 (O)針對(duì)像素775 (O)的四個(gè)樣本計(jì)算像素信息,并在樣本位置730(0)、740 (O)、750(0)和760(0)處存儲(chǔ)像素信息。類(lèi)似地,線程720(1)針對(duì)像素775(1)的四個(gè)樣本計(jì)算像素信息,并在樣本位置730(1)、740(1)、750(1)和760(1)處存儲(chǔ)像素信息,以此類(lèi)推。雖然線程橫跨MRT緩沖區(qū)710填充垂直條狀的樣本位置730、740、750、760,但是樣本位置730、740、750、760可一次一個(gè)MRT緩沖區(qū)710地被高效地轉(zhuǎn)移到多個(gè)渲染目標(biāo),如下文所進(jìn)一步描述的。
[0098]圖7C示出了根據(jù)本發(fā)明再一個(gè)實(shí)施例的、圖5的片段處理單元460內(nèi)的輸出寄存器780的一部分。如所示的,輸出寄存器780包括由線程720所填充的MRT緩沖區(qū)710。MRT緩沖區(qū)710和線程720的運(yùn)作大體上與結(jié)合圖7A-7B所描述的相同,除了下文所進(jìn)一步描述的。
[0099]如所示的,MRT緩沖區(qū)710(0)包括樣本位置730(0) - 730 (3),其與針對(duì)四個(gè)像素775(0) - 775(3)的組的第一樣本相對(duì)應(yīng),如由線程720 (O) - 720(3)所計(jì)算的。來(lái)自輸出寄存器780的一部分的單個(gè)轉(zhuǎn)移可將樣本位置730 (O) - 730(3)中的值轉(zhuǎn)移到與多個(gè)渲染目標(biāo)相關(guān)聯(lián)的數(shù)據(jù)采集器(未示出)。MRT緩沖區(qū)710 (I)包括樣本位置740 (O) - 740 (3),其與針對(duì)四個(gè)像素775(0) - 775(3)的組的第二樣本相對(duì)應(yīng)。來(lái)自輸出寄存器780的一部分的單個(gè)轉(zhuǎn)移可將樣本位置740 (O) - 740(3)中的值轉(zhuǎn)移到與多個(gè)渲染目標(biāo)相關(guān)聯(lián)的數(shù)據(jù)采集器。相似的轉(zhuǎn)移可將第三和第四樣本的值從輸出寄存器780的一部分轉(zhuǎn)移到數(shù)據(jù)采集器。一旦數(shù)據(jù)采集器包括針對(duì)四個(gè)像素775 (O) - 775(3)的所有樣本值,那么數(shù)據(jù)采集器重新排列數(shù)據(jù)用于存儲(chǔ)在針對(duì)四個(gè)像素775(0) - 775(3)的合適的渲染目標(biāo)存儲(chǔ)器位置。附加的轉(zhuǎn)移可隨后轉(zhuǎn)移由線程720(4) - 720(7)針對(duì)第二組的四個(gè)像素(未示出)所計(jì)算的樣本信息。在一些實(shí)施例中,MRT緩沖區(qū)710連同相應(yīng)的輸出屏蔽530在一個(gè)或多個(gè)分派中被從輸出寄存器540轉(zhuǎn)移到R0P465。在其他實(shí)施例中,像素著色器程序520在輸出寄存器540中讀MRT緩沖區(qū)710連同輸出屏蔽530,并在一個(gè)或多個(gè)分派中將MRT緩沖區(qū)710和輸出屏蔽530轉(zhuǎn)移到渲染目標(biāo)。
[0100]圖8示出了根據(jù)本發(fā)明一個(gè)實(shí)施例的、與渲染目標(biāo)中的多個(gè)像素830相交的幾何基元810。如所示的,像素830中的每一個(gè)包括四個(gè)樣本820。幾何基元810完全覆蓋像素830(0)的所有四個(gè)樣本820(0) - 820(3)。因此,像素著色器程序520可利用單個(gè)分派來(lái)轉(zhuǎn)移用于所有四個(gè)樣本820 (O) - 820(3)的樣本信息。幾何基元810完全覆蓋像素830 (I)的兩個(gè)樣本820 (4) 820 (6)0因此,像素著色器程序520可利用單個(gè)分派來(lái)轉(zhuǎn)移用于樣本820(4)820(6)的樣本信息。幾何基元部分地覆蓋像素830 (2)的三個(gè)樣本820 (8)-820 (10)。因此,像素著色器程序520可利用單個(gè)分派來(lái)轉(zhuǎn)移用于樣本820(8)-820(10)的樣本信息。可替代地,針對(duì)樣本820 (8)-820 (10)中的每一個(gè)的樣本信息可能是不同的,因?yàn)閹缀位獙?duì)每個(gè)樣本820 (8) -820 (10)覆蓋不同的量,或者因?yàn)殓R面高光(或某個(gè)其他著色效果)創(chuàng)建不同的顏色值。正因如此,像素著色器程序520可利用三個(gè)分派來(lái)轉(zhuǎn)移用于樣本820 (8)-820 (10)的樣本信息。最后,幾何基元810部分地覆蓋像素830 (3)的一個(gè)樣本820 (12)。因此,像素著色器程序520可利用單個(gè)分派來(lái)轉(zhuǎn)移用于樣本820 (12)的樣本信息。
[0101]將理解的是,本文所描述的架構(gòu)僅是示例性的,并且變形和修改是可能的。在一個(gè)示例中,本文在八個(gè)線程的環(huán)境中描述技術(shù),每個(gè)針對(duì)每個(gè)包括四個(gè)樣本的像素計(jì)算像素信息。然而,可采用所描述的技術(shù)來(lái)對(duì)每像素包括任何數(shù)目的樣本的像素進(jìn)行著色。此外,可跨任何數(shù)目的線程采用所描述的技術(shù),此處直接的像素信息到任何數(shù)目的渲染目標(biāo)。
[0102]圖9闡述了根據(jù)本發(fā)明一個(gè)實(shí)施例的、用于分派來(lái)自圖形處理管線400中的像素著色器程序520的像素值的方法步驟的流程圖。雖然結(jié)合圖1-7C的系統(tǒng)描述了方法步驟,但是本領(lǐng)域普通技術(shù)人員將理解的是,配置為以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0103]如所示的,方法900開(kāi)始于步驟902,此處片段處理單元460接收包括至少一個(gè)像素的片段,此處片段是圖形基元的一部分。在步驟904,片段處理單元460基于所接收的片段生成包括多個(gè)樣本的像素。在步驟906,片段處理單元460計(jì)算源值集,此處每個(gè)源值與像素的不同的樣本相對(duì)應(yīng)。在步驟908,片段處理單元460從渲染目標(biāo)檢索目標(biāo)值,此處每個(gè)目標(biāo)值與不同的源值相對(duì)應(yīng)。在步驟910,片段處理單元460將每個(gè)源值與相應(yīng)的目標(biāo)值進(jìn)行混合以創(chuàng)建最終值。在步驟912,創(chuàng)建一個(gè)或多個(gè)分派消息以將最終值存儲(chǔ)在輸出寄存器集中。隨后方法900結(jié)束。
[0104]圖10闡述了根據(jù)本發(fā)明另一個(gè)實(shí)施例的、用于分派來(lái)自圖形處理管線400中的像素著色器程序520的像素值的方法步驟的流程圖。雖然結(jié)合圖1-7C的系統(tǒng)描述了方法步驟,但是本領(lǐng)域普通技術(shù)人員將理解的是,配置為以任何次序?qū)嵤┓椒ú襟E的任何系統(tǒng)均在本發(fā)明的范圍內(nèi)。
[0105]如所示的,方法1000開(kāi)始于步驟1002,此處片段處理單元接收包括至少一個(gè)像素的片段,此處片段是圖形基元的一部分。在步驟1004,片段處理單元460基于所接收的片段生成包括多個(gè)樣本的像素。在步驟1006,片段處理單元460實(shí)施每像素計(jì)算一次的一個(gè)或多個(gè)計(jì)算。在步驟1008,片段處理單元460實(shí)施針對(duì)像素的每個(gè)樣本計(jì)算一次的一個(gè)或多個(gè)計(jì)算。在步驟1010,片段處理單元460將每像素計(jì)算的結(jié)果和每樣本計(jì)算的結(jié)果進(jìn)行組合,以創(chuàng)建用于像素的每個(gè)樣本的最終值。在步驟1012,片段處理單元?jiǎng)?chuàng)建一個(gè)或多個(gè)分派消息以將最終值存儲(chǔ)在輸出寄存器集中。隨后方法1000結(jié)束。
[0106]總而言之,片段處理單元包括配置為將用于每個(gè)像素的多個(gè)分派傳送到一個(gè)或多個(gè)渲染目標(biāo)的像素著色器程序。像素著色器程序在單個(gè)線程中執(zhí)行,通過(guò)首先實(shí)施每像素計(jì)算并且隨后實(shí)施每樣本計(jì)算。每像素計(jì)算針對(duì)像素中的所有樣本被實(shí)施一次。如果用于給定像素的多個(gè)樣本具有同樣的源和目標(biāo)像素信息,那么多個(gè)樣本包括在樣本集中。每樣本計(jì)算可針對(duì)每個(gè)樣本集被實(shí)施一次,而不是針對(duì)每個(gè)樣本一次。像素著色器程序隨后針對(duì)每個(gè)樣本集分派一次像素信息連同相應(yīng)的輸出屏蔽,以將經(jīng)混合的樣本存儲(chǔ)回渲染目標(biāo)中。
[0107]所公開(kāi)的技術(shù)的一個(gè)優(yōu)點(diǎn)是,像素著色器程序以增加的效率實(shí)施每樣本操作。在典型的場(chǎng)景中,像素著色器程序以接近于每像素著色的性能達(dá)到每樣本像素著色的較高的圖像質(zhì)量。
[0108]本發(fā)明的一個(gè)實(shí)施例可被實(shí)現(xiàn)為與計(jì)算機(jī)系統(tǒng)一起使用的程序產(chǎn)品。該程序產(chǎn)品的程序定義實(shí)施例的各功能(包括本文中描述的方法)并且可以被包含在各種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)上。示例性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)包括但不限于:(i)不可寫(xiě)的存儲(chǔ)介質(zhì)(例如,計(jì)算機(jī)內(nèi)的只讀存儲(chǔ)器設(shè)備,諸如可由壓縮光盤(pán)只讀存儲(chǔ)器(CD-ROM)驅(qū)動(dòng)器讀取的CD-ROM盤(pán)、閃存存儲(chǔ)器、只讀存儲(chǔ)器(ROM)芯片或任何類(lèi)型的固態(tài)非易失性半導(dǎo)體存儲(chǔ)器),在其上存儲(chǔ)永久性信息jP(ii)可寫(xiě)的存儲(chǔ)介質(zhì)(例如,磁盤(pán)驅(qū)動(dòng)器或硬盤(pán)驅(qū)動(dòng)器內(nèi)的軟盤(pán)或者任何類(lèi)型的固態(tài)隨機(jī)存取半導(dǎo)體存儲(chǔ)器),在其上存儲(chǔ)可更改的信息。
[0109]以上已參照具體實(shí)施例對(duì)本發(fā)明進(jìn)行了描述。然而,本領(lǐng)域普通技術(shù)人員將理解的是,可對(duì)此做出各種修改和改變而不脫離如隨附權(quán)利要求書(shū)中所闡述的本發(fā)明的較寬精神和范圍。因此,前面的描述以及附圖應(yīng)被視為是例示性而非限制性的意義。
[0110]因此,本發(fā)明的實(shí)施例的范圍在下面的權(quán)利要求中加以闡述。
【權(quán)利要求】
1.一種用于分派圖形處理管線中的像素信息的方法,所述方法包括: 基于由第一線程所接收的圖形基元的第一部分生成包括多個(gè)樣本的第一像素; 針對(duì)所述第一像素計(jì)算第一值,其中所述第一值針對(duì)所述第一像素僅被計(jì)算一次;針對(duì)所述多個(gè)樣本中的樣本計(jì)算第一值集,其中所述第一值集中的每個(gè)值與所述多個(gè)樣本中的不同樣本相對(duì)應(yīng),并針對(duì)相對(duì)應(yīng)的樣本僅被計(jì)算一次; 將所述第一值與所述第一值集中的每個(gè)值進(jìn)行組合以創(chuàng)建第二值集;以及 創(chuàng)建兩個(gè)或更多個(gè)分派消息以將所述第二值集存儲(chǔ)在輸出寄存器集中。
2.—種子系統(tǒng),包括: 片段處理單元,其配置為通過(guò)實(shí)施下述步驟來(lái)分派圖形處理管線中的像素信息: 基于由第一線程所接收的圖形基元的第一部分生成包括多個(gè)樣本的第一像素; 針對(duì)所述第一像素計(jì)算第一值,其中所述第一值針對(duì)所述第一像素僅被計(jì)算一次;針對(duì)所述多個(gè)樣本中的樣本計(jì)算第一值集,其中所述第一值集中的每個(gè)值與所述多個(gè)樣本中的不同樣本相對(duì)應(yīng),并針對(duì)相對(duì)應(yīng)的樣本僅被計(jì)算一次; 將所述第一值與所述第一值集中的每個(gè)值進(jìn)行組合以創(chuàng)建第二值集;以及 創(chuàng)建兩個(gè)或更多個(gè)分派消息以將所述第二值集存儲(chǔ)在輸出寄存器集中。
3.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述片段處理單元進(jìn)一步配置為實(shí)施下述步驟: 確定第二線程正對(duì) 所述第一像素實(shí)施操作; 使所述第二線程停頓直到所述第一線程完成執(zhí)行與所述第一像素有關(guān)的操作;以及 釋放所述第二線程。
4.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中創(chuàng)建兩個(gè)或更多個(gè)分派消息包括: 確定所述第二值集中的兩個(gè)或更多個(gè)值相等; 生成輸出屏蔽,以使能與對(duì)應(yīng)于所述兩個(gè)或更多個(gè)值的樣本位置相關(guān)的寫(xiě)操作并禁用與和所述第一像素相關(guān)聯(lián)的其他樣本位置相關(guān)的寫(xiě)操作;以及創(chuàng)建包括所述兩個(gè)或更多個(gè)值的拷貝的分派消息。
5.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述片段處理單元進(jìn)一步配置為實(shí)施將所述輸出寄存器集的內(nèi)容轉(zhuǎn)移到光柵操作單元的步驟。
6.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述片段處理單元進(jìn)一步配置為實(shí)施將所述輸出寄存器集的內(nèi)容轉(zhuǎn)移到渲染目標(biāo)的步驟。
7.根據(jù)權(quán)利要求6所述的子系統(tǒng),其中轉(zhuǎn)移所述輸出寄存器集的內(nèi)容包括: 對(duì)包括多個(gè)樣本位置的值的輸出寄存器進(jìn)行讀,其中每個(gè)樣本位置與多個(gè)像素中的不同像素的第一樣本相對(duì)應(yīng);以及 將所述多個(gè)樣本位置中的每個(gè)樣本位置的值寫(xiě)到所述渲染目標(biāo)中的相對(duì)應(yīng)的樣本位置中。
8.根據(jù)權(quán)利要求7所述的子系統(tǒng),其中所述多個(gè)樣本位置中的每個(gè)樣本位置的值由相同的線程來(lái)寫(xiě)。
9.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述第二值集包括與所述多個(gè)樣本中的一個(gè)或多個(gè)樣本相關(guān)的像素信息,其中所述像素信息包括顏色信息和深度信息中的至少一個(gè)。
10.根據(jù)權(quán)利要求2所述的子系統(tǒng),其中所述第二值集包括與所述圖形基元的所述第一部分相關(guān)聯(lián)的片段信息,其中所述片段信息包括片段位置、顏色元素、紋理元素、模板屏蔽、透明度值和覆蓋數(shù)據(jù)中的至`少一個(gè)。
【文檔編號(hào)】G06T15/00GK103886634SQ201310718024
【公開(kāi)日】2014年6月25日 申請(qǐng)日期:2013年12月23日 優(yōu)先權(quán)日:2012年12月21日
【發(fā)明者】杰爾姆·F·小杜魯克, 魯斯蘭·季米特洛夫, 埃里克·盧姆, 魯伊·巴斯托斯 申請(qǐng)人:輝達(dá)公司