建筑Mesa是OpenGL規(guī)范的開源實現讓顯卡的3D加速特性透過此得到_第1頁
建筑Mesa是OpenGL規(guī)范的開源實現讓顯卡的3D加速特性透過此得到_第2頁
建筑Mesa是OpenGL規(guī)范的開源實現讓顯卡的3D加速特性透過此得到_第3頁
建筑Mesa是OpenGL規(guī)范的開源實現讓顯卡的3D加速特性透過此得到_第4頁
建筑Mesa是OpenGL規(guī)范的開源實現讓顯卡的3D加速特性透過此得到_第5頁
已閱讀5頁,還剩1頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、Gallium3D架構文檔Mesa 是OpenGL規(guī)范的開源實現,讓顯卡的3D加速特性透過此得到施展。從Mesa7.5開始Mesa引入了Gallium3D架構。開發(fā)Mesa7.5之前的版本的驅動比較復雜,每個顯卡廠商的3D驅動都有各自不同的應用后端,通過此調用Mesa的API來實現3D加速。Intel、AMD和NVIDIA這三大廠商的顯卡都具備各自不同的應用后端,造成了開發(fā)和維護困難。而Mesa 7.5最新引入的Gallium3D則是相當先進的一項技術,即使目前為止還未完全成熟。Callium3D提供一套統一的API,這套API將標準的硬件特性(而非軟件特性)暴露出來(如shader unit

2、s),也就是說,Callium3D直接與統一的硬件級特性打交道,而非充當一個純軟件層。因此,這些API使得OpenGL 1.x/2.x,OpenGL 3.x,OpenVG,GPGPU架構甚至 Direct3D 的實現,都只需要通過一個單獨的后端即可。而無須各個廠商自行開發(fā)各自不同的后端。1、 從DRI演進到Gallium3D DRI在Gallium3D之前,Mesa為了實現硬件加速,其DRI體系結構如下:圖 Mesa DRI(非Gallium3D)作者認為,這個模型有下面的缺點:1. Mesa和驅動之間的Leaky interface;2. 驅動體系龐大而且越來越復雜;3. API OS相關的

3、東西也寫在驅動里面了;Mesa DRI的模型導致DRI 驅動層過于龐大。而DRI驅動通常是硬件相關的,這就導致為了適用新的設備,開發(fā)工作較大。所以有人覺得有必要在DRI驅動這一層,提煉一些硬件無關的東西出來。于是DRI Driver初步被劃分為三層:圖 DRI 驅動分層(非Gallium3D)這個模型的特點是:1. 將API,OS,HW分開;2. 創(chuàng)建了新的接口;3. 分割驅動;(和第一條差不多了)現在將DRI驅動分層的想法付諸實施,就得到了下面的模型:圖 DRI 驅動分層(Gallium3D)這個模型帶來了下述特點:1. 增加了State tracker, HW Driver, Winsys

4、三個模塊;2. TG-Gallium驅動棧2、 Gallium3D的特點驅動模型:1. 由GL3(OpenGL 3.0?),NV_GPU4, i965等軟硬件抽象出來的接口;2. 常態(tài)狀態(tài)對象;3. 簡單繪圖接口;如DrawArrays, DrawElements;4. 字節(jié)碼形式的統一Shade語言;5. Render目標作為私有緩沖;6. 可以將硬件驅動運行在新的接口,如GL3,GLES等;7. 可以將硬件驅動運行在新的窗口系統;硬件驅動:1. 比DRI驅動簡單很多;2. 接口:a) -Create/Bind/Delete狀態(tài)對象;b) -Draw,1-2個入口;c) -緩沖管理;d) -

5、Flush3. 每個Gallium驅動定義它自己的OS層(Winsys)接口;4. 通過重新實現WInsys層可以Re-target驅動;如miniglx,EGL;Mesa State Tracker1. 實現了當前的Mesa驅動模型;2. 使用了新的硬件驅動接口3. 硬件無關,可重用;4. 將GL狀態(tài)轉化為常類型對象;5. 處理了所有費解的GL概念:a) -所有不同的GL繪制路徑;b) -像素路徑操作,DrawPixels, Bitmap, CopyT exSubImagec) -GL紋理語義;d) -紋理環(huán)境,GL1.5 shader, GLSLO/S Dependencies1. 每一個

6、Gallium驅動會定義其OS層Winsys接口;2. 通過切換Winsys層可以retarget驅動;Winsys Layer1. 實現了兩個接口:a) DRI驅動接口:CreateDevice, CreateContext,SwapBuffers (*)b) 硬件驅動的Winsys接口:緩沖管理,命令提交;2. 封裝了下述內容:a) DRI lock和cliprectsb) Swapbuffers, page flipping.c) 通用的操作系統相關內容;3、 Gallium3D的參考實現Mesa提供了Gallium3D驅動的軟件參考實現Softpipe:圖 Gallium3D驅動的參考

7、實現SoftpipeMesa同時還提供了Gallium3D驅動的i915參考實現Softpipe:圖 Gallium3D驅動的參考實現i9154、 Gallium3D的使用1.各模塊簡介及功能在目前最新的gallium版本中(Mesa-7.8.2),gallium目錄下主要有以下子目錄:auxiliary,drivers,include,state_trackers。a) include是gallium提供給前端的接口,定義了一些gallium中重要的概念比如context,screen等以及各種state,所有的頭文件都遵循類似以下的形式:struct pipe_context struct

8、 pipe_winsys *winsys;struct pipe_winsys *screen;.void (*destroy)( struct pipe_context*);void (*draw_arrays)( struct pipe_context *pipe,Unsigned mode, unsigned start, unsigned count);.整個gallium對外的接口都是這種含有大量函數指針的結構,通過這種方式可以把前端調用和后端實現分開,使得運行時決定應該調用哪個具體的實現函數。此外,gallium中提供的接口都是針對于硬件概念而非軟件概念,這樣降低了后端的實現難度。

9、b) auxiliary是gallium中的工具模塊,包括了處理shader程序的tgsi模塊,用來實現存儲和對象復用的cso_cache模塊等等c) drivers是目前已經實現了的gallium的后端,針對不同的硬件,有不同的實現,其中softpipe是軟件模擬的顯示設備的實現,具有方便調試易于修改的特點。d) state_trackers是目前已經實現了的前端,其中包括mesa即OpenGL的實現以及vegaOpenVG的實現,其中OpenVG是使用gallium的最好的例子。2. 接口使用方法gallium的使用方法是通過一系列的函數協作來完成,它具有一個顯示設備具有的上下文概念,整個庫的使用圍繞著這個上下文而來:a) 建立上下文b) 設置各渲染階段的處理狀態(tài)函數i. 創(chuàng)建狀態(tài)ii. 綁定狀態(tài)c)設置上下文處理對象bufferd)調用運行函數入口點一系列draw函數f)銷毀創(chuàng)建的buffer對象、狀態(tài)對象g)銷毀上下文3. tgsi的使用Tgsi是tg Shader Infrastructure的縮寫,簡單來說這是一個shader的編程語言,語言的方式類似于匯編,操縱一系列shader

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論