圖形處理的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及圖形處理,具體地涉及包括頂點(diǎn)著色(vertex shading)階段的圖形處理流水線(pipeline)的操作。
【背景技術(shù)】
[0002]如本領(lǐng)域已知,圖形處理通常通過(guò)首先將要顯示的場(chǎng)景(例如,3D模型)分成多個(gè)相似的基本成分或“基元(primitive) ”,然后對(duì)這些基元進(jìn)行期望的圖形處理操作來(lái)執(zhí)行。圖形“基元”通常處于簡(jiǎn)單多邊形的形式,諸如三角形。
[0003]針對(duì)諸如要顯示的幀的輸出的基元通常是利用從要求圖形處理的應(yīng)用(例如,游戲)接收的圖形繪制指令(請(qǐng)求),通過(guò)圖形處理系統(tǒng)的應(yīng)用程序界面來(lái)生成的。
[0004]每個(gè)基元通常被限定且被表示為一組頂點(diǎn)?;拿總€(gè)頂點(diǎn)通常已經(jīng)與其相關(guān)聯(lián)的一組“屬性”,即頂點(diǎn)的一組數(shù)據(jù)值。這些屬性通常將包括針對(duì)所關(guān)注的頂點(diǎn)的位置數(shù)據(jù)及其它、非位置數(shù)據(jù)(變型),例如限定顏色、光、法線、紋理坐標(biāo)等。
[0005]對(duì)于要由圖形處理系統(tǒng)生成的給定輸出,例如要顯示的幀,通常將具有針對(duì)所關(guān)注的輸出限定的一組頂點(diǎn)。然后,要針對(duì)輸出處理的基元將被指示為包括所述一組頂點(diǎn)中的給定的頂點(diǎn)以用于生成圖形處理輸出。通常,整體輸出,例如要生成的幀,將被劃分成更小的處理單元,稱為“繪制調(diào)用(draw call)”。每個(gè)繪制調(diào)用將具有針對(duì)其限定的各自的一組頂點(diǎn)和使用這些頂點(diǎn)的一組基元。
[0006]在基元及其頂點(diǎn)已經(jīng)被生成并限定時(shí),它們能夠通過(guò)圖形處理系統(tǒng)處理,以生成期望的圖形處理輸出(渲染對(duì)象),例如用于顯示的幀。這基本上涉及基元的柵格化和渲染,以生成圖形處理輸出。
[0007]柵格化和渲染過(guò)程使用與正在處理的基元的頂點(diǎn)相關(guān)聯(lián)的頂點(diǎn)屬性。為了方便該操作,針對(duì)給定圖形處理輸出(例如,繪制調(diào)用)限定的頂點(diǎn)的屬性通常在基元被柵格化和渲染之前進(jìn)行所謂的初始“頂點(diǎn)著色”操作。該“頂點(diǎn)著色”操作被操作以將每個(gè)頂點(diǎn)的屬性轉(zhuǎn)換成所需形式,以用于隨后的圖形處理操作。這可以包括例如將頂點(diǎn)位置屬性從最初限定的世界或用戶空間轉(zhuǎn)換成圖形處理系統(tǒng)要在其中進(jìn)行顯示的輸出的屏幕空間。
[0008]因此,圖形處理流水線通常將包括頂點(diǎn)著色階段(頂點(diǎn)著色器),該頂點(diǎn)著色階段對(duì)針對(duì)頂點(diǎn)限定的初始頂點(diǎn)屬性值執(zhí)行頂點(diǎn)著色計(jì)算,以生成期望的一組輸出頂點(diǎn)屬性(即,恰當(dāng)“著色”屬性)以用于圖形處理流水線的隨后的處理階段。
[0009]頂點(diǎn)著色器通常是執(zhí)行關(guān)于輸入頂點(diǎn)屬性值的頂點(diǎn)著色器程序(“頂點(diǎn)著色器”)的圖形處理流水線的可編程處理階段,以生成期望的一組輸出“頂點(diǎn)著色后的”屬性數(shù)據(jù)(例如,恰當(dāng)轉(zhuǎn)換的頂點(diǎn)位置數(shù)據(jù))以用于剩余的圖形處理流水線的處理。頂點(diǎn)著色器可以與圖形處理流水線的其它“著色器”共享可編程處理電路,或者其可以是獨(dú)特的可編程處理單元。
[0010]因此,頂點(diǎn)著色器是通過(guò)在要生成的圖形輸出(渲染目標(biāo))(例如幀)中運(yùn)行針對(duì)每個(gè)頂點(diǎn)(并針對(duì)每個(gè)頂點(diǎn)屬性)的小程序來(lái)執(zhí)行圖形處理的處理單元。通常將針對(duì)要處理的每個(gè)頂點(diǎn)(和/或頂點(diǎn)屬性)發(fā)行執(zhí)行線程,然后改線程將執(zhí)行著色程序中的指令,以生成期望的頂點(diǎn)著色的輸出屬性數(shù)據(jù)。
[0011]在頂點(diǎn)屬性已著色時(shí),則當(dāng)在剩下的圖形處理流水線中處理頂點(diǎn)(和頂點(diǎn)相關(guān)的基元)時(shí)使用“著色的”屬性。
[0012](通常,“輸入變量”和“輸出變量”是用于來(lái)自圖形處理流水線中的著色器(著色階段)的輸入和輸出的通用術(shù)語(yǔ)。在進(jìn)行頂點(diǎn)著色之前,頂點(diǎn)是能夠在頂點(diǎn)著色器內(nèi)部作為輸入變量進(jìn)行存取的“通用頂點(diǎn)屬性”的集合。然后,頂點(diǎn)著色器執(zhí)行生成頂點(diǎn)位置和通過(guò)頂點(diǎn)著色器清晰寫入的任何輸出。“變型”是從頂點(diǎn)著色器向柵格化和片段著色傳達(dá)的屬性,不包括位置。(因此,僅來(lái)自頂點(diǎn)著色器的非位置輸出是“變型”。))
[0013]圖1示意性地示出了在基于示例性圖塊(tile)的圖形處理流水線10的情況下的上述操作。
[0014](由于圖1中所示的圖形處理流水線是基于圖塊的渲染流水線,二維渲染輸出或目標(biāo)(即,渲染過(guò)程的輸出,例如要顯示的輸出幀)被渲染為多個(gè)更小的區(qū)域子區(qū)域,通常稱為“圖塊”。每個(gè)圖塊分別進(jìn)行渲染(通常一個(gè)接一個(gè))。經(jīng)渲染的圖塊然后進(jìn)行組合,以提供完整的渲染輸出(例如,用于顯示的幀)。在這種設(shè)置中,渲染目標(biāo)(輸出)通常被劃分(按面積)成規(guī)則大小和形狀的渲染圖塊(他們例如通常是正方形或長(zhǎng)方形),但是這不是最重要的。
[0015]共同用于“圖塊化”和“基于圖塊的”渲染的其它術(shù)語(yǔ)包括“組塊化”(渲染圖塊被稱為“組塊”)和“桶”渲染。為了方便起見,下面中將使用術(shù)語(yǔ)“圖塊”和“圖塊化”,但是應(yīng)當(dāng)理解的是,這些術(shù)語(yǔ)旨在包含全部的可選和等同術(shù)語(yǔ)和技術(shù)。)
[0016]圖1示出了整體圖形處理流水線的某些但不是全部階段和成分,S卩,與本發(fā)明的操作相關(guān)的階段。因此,圖1示出了圖形處理流水線10的頂點(diǎn)著色階段11、圖塊器12以及片段前端和片段著色階段13。
[0017]頂點(diǎn)著色階段11接收進(jìn)來(lái)的頂點(diǎn)(屬性數(shù)據(jù))并且對(duì)頂點(diǎn)屬性執(zhí)行頂點(diǎn)著色操作,例如利用轉(zhuǎn)換函數(shù)轉(zhuǎn)換頂點(diǎn)的屬性。
[0018]然后,頂點(diǎn)著色后的屬性與組成例如被處理的繪制調(diào)用的一列基元一起被傳遞到圖塊器12,該圖塊器12將這些基元分類成圖形處理輸出(渲染目標(biāo))已經(jīng)被劃分成的圖塊的各自的基元列表(圖塊列表),以指示針對(duì)每個(gè)圖塊要處理的基元。
[0019]然后,基元列表與定點(diǎn)著色后的屬性一起被供給到片段前端和片段著色階段13。片段前端和片段著色階段13執(zhí)行柵格化和渲染過(guò)程。
[0020]要執(zhí)行此操作,片段前端和片段著色階段13包括執(zhí)行包括基元(例如,三角形設(shè)置和柵格化)在內(nèi)的片段“前端”操作的固定硬件元件。如本領(lǐng)域中已知,柵格化過(guò)程使基元柵格化以生成要執(zhí)行包括渲染在內(nèi)的進(jìn)一步的圖形處理操作的“片段”。(“片段”是通過(guò)渲染過(guò)程(渲染流水線)的圖形實(shí)體)。
[0021]由柵格化器生成的片段在片段前端和片段著色階段13的片段著色器中進(jìn)行渲染。渲染過(guò)程使用片段位置(源自著色后的頂點(diǎn)位置屬性)和著色后的頂點(diǎn)變型(非位置頂點(diǎn)屬性)一起來(lái)導(dǎo)出數(shù)據(jù),例如紅色值、綠色值和藍(lán)色值(RGB)以及“阿爾法”(透明)值,這些值是表示在渲染目標(biāo)的采樣位置處的基元所必須的(即,片段著色器使渲染目標(biāo)的采樣位置“著色”)。
[0022]經(jīng)渲染的片段數(shù)據(jù)(采樣位置數(shù)據(jù))被寫入圖塊緩沖器,隨后作為像素?cái)?shù)據(jù)被寫出到幀緩沖器,例如用于顯示(這可以包括后端片段操作,例如降采樣,以確定要存儲(chǔ)在幀緩沖器中的最終像素顏色)。
[0023]申請(qǐng)人相信對(duì)于包括頂點(diǎn)著色階段在內(nèi)的圖形處理流水線仍有改進(jìn)空間。
【發(fā)明內(nèi)容】
[0024]根據(jù)本發(fā)明的第一個(gè)方面,提供一種操作圖形處理流水線的方法,該圖形處理流水線包括執(zhí)行對(duì)頂點(diǎn)屬性數(shù)據(jù)的頂點(diǎn)著色操作以生成頂點(diǎn)著色后的頂點(diǎn)屬性數(shù)據(jù)的頂點(diǎn)著色階段,所述方法包括以下步驟:
[0025]針對(duì)要由所述圖形處理流水線處理的一組頂點(diǎn):
[0026](i)對(duì)所述一組頂點(diǎn)的一個(gè)或更多個(gè)頂點(diǎn)執(zhí)行第一頂點(diǎn)著色操作,其中,所述第一頂點(diǎn)著色操作包括以下步驟:對(duì)于所述一組頂點(diǎn)的所述一個(gè)或更多個(gè)頂點(diǎn),針對(duì)所關(guān)注的頂點(diǎn)的頂點(diǎn)屬性中至少一個(gè)頂點(diǎn)屬性而不是全部頂點(diǎn)屬性執(zhí)行頂點(diǎn)著色處理,以生成所述頂點(diǎn)的這些屬性的頂點(diǎn)著色后的屬性數(shù)據(jù);
[0027](ii)針對(duì)已經(jīng)進(jìn)行了所述第一頂點(diǎn)著色操作的頂點(diǎn),確定所關(guān)注的所述頂點(diǎn)是否應(yīng)當(dāng)至少部分地利用通過(guò)所述第一頂點(diǎn)著色操作生成的所述頂點(diǎn)著色后的屬性數(shù)據(jù)中的某些或全部來(lái)進(jìn)一步處理;以及
[0028](iii)對(duì)已經(jīng)確定應(yīng)當(dāng)進(jìn)一步處理的頂點(diǎn)執(zhí)行第二頂點(diǎn)著色操作,其中,所述第二頂點(diǎn)著色操作包括以下步驟:針對(duì)屬于所關(guān)注的所述頂點(diǎn)的所述多個(gè)頂點(diǎn)屬性的至少一個(gè)其它頂點(diǎn)屬性,執(zhí)行頂點(diǎn)著色處理,以生成針對(duì)所述頂點(diǎn)的所述至少一個(gè)其它屬性的頂點(diǎn)著色后的屬性數(shù)據(jù)。
[0029]根據(jù)本發(fā)明的第二個(gè)方面,提供一種圖形處理流水線,該圖形處理流水線包括:
[0030](i)第一頂點(diǎn)著色階段,該第一頂點(diǎn)著色階段對(duì)要由所述圖形處理流水線處理的一組頂點(diǎn)的一個(gè)或更多個(gè)頂點(diǎn)執(zhí)行第一頂點(diǎn)著色操作,其中,所述第一頂點(diǎn)著色操作包括以下步驟:對(duì)于所述一組的所述一個(gè)或更多個(gè)頂點(diǎn),針對(duì)所關(guān)注的頂點(diǎn)的頂點(diǎn)屬性中的至少一個(gè)頂點(diǎn)屬性而不是全部頂點(diǎn)屬性執(zhí)行頂點(diǎn)著色處理,以生成所述頂點(diǎn)的這些屬性的頂點(diǎn)著色后的屬性數(shù)據(jù);
[0031](ii)確定階段,該確定階段針對(duì)已經(jīng)進(jìn)行了所述第一頂點(diǎn)著色操作的頂點(diǎn),確定所關(guān)注的所述頂點(diǎn)是否應(yīng)當(dāng)至少部分地利用通過(guò)所述第一頂點(diǎn)著色操作生成的所述頂點(diǎn)著色后的屬性數(shù)據(jù)中的某些或全部來(lái)進(jìn)一步處理;以及
[0032](iii)第二頂點(diǎn)著色階段,該第二頂點(diǎn)著色階段對(duì)已經(jīng)確定應(yīng)當(dāng)進(jìn)一步處理的頂點(diǎn)執(zhí)行第二頂點(diǎn)著色操作,其中,所述第二頂點(diǎn)著色操作包括以下步驟:針對(duì)屬于所關(guān)注的所述頂點(diǎn)的所述多個(gè)頂點(diǎn)屬性的至少一個(gè)其它頂點(diǎn)屬性,執(zhí)行頂點(diǎn)著色處理,以生成針對(duì)所述頂點(diǎn)的所述至少一個(gè)其它屬性的頂點(diǎn)著色后的屬性數(shù)據(jù)。
[0033]在本發(fā)明中,與傳統(tǒng)的頂點(diǎn)著色設(shè)置不同,所述頂點(diǎn)著色操作被劃分成兩個(gè)部分(本發(fā)明使用“雙通道(two-pass)”頂點(diǎn)著色設(shè)置):第一頂點(diǎn)著色操作,該第一頂點(diǎn)著色操作生成針對(duì)所述頂點(diǎn)屬性中的某些而不是全部的頂點(diǎn)著色數(shù)據(jù);以及第二頂點(diǎn)著色操作,該第二頂點(diǎn)著色操作生成針對(duì)不在所述第一頂點(diǎn)著色操作中處理的頂點(diǎn)屬性的頂點(diǎn)著色后的數(shù)據(jù)。在所述第一頂點(diǎn)著色操作和所述第二頂點(diǎn)著色操作之間,至少部分地使用來(lái)自所述第一頂點(diǎn)著色操作的頂點(diǎn)著色后的數(shù)據(jù),以確定所述頂點(diǎn)是否應(yīng)當(dāng)進(jìn)一步處理(例如,生成輸出所需要的),然后對(duì)已被確定要進(jìn)一步處理的這些頂點(diǎn)進(jìn)行所述第二頂點(diǎn)著色操作。
[0034]申請(qǐng)人已經(jīng)意識(shí)到,在很多情況下,并不是針對(duì)例如繪制調(diào)用的全部頂點(diǎn)都將被用來(lái)生成期望的圖形輸出,例如用于顯示的幀。例如當(dāng)一個(gè)或更多個(gè)頂點(diǎn)位于視錐體(viewfrustum)的外部或者當(dāng)一個(gè)或更多個(gè)頂點(diǎn)屬于(單獨(dú)地)背向基元時(shí),這可能發(fā)生。申請(qǐng)人還已經(jīng)意識(shí)到,針對(duì)這種“未使用的”頂點(diǎn)執(zhí)行的任何頂點(diǎn)著色計(jì)算最終都是冗余的。
[0035]本發(fā)明通過(guò)提供能夠避免冗余頂點(diǎn)著色計(jì)算的系統(tǒng)來(lái)解決這個(gè)問題。如上所述,這通過(guò)將頂點(diǎn)著色分成兩個(gè)階段并且在一定條件下執(zhí)行針對(duì)已經(jīng)確定應(yīng)當(dāng)進(jìn)一步處理的所述頂點(diǎn)(例如,被確定為需要用來(lái)生成所述圖形處理輸出的頂點(diǎn))的第二階段來(lái)實(shí)現(xiàn)。這樣,針對(duì)能夠確定事實(shí)上將是“未使用”的頂點(diǎn)僅能夠?qū)p少的一組頂點(diǎn)執(zhí)行著色操作。
[0036]預(yù)期所述頂點(diǎn)中的多達(dá)50%的可以不被用來(lái)生成所述最終圖形處理輸出,例如要顯示的幀。因此,本發(fā)明能夠提供通過(guò)所述圖形處理系統(tǒng)執(zhí)行的顯著減少的量的頂點(diǎn)著色計(jì)算,從而減小存儲(chǔ)帶寬、計(jì)算載荷和功率消耗(例如,與例如針對(duì)繪制調(diào)用限定的全部頂點(diǎn)都在執(zhí)行任何進(jìn)一步的圖形處理之前充分進(jìn)行頂點(diǎn)著色的設(shè)置相比)。
[0037]在本發(fā)明的設(shè)置中正在處理的所述一組頂點(diǎn)可以是要由所述圖形處理流水線處理的任何期望且合適的一組頂點(diǎn)。因此,所述一組頂點(diǎn)可以包括(并且在一個(gè)優(yōu)選實(shí)施方式中不包括)針對(duì)給定的圖形處理輸出(渲染目標(biāo)),例如針對(duì)要顯示的幀而限定的整組頂點(diǎn)。其還可以包括針對(duì)少于全部渲染輸出而限定的一組頂點(diǎn),例如針對(duì)給定繪制調(diào)用而限定的一組頂點(diǎn)。在優(yōu)選實(shí)施方式中,所述一組頂點(diǎn)是針對(duì)繪制調(diào)用限定的一組頂點(diǎn)。
[0038](若所述一組頂點(diǎn)少于針對(duì)給定渲染輸出而限定的整組頂點(diǎn),則優(yōu)選地針對(duì)所述渲染輸出的每組頂點(diǎn)(例如,并且優(yōu)選地,每個(gè)繪制調(diào)用)重復(fù)按照本發(fā)明的方式的操作。相應(yīng)地,本發(fā)明的過(guò)程優(yōu)選地針對(duì)多個(gè)并且優(yōu)選地針對(duì)每個(gè)要生成的渲染輸出,例如針對(duì)一系列輸出幀中的連續(xù)幀進(jìn)行重復(fù)。)
[0039]處理(頂點(diǎn)著色)所述一組頂點(diǎn)中的一個(gè)或更多個(gè)頂點(diǎn)的第一頂點(diǎn)著色操作可以僅處理所述一組頂點(diǎn)中某些而不是全部頂點(diǎn),而在優(yōu)選實(shí)施方式中則處理處理的所述一組