雖然 WebKitGTK 已經提供了加速合成支持,但有不同的代碼路徑,具體取決於使用的​​是 Wayland 還是 X11、涉及的各種其他復雜性以及使用 GTK3 和 GTK4 工具包之間的差異。 WebKitGTK 開發人員一直致力於通過 DMA-BUF 將他們的多個不同代碼路徑轉向一個路徑。

WebKitGTK 已經將 DMA-BUF 緩衝區共享用於 WebGL 和媒體渲染,同時他們正在轉向使用它來實現 Web 和 UI 進程之間的渲染緩衝區共享。 Igalia 開發人員 Carlos Garcia Campos 今天在一篇新博文中解釋說:

“我們已經在 WebKit 中使用 DMABUF 來處理不同的事情,例如 WebGL 和媒體渲染,所以我們認為我們也可以將它用於在 web 和 UI 進程之間共享渲染緩衝區。這將是一個更有效的解決方案,但它也會大大減少要維護的組合數量。web 進程始終使用無表面平台,因此它是否在 Wayland 下並不重要或 X11。然後我們創建一個無表面上下文作為渲染目標,並使用 EGL 和 GBM API 將內容導出為 DMABUF 緩衝區。UI 進程也使用 EGL 和 GBM 導入 DMABUF 緩衝區,以作為紋理傳遞給 GTK is painted in the web view.

這在理論上將所有以前的組合重新組合為一個(注意我們完全刪除了 GLX 支持,使 EGL 成為加速合成的要求),但是在 X11 下有一個問題:GTK3 不支持X11 和 GTK4 上的 EGL 默認為 EGL,但如果找不到與屏幕視覺完美匹配的 EGL 配置,則會回退到 GLX。在我的系統中,它從來沒有找到 EGL 配置,因為 mesa 沒有公開任何 32 位深度配置。因此,在 GTK3 的情況下,我們必須手動將緩衝區下載到 CPU 並使用 Cairo 正常繪製,但在 GTK4 + GLX 的情況下,GTK 會再次上傳緩衝區以使用 GLX 進行繪製。我認為強制 GTK 從 API 使用 EGL 是不可能的,但至少你可以使用 GDK_DEBUG=gl-egl。
WebKitGTK 2.41.1

WebKitGTK 2.41.1 是該週期的第一個不穩定版本,並且已經包含默認使用的 DMABUF 支持。我們鼓勵大家嘗試並提供反饋或報告任何問題。請在報告任何與圖形相關的問題時導出 webkit://gpu 的內容並將其附加到錯誤報告中。要檢查問題是否是 DMABUF 實現的回歸,您可以使用 WEBKIT_DISABLE_DMABUF_RENDERER=1 來使用 WPE 渲染器或 X11。如果 DMABUF 工作正常,這個環境變量和 WPE 渲染/X11 代碼最終將被刪除。”

可以通過 Carlos 的博客
WebKitGTK 2.4.1.1 作為使用 DMA-BUF 和 WebKit IPC 進行渲染的新開發版本是週四發布。WebKitGTK 是各種 GNOME/GTK 應用程序使用的 WebKit 渲染引擎端口比如 GNOME Web/Epiphany 和 GNOME 桌面上的其他 HTML/CSS 需求。

Categories: IT Info