| jserv-- | 差不多要開始了 :-) |
| jserv-- | 再 30 秒 |
| jserv-- | ------------------------------------------------------------------ |
| jserv-- | # 題目: Xorg 嶄新的硬體加速與效能提昇機制 (續集) |
| jserv-- | 各位好,在下是 Jim Huang (黃敬群 / "jserv"),有幸能在此與各位朋友分享 |
| jserv-- | 一些經驗。 |
| jserv-- | 本次 IRC Conference 基本上是 FreeDesktop.org 與 X.org 嶄新發展介紹的 |
| jserv-- | 進階議題,這裡假設與會的朋友已有上一場的經驗與認知,如果沒有,可以自行 |
| jserv-- | 參閱過去的 IRC log: |
| jserv-- | http://ircconf.debian.org.tw/ |
| jserv-- | 感謝各位朋友抽空共襄盛舉,再來要感謝神奇的網路把物理距離遙遠的我們, |
| jserv-- | 能夠透過 IRC 作即時的交流。為了議程的連續性,每一小段落結束後,會提示 |
| jserv-- | "Questions?",屆時可進行討論,有任何問題或建言,請踴躍提出,但除此之外 |
| jserv-- | 的時間,請讓主講者能連續發言,感謝合作。 |
| jserv-- | --------------------------------------------------------------------- |
| jserv-- | Copyright (c) 2006 Jim Huang <jserv.tw @ gmail.com>. |
| jserv-- | Verbatim copying and distribution of this entire article and materials |
| jserv-- | (IRC log) is permitted in any medium, provided this notice is preserved. |
| jserv-- | --------------------------------------------------------------------- |
| jserv-- | 本議程延續上一次「Xorg 嶄新的硬體加速與效能提昇機制」的內容,本次 |
| jserv-- | Debian@Taiwan IRC Conference 大綱如下: |
| jserv-- | # 3D Rendering 與 DRI |
| jserv-- | * 探索 3D Rendering 模型 |
| jserv-- | * 既有硬體加速機制 |
| jserv-- | * 迎向新紀元:Xgl 與 AIGLX |
| jserv-- | # 實做層面的效能提昇 |
| jserv-- | 今年七月份的 IRCConf 已經提及必要的 2D Rendering 的技術細節: |
| jserv-- | http://ircconf.debian.org.tw/log/2006-07-05.html |
| jserv-- | 這裡將進一步邁入 3D Rendering 與 DRI 的新紀元。 |
| jserv-- | -------------------------------------------------------------------- |
| jserv-- | [-] 3D Rendering 與 DRI |
| jserv-- | 2004 年開始,X Window System 面臨了史無前例的巨大變革,其中 3D Graphics |
| jserv-- | 可說是帶動這一系列技術方案的推手。從 Sun Microsystems 的 Looking Glass |
| jserv-- | 計畫整合 Java3D 與 Compositing GL X server 開始,XGL 在 2005 年首次展現於 |
| jserv-- | X Developer Conference,隨後於 2006 年正式釋出 XGL 與 compiz 等創新技術, |
| jserv-- | 更引發 AIGLX 與 Beryl 等種種突破。就 3D Desktop 來說,也達到實用的境界, |
| jserv-- | 試看 Beryl 提供種種美妙的視覺機制,完全不輸給 MacOS X 或 Microsoft Vista |
| jserv-- | 的特效: |
| jserv-- | http://www.beryl-project.org/ |
| jserv-- | http://www.beryl-project.org/features.php |
| jserv-- | 既然我們身處於這個技術巨變的時代,倘若只能依據國外的 HOW-TO 文件,一知半解 |
| jserv-- | 的安裝與設定軟體,而未能感受到這些技術背後的美妙與震撼,豈不是太可惜了嗎? |
| jserv-- | 所以,今天我們先來探索 3D Rendering 模型。 |
| jserv-- | 需要注意的是,在這些目眩的特效背後,其技術細節也是多如牛毛,為了避免有 |
| jserv-- | 「見樹不見林」的遺憾,再看一次在 X Window System 中 3D Rendering 的架構圖: |
| jserv-- | http://gallery.debian.org.tw/2006-12-27/glx |
| jserv-- | OpenGL 並無限制於特定的 Window System 上,在 X Winow System 的 API 實現則是 |
| jserv-- | GLX,OpenGL rendering 時可挑選合適的visual format / attribute,將 OpenGL |
| jserv-- | context 對應於特定 X11 Drawable。 |
| jserv-- | 在兩年前的 IRCConf「FreeDesktop.org 與 X.org 嶄新發展概況(續集)」 |
| jserv-- | http://ircconf.debian.org.tw/log/2004-12-30.html |
| jserv-- | 曾提及「一旦導入 X11/OpenGL 後,情勢就有很大的轉變」,這也是今日要探討的重心。 |
| jserv-- | 當時以 X Protocol 的角度切入,搭配的圖示為: |
| jserv-- | http://gallery.debian.org.tw/2004-12-02/dri_gram |
| jserv-- | 這也就是所謂的 "Control Flow",在這錯綜複雜的架構中,3D Rendering 事實上是 |
| jserv-- | 相對單純的。 |
| jserv-- | 重心在於 Indirect/Direct rendering,觀念列表如下: |
| jserv-- | Indirect rendering program (2D): | Direct rendering program (2D): |
| jserv-- | X Protocol Encode -> Protocol Decode -> | X Protocol Encode -> |
| jserv-- | DIX -> EXA/XAA -> DDX Driver -> | Protocol Decode -> DIX -> |
| jserv-- | Graphics Hardware | EXA/XAA -> DDX Driver -> |
| jserv-- | | Graphics Hardware |
| jserv-- | Indirect rendering program (3D): | Direct rendering program (3D): |
| jserv-- | X Protocol Decode -> GLX -> | Direct rendering (3D data) -> |
| jserv-- | Mesa (including SW rasterizer) -> | 3D data -> Graphics Hardware |
| jserv-- | DDX Driver -> Graphics Hardware | |
| jserv-- | 由上可見,在 2D Rendering 的部份,變化不大,因為還是受限於傳統 client-server |
| jserv-- | 架構的約束,但我們也在七月份的議程提到 XRender extension 與 EXA 在這方面的 |
| jserv-- | 突破,不過呢,3D Rendering 的變化就相當大,上表右下方的 control flow 即是最 |
| jserv-- | 理想的情況,而 X.org 一系列的技術變化也可說是往這個方向努力,並維持既有的 |
| jserv-- | 相容性。 |
| jserv-- | ------------------------------------------------------------------- |
| jserv-- | Questions ? |
| kanru | 等等,消化一下 |
| whiteg | 找個nopaste? |
| kanru | jserv--: Direct rendering 不走 X Protocol 所以才稱為 "direct" 是嗎? |
| jserv-- | kanru, 概念上不受 Protocol 限制,而可作 context <--> Hardware access/mapping,就是 "Direct" |
| jserv-- | 2D Rendering 也有 "Direct" path |
| jserv-- | 不過有趣的是,最後都得繞回 protocol engine |
| jserv-- | 所以上面那個表格才會「看起來」一樣 |
| jserv-- | 2D Rendering 必須考慮到 Window/Resource Management |
| jserv-- | 所以無論是 Indirect/Direct rendering 的開始或結束,必須得有一段 roundtrip |
| jserv-- | 3D Rendering 的性質比較特別 |
| jserv-- | 因為很多硬體都提出輔助的機制 |
| jserv-- | 那也是後面要談的 :-) |
| jserv-- | kanru, 這樣可以理解嗎? |
| * kanru 消化中 |
| jserv-- | 想像一個 "Hello World" 的 X client |
| jserv-- | 無論用何種 toolkit |
| jserv-- | 都必定有 X "Window" 建立的動作 |
| jserv-- | 如果不談 window manager 的影響 |
| jserv-- | "Window" 的建立本身就是一種 protocol communication 的動作 |
| jserv-- | 而在 "Window" 中的內容我們稱為 "Resource" |
| jserv-- | 假設裡面印出 "Hello World" 字串 |
| jserv-- | 該如何對應到螢幕顯示呢? |
| jserv-- | 2D Indirect Rendering ==> 先在 server-side 建立一份資料副本 ==> 然後透過 DDX 顯示 |
| jserv-- | 2D Direct Rendering ==> 呼叫 X extension,避免 client <--> server 不必要的資料傳遞,直接將該資料送給 DDX |
| jserv-- | 因為繪圖的 command (in X protocol) 可以說是立即對應到 device (via DDX),故稱 "Direct" |
| jserv-- | 不過,很不幸的 |
| jserv-- | 就算那個 "Hello World" 字串與文字可透過 Direct Rendering 顯示 |
| jserv-- | 最後還是得透過 X protocol 來告知其 clip region 或相關的資訊 |
| jserv-- | 因為我們得維持 window system 的一致性 |
| kanru | ok |
| Mat-- | jserv--: 可以問個問題嗎? |
| jserv-- | Mat--, 請 |
| jserv-- | Mat--, 別客氣 |
| Mat-- | jserv--: 2D時, graph area overlay是不是由window system來處理. |
| jserv-- | Mat--, 是的 |
| Mat-- | jserv--: 那3d如走dri, window overlay的方面,是不是要覆蓋原先window system的功能? |
| jserv-- | xorg 裡面一堆 fb / cfb 的程式碼就是處理 2D Rendering & window system 的部份 |
| jserv-- | Mat--, 是的 |
| jserv-- | Mat--, 現代的硬體都能作 h/w overlay |
| Mat-- | jserv--: soga... |
| jserv-- | Mat--, 不過早期的 3D impl 的確只能 work on fullscreen |
| jserv-- | 好的,繼續 |
| Mat-- | jserv--: 我知道了, 謝謝嘍:-) |
| jserv-- | ------------------------------------------------------------------- |
| jserv-- | 從實做的角度,我們來看看 Mesa 的硬體加速能力。 |
| jserv-- | 3Dfx 提出 Linux 上首次的硬體加速繪圖機制,透過 Mesa (GL 實做) + Glide (直接 |
| jserv-- | 存取 3Dfx 硬體) 的方式來實現,但有 single-context 與僅能於 fullscreen 運作的 |
| jserv-- | 缺點。隨後,Utah 大學在 XFree86 3.3.6 的基礎之上,提出 GLX protocol,實做出 |
| jserv-- | 非常受限的 direct rendering。而在 XFree86 4.x 提出的 DRI,才是目前我們採用 |
| jserv-- | 的技術基礎。 |
| jserv-- | 為了加強與會朋友的印象,先行解釋相關的術語。 |
| jserv-- | * 運作於 kernel mode 的部份有: |
| jserv-- | DMA (Direct Memory Access)、AGP memory,以及 MMIO (Memory-mapped I/O) |
| jserv-- | * 2D XFree86 driver 則指傳統的 2D X Window System |
| jserv-- | * 3D DRI driver 提供 3D 硬體的支援 |
| jserv-- | * libGL.so:處理 GLX protocol 的細節,並載入 DRI driver |
| jserv-- | * DRI extension:處理 3D 繪圖所需資源管理與通訊 |
| jserv-- | * GLX extension:server-side GLX protocol handling / rendering |
| jserv-- | [ 特別注意到以上三項,非常令人混淆。簡單來說,這是一個分工合作的設計 ] |
| jserv-- | * libGL:這是 API (Application Programming Interface) 層面的部份,也是決定 |
| jserv-- | OpenGL 應用程式在執行時期的行為。 |
| jserv-- | 就目前的設計來說,分成: |
| jserv-- | (1) from Mesa |
| jserv-- | 虛擬的 GLX 實做 |
| jserv-- | 可用於任何 X server 實做 |
| jserv-- | (2) from XFree86/DRI |
| jserv-- | 真實的 GLX 實做 |
| jserv-- | GLX protocol encoder |
| jserv-- | (3) from specific Vendor (像是 nVIDIA) |
| jserv-- | 真正的 GLX |
| jserv-- | 不走 DRI 也不走 Mesa,直接存取硬體 |
| jserv-- | -------------------------------------------------------------------- |
| jserv-- | Questions ? |
| khwu- | jserv--: 請問前輩,剛剛那個第一階段table裡面說X Protocol Decode -> GLX走的是Indirect, |
| khwu- | 那我們輸入glxinfo出現的direct rendering: Yes |
| khwu- | 所代表的意義是? |
| jserv-- | khwu-, 那是 3D Rendering h/w info |
| jserv-- | khwu-, 簡單來說,GLX extension 找到真實的 GLX impl |
| ptsrv | jserv--: 是否就是類似nvidia的作法?@@ |
| jserv-- | 所以,有可運作的 DRI 或者 vendor-specific impl |
| jserv-- | 或者,更簡單的說法就是,非 Mesa software rasterizer |
| khwu- | 嗯嗯,謝謝 |
| jserv-- | -------------------------------------------------------------------- |
| jserv-- | GLX extension 也稱為 libglx,在 X server 中透過 GLX protoco l 對應用程式 |
| jserv-- | 提供 OpenGL context 服務,保留給硬體廠商實做或 Xorg 自行處理。NVIDIA closed |
| jserv-- | source driver 即處理此動作,直接對應到硬體加速呼叫 |
| jserv-- | ------------------------------------------------------------------- |
| jserv-- | 補充一下 |
| jserv-- | 所以,我們可以看到一些有趣的數字 |
| jserv-- | glxinfo 會顯示的 |
| jserv-- | (1) GLX protocol version (2) OpenGL version (3) DRI version |
| jserv-- | 對一般的應用程式來,我們只看 OpenGL version |
| jserv-- | 不過在 3D Desktop 中,這三者的版本都很重要 |
| jserv-- | 會牽涉到其執行時期的行為 |
| jserv-- | 這部份還有問題嗎? |
| Optical | 阿,是今天? |
| Optical | 哦,对 27 号了 |
| Optical | jserv--, 赞~~ |
| khwu- | 大概有點概念 @@ |
| jserv-- | khwu-, Good :-) |
| jserv-- | khwu-, 慢慢來 |
| khwu- | jserv--: thanks ^^ |
| windtw | 嗚嗚..看不懂... |
| jserv-- | 先繼續 |
| jserv-- | windtw, 稍後可以提問 |
| jserv-- | ------------------------------------------------------------------- |
| jserv-- | 接著我們繼續解釋名詞。 |
| jserv-- | * Direct OpenGL Context |
| jserv-- | - Direct Rendered的context |
| jserv-- | - libGL可直接與控制硬體的3D driver溝通,而不必透過GLX extension |
| jserv-- | * Indirect OpenGL Context |
| jserv-- | - 必須透過GLX extension |
| jserv-- | * Accelerated Rendering |
| jserv-- | - 將 CPU-bound (Mesa) 的 3D 複雜運算移轉到 GPU/Hardware |
| jserv-- | * DRI (Direct Rendering Infrastructure) - OpenGL Context 的軟體集合 |
| jserv-- | - libGL (透過Mesa ==> swraster) |
| jserv-- | - libglx (透過Mesa) |
| jserv-- | - 一系列 3D 驅動程式的集合 |
| jserv-- | * DRM (Direct Rendering Manager) |
| jserv-- | - 本質是kernel module (menuconfig 裡面 character device -> drm) |
| jserv-- | - 管理對硬體的操控要求 |
| jserv-- | - nVidia的Linux driver設計不透過DRM (!) |
| jserv-- | ------------------------------------------------------------------ |
| jserv-- | 附帶一提,nVIDIA 不走 DRI/DRM 除了其技術上的優勢外 |
| jserv-- | 還有授權考量 |
| jserv-- | 因為 X Window System / DRI is licensed under MIT X License |
| jserv-- | 但 Linux Kernel Module shall be licensed under GNU GPLv2 |
| jserv-- | 有興趣的朋友可參考: http://blog.linux.org.tw/~jserv/archives/001247.html # 簡報:自由軟體授權分析 |
| jserv-- | 阿,剛剛有電話 |
| jserv-- | 抱歉 @_@ |
| jserv-- | 繼續 |
| jserv-- | ------------------------------------------------------------------ |
| jserv-- | $ apt-cache search xdriinfo |
| jserv-- | xdriinfo - X DRI information utility |
| jserv-- | 可找到印列 DRI 資訊的工具程式,就一般個人電腦上的配置來說,可大致分為 |
| jserv-- | 以下兩種輸出: |
| jserv-- | (1) GL Vendor: SGI Sample Implementation |
| jserv-- | - 以 SGI 於 2000 年一月釋出的版本為基礎 |
| jserv-- | - OpenGL 1.2 API |
| jserv-- | - GLX 1.3 |
| jserv-- | - XFree86 4.0的一部分 |
| jserv-- | (2) GL Vendor: nVidia |
| jserv-- | - Proprietary / closed-source XFree86 4.0 driver for OpenGL 1.2 |
| jserv-- | - 支援TNT*、GeForce*、Quadro等硬體 |
| jserv-- | - 特性: |
| jserv-- | * Direct Rendering |
| jserv-- | * AGP 4x |
| jserv-- | * NVIDIA extensions |
| jserv-- | ----------------------------------------------------------------- |
| jserv-- | Questions ? |
| jserv-- | 補充一下 |
| jserv-- | 由 xdriinfo 這個工具程式可以看到一些微妙的變化 |
| jserv-- | 當我們安裝 Debian 時,如果使用 nVIDIA 的顯示卡 |
| jserv-- | 預設會安裝 "nv" module |
| jserv-- | 那麼,xdriinfo 會看到前者 |
| jserv-- | 但我們自行更改為 nVIDIA proprietary "nvidia" module 時,就會看到後者 |
| jserv-- | 雖然 OpenGL 應用程式仍可在兩種不同組態運作 |
| jserv-- | (我是說一般情況) |
| jserv-- | 但,巨觀與微觀來說,整個 control flow 就不一樣了 |
| WillH | jserv--: @@ |
| FourDollars | jserv--: hi |
| FourDollars | jserv--: 請問一下你剛剛提到的授權問題... 為何 ATI 也是走 DRI/DRM ? |
| jserv-- | FourDollars, 畢竟要像 nvidia 那樣作,相當複雜 |
| jserv-- | FourDollars, 而且 ATI 過去將許多 hw spec 公開 |
| FourDollars | jserv--: 言下之意是 ATI 選擇比較容易實作的方法? |
| FourDollars | jserv--: 為何 hw spec 公開與 DRI/DRM 有關? |
| jserv-- | FourDollars, 因為 MMIO/ioctl 要寫在 kernel module 中 |
| jserv-- | FourDollars, 包含對 GPU (Graphical Processing Unit) 的細部操作,在 DRI 架構下,都是寫在 DRM 中 |
| jserv-- | 這讓我想到之前有人用 nVIDIA 的 GPU 來作科學運算 |
| WillH | jserv--: ping |
| jserv-- | WillH, pong |
| jserv-- | WillH, use PM please. |
| WillH | jserv--: 有幫我問了嗎 @_@ |
| WillH | ok |
| jserv-- | 好的,繼續 |
| jserv-- | ----------------------------------------------------------------- |
| jserv-- | 既然提到 3D Rendering,我們快速探討與 XGL/AIGLX 相關的 GL 項目,不過 |
| jserv-- | 這裡完全不會提到 OpenGL programming,而是針對實做層面。 |
| jserv-- | OpenGL 既然是開放規格,允許不同廠商與團體實做 API,而官方則以 |
| jserv-- | Conformance Testing 來驗證並確保相容性,其中 OpenGL ARB (Architectural |
| jserv-- | Review Board) 就是相當有代表性的協調單位,以下簡稱 ARB,透過協調與合作 |
| jserv-- | 的方式,ARB Conformance Test 可界定標準 OpenGL 規範與建議實做的部份, |
| jserv-- | 當然,各家廠商也可提出自己的專屬實做部份。這裡再提到一項重要的規範: |
| jserv-- | Linux/OpenGL Base Standard (oglbase),類似 LSB 的概念,但涵蓋 ABI 與 |
| jserv-- | OpenGL Runtime。 |
| jserv-- | OpenGL extension 是相當重要的項目,雖然只是「建議性」,但為了瞬息萬變、 |
| jserv-- | 永遠無法妥協的視覺需求,高階應用需透過這些 Extensions 來實現,換言之, |
| jserv-- | extension 是在OpenGL 中實現新功能的方式,舉例來說: |
| jserv-- | * GL_ARB_multitexture |
| jserv-- | * GL_ARB_texture_env_add |
| jserv-- | * GL_ARB_multisample |
| jserv-- | * GL_ARB_texture_compression |
| jserv-- | * GLX_ARB_get_proc_address |
| jserv-- | * GL_EXT_blend_color |
| jserv-- | * GL_EXT_blend_subtract |
| jserv-- | * GLX_EXT_texture_from_pixmap |
| WillH | jserv--: I pm from #ch**** |
| jserv-- | ... |
| jserv-- | ---------------------------------------------------------------- |
| jserv-- | Questions ? |
| FourDollars | jserv--: ATI 過去公開的 hw spec 可以在何處取得? |
| jserv-- | FourDollars, ATI developers website |
| jserv-- | FourDollars, 簽署表格即可 |
| jserv-- | FourDollars, 另一種方式是讀 xorg source code |
| jserv-- | FourDollars, 當 keithp 任職於 HP 時,取得很大部份的硬體資訊 |
| FourDollars | jserv--: 嗯... 多謝... :) |
| priv | NDA...? |
| khwu- | jserv--: 請問前輩,GLX_ARB_multisample跟GL_ARB_multisample都擁有一樣的功能嗎? |
| khwu- | jserv--: 都是ARB提供的?@@ |
| jserv-- | khwu-, 問題不好 :P |
| jserv-- | ARB 有點像是 RFC |
| jserv-- | 但是更正式些 |
| jserv-- | GL_ 開頭者為 OpenGL standard or ARB requested |
| khwu- | jserv--: 還是ARB只訂出規範..分別由GLX or GL實做出extension? |
| jserv-- | GLX_ 開頭者 |
| jserv-- | 則為 X specific 實做部份 |
| khwu- | jserv--: 嗯嗯 |
| jserv-- | khwu-, 可以這麼說 |
| jserv-- | priv, ATI 文件本身是 NDA |
| khwu- | jserv--: 謝謝^^" |
| jserv-- | priv, 但是 driver 又是另一回事 |
| priv | oh |
| jserv-- | priv, "form" 不一樣 |
| jserv-- | 至少 ATI 的說法是這樣 |
| priv | 其實我對ATI沒什麼興趣..XD |
| priv | 而且我對graphics也沒研究 |
| jserv-- | 不過 ATI 這幾年資助 X dev 頗多 |
| FourDollars | jserv--: nVidia 呢? |
| jserv-- | FourDollars, nv 比較複雜 |
| jserv-- | FourDollars, 很難用簡單的話語說清楚 |
| jserv-- | FourDollars, 總之,nvidia 的束縛比較多,很多開發者得用逆向工程來完成 driver |
| jserv-- | 但某些 developer 總是可以成功逆向工程,甚至做得比官方 driver 還穩定 |
| jserv-- | 好,繼續 |
| FourDollars | jserv--: 嗯... 這麼說來 ATI 的 driver 都是靠著 hw spec 做出來的 |
| jserv-- | ---------------------------------------------------------------- |
| jserv-- | Xgl 在 OpenGL 需要的 Extensions,列舉如下 (部份): |
| jserv-- | (1) GL_EXT_framebuffer_object |
| jserv-- | - OpenGL/Mesa Off-screen Rendering |
| jserv-- | - Framebuffer Object (FBO) |
| jserv-- | - back buffer / pbuffers (for pixmaps) |
| jserv-- | (2) GLX_SGIX_pbuffers |
| jserv-- | http://gallery.debian.org.tw/Xorg-Hardware_Acceleration_Mechanism/pbuffer |
| jserv-- | (3) GLX_EXT_texture_from_pixmap |
| jserv-- | - binding redirected top-level windows to texture objects. |
| jserv-- | XGL/compiz 為了圖形處理的加速,可以透過 GLX 更快的路徑,直接操作硬體, |
| jserv-- | 會透過 FBO (FrameBuffer Object) 與 pBuffer 來實現,不過在現實考量,則得 |
| jserv-- | 考慮到 ATI、Intel,或者 nVIDIA 等硬體上不同的 extension 表現。 |
| jserv-- | ---------------------------------------------------------------- |
| jserv-- | (好像又講不完了) |
| chihchun | ccc |
| jserv-- | Questions ? |
| jserv-- | 好的,繼續 |
| jserv-- | ---------------------------------------------------------------- |
| jserv-- | 在 XGL 搭配 compiz (以 OpenGL 實做的 Window Manager 的 Composite Manager) |
| jserv-- | 運作的情況,其架構圖可簡化為如下: |
| jserv-- | http://gallery.debian.org.tw/Xorg-Hardware_Acceleration_Mechanism/xgl_arch_glitz |
| jserv-- | 我們可以看到 X server 底層的 DDX (Device-Dependent X) 透過 glitz/OpenGL |
| jserv-- | 直接驅動硬體的 3D 加速處理,這也是我們一直提到 "X-on-GL" 的表現。 |
| jserv-- | 而深入來看則是: |
| jserv-- | http://gallery.debian.org.tw/Xorg-Hardware_Acceleration_Mechanism/xgl_compiz_arch_glitz |
| jserv-- | 我們需要留意的是,XGL/AIGLX 是 "X-on-GL" 的架構,至於真正與使用者互動的 |
| jserv-- | 部份,是 GL application,也就是 compiz 或者分支而出的 Beryl。由上圖可以 |
| jserv-- | 發現,compiz/Beryl 本身也是貨真價實的 OpenGL 程式,但綁定許多不同層面的 |
| jserv-- | 軟體元件。 |
| jserv-- | compiz/beryl 同時也是 window manager 與 composite manager,但不同於傳統 |
| jserv-- | 的 window manager (如 IceWM) 或 composite manager (如 xcompmgr),除了透過 |
| jserv-- | X Protocol 與 X Window System 通訊外,還使用了上述的 OpenGL extension, |
| jserv-- | 於是可用很直覺且有效率的途徑,將美妙的 3D Rendering 呈現出來。 |
| jserv-- | --------------------------------------------------------------------- |
| jserv-- | Questions? |
| jserv-- | 補充一下,可以將上圖中 compiz 運作模式比照前述 control flow of 2D indirect rendering |
| jserv-- | 可以發現,現在 OpenGL command 是直接送到 Gfx hardware 去 |
| jserv-- | 看來是來不及打後面的 text 了 |
| jserv-- | 用最快的速度解釋 AIGLX |
| jserv-- | 既然有 XGL,為何 RedHat 還要提出 AIGLX 呢? |
| jserv-- | 最主要的原因是,XGL 的設計理念的確符合 X.org 發展趨勢 |
| jserv-- | 但現階段採用 Xglx 不甚理想 |
| jserv-- | 多了一層包袱 |
| jserv-- | Xglx 顧名思義就是 X on GLX (請參照前述名詞解釋) |
| jserv-- | Xglx 的工作原理是透過一個普通的 X server,在其 GLX 上再運作一個 X server,也就是 Xglx |
| jserv-- | 比方說 $DISPLAY of Xglx 為 :99 |
| jserv-- | 那麼 compiz 與其他 X client 就運作在該 display 中 |
| jserv-- | AIGLX 的 "I" 就是 "Indirect',而 "A" 則是 "Accelerate" |
| jserv-- | 所以就是希望連同 Indirect Rendering 的部份也能硬體加速 |
| jserv-- | 所以比對兩者的架構來說 |
| jserv-- | 只有細微的差異 |
| jserv-- | 但是,AIGLX 是修改底層 GLX/DRI driver 的機制 |
| jserv-- | 達到不需要 Xglx 的包袱,並且加速原本 indirect rendering 的 control flow |
| jserv-- | 所以更動的幅度比較大 |
| jserv-- | 相容性也較差 |
| jserv-- | 但效能上可有更具彈性的表現 |
| jserv-- | 嗯,不知不覺就晚上十點了 |
| jserv-- | Any questions ? |
| jserv-- | 那麼今年度的 IRCConf 就到這裡告一段落了 |
| jserv-- | 感謝各位 |
| jserv-- | 上述未完的部份,將繼續在 IRCConf 2007 繼續 |
| * kanru claps |
| priv | 原來現在是在IRCCOnf.. |
| priv | XD |
| * jiing claps |
| * khwu- (鼓掌) |
| * FourDollars 帕~帕~帕~ |
| * priv 啪啪啪啪啪啪 |
| * lancetw 啪啪啪啪啪啪~ |
| flys | 啪啪啪啪啪啪啪~ |
| * windtw 啪啪啪...(雖然聽不太懂= =") |
| * whiteg 鼓掌 |
| jserv-- | windtw, 可以具體說哪個部份嗎? |
| windtw | jserv--: 太多英文名詞@@ |
| jserv-- | windtw, ok |
| jserv-- | windtw, 像是哪些呢? |
| jserv-- | 我覺得 OpenGL 的部份比較難 |
| windtw | jserv--: 很多...所以收集資料慢慢查= = |
| jserv-- | 市面上可以找到一堆 OpenGL Programming 的書籍 |
| jserv-- | 但是我還沒找到提到 OpenGL 怎麼跟硬體打交道的書 |
| jserv-- | 最慘的是,連術語都不太一樣 |
| jserv-- | 常常有看沒有懂 |
| checko | opengl 既已統一軟體的介面,為甚麼和X Server間還要有這麼多中介的架構呢?--- 抱歉,遲到了,或許這點一開始已經說過:p |
| jserv-- | checko, hi |
| jserv-- | checko, 相容性 |
| jserv-- | checko, 這是 X 最高指導原則之一 |
| jserv-- | checko, 如果你有閱讀 mailing-list,可以看到許多 optimization 因為會打破相容性,所以被 reject |
| checko | 相容性這曾不是由 opengl comformance test 負責? |
| fermi | jserv--: 我还真以为会跟您一个月见不着呢.. orz |
| jserv-- | checko, 不是這麼簡單 |
| jserv-- | checko, GLX 有許多 Runtime behavior |
| jserv-- | checko, 比方說 overlay |
| jserv-- | checko, 這是得跟過去那些包袱綁在一起的 |
| jserv-- | 再者,事實上,GLX 也是 network transparency |
| jserv-- | 只不過在非 SGI 的硬體,通常是把這個功能關掉 |
| jserv-- | fermi, hi |
| fermi | jserv--: 您知道中国光缆断的事情吧? |
| jserv-- | checko, reference: MiniGLX, Mesa/Solo |
| fermi | @@ |
| priv | 地震震斷 |
| jserv-- | checko, 有提到許多既有的問題 |
| checko | thanks ! you really know what I want ..:) |
| jserv-- | checko, hmmm |
| jserv-- | fermi, sure |
| fermi | priv: 是啊.. |
| fermi | priv: 说要修一个多月 |
| jserv-- | 又開始頭暈了 |
| fermi | priv: 吓死我了 |
| jserv-- | 應該要避免在十二月辦 IRCConf |
| fermi | jserv--: 尻枪过度,亚健康状态 |
| jserv-- | ... |
| khwu- | #_# |
| priv | fermi: ...orz |
| jserv-- | Zzzz |
| jserv-- | Bye |