摘要:提出了一種快速分層的深度預(yù)測試方法.通過結(jié)合Z_max和Z_min算法,從像素塊和像素點(diǎn)兩個(gè)單位層次,快速地預(yù)剔除了無需繪制的像素點(diǎn),避免了諸如深度值、顏色值和紋理值的讀寫等針對像素點(diǎn)的繪制操作,降低了渲染場景所需的時(shí)間.合理的共享像素塊緩存(TileZcache)的設(shè)計(jì),有效地提高了命中率,進(jìn)一步減少了預(yù)測試的時(shí)間.同時(shí)提出的動態(tài)更新像素塊的方法,以更小的硬件代價(jià),提高了深度預(yù)測試的效率.仿真結(jié)果表明,對于隨機(jī)測試的繪制場景,這種快速分層的深度預(yù)測試方法,使得每幀繪制時(shí)間減少了12.5%~25.6%,訪存的帶寬節(jié)省與每個(gè)像素點(diǎn)的存儲面積比最大增加了43.8%,適用于嵌入式3D的渲染引擎中.
關(guān)鍵詞:3D圖形處理器;深度預(yù)測試;存儲帶寬
中圖分類號:TP391 文獻(xiàn)標(biāo)識碼:A
A Fast and Hierarchical Early Z-Test for 3D Graphics Processors
ZHANG Jun-jie1,WEI Ji-zeng2,WANG Hang-sheng2,GUO Wei2,3
(1.School of Electronic Information Engineering,Tianjin Univ,Tianjin 300072,China;
2.School of Computer Science and Technology,Tianjin Univ,Tianjin 300072,China;
3. Tianjin Key Laboratory of Cognitive Computing and Application(Tianjin Univ),Tianjin 300072,China)
Abstract: A Fast and Hierarchical Early Z-Test (FH-EZT) was proposed to reject the pixels unnecessary to draw as soon as possible from the tile level and pixel level by combining Z_max and Z_min algorithm. Redundant pre-pixel operations including Z reads/writes, color reads/writes and texture reads were avoided efficiently to decrease the rendering times. Shared tile cache (TileZcache) with high hit rate cuts down the testing cycles and the values of tiles can update dynamically utilizing less cost. Experiments show that the proposed algorithm can reduce 12.5% up to 25.6% rendering cycles for each random tested frame and enhance 4% up to 43.8% for the ratio of bandwidth reduction and storage area per pixel, which is suitable for embedded 3D engine.
Key words: 3D graphics processors;early Z-test;memory bandwidth
隨著嵌入式終端的迅猛發(fā)展,游戲、3D導(dǎo)航、人機(jī)接口等多媒體應(yīng)用得到廣泛關(guān)注.因此,如何在高分辨率的屏幕上,以最小的功耗代價(jià)實(shí)時(shí)地對復(fù)雜3D場景進(jìn)行繪制,是嵌入式圖形處理器亟需解決的問題.幀渲染時(shí)間和存儲器帶寬是影響嵌入式GPU速度和功耗的兩個(gè)重要的性能指標(biāo),雖然半導(dǎo)體技術(shù)的高速發(fā)展帶來了速度和性能的極大提升,但是渲染的時(shí)間和存儲器的訪問依舊成為瓶頸.并行或離線渲染不同的幀可以有效地縮短渲染時(shí)間,但是需要很大的芯片面積和存儲面積,不適合應(yīng)用于嵌入式系統(tǒng),而且在繪制一幀時(shí)并不能做到并行渲染,所以盡可能快速地分辨每幀處理像素點(diǎn)的有效性,能夠間接地提高渲染速度.另一方面,存儲器的帶寬是有限的,在圖形系統(tǒng)繪制流水線的像素處理階段,存在5種類型的存儲器訪問,深度值的讀取、深度值的寫回、顏色值的讀取、顏色值的寫回和紋理值的讀取,而有關(guān)深度數(shù)據(jù)讀寫的帶寬需求至少占據(jù)40%[1],所以通過深度預(yù)測試及早判斷像素點(diǎn)的有效性,減少不必要的存儲器的訪問,不僅可以加快處理速度,而且能夠降低系統(tǒng)功耗.
許多利用深度預(yù)測試以節(jié)省存儲器帶寬的方法在以往的資料中被提出,大體上可以分為3類,即Z_max算法、Z_min算法和混合型算法.利用Z_max算法,能夠及早剔除被遮擋的像素點(diǎn),有效地避免了不必要的存儲器訪問.HZbuffer算法采取了減小深度緩存分辨率的方式,在紋理讀取等操作之前剔除了不可見的像素點(diǎn),避免了5種類型的存儲器訪問.但是需要較大的片上存儲空間,而且更新繁瑣,后來被ATI結(jié)合深度壓縮等方法用于商用[1],但并不適用于嵌入式系統(tǒng).Depth Filter的算法[2]在繪制每幀時(shí),采用一個(gè)或幾個(gè)確定的平面,通過mask值記錄每一個(gè)像素點(diǎn)之前繪制的歷史信息,用以剔除不可見的像素點(diǎn),剔除的效果與平面的數(shù)量成正比,但是面積也會隨之增大.雖然平面的位置會有更新,但是確定位置的方法比較苛刻,而且對場景有著很大的依賴性,所以性能不會一直有保證.Midtexturing的算法[3]分別是在紋理讀取之前和之后進(jìn)行兩次深度測試,但只剔除了不必要的紋理的讀取,而且兩次深度測試之間過長的流水線引起的訪存一致性問題,會降低深度緩存(Z cache)的命中率,采取對應(yīng)的改善措施后效果也不顯著.后來他們對這種算法進(jìn)行了改進(jìn)[4],依據(jù)相鄰像素間的一致性,通過判斷標(biāo)志位,預(yù)測出將要處理的像素點(diǎn)的可見性,可以選擇性地將其中一次深度測試設(shè)置為有效,而不是讓兩次都進(jìn)行處理,但是兩次深度測試之間的流水線長度決定了標(biāo)志位的更新不會很及時(shí),可能需要較長時(shí)間的等待,而且在沒有或者很少紋理映射的情況下,會適得其反.
Z_min算法是Mller提出的與Z_max剔除不可見像素點(diǎn)截然相反的想法[5],對于當(dāng)前處理的像素塊,計(jì)算出內(nèi)部包含所有像素點(diǎn)的最大值Zmax_curruent,與從片外取來的對應(yīng)像素塊的最小值Zmin_previous比較,若Zmax_curruent 第三種為混合型算法,其主要思想就是將Z_max算法和Z_min算法相結(jié)合,其效率要比單純地采用一種方法好得多.Tsao等人最初提出一種自適應(yīng)塊的深度濾波(ATDF)算法[6],通過采用像素塊的Z_max和Z_min平面,把整個(gè)繪制空間分為完全可見區(qū)域、完全剔除區(qū)域和不確定區(qū)域,采用一個(gè)mask平面用來標(biāo)識待處理的像素點(diǎn)是否被渲染過,以確定像素點(diǎn)的可見性,但是一旦像素塊內(nèi)部包含的像素點(diǎn)都被渲染過一次,mask就不再起作用,而且在繪制一幀的過程中,Z_max和Z_min平面的位置是固定的,性能更會大打折扣.Kim等人提出一種U-EZT的方法[7],針對處理過的每一個(gè)像素點(diǎn)可以對Z_max和Z_min平面進(jìn)行實(shí)時(shí)更新,采用的mask平面與ATDF不同的是,可以反復(fù)更新mask值用來支持Z_max和Z_min平面的移動,但是帶來的后果是,可能會使一些原本完全可見或者完全剔除的像素點(diǎn)被認(rèn)為無法確定,需要重新判斷. 此外,文獻(xiàn)[8-12]也從不同方面進(jìn)行了深度預(yù)測試,具有一定成效. 本文基于像素塊的光柵掃描方式,結(jié)合Z_max算法和Z_min算法,主要從降低幀渲染時(shí)間的角度出發(fā),提出了一種快速分層的深度預(yù)測試方法.分別從像素塊和像素點(diǎn)兩個(gè)不同層次,通過合理設(shè)置和共享TileZcache以有效地提高命中率,加快了深度預(yù)測試的速度,減少了渲染場景所需的時(shí)間.同時(shí)以平均每個(gè)像素點(diǎn)兩位的存儲代價(jià),動態(tài)更新像素塊,提高了深度預(yù)測試的效率.文章的組織結(jié)構(gòu)如下:第1節(jié)描述了本文所提出的算法的基本思想;第2節(jié)描述了仿真結(jié)果并對仿真結(jié)果進(jìn)行了分析;第3節(jié)為結(jié)論. 1 快速分層的深度預(yù)測試 圖1顯示了在傳統(tǒng)渲染管線的基礎(chǔ)上添加快速分層深度預(yù)測試(FH-EZT)的結(jié)構(gòu)示意圖,在基于像素塊的光柵掃描過程中[13],實(shí)現(xiàn)了本文提出的這一算法(圖中深色區(qū)域). 進(jìn)入光柵階段,Tile-Scan首先接收來自Tri-Setup傳遞過來的三角形頂點(diǎn)位置和計(jì)算好的掃描轉(zhuǎn)換或深度預(yù)測試需要用到的若干參數(shù),以像素塊大小為單位進(jìn)行塊間掃描.對于掃描到的待處理的像素塊,送入Tile-EZT,與從TileZcache或片外像素塊存儲空間(TileZbuffer)中讀取的相應(yīng)像素塊之前的位置進(jìn)行粗略層次的比較,從而預(yù)判斷出當(dāng)前像素塊的可見性.若判斷為完全不可見,則直接剔除當(dāng)前的像素塊,此時(shí)認(rèn)為內(nèi)部包含的所有像素點(diǎn)是完全不可見的,從而避免了如前所述5種類型的針對每個(gè)像素點(diǎn)的操作;若無法判斷可見性,則Tile-EZT對于當(dāng)前像素塊測試失敗,會將其送入接下來的Tile-FIFO,等待Pixel-Scan的處理.Pixel-Scan掃描出像素塊內(nèi)部有效的像素點(diǎn),并將它們?nèi)匀灰韵袼貕K為單位送入Pixel-EZT進(jìn)行逐個(gè)像素點(diǎn)的深度預(yù)測試.對于每個(gè)有效的像素點(diǎn)來說,只需要與從TileZcache或片外TileZbuffer中讀取的相應(yīng)像素塊之前的最大值和最小值進(jìn)行細(xì)致層次的比較,從而預(yù)判斷出每個(gè)像素點(diǎn)的可見性.若判斷為完全可見,則避免了深度值的讀??;若判斷為完全不可見,則將其直接剔除,避免了如前所述5種類型的讀寫操作;若無法判斷可見性,則Pixel-EZT對于當(dāng)前像素點(diǎn)測試失敗,會將其送入后續(xù)的Pre-pixel Process階段.Tile-EZT和Pixel-EZT共享TileZcache,通過合理設(shè)計(jì)TileZcache的結(jié)構(gòu),有效地提高了命中率. 1.1 Tile-EZT Tile-EZT結(jié)合了Z_max算法的基本思想,主要目的在于快速地預(yù)剔除完全不可見的像素塊,減少幀繪制時(shí)間,實(shí)現(xiàn)的功能如算法1和圖2所描述. 算法1 Tile Early Z-Test Alg orithm(Tile- EZT) input Zmin _tri, Zmax _previous 1: if(Zmin _tri>Zmax _previous) then Tilei is defined as absolutely occluded, go to step 2. else then Tilei is defined as uncertain, go to step 2. 2:move to the next tile, go to step 1. 在Tri-Setup中預(yù)先計(jì)算出當(dāng)前處理的三角形3個(gè)頂點(diǎn)深度的最小值Zmin_tri,可以將其看作光柵掃描到的每個(gè)待處理像素塊的最小值,與從TileZcache或者片外的TileZbuffer中讀取當(dāng)前處理像素塊之前的最大值Zmax_previous作比較,若Zmin_tri>Zmax_previous,則判斷出當(dāng)前像素塊(或者整個(gè)三角形,當(dāng)三角形完全在一個(gè)像素塊內(nèi)部時(shí))可以被完全剔除;否則認(rèn)為其無法判定,將其送入后續(xù)的流水線階段進(jìn)行處理.該流水線階段對于TileZcache的訪問是只讀的,對Zmax_previous值不必進(jìn)行更新寫回,具體TileZcache的設(shè)計(jì)及其原因詳見第2.3節(jié). 這種基于像素塊的深度預(yù)測試粗粒度地判定了像素塊可能存在的位置,只需一個(gè)周期的處理時(shí)間,而不是針對逐個(gè)像素點(diǎn)進(jìn)行處理所用的M(像素塊包含的有效像素點(diǎn)數(shù)量)個(gè)周期,通過增加很少的預(yù)計(jì)算量,有效地節(jié)省了存儲器帶寬的同時(shí),也極大地縮短了每幀渲染的時(shí)間. 1.2 Pixel-EZT Pixel-EZT結(jié)合了混合型算法的基本思想,實(shí)現(xiàn)的功能如算法2和圖3所描述.對于Tile-EZT測試失敗的像素塊,通過Pixel-Scan的掃描,將像素塊內(nèi)部有效的像素點(diǎn)仍以該像素塊為集合送入到Pixel-EZT階段.針對每個(gè)像素點(diǎn)的深度值Z_pixel,逐一與從TileZcache或者片外的TileZbuffer中讀取當(dāng)前處理像素塊之前的最大值Zmax_previous和最小值Zmin_previous作比較,若Z_pixel < Zmin_previous,則判斷出當(dāng)前像素點(diǎn)為可見的;若Z_pixel> Zmax_previous,則判斷出當(dāng)前像素點(diǎn)為不可見的;否則認(rèn)為其無法判定,將其送入后續(xù)的流水線階段進(jìn)行處理. 算法2 Pixel Early Z-Test Alg orithm(Pixel-EZT) input: Z_pixel,Zmin _previous, Zmax _previous 1: initialize Zmin _current,Zmax _current. Zmin _current=1.0, Zmax _current=1.0 2: if(Z_pixel then Pixeli is defined as absolutely visible, go to step 3. else if(Z_pixel>Zmax _previous) then Pixeli is defined as absolutely occluded, go to step 3. else then Pixeli is defined as uncertain, go to step 3. 3:traverse the next valid pixel. if there are pixels valid next, go to step 2. esle update to Zmin _previous,Zmax _previous. Zmin _previous=Zmin _current, Zmax _previous=Zmax _current. 4:move to the next tile, go to step 1. 該流水階段對于TileZcache的訪問是可讀可寫的,對Zmax_previous值和Zmin_previous值需要不斷進(jìn)行更新寫回,以保證深度預(yù)測試的效率.對于Zmax_previous值,只有在當(dāng)前像素塊內(nèi)所有像素點(diǎn)的深度值均小于Zmax_previous且全部判斷完時(shí),才對其進(jìn)行更新,把其中所有像素點(diǎn)的最大值寫回TileZcache,成為新的Zmax_previous值,如圖3中的點(diǎn)a.因?yàn)閆max_previous值的更新是要不斷往視點(diǎn)的方向移動,若非像素塊內(nèi)部的所有像素點(diǎn)都有效,則更新后的Zmax_previous值可能使得那些無效像素點(diǎn)的位置由原來不確定的區(qū)域變成完全剔除的區(qū)域,實(shí)施了錯(cuò)誤的剔除.而對于Zmin_previous值,只需要在當(dāng)前像素塊內(nèi)所有有效的像素點(diǎn)全部判斷完后,就可以對其進(jìn)行更新,把其中所有有效像素點(diǎn)的最小值寫回TileZcache,成為新的Zmin_previous值,如圖3中的點(diǎn)b.因?yàn)閆min_previous值的更新也是要不斷往視點(diǎn)的方向移動,但是更新后的Zmin_previous值并不能影響原來像素塊內(nèi)部那些無效像素點(diǎn)的可見性,可能只不過是由原本完全可見的區(qū)域變成了不確定的區(qū)域,但不會產(chǎn)生繪制的錯(cuò)誤. 這種基于像素點(diǎn)的深度預(yù)測試細(xì)粒度地判定了像素點(diǎn)可能存在的位置,不借助額外的標(biāo)志位等輔助信息,通過保守地動態(tài)更新所在像素塊的最大值和最小值,使得深度預(yù)測試以更小的代價(jià)實(shí)現(xiàn)了較好的性能.可以簡單地證明,一個(gè)包含有m×n大小的像素塊只需要一個(gè)最大深度值和一個(gè)最小深度值的位寬存儲開銷,以深度值的精度為32位、m×n取32為例,平均每個(gè)像素點(diǎn)只需要兩位的存儲代價(jià),即可滿足功能的需求. 1.3 共享TileZcache Tile-EZT和Pixel-EZT兩個(gè)層次的深度預(yù)測試階段形成了流水線式的處理,對于Tile-EZT階段測試失敗的像素塊將會流水到Pixel-EZT階段,因此需要重復(fù)讀取同一像素塊的最大值或最小值,此時(shí)共享的TileZcache的設(shè)計(jì)是必要的,可盡量減少冗余的訪存. Tile-EZT階段只涉及TileZcache中Zmax_previous值的讀取,因?yàn)榇藭r(shí)并不確定與之作比較的當(dāng)前處理的像素塊真正的最小值,硬性地寫回可能會對下一次相同位置像素塊是否剔除產(chǎn)生錯(cuò)誤的判斷.同時(shí)對于像素塊是否完全可見的快速預(yù)判斷并不支持,而且也無必要,即無需讀取TileZcache中Zmin_previous值,原因是后面Pixel-EZT階段會不定時(shí)地更新TileZcache,可能使得前面Tile-EZT階段讀取下一次相同位置像素塊的Zmin_previous值并不及時(shí),引起TileZcache的一致性問題,從而導(dǎo)致判斷的失誤.即使增加復(fù)雜的邏輯判斷或流水線等待以避免這一問題,也會因?yàn)橐呀?jīng)判定為完全可見的像素塊也要送入Pixel-Scan中進(jìn)行逐個(gè)像素的光柵掃描處理,并不能節(jié)省處理的周期時(shí)間. Pixel-EZT階段會重復(fù)讀寫從Tile-EZT階段接收過來的同一像素塊的最大值或最小值,添加的TileZcache實(shí)現(xiàn)兩個(gè)階段的共享,可以有效地減少訪問存儲器的次數(shù),進(jìn)一步縮短了深度預(yù)測試所需的周期時(shí)間.為了有效地提高讀寫TileZcache的命中率,可以采取以下兩個(gè)措施:一是將TileZcache設(shè)計(jì)成先進(jìn)先出(FIFO)的替換策略,使得當(dāng)前處理的像素塊與存儲在緩存中的相應(yīng)的最大值和最小值信息保持同步的流水;二是使設(shè)計(jì)的TileZcache的尺寸不小于兩個(gè)階段之間的最大流水線級數(shù),主要是由緩存待處理像素塊(Tile-FIFO)的深度決定的.綜合以上兩點(diǎn),能夠最大程度地保證兩個(gè)階段讀寫同一像素塊的最大值和最小值在TileZcache中停留的時(shí)間最長,以便最大概率地直接獲取. 2 仿真結(jié)果及分析 為了評估所提出結(jié)構(gòu)的性能,我們在ATTILA GPU仿真器上對比實(shí)現(xiàn)了不同的深度預(yù)測試算法,包括HZbuffer算法、混合算法、U-EZT算法和所提出的算法,并深入分析了主要的性能指標(biāo).ATTILA是一個(gè)周期性精確的、功能強(qiáng)大的模擬GPU架構(gòu)的開源仿真器,為我們統(tǒng)計(jì)各種實(shí)驗(yàn)數(shù)據(jù)提供了方便.我們使用了較受歡迎的具有復(fù)雜深度的常用測試用例——Quake4,隨機(jī)地測試了不同幀的場景,分辨率為640×480,其中在考慮帶寬、剔除率和面積等綜合因素下,處理的像素塊單位采用8×4的大小最為適宜[7]. 2.1 幀渲染時(shí)間 為了驗(yàn)證本文提出的以像素塊整體為單位代替逐個(gè)像素點(diǎn)形式的深度預(yù)測試算法的有效性,針對各種算法的每幀繪制時(shí)間(CPF)進(jìn)行了隨機(jī)的數(shù)據(jù)統(tǒng)計(jì),假設(shè)每個(gè)像素點(diǎn)經(jīng)過流水線的處理過程和處理時(shí)間是不變的,每次緩存未命中引起的訪存時(shí)間設(shè)定為10個(gè)cycles[3-4],TileZcache大小取16行、每行64 B. 圖4表示了實(shí)現(xiàn)各種算法的CPF統(tǒng)計(jì),包括在兩次讀取TileZcache之間不同流水線長度的情況下實(shí)現(xiàn)的本文的算法,可以看出本文所提出的結(jié)構(gòu)在具有復(fù)雜深度的場景中使用了最小的幀渲染時(shí)間,性能最佳.這是因?yàn)槠渌麕追N結(jié)構(gòu)CPF的計(jì)算公式可以表示為: CPF=Nfragments+10×Nmem_access. (1) 式中:Nfragments表示每幀的渲染的像素點(diǎn)數(shù)量;Nmem_access表示每幀訪問存儲器的次數(shù)(包括TileZcache,Z cache和Texture cache未命中引起的訪存,由于color讀寫都是一樣的,所以不計(jì)入比較).而本文提出的結(jié)構(gòu)的方法CPF的計(jì)算公式為: CPF=Ntiles+Npixels+10×N′mem_access. (2) 式中:Ntiles表示被Tile-EZT剔除的像素塊數(shù)量;Npixels表示沒有被Tile-EZT剔除的像素點(diǎn)數(shù)量;N′mem_access表示每幀訪問存儲器的次數(shù).這里有Ntiles×Neff_pixel+Npixels=Nfragments,其中Neff_pixel表示像素塊內(nèi)包含的平均有效像素點(diǎn)數(shù)量,而由于共享的TileZcache的設(shè)計(jì),使得N′mem_access與Nmem_access相比不會明顯增加.設(shè)定每處理一個(gè)像素塊的時(shí)間為一個(gè)周期,如果該像素塊被剔除,顯然比逐個(gè)處理每個(gè)像素點(diǎn)所用的時(shí)間要少得多.而測試的第一幀場景中并無遮擋存在,所以像素塊級別的預(yù)測試Tile-EZT沒有發(fā)揮作用,反而使性能略有下降. 此外,另一個(gè)影響CPF的主要因素是兩次讀取TileZcache之間流水線的長度(Latency).如果Latency越長,TileZcache 未命中的概率越大,需要的訪存次數(shù)或總的訪存時(shí)間增加,必然使CPF增大.所以,在保證基本功能的前提下,Latency設(shè)計(jì)得越小,本文所提出的方法帶來的性能越好. \ 2.2 帶寬需求 針對本文提出的結(jié)構(gòu),為了統(tǒng)計(jì)帶寬需求,我們采取的計(jì)算公式如下: BW=fillrate×{MissEZT×(Lread+Lwrite)+ (1-RrejEZT)×Misstex×Lread+ (1-RrejEZT-RaccEZT)×Missz×(Lread+Lwrite)+ (1-RrejZT)×Missz×Lwrite+ (1-RrejZT)×Misscolor×(Lread+Lwrite)+ (1-RrejZT)×Misscolor×Lwrite}. 其中fillrate表示每秒鐘處理像素點(diǎn)的個(gè)數(shù),這里取166 M/s,Miss表示每種緩存的未命中率,R 表示所有剔除或者接受的像素點(diǎn)占總的繪制像素點(diǎn)的百分比,L表示訪存時(shí)讀或者寫的數(shù)據(jù)寬度. 圖5表示了實(shí)現(xiàn)各種算法的帶寬統(tǒng)計(jì)(由于color的讀寫產(chǎn)生的帶寬都是一樣的,所以不計(jì)入比較),相比U-EZT算法,F(xiàn)H-EZT的帶寬需求稍有增加,但是避免了每個(gè)像素對應(yīng)的額外的mask值,在采取8×4像素塊大小的情況下,F(xiàn)H-EZT實(shí)現(xiàn)了平均每個(gè)像素只需兩位的存儲空間,使得存儲帶寬的節(jié)省(BW_reduction,和Non-EZT算法相比較)與每個(gè)像素點(diǎn)需要的存儲代價(jià)(Mpp)的比值(這里參考了文獻(xiàn)[7]中的資料)最大提升了43.8%,如表1所示. 3 結(jié) 論 本文提出了一種快速分層的深度預(yù)測試方法.結(jié)合Z_max和Z_min算法,以像素塊為單位進(jìn)行的預(yù)測試,快速地剔除了無需繪制的大量的像素點(diǎn),加快了深度預(yù)測試的速度;以像素點(diǎn)為單位進(jìn)行的預(yù)測試,以更小的硬件代價(jià)動態(tài)更新像素塊的位置,提高了深度預(yù)測試的效率.同時(shí)通過合理設(shè)置和共享TileZcache以有效地提高命中率,進(jìn)一步減少了渲染場景所需的時(shí)間.結(jié)果表明,對于隨機(jī)測試的每幀場景,渲染時(shí)間被縮短了12.5%~25.6%,訪存的帶寬節(jié)省與每個(gè)像素點(diǎn)的存儲面積比最大增加了43.8%,顯示了所提出算法的優(yōu)異性能. 參考文獻(xiàn) [1] MOREIN S. ATI Radeon HyperZ technology[C]//ACMSIGGRAPH/ Eurographics Workshop on Graphics Hardware. Switzerland, August 2000. [2] YU C H, KIM D, KIM L S. An area efficient early Z-test method for 3D graphics rendering hardware[J]. IEEE Transactions on Circuits and Systems, 2008, 55(7): 1929-1938. [3] PARK W C, LEE K W, KIM I S, et al. An effective pixel rasterization pipeline architecture for 3D rendering processors[J]. IEEE Transactions on Computers, 2003, 52(11): 173-182. [4] PARK J , KIM I S, PARK W C, et al. A pixel pipeline architecture with selective z-test scheme for 3D graphics processors[J]. Microprocessors and Microsystems, 2013, 37(3): 373-380. [5] AKENINE-M LLER T, STRM J. Graphics for the masses: a hardware rasterization architecture for mobile phones[J]. ACM Transactions on Graphics, 2003, 22(3):801–808. [6] TSAO Y M, WU C L, CHIEN S Y, et al. Adaptive tile depth filter for the depth buffer bandwidth minimization in the low power graphics systems[C]//Proceedings of 2006 IEEE International Symposium on Circuits and Systems. New York: IEEE, 2006:5023-5026. [7] KIM H Y, YU C H, KIM L S. A memory-efficient unified early z-test[J]. IEEE Transactions on Visualization and Computer Graphics, 2011, 17(9): 1286-1294. [8] KIM D, CHUNG K, YU C H, et al. An SoC with 1.3 Gtexels/s 3-D graphics full pipeline engine for consumer applications[J]. IEEE J Solid-State Circuits, 2006, 41(1):71-84. [9] 高可,楊珂,石教英,等. Coarse-Z Filter:降低深度帶寬的圖形流水單元[J].計(jì)算機(jī)輔助設(shè)計(jì)與圖形學(xué)學(xué)報(bào),2006,18(11):1658-1663. GAO Ke, YANG Ke, SHI Jiao-ying, et al. Coarse-Z Filter: a graphics pipeline unit to reduce depth bandwidth[J]. Journal of Computer-Aided Design Computer Graphics, 2006, 18(11):1658- 1663.(In Chinese) [10]鐘偉,郭立,楊毅. 基于Cache和層次Z緩存算法的3維圖形深度消隱硬件設(shè)計(jì)和實(shí)現(xiàn)[J].中國圖像圖形學(xué)報(bào),2009,14(1):1392-1398. ZHONG Wei, GUO Li, YANG Yi. Design and implementation of hidden surface removal hardware based on cache and hierarchical Z-buffer algorithm for 3D graphics[J]. Journal of Image and Graphics, 2009, 14(1):1392-1398. (In Chinese) [11]YOON J S, YU C H, KIM D, et al. Triangle-level depth filter method for bandwidth reduction in 3D graphics hardware[C]//Proceedings of IEEE International Symposium on Circuits and Systems. New York: IEEE, 2007:765-768. [12]HSIAO C C, CHU S L. A hierarchical triangle-level culling technique for tile-based rendering[C].//Proceedings of Fifth International Symposium on Parallel Architectures, Algorithms and Programming. New York: IEEE, 2012:119-125. [13]MCCORMACK J, MCNAMARA R. Tiled polygon traversal using half-plane edge functions [C]//Proceedings of the ACM SIGGRAPH/ EUROGRAPHICS Workshop on Graphics Hardware. New York: ACM, 2000:15-21.