加沖刷的圖元塊的平均填滿度(例如,如果渲 染狀態(tài)頻繁地改變),則例如該限制可以被減少到二。限制本身可以其不能超過的最大值, 該最大值可以通過片上存儲器的量來確定。增加對能夠存儲在數(shù)據(jù)存儲庫220中的開放的 圖元塊的數(shù)量的限制的最大值意味著該數(shù)據(jù)存儲庫需要更大數(shù)量的片上存儲器,該片上存 儲器是非常有限的資源,因此保持對能夠存儲在數(shù)據(jù)存儲庫220中的開放的圖元塊222的 數(shù)量的限制的最大值較低(例如,小于五個)可以是有利的。
[0050] 每個圖元塊具有索引圖,該索引圖將圖元塊中的頂點的索引映射到從應(yīng)用發(fā)送的 頂點的索引。當(dāng)圖元塊被合并時,將需要更新合并的圖元塊的索引圖以相應(yīng)地反映合并的 圖元塊中的頂點的新的索引。
[0051] 從圖元塊分配模塊216輸出的圖元塊被傳送給分片模塊208,該分片模塊208確 定哪些圖元存在于圖形處理系統(tǒng)200的渲染空間的區(qū)片中的每個區(qū)片中。分片模塊208確 定每區(qū)片顯示列表,該每區(qū)片顯示列表指示哪些圖元存在于渲染空間的區(qū)片中的每個區(qū)片 中。顯示列表和圖元塊從分片模塊208被輸出并且被存儲在存儲器201*。光柵化塊210 從存儲器201中取出用于區(qū)片的顯示列表和與該區(qū)片相關(guān)的圖元塊,并且HSR模塊212執(zhí) 行隱藏面消除,從而移除在場景中隱藏的圖元的片段。剩余的片段被傳送給紋理化/著色 模塊214,該紋理化/著色模塊214對片段執(zhí)行紋理化和/或著色處理以確定可以被傳送至 存儲器204 2用于存儲在幀緩沖器中的渲染的圖像的像素值。光柵化塊210處理區(qū)片中的 每個區(qū)片,并且當(dāng)整個圖像已經(jīng)被渲染并且被存儲在存儲器204 2中時,圖像可以從圖形處 理系統(tǒng)200被輸出,并且例如,被顯示在顯示器上。
[0052] 基于圖元的空間位置來將圖元分類到圖元塊中可以產(chǎn)生更大數(shù)量的圖元塊,因為 一些圖元塊在它們被沖刷出數(shù)據(jù)存儲庫220之前沒有被完全填滿,因此由于圖元塊頭部的 增加的數(shù)量可以存在從GPU202寫出到存儲器201的圖元數(shù)據(jù)的數(shù)量上的微量增加。然而, 由于將圖元空間分類到圖元塊中,包括在圖元塊中的圖元更可能共享頂點,使得用來表示 圖元的數(shù)據(jù)量由于共享的頂點數(shù)據(jù)僅需要在圖元塊中被存儲一次而被減少。此外,從GPU 202寫出到存儲器2〇1的圖元數(shù)據(jù)量上的任何微量增加都被由光柵化模塊210從存儲器 201讀取用于由HSR模塊212使用的圖元數(shù)據(jù)量上的減少大大超過。即,由于HSR模塊212 對區(qū)片進行操作,所以它讀入包含與該區(qū)片相關(guān)的圖元的圖元塊,并且由于將圖元空間分 類到圖元塊中,所以將需要由HSR模塊212從存儲器201中讀取較少的圖元塊用于執(zhí)行針 對區(qū)片的HSR。因此,當(dāng)圖元塊分配模塊216被包括作為基于區(qū)片的圖形處理系統(tǒng)的一部分 時,本文所描述的示例尤其有用。然而,將圖元空間分組到圖元塊中也提高了針對由HSR模 塊216取出的圖元的高速緩存命中率,并且這對于基于區(qū)片的和基于非區(qū)片的渲染系統(tǒng)來 說都是有用的。
[0053] 以下呈現(xiàn)了一些偽碼作為可以被用來實施圖形處理系統(tǒng)200的代碼的示例:
[0054] #檢查當(dāng)前圖元的頂點共享和重疊的邊界框 For現(xiàn)有開放的圖元抉中的每個開放的圖無塊,檢查當(dāng)前固無是否具
[0055] 有共享的頂點或者重疊的邊界框: If圖元塊中共享的頂點的數(shù)量> O , th ell 將重疊的圖元塊的數(shù)量增加1。 將具有共享的頂點的圖元塊妁數(shù)量增加1。 Elseif當(dāng)前圖元與圖元塊的邊界框重疊 將重疊的圖元塊的數(shù)量增加1。 End if End tor //將當(dāng)前圖元添加到圖元塊中的一個圖元塊中 I f沒有圖元塊與當(dāng)前圖元重疊: If現(xiàn)有開放的圖元塊的數(shù)量=開放的圖元塊的最大數(shù)量 根據(jù)沖刷方案,首先沖刷圖元塊中的一個圖元塊。 End if 將當(dāng)前圖元添加到空的圖元塊中。 HI se if當(dāng):前圖元與僅一個圖元塊共享頂點或者重壹1 將當(dāng)前圖元添加到該圖元塊中。 Else (當(dāng)前圖元與多于一個圖元塊重疊): If當(dāng)前圖元具有與多于一個圖元塊共享的頂點: If與當(dāng)前圖元共享頂點的所有圖元塊能夠被合并到一個 圖元塊中: 將所有圖元塊合并到一個圖元塊中:。 Rise For所有圖元塊 合并前兩個圖元塊。
[0056] 如果不能合并則沖刷出第一圖元塊。 直到存在與當(dāng)前圖元共享頂點的僅一個圖元塊。 T-I End if 向該一個圖元塊添加當(dāng)前圖元。 Else (圖元與多于一個圖元塊重疊): If圖元與多于一個圖元塊共享頂點 使b為與圖元共享頂點的唯一圖元塊。 合并與圖元重畳的所有塊。. If與b不同的塊不能夠被合并,則將其沖刷出。 將當(dāng)前圖元添加到該一個圖元塊b中。: Else (沒有具有共享的頂點的塊) 使M為與圖元重疊的圖元塊的集合。 If有可能將M中的所有塊合并到單個塊b中,則這樣 做。 Else 合并M中所有可能的塊的對; If塊不能以這種方式被合并,則將其沖刷出《 End If End if 使b為與圖元重疊的唯一圖元塊。 將當(dāng)前圖元添加到一個圖元塊b中。 End if End if End if //向塊b添加圖元
[0057] If如果在塊b中不存在添加當(dāng)前圖元的空間: 首先沖刷出圖元塊K 將當(dāng)前圖元添加到新的圖元塊中。 Else 向圖元塊b添加圖元,檢查共享的頂點。 End if
[0058] 分配邏輯218可以以硬件或軟件或者它們的組合來被實施在GPU202上。例如, 如果分類邏輯218以硬件來實施,則它可以被形成為晶體管和適合用于執(zhí)行如本文所描述 的分配邏輯的期望的功能的其他硬件部件的特定布置。相反,如果以軟件來實施分配邏輯 218,則它可以包括可以被存儲在存儲器中并且可以被提供給GPU 202用于執(zhí)行于其上的 一組計算機指令。此外,盡管在本文所描述的示例中,圖形處理系統(tǒng)使用GPU,但是在其他示 例中,通用處理單元,例如CPU,可以被用來將本文中描述的功能實施為被實施在GPU 202 上。
[0059] 可以在計算機系統(tǒng)中實施上述圖形處理系統(tǒng)200。例如,圖6示出了一種計算機系 統(tǒng),該計算機系統(tǒng)包括GPU 202、CPU 602和存儲器604,其中存儲器604可以包括與上述存 儲器204JP 204 2相對應(yīng)的存儲器塊。計算機系統(tǒng)還包括其他設(shè)備606,諸如顯示器608、揚 聲器610、麥克風(fēng)612和鍵盤614。計算機系統(tǒng)的部件可以經(jīng)由通信總線616相互通信。用 于應(yīng)用的計算機程序代碼可以被存儲在存儲器604中,并且例如可以在CPU 602上被執(zhí)行。 如果應(yīng)用需要渲染3D場景的圖像,則可以將圖元發(fā)送給GPU 202,并且GPU 202可以如上所 述來植染場景。
[0060] 通常,上述任何功能、方法、技術(shù)或部件(例如,圖元塊分類模塊216及其部件)可 以被實施在使用軟件、固件、硬件(例如,固定邏輯電路)或這些實施方式的任何組合的模 塊中。本文使用術(shù)語"模塊"、"功能"、"部件"、"塊"、"單元"和"邏輯"以一般性地表示軟件、 固件、硬件或它們的任何組合。
[0061] 在軟件實施方式的情況下,模塊、功能、部件、單元或邏輯表示當(dāng)在處理器(例如, 一個或多個CPU)上被執(zhí)行時執(zhí)行特定任務(wù)的程序代碼。在一個示例中,可以由配置有以存 儲在計算機可讀介質(zhì)上的機器可讀形式的軟件的計算機來執(zhí)行所描述的方法。計算機可讀 介質(zhì)的一種這樣的配置是信號承載介質(zhì),并且因此被配置為向計算設(shè)備傳輸指令(例如, 作為載波),諸如經(jīng)由網(wǎng)絡(luò)。計算機可讀介質(zhì)還可以被配置為非瞬態(tài)計算機可讀存儲介質(zhì), 并且因此不是信號承載介質(zhì)。計算機可讀存儲介質(zhì)的示例包括隨機存取存儲器(RAM)、只讀 存儲器(ROM)、光盤、閃存、硬盤存儲器和可以使用磁、光和其他技術(shù)來存儲可以被機器訪問 的指令或其他數(shù)據(jù)的其他存儲器設(shè)備。
[0062] 當(dāng)在計算機上運行程序時以及在計算機程序可以被體現(xiàn)在計算機可讀介質(zhì)上的 情況下,軟件可以是以包括計算機程序代碼的計算機程序的形式,該計算機程序代碼用于 配置計算機以執(zhí)行所述方法的組成部分,或者以包括計算機程序代碼裝置的計算機程序的 形式,該計算機程序代碼裝置適合于執(zhí)行本文所述的方法中的任何方法的所有步驟。程序 代碼可以被存儲在一個或多個計算機可讀介質(zhì)上。本文描述的技術(shù)的特征是平臺無關(guān)的, 意味著可以在具有各種處理器的各種計算平臺上實施這些技術(shù)。
[0063] 本領(lǐng)域技術(shù)人員還將意識到,可以通過專用電路、專用集成電路、可編程邏輯陣 列、現(xiàn)場可編程門陣列等執(zhí)行功能、技術(shù)或方法中的全部或一部分。例如,模塊、功能、部件、 單元或邏輯(例如,分配邏輯218)可以包括電路形式的硬件。這種電路可以包括晶體管和 /或可在制造過程中可用的其他硬件元件。例如,這種晶體管和/或其他元件可以被用來形 成實施和/或包含存儲器(諸如寄存器、觸發(fā)器或鎖存器)、邏輯運算符(諸如Boolean運 算)、數(shù)字運算符(諸如加法器、乘法器或移位器)和互連的電路或結(jié)構(gòu)。這種元件可以被 提供為定制電路或標準單元庫、宏或者處于抽象的其他級別。這種元件可以在特定布置中 被互連。模塊、功能、單元或邏輯(例如,分配邏輯218)可以包括固定功能的電路以及可以 被編程以執(zhí)行功能的電路;這種編程可以從固件或軟件更新或控制機制被提供。在一個示 例中,硬件邏輯具有實施固定的功能操作、狀態(tài)機或過程的電路。
[0064] 還旨在包括用于設(shè)計集成電路的或者用于配置可編程芯片以執(zhí)行的期望功能的 "描述"或限定實施上述模塊、功能、部件、單元或邏輯的硬件的配置的軟件,諸如HDL(硬件 描述語言)軟件。即,可以提供計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)具有編碼于其 上的計算機可讀程序代碼,該計算機可讀程序代碼用于生成圖形