目錄
IMX6Q中Vivante GPU簡介
IMX6Q中GPU型號
在imx6q中有3個vivante的GPU,分別是GC2000、GC320、GC355。GC2000負責3D圖形的加速,GC320負責2D圖形的加速,GC355負責矢量圖形的加速。如圖 11所示:
圖 11 Vivante GPU簡介
Vivante GC2000硬件架構
圖 12 GC2000硬件架構
圖 12表示的是GC2000 GPU的硬件架構,各模塊的具體作用如下:
Host Interface:GPU和CPU還有內存通訊的接口。
Memory Controller:GPU內存控制器。
Graphics Pipeline Front End:相當於GPU內部的DMA,用於從內存中取指令和數據給GPU處理。
Ultra-threaded Unifed Shader:統一着色器,即可用作頂點着色器(vertex shader)也能用作片元着色器(fragment shader)。用作vertex shader時主要負責幾何變換和光照計算,用作fragment shader時主要負責處理貼圖數據和計算像素顏色。
3D Rendering Engine:負責將三角形和線段轉換爲像素(光柵化),計算三角形面的顏色屬性等。
Texture Engine:用於材質貼圖的處理。
Pixel Engine/Resolve:負責像素透明處理,可見平面的測定和抗鋸齒的一些處理,並將GPU處理完成的圖像數據輸出到frambuffer。
Vivante GPU使用的圖形API簡介
OpenGL ES
OpenGL ES (OpenGL for Embedded Systems) 是 OpenGL 三維圖形 API 的子集,針對手機、PDA和遊戲主機等嵌入式設備而設計。OpenGL ES 是從 OpenGL 裁剪的定製而來的,去除了四邊形、多邊形等複雜圖元等許多非絕對必要的特性。OpenGL ES 1.x 針對固定pipeline硬件,OpenGL ES 2.x 針對可編程pipeline硬件。
EGL
OpenGL是一個操作GPU的API,它通過驅動向GPU發送相關指令,控制pipeline狀態機的運行狀態。但OpenGL需要與本地視窗系統進行交互,這就需要一箇中間控制層,最好與平臺無關,EGL因此被獨立的設計出來,它作爲OpenGL ES和本地窗口的橋樑。
EGL API 是獨立於OpenGL ES各版本標準的獨立API ,其主要作用是爲OpenGL指令創建 Context 、繪製目標Surface 、配置Framebuffer屬性、Swap提交繪製結果等。此外,EGL爲GPU廠商和OS窗口系統之間提供了一個標準配置接口。一般來說,OpenGL ES中pipeline的狀態被存儲於EGL管理的一個Context中。而Frame Buffers 和其他繪製Surfaces 通過EGL API進行創建、管理和銷燬。 EGL 同時也控制和提供了對設備顯示和可能的設備渲染配置的訪問。
圖 21爲一個典型的EGL系統佈局。應用程序通過調用EGL API進行window、surface、context的初始化,接着通過調用OpenGL ES的API進行設置context等,最後調用GPU渲染API進行渲染。
圖 21 典型EGL系統佈局
Vivante GPU軟件框架
圖 22表示的是Vivante GPU的軟件框架。GAL Driver是爲了降低跨平臺(操作系統,硬件平臺)移植的難度而設計的一套API,包括用戶層驅動:主要提供GAL API給開發者使用;內核層驅動:主要負責管理對GPU硬件的操作。
在實際使用中,圖中的EGL、OpenGL ES等圖形庫以動態庫形式被使用,用戶層的GAL Driver也以動態庫形式被使用,內核層的GAL Driver以內核模塊驅動形式被使用。
圖 22 Vivante GPU框架