被稱為與GPU的每個計算單元相關(guān)聯(lián)的本地數(shù)據(jù)共享(LDS),并且可存在并行地運行著色器程序的多個這種存儲器單元和計算單元。
[0048]頂點著色器輸出位置230可由產(chǎn)生相對于每個原型的像素的重心坐標i,j的硬件組件238使用,以使得它們可用于例如如本文所述的內(nèi)插參數(shù)值。像素著色器212可從本地數(shù)據(jù)共享237中訪問絕對參數(shù)值P0和相對參數(shù)值P10、P20,以便通過使用每個期望參數(shù)i, j的坐標來執(zhí)行相乘和相加操作224來完成內(nèi)插。像素著色器212隨后可執(zhí)行某些其他像素著色器計算218,以便在輸出像素,例如輸出到幀緩沖區(qū)之前進一步操縱它們。
[0049]上述技術(shù)200a的一個缺點是:可能出現(xiàn)與到像素著色器的參數(shù)的吞吐量相關(guān)聯(lián)的某些瓶頸,這可降低渲染虛擬對象的速度。首先,已認識到的是,到參數(shù)高速緩存的參數(shù)寫入吞吐量導致瓶頸。例如,每個參數(shù)可以是大的屬性變量,例如像32位浮點數(shù),并且頂點著色器可將這些屬性變量作為一系列波陣面(例如,一次4個)寫入到參數(shù)高速緩存236。此外,參數(shù)高速緩存的使用可進一步限制可存儲的頂點著色器波陣面的數(shù)量,從而產(chǎn)生另外的瓶頸。隨后將參數(shù)復制到本地數(shù)據(jù)共享237并且在由像素著色器訪問之間將其暫時存儲,并且受限的吞吐量和總本地數(shù)據(jù)共享使用量可由于限制像素著色器波陣面的數(shù)量而再次形成瓶頸。
[0050]上述技術(shù)200a的另一個缺點是:因為減去的參數(shù)值P10、P20是在到達像素著色器212之前計算的,所以像素著色器不能夠直接訪問原始參數(shù)值P1、P2,從而限制了可利用像素著色器執(zhí)行的渲染效果的類型。
[0051]實現(xiàn)方式
[0052]圖2B中描繪了根據(jù)本公開的各個方面的圖形處理技術(shù)200b。在所示的技術(shù)200b中,可利用壓縮方案以便最小化與從頂點著色器輸出的參數(shù)值的吞吐量相關(guān)聯(lián)的瓶頸。應注意,雖然根據(jù)呈三角形形式的原型描述了這個實例,但是可容易地將概念擴展到基于其他類型多邊形的原型。
[0053]一個難題是:頂點參數(shù)值不能夠簡單地被壓縮,因為傳統(tǒng)方法被配置來在到達像素著色器之前執(zhí)行一些或全部內(nèi)插。因此,減法可阻止原始壓縮的值被解壓縮以供像素著色器使用。
[0054]通過舉例而非限制的方式,在參數(shù)值被存儲為32位浮點屬性變量的情況下,可能無法在不會由于32位減法而丟失原始數(shù)據(jù)的前提下將參數(shù)壓縮成16位數(shù)以便存儲為一個32位值。以下實例使用普通數(shù)字來說明上述問題以便概念化所述問題:
[0055]第一三角形:{P0,Pl, P2} = {8,5,6}
[0056]第二三角形:{P0,Pl, P2} = {1,4,7}
[0057]例如,如以上關(guān)于圖2A所描述的由差分引擎執(zhí)行的內(nèi)插的參數(shù)值的差集將為:
[0058]第一三角形:{P0,P10,P20}= {8,(5-8), (6-8)} = {8,_3,-2}
[0059]第二三角形:{P0,P10, P20} = {1,(4-1),(7-1)} = {1,3,6}
[0060]壓縮第一組參數(shù)與第二組參數(shù)將類似于將它們放在一起,如下:
[0061]壓縮的參數(shù):{18,45,76}
[0062]并且壓縮的參數(shù)的差集將類似于:
[0063]差集:{18,(45-18),(76-18)}= {18,27,58}
[0064]在減法壓縮時,破壞了原始數(shù)據(jù),因為減法結(jié)果27、58相對于真正的參數(shù)值來說本質(zhì)上是無意義的。因此,不能對值進行解壓縮并且不能從減法結(jié)果恢復原始值P10、P20或 P1、P2。
[0065]再次轉(zhuǎn)到圖2B,技術(shù)200b包括根據(jù)本公開的各個方面的壓縮方案,所述壓縮方案允許保存和解壓縮原始參數(shù)值以使得像素著色器可以訪問它們。在所示的實現(xiàn)方式中,可省略、禁用或繞過傳統(tǒng)地執(zhí)行減法或整個內(nèi)插的參數(shù)內(nèi)插硬件,以使得可以在不丟失原始參數(shù)值的前提下對參數(shù)值進行壓縮和解壓縮。
[0066]在圖2B中所示的技術(shù)200b中,頂點著色器210可執(zhí)行頂點著色器計算214,所述頂點著色器計算214可包括操縱圖像中每個頂點的各個參數(shù)。所得的參數(shù)可在240處被壓縮成更小的數(shù)據(jù)格式,以使得與大數(shù)字的存儲和吞吐量相關(guān)聯(lián)的瓶頸可最小化。壓縮的參數(shù)P0’、P1’、P2’可寫入到參數(shù)高速緩存236以便暫時存儲,并且可占據(jù)比未壓縮的參數(shù)更小量的總高速緩存,從而最小化高速緩存硬件中的潛在瓶頸。壓縮的參數(shù)P0’、P1’、P2’可復制到GPU上的本地存儲器單元237,所述本地存儲器單元237可以是被稱為“本地數(shù)據(jù)共享”(LDS)的存儲器單元??梢岳猛ㄟ^GPU實現(xiàn)的像素著色器212從本地數(shù)據(jù)共享中訪問壓縮的參數(shù)值。
[0067]壓縮的參數(shù)P0’、Pl’、P2’可在242處由像素著色器212進行解壓縮,從而準予像素著色器訪問原始參數(shù)值P0、Pl、P2。像素著色器212隨后可在216處使用從重心坐標產(chǎn)生器238獲得的坐標i,j來內(nèi)插參數(shù)值,以便確定每個原型內(nèi)的像素位置處的對應參數(shù)值。因為像素著色器212能夠訪問每個三角形的每個頂點的原始參數(shù)值,所以像素著色器216還可以在內(nèi)插216之前以每個像素為基礎(chǔ)執(zhí)行虛擬空間中的頂點參數(shù)(未示出)和頂點的可視元素的某些其他操作,以便將所述值轉(zhuǎn)化到屏幕空間。像素著色器隨后可執(zhí)行像素著色器計算218,以便在將最終的像素數(shù)據(jù)輸出到例如幀緩沖區(qū)之前進一步操縱像素數(shù)據(jù)和像素的可視元素。
[0068]因此,在例示性實現(xiàn)方式200b中,可通過減少高速緩存236和本地存儲器237的總使用量的壓縮方案來最小化或避免與大量參數(shù)值數(shù)據(jù)相關(guān)聯(lián)的瓶頸。此外,創(chuàng)建像素著色器程序的程序員可具有增加的控制,因為他們能夠訪問原始頂點參數(shù)數(shù)據(jù)而不僅僅是相關(guān)的或內(nèi)插的值。
[0069]圖3中所示的流程圖示出根據(jù)本公開的各個方面的用于利用頂點著色器和像素著色器處理圖形的方法300。方法300與圖2B中所描繪的圖形處理技術(shù)200b具有相似性。
[0070]例示性方法300包括利用頂點著色器310執(zhí)行頂點著色器計算314。頂點著色器計算可包括操縱原型302a_d的各個頂點參數(shù)以便在虛擬空間中的頂點上產(chǎn)生各種視覺效果。原型302a-d可類似于圖1B中的三角形102a-d,并且每個三角形可具有用于每個頂點的對應參數(shù)值P0、P1、P2。
[0071]頂點著色器310隨后可壓縮參數(shù)值并且將壓縮的頂點參數(shù)值P0’、P1’、Ρ2’發(fā)送到像素著色器312。像素著色器隨后可在342處對所述參數(shù)值進行解壓縮,以獲得原始未加工的參數(shù)值,并且像素著色器312可執(zhí)行參數(shù)值Ρ0、Pl、Ρ2的整個內(nèi)插316,以確定每個像素的對應參數(shù)Pa_Pf。像素著色器312隨后可通過利用內(nèi)插的參數(shù)值對像素執(zhí)行像素著色器計算318而在像素上產(chǎn)生另外的視覺效果,并且可將渲染的像素320輸出到例如系統(tǒng)存儲器中的幀緩沖區(qū)。
[0072]本公開的各方面包括被配置來實現(xiàn)上述特征的圖形處理系統(tǒng)。通過舉例而非限制的方式,圖4示出計算機系統(tǒng)400的框圖,所述計算機系統(tǒng)400可用于實現(xiàn)根據(jù)本公開的各個方面的圖形處理。根據(jù)本公開的各個方面,系統(tǒng)400可以是嵌入式系統(tǒng)、移動電話、個人計算機、平板計算機、便攜式游戲裝置、工作站、游戲控制臺等。
[0073]系統(tǒng)400通常可包括中央處理器單元(CPU) 470、圖形處理器單元(GPU) 471以及CPU和GPU兩者可訪問的主存儲器472。CPU 470和GPU 471各自可包括一個或多個處理器核心,例如,單個核心、兩個核心、四個核心、八個核心或更多。主存儲器472可呈提供可尋址存儲器的集成電路的形式,例如RAM、DRAM等。
[0074]通過舉例而非限制的方式,CPU 470和GPU 471