GPU如何工作:PowerVR/高通Adreno/ARM Mali的渲染模式分析
在上一篇文章《【技術(shù)解析】GPU如何實(shí)現(xiàn)三維渲染及非圖形計算?》我們已經(jīng)了解了GPU工作流程以及作用,但GPU絕無這么簡單。目前市場上的 GPU 主要由三家公司主導(dǎo),分別是ImgTec的PowerVR系列、Qualcomm(高通)的 Adreno 以及 ARM(安謀)的 Mali,其中PowerVR被蘋果采用,Adreno被高通整合到驍龍SoC當(dāng)中,Mali應(yīng)用最為廣泛,有三星Exynos、MTK Helio、Mstar等等,按渲染模式可以劃分為IMR與TBR/TBDR兩大流派,下面我們先從PowerVR說起。
本文引用地址:http://www.ex-cimer.com/article/201606/292810.htmPowerVR —— 延后式分塊渲染架構(gòu)
ImgTec(或者說 Imagination Technologies)的前身是 1985 年在英國成立的VideoLogic公司,在上世紀(jì)90年風(fēng)靡一時的世嘉DreamCast游戲機(jī)就是采用該公司技術(shù)授權(quán)生產(chǎn)的圖形處理器。
ImgTec目前旗下有多個分部,PowerVR是其中專門從事GPU、視頻處理單元、攝像機(jī)知識產(chǎn)權(quán)內(nèi)核技術(shù)開發(fā)的分公司。
PowerVR雖然從事GPU開發(fā),但是它并不直接售賣芯片實(shí)體,而是透過授權(quán)的方式,將芯片內(nèi)核技術(shù)以收取權(quán)利金的方式讓第三方芯片廠商生產(chǎn)、銷售、使用,例如蘋果公司、英特爾公司、聯(lián)發(fā)科、索尼等,商業(yè)模式和同樣是英國公司的ARM一樣。
技術(shù)內(nèi)核授權(quán)方式給了芯片廠商和系統(tǒng)集成廠商非常高的靈活性和快速切入市場的能力,他們可以在較短的時間里就實(shí)現(xiàn)各種配置的靈活組合。如果你看過我前面介紹的圖形流水線就知道,要做好一枚具競爭力的GPU難度是相當(dāng)大的,中間涉及大量的技術(shù)積累。
像NVIDIA、AMD這樣的廠商都不是突然冒出來的,他們都經(jīng)歷過非常慘烈的市場競爭、有業(yè)界最強(qiáng)大的研發(fā)團(tuán)隊以及與周邊軟件開發(fā)商經(jīng)年累月的開發(fā)合作關(guān)系,現(xiàn)在一個新丁公司仿效NVIDIA模式貿(mào)然闖進(jìn)GPU開發(fā)領(lǐng)域的話,如果不是手握十億美元級規(guī)模的資金來換取技術(shù)和各種市場資源的話,恐怕連響都聽不到。
在上世紀(jì)90年代末和本世紀(jì)前兩年,PowerVR也在桌面市場和NVIDIA、3dfx進(jìn)行過捉對廝殺,不過由于商業(yè)模式并不十分適合桌面市場,所以在僅有母公司VideoLogic(1999年更名為Imagination Technologies)推出的Kyro II后就不再踏足桌面獨(dú)立顯卡市場,轉(zhuǎn)而全力發(fā)展嵌入式領(lǐng)域,從此一發(fā)不可收拾。
PowerVR在桌面獨(dú)立顯卡市場的最后一款產(chǎn)品是PowerVR3系列,原定用于Kyro III/IV的后續(xù)產(chǎn)品PowerVR4由于退出桌面市場,對公眾而言只停留在幻燈片(上圖的STG5000就是原本計劃用在Kyro III的PowerVR4)中。
當(dāng)然,PowerVR并沒有完全退出桌面市場,他們和Intel達(dá)成了技術(shù)授權(quán)協(xié)議,英特爾可以在其集成GPU中采PowerVR MBX架構(gòu),英特爾在很長的一段時期內(nèi)的集成GPU都采用了這個微架構(gòu)內(nèi)核。
PowerVR MBX據(jù)聞是世嘉DreamCast那枚PowerVR PCX 2的升級版,從技術(shù)資料來看的話,其實(shí)PowerVR MBX有些類似于PowerVR4,官方的PowerVR MBX白皮書里也明確寫著:
4th generation tile-based deferred rendering(第四代塊元式延后渲染)
從規(guī)格表來看,PowerVR MBX支持OpenGL ES 1.1,相當(dāng)于OpenGL版本1.5或者DirectX 8.x的變種版。
所以,PoweVR MBX應(yīng)該是和PowerVR Series 4一脈相承的,PowerVR MBX屬于后者的移動版本。
什么是TBDR呢?
在前面介紹的圖形渲染流水線,GPU在渲染的時候,一般是逐個三角形渲染的,如果以深度順序來劃分,可以分為從遠(yuǎn)到近(畫家畫法)、從近往遠(yuǎn),開發(fā)人員可以在編寫代碼的時候指定渲染順序。
如果依照在圖形流水線什么階段進(jìn)行三角形排序,又可以分為sort-first、sort-middle、sort-last,middle是中間的意思,指的是從模型空間到屏幕空間這部分工位,sort-middle就是指在這段進(jìn)行三角形前后順序排序。sort-last是指在這之后進(jìn)行三角形排序,sort-first是指在這之前進(jìn)行三角形排序。
Sort-First一般用于多GPU渲染方案,基于片元方式的Sort-Last在目前絕大多數(shù)的GPU微架構(gòu)中使用,而Sort-Middle則是PowerVR的三角形排序方案,需要在幾何變換和光柵化之間進(jìn)行圖元的排列/分倉處理,在解決了可視性問題后再進(jìn)行貼圖和著色處理。
這個步驟會造成一定的延遲,加上采用了塊元式渲染,所以像PowerVR這種渲染架構(gòu)被稱作塊元式延后渲染器(Tile Based Deferred Rendering,TBDR)。
而一般的GPU被認(rèn)為是看到一個三角形就馬上渲染,所以被稱為立即渲染器(Immediate Mode Rendering),立即渲染器也可以分為塊元式(例如ARM Mali)和非塊元式(例如AMD、NVIDIA “目前”的GPU)。
(IMR)
什么是TBDR?
PowerVR 微架構(gòu)誕生于上世紀(jì)90年代初期,針對的是初代的三維游戲機(jī),當(dāng)時的人們希望這枚芯片的效率要盡可能地高,由于受到半導(dǎo)體技術(shù)的限制,所以在這時期有各種現(xiàn)在看來稀奇古怪的偏重于某個技術(shù)指標(biāo)的芯片。
要效率高,其中一個辦法就是只渲染屏幕上能看到的三角形所覆蓋的片元,人們引入了名為HSR(Hidden Surface Removal,隱面消除,這里的隱面是指被其他實(shí)體多邊形遮蓋的多邊形)來消除無效片元來實(shí)現(xiàn)這個目標(biāo)。
(TBDR)
在TBDR的渲染流水線里,幾何階段生成(已經(jīng)經(jīng)過裁剪)的多邊形或者說三角形參數(shù)信息都存放在一個名為Scene Buffer(場景緩存)或者Parameter Buffer(參數(shù)緩存,這是相對新近的叫法)的內(nèi)存里,理論上里面保存的應(yīng)該是同一幀畫面里的所有三角形信息,其位置在顯存里(對于采用統(tǒng)一內(nèi)存架構(gòu)的手機(jī)而言,則是和系統(tǒng)內(nèi)存一樣位于同一塊物理內(nèi)存上)。
這一步是TBDR獨(dú)有的,相較之下,傳統(tǒng)的GPU在幾何階段扔出到三角形后紋理單元/著色單元就馬上渲染,因此人們將傳統(tǒng)的GPU渲染方式稱作立即渲染器。
這里請不要把TBDR 和延后式渲染混淆,后者是指把多個片元渲染后在進(jìn)行后期處理(例如打光、模糊等效果),同樣是“延后”一詞,但是對應(yīng)的渲染節(jié)點(diǎn)完全不一樣。
在生成Scene Buffer的同時,PowerVR GPU內(nèi)部的塊元加速器會對這些三角形進(jìn)行分倉(Binning)或者說篩選(sorting)處理,這個動作會依照16像素*16像素(取決于具體的GPU實(shí)現(xiàn),像PowerVR PCX2可以是32*32或者32*16,PowerVR SGX 5上是16*16,“新的”PowerVR Series 6/7是32*32,這樣的分塊被稱作塊元,即Tile)的大小,將Scene Buffer中位于塊元內(nèi)的所有三角形的指針存放到一個對應(yīng)的塊元緩存(Tile Buffer)中。
對于一個大小為1920x1080的全高清屏幕,用16*16的塊元大小進(jìn)行切分,可以切成大約8100個塊元,每個塊元在“顯存”中都有一個對應(yīng)的塊元緩存,里面存放的就是上面所說的位于塊元內(nèi)的三角形數(shù)據(jù)指針(指向Scene Buffer對應(yīng)的三角形數(shù)據(jù))。
所謂指針,是編程語言中的一個對象或變量,用來存儲某一個地址,這個地址的值直接指向(points to)存在電腦存儲器中另一塊存儲器空間的值。
從編程的角度而言,在這些塊元緩存存放的數(shù)據(jù)結(jié)構(gòu)可以稱作圖元列表(primtive list)。
按照PowerVR或者說ImgTec的說法,他們在新的微架構(gòu)中引入了幾何體壓縮技術(shù),存放在Scene Buffer的幾何體數(shù)據(jù)是壓縮過的,在GPU頂點(diǎn)內(nèi)存單元讀取時候再解壓,這樣的好處是可以顯著節(jié)省存放Scene Buffer的內(nèi)存空間和帶寬,而這通常意味著:省電。
評論