Nvidia Tegra K1的色彩壓縮和PowerVR Series/ARM Mali-Txxx的幀緩存壓縮是什麼?
幀緩存壓縮是圖形圖像設備在在把像素送到幀緩存之前作了一次壓縮處理,以期減少送往幀緩存的數據量,從而減小帶寬。
(筆者土鱉不喜在中文中夾雜英文,亦不喜港台術語,如非十分必要,專業詞均按照大陸通用說法)
0. 背景介紹
首先明確一點,圖形處理器或者圖像設備如視頻編解碼器,最後輸出的都是像素數據,這些數據被送往內存中的幀緩存區域,然後顯示控制器從幀緩存中讀取像素數據並把像素「刷」在屏幕上。1. 遇到的問題
從圖形圖像設備中送出的最終像素數據佔據了很大的帶寬。以每秒60幀,1080P的屏幕為例在最壞情況下每秒輸出數據量為
1920 * 1080 * 3Bytes (RGB) * 60 ( Hz ) 約 360 MB/s (這只是估算的結果也許並不準確)這個數據不斷的從圖形圖像設備送往內存。對手機等便攜系統來說是很重的負擔。要知道與此同時,主處理器,圖形圖像設備的其他部分也在訪問內存,也要帶寬。
如果帶寬吃緊,一般來說主處理器和通信模塊會享有較高的優先順序。因為如果主處理器卡住了,整個系統就無法正常的工作。如果通信模塊卡住了,那電話會斷線,有的用戶就要拿鎚子出來把手機給砸了。
但是圖形圖像設備就沒有這麼高優先順序的保證了,大不了畫面有點卡頓,丟了幾幀圖像,也就是個「呼吸」不暢,偶爾一口氣沒透上來,忍一忍也就過去了。。。
2. 解決方法
很快聰明的攻(diao)城 (si)獅們就發現輸出的像素數據毫無疑問有壓縮的空間,如果壓縮得當,可以大幅減小帶寬。系統「呼吸」 更順暢。PowerVR 和 ARM 的T系列都是基於Tile的渲染架構,Tile架構下的圖形處理器中一般會有一個片上存儲器存儲一小塊屏幕的像素,典型的設計中該存儲器能裝 16x16 個像素點。 每塊的像素數據已經全部完成之後就會被打包送回到內存的幀緩存中,這時正是作壓縮的好時機!具體壓縮演算法各不相同但是簡單的說和普通的數據壓縮相仿。
別看咱就壓縮了這一下,對整個系統的結構卻帶來了巨大影響。壓縮之後擺在幀緩存中的數據再也不是直接的像素數據了,而是壓縮之後的數據包,一般有包頭和包體兩部分。包頭包含一些基本的信息,包體是數據部分。這樣每個和幀緩存打交道的部分都必須解壓縮才行。所以一旦圖形處理器採用了幀壓縮,視頻編解碼模塊必須也能送出同樣格式的壓縮包,顯示控制器則必須增加相應的解壓縮模塊,系統才能繼續「愉快的刷新屏幕」
這是ARM 幀緩存壓縮的網頁。上面說該功能在節省帶寬方面效果顯著。
ARM Frame Buffer Compression
推薦閱讀:
※為ARM Cortex-M系列晶元編寫Bootloader
※把51的7段數碼管顯示程序移植到ZYNQ上(三)——SDK下的程序調試和結果
※ARM裸機1期加強版最新進度(更新時間11月8日)
※不如高通835:Anandtech 對華為海思麒麟970 的測試
※ARM與中方合資並由中方控股是一招妙棋
TAG:ARM | Android手機 | 圖形處理器GPU | 數碼 | NVIDIATegra |