天天看點

Linux Graphics 周刊(第 9 期)

很抱歉!Linux Graphics 周刊可能要爛尾了!正所謂魚和熊掌不可兼得,寫周刊的時間也占據了我個人學習精進的時間,後期将還是回歸到以 DRM 部落格為主的文章發表。如果你對 Linux Graphics 周刊感興趣,可以給我私信或留言,共同參與到 Linux Graphics 周刊的撰寫中來,為我分擔一份力,也幫助自己拓展技術視野。

導讀
  • dma-buf: 添加 sysfs 統計節點
  • fbdev: UDLFB 驅動将被移除
  • drm/vkms: Add setup and testing information
  • Zink: 添加 Tessellation Shader 的支援
  • 微軟向 Mesa 添加 SPIR-V to DXIL 的轉換庫,用于支援 WebGPU
  • Mesa-21 将開始支援 Direct3D-12 ,僅限于 WSL 環境
  • Lavapipe:新增 VK_EXT_transform_feedback 擴充支援
  • Mesa 21.0 删除了 Classic OSMesa
  • 樹莓派:V3DV Vulkan 驅動已支援 Wayland 視窗系統
  • 樹莓派:Mesa 21.0 優化 OpenGL 驅動的 Blit 操作
  • XWayland 21.1 将從 X.Org Server 中剝離出來
  • Wayland 1.19 即将釋出
  • Weston 新增 YUV 測試 demo
  • Collabora: A Wayland driver for Wine
  • Khronos:Vulkan SDK、Tools 和 Drivers 已添加對光線追蹤的支援
  • RenderDoc 1.11 釋出
  • KDE: Plasma KWin 如何在不同重新整理率的屏上工作, 以及如何在多線程上進行合成任務

DRM

1. dma-buf: 添加 sysfs 統計節點

新增如下 sysfs 統計資訊:

/sys/kernel/dmabuf/<inode_number>/exporter_name
/sys/kernel/dmabuf/<inode_number>/size
/sys/kernel/dmabuf/<inode_number>/dev_map_info
           

以上節點資訊需要開啟

CONFIG_DMABUF_SYSFS_STATS

選項才能看到。

詳情:[PATCH] dmabuf: Add the capability to expose DMA-BUF stats in sysfs

2. fbdev: UDLFB 驅動将被移除

多年來,一直有人呼籲廢除 Linux 的 fbdev 驅動,轉而使用更進階的 DRM 驅動替代。雖然硬體廠商現在傾向于使用 DRM 驅動程式(以及 fbdev emulator),但在嵌入式領域直接切換到 DRM 尚且還不太成熟。但是至少有一個 fbdev 驅動現在看起來可以被移除了,轉而使用它的 DRM 版本。來自 SUSE Graphics Team 的Thomas Zimmermann 提議将 UDLFB 驅動從核心主線中移除,因為它已經事實上被 DRM UDL 驅動程式所代替了。UDL 為 Usb DisplayLink 的縮寫,它們專是用于支援基于 DisplayLink USB 2.0 顯示擴充卡的驅動程式。在過去的幾年中,UDL DRM 驅動程式一直是人們關注的焦點,而 UDLFB 驅動卻沒有受到太多關注,是以 Thomas 決定移除該 fbdev 驅動。

詳情:Another Linux FBDEV Drover Poised For Removal In Favor Of Superior DRM Alternative

3. drm/fb-helper: 各種 fixes 和 cleanups

詳情:[PATCH v2 00/10] drm/fb-helper: Various fixes and cleanups

4. drm/vkms: Add setup and testing information

Sumera Priyadarsini 為 VKMS 核心文檔新增了使用說明,包括如何配置 VKMS 驅動,以及如何使用 IGT 測試工具對 VKMS 進行測試操作,适合剛接觸 VKMS 的初學人員。

詳情:[PATCH V2] drm/vkms: Add setup and testing information

Mesa

1. Zink: 添加 Tessellation Shader 的支援

Zink 是基于 Vulkan 實作的 OpenGL Gallium3D 驅動,為那些還沒有能力從 OpenGL 遷移到 Vulkan 的廠商提供了過渡方案。在 Mesa 21.0 中,Zink 引入了對 ARB_tessellation_shader 擴充的支援。Tessellation Shader(曲面細分着色器)是 OpenGL 4.0 的一個關鍵 Extension,也是 Zink 除了 ARB_gpu_shader5 和 ARB_texture_gather 擴充外,在 Mesa 主線上實作 GL 4.0 的又一個擴充。

詳情:Zink OpenGL-On-Vulkan Lands Tessellation Shader Support In Mesa 21.0

2. 微軟向 Mesa 添加 SPIR-V to DXIL 的轉換庫,用于支援 WebGPU

前不久,微軟向 Mesa-21.0 送出了一個新的轉換庫 ———— spirv_to_dxil,該庫用于将 spirv 轉換為微軟的 DXIL。這個轉換的目的其實是為了實作 Direct3D 對 WebGPU 網頁應用程式的支援。

WebGPU 是目前正處于開發階段的 W3C 标準,它作為 WebGL 的繼承者,由微軟和其他公司共同參與開發。WebGPU 是基于現代 Graphics/Compute 理念設計的,它的 Shader 語言是 WGSL,是一種非常類似于 spirv 的中間表達産物。正因如此,微軟正在嘗試利用 Mesa 将 WGSL 轉換為 spirv,并最終轉換成 DXIL 以供 Windows Direct3D 驅動使用,這樣微軟就不必自己完全實作從 WGSL 到 DXIL 的轉換過程了。是以這看起來像是 Mesa 在 Windows 上的一種新的用途,即在 Direct3D 驅動的 web 浏覽器上支援 WebGPU 的 WGSL。但是目前這個 “spirv_to_dxil” 庫的功能還非常薄弱,據說隻能編譯一個 fragment shader 程式。

詳情:Microsoft Adds SPIR-V To DXIL Library In Mesa - With A Focus On WebGPU Support

3. Mesa-21 将開始支援 Direct3D-12 ,僅限于 WSL 環境

mesa 21.0 的一大改進是支援 Windows WSL2 建構微軟 Direct3D-12 Gallium3D 驅動代碼。前段時間,Direct3D 12 Gallium3D 代碼的初始版本被合并到 Mesa 中,以便在 Windows 環境下使用。而這次的合并的内容則是如何在 Windows Linux 子系統(WSL)上對該早期代碼的運作支援。它包括在 Linux 上建構 Direct3D 代碼的能力,雖然在 WSL 之外并沒有什麼卵用。

WSL 方面的這項工作最終是為了讓 OpenGL(包括 OpenCL)在 Windows Subsystem for Linux 下工作,并反過來在主機上的 Windows D3D12 驅動上運作,類似于 Windows for OpenGL 下目前的 Mesa 支援,或 Windows 本地的 OpenCL TOP D3D12 驅動程式。是以這項工作并不是要在 Linux 本地支援 Direct3D 以此來幫助 Linux 遊戲的移植的。總的來說,這仍然是一個仍未完成的工作,可能要幾個月後才能看到一個良好的開箱即用的體驗,特别是在 WSL 發行版中需要更多的時間。

詳情:Mesa 21.0 Merges Initial Direct3D 12 Support For WSL

4. Lavapipe:新增 VK_EXT_transform_feedback 擴充支援

Lavapipe 首次出現在 Mesa 20.3 中,它是基于 CPU 實作的 Vulkan 驅動。Lavapipe 的工作仍然由 Red Hat 的 David Airlie 主導,他在開源圖形驅動領域可是相當多産的。Lavapipe 在 Mesa 21.0 中的最新特性是對 Vulkan VK_EXT_transform_feedback 擴充的支援。類似的,LLVMpipe 也在一定程度上提供了這種 transform feedback 功能。

VK_EXT_transform_feedback 擴充是在兩年前引入的,用于協助 DXVK / VKD3D 和其他圖形 API 的移植工作。

除此之外,這次的 Lavapipe 也添加了一些其他的 Vulkan 擴充,如 KHR_descriptor_update_template、KHR_push_descriptor、EXT_shader_stencil_export 等等。Mesa 21.0 的 feature 要到2月初才會 freezee,是以還是有充足的時間來實作 Lavapipe 的其它功能的。

詳情:Lavapipe Continues Advancing CPU-Based Vulkan - Now Supports Transform Feedback

5. Mesa 21.0 删除了 Classic OSMesa

在進行 Mesa core 的一些清理工作時,Eric Anholt 在下一季度即将釋出的 mesa 21.0 中删除了經典的 OSMesa(Off-Screen-Mesa,離屏渲染) 支援。那些希望在 2020 年及以後使用 Mesa soft-rendering 的使用者應該盡量使用 LLVMpipe,否則 Softpipe 應該無法用于你的軟硬體平台。LLVMpipe 提供了更好的性能,更不用說 OpenGL 4.6 了,而且是一直都在維護中的。由于經典的 OSMesa 代碼已漸漸老去,且近年來很少用于離屏渲染,是以經典的 OSMesa 代碼已經被删除了。

Eric Anholt 在 pull request 中這樣描述道:“我一直在 Mesa core 中處理格式方面的工作,我真的為經典的 OSMesa 的存在而煩惱。src/mesa/swrast 代碼很爛,我們不鼓勵開發人員使用它。同時,由于 OSMesa 測試不足,我們已經發現 在 Gallium 版本中有許多 Bug。是以我們推薦開發人員改用 softpipe/llvmpipe(如果他們堅持使用 OSMesa 的話),我們應該修複已知的 Bug 并删除老的代碼。”

關于 OSMesaGetDepthBuffer 的已知錯誤、記憶體洩漏以及 Windows 的 GL 符号表問題都已經得到了解決,是以 Anholt 删除了經典的 OSMesa。正如 Anholt 在送出報告中指出的那樣,最終對使用者的影響應該會很小,“在我對 OSMesa 使用者的調查中,Debian 是使用 OSMesa 以及一些非 LLVM 架構(sh4、alpha等)的堅持者,到了今天,他們已經切換到基于 softpipe 的 gallium OSMesa。為了防止人們運作錯誤的 OSMesa(在某種程度上,運作 OSMesa 是正确的),請直接删除經典版本。”

詳情:Classic OSMesa Retires In Mesa 21.0 As The Worst Of The Software Rendering Paths

6. 樹莓派:V3DV Vulkan 驅動已支援 Wayland 視窗系統

今年,Raspberry Pi 的 V3DV Vulkan 驅動發展的勢頭相當迅猛,V3DV 驅動就在兩個月前已經合入到了 Mesa 20.3 中,且已經通過了 Vulkan 1.0 CTS 測試。而最近,V3DV 又添加了對本地 Wayland 的支援!一位獨立開源貢獻者為 V3DV 設計了 Wayland WSI (視窗系統內建)支援,并通過一系列步驟将其合并到了主流 Mesa 中,也就是下個季度即将釋出的 Mesa 21.0。現在樹莓派4的 Broadcom VideoCore GPU 可以與 Wayland 視窗系統無縫內建了。

詳情:Raspberry Pi’s V3DV Vulkan Driver Now Supports Wayland

7. 樹莓派:Mesa 21.0 優化 OpenGL 驅動的 Blit 操作

随着 V3DV 初始裡程碑的實作,更多性能相關的工作正如火如荼的進行着。同時,V3D OpenGL 驅動程式也在不斷的改進。在 Mesa 21.0 中,V3D OpenGL 驅動實作了一種基于 tile (圖塊)渲染的高效方法,該方法利用了 tile buffer 硬體。同時,在某些情況下 tile buffer 硬體還可以處理多采樣解析。總而言之,合入 Mesa 21.0 的新代碼應該在 blitting 操作中提供一些細微但可測量的速度優勢。同時,基于 VC4 驅動程式支援的舊的 tile blit 代碼也已被删除。

詳情:Raspberry Pi OpenGL Driver Seeing Faster Blit Support Come Mesa 21.0

Xorg

XWayland 21.1 将從 X.Org Server 中剝離出來

近年來,X.Org Server 幾乎已經停止更新,但是 Red Hat / Fedora 仍然希望釋出對 XWayland 的支援。Red Hat 工程師們目前已經開始着手搭建 XWayland 的獨立倉庫,這些倉庫源于同一個 Xorg Server 版本庫,不過删除了與 XWayland 無關的代碼。

如前所述,Fedora 正在嘗試提供獨立的 XWayland 包,該包将跟蹤 X.Org Server 倉庫的更新狀态,但不需要為淘汰的功能而更新 X.Org Server,也不需要為 X.Org 進行 upstream 版本管理。

RedHat 的 Michelddänzer 的想法則與此不同,他提出在 X.Org Server 倉庫中單獨拉出 XWayland 分支進行維護。該提議将把 XWayland 代碼從 X.Org Server 的“主分支”中拉出來,抛棄 Autotools 建構系統,取而代之的則是采用 meson 建構系統,并删除與 XWayland 無關的代碼(除了保留對 Xvfb 單元測試的支援)。對于那些不需要建構 X.Org Server,或希望找到一個新的 upstream server 的人來說,這将是 XWayland 的唯一選擇。XWayland 21.1.0 将作為該分支的第一個版本,不出意外的話,我們将在 2021 年初迎來第一個 XWayland 版本,并将這個包放入 fedora34 中,以提供比 X.Org Server 1.20 更好的 XWayland 支援。

詳情:XWayland 21.1 Proposed In Splitting Off Releases From The X.Org Server

Wayland

1. Wayland 1.19 即将釋出

自從 Wayland 1.18 于 2020 年 2 月份釋出以來,一直沒有太多關于 Wayland 1.19 的讨論,因為現階段的 Wayland 核心功能已經相當成熟和穩定了。不過 Wayland 1.19 的開發工作已經在上個月開始啟動了,預計會在今年1月份釋出。Wayland 1.19 并不是一個大的更新,但因為它已經積累了近一年的大大小小的修改,剛剛擔任釋出經理的 Simon Ser 決定在這個月底釋出 Wayland 1.19 正式版本。該版本主要變化包括文法和拼寫修正,各種文檔更新,Meson 建構系統更新,以及各種與協定相關的小更新。如果其它 rc 版本得到保證,Wayland 1.19.0 可能會到2月份釋出。另外,1.19 也将成為曆史上最後一個支援 GNU Auto-tool 的版本,而 Meson 将成為該項目唯一的建構系統。

詳情:Wayland 1.19 Is Set To Come Soon As First Update In Nearly One Year

2. Weston 新增 YUV 測試 demo

一直以來,Weston 的 tests 目錄下的測試 demo 都隻支援 RGB 圖檔的顯示,不支援 YUV 格式。近日,來自 Collabora 公司的 Pekka Paalanen 填補了這一塊的空白,他為 Weston 開發分支送出了一個 YUV 的測試 demo,該 demo 基于 wl_shm 共享記憶體,将一張256X256的 PNG 圖檔以 RGB 格式 load 到記憶體,然後将其分别轉換為 YUV420、NV12 和 YUYV 格式的 buffer,最終送給 compositor 做去顯示。該 demo 寫的非常簡單易懂,适合初學者學習。

詳情:tests: add yuv-buffer test

3. Collabora: A Wayland driver for Wine

大家都知道,Wine 是安裝在 Linux 上的一個虛拟機,專門用來運作 Window 應用程式的。在 Linux 系統上,Wine 目前使用的是 X11 driver 和 X11 display server 接口。在許多現代系統中,Wayland 已經成為主流的 display server 協定,往往還需要一個 XWayland 的特殊 server 在 X11 和 Wayland 協定之間進行轉換。雖然這種轉換方式可以正常工作,但是它增加了架構的複雜性且降低了系統性能,如果能讓 Wine 直接與 Wayland 進行通信,那麼這樣的系統架構就會簡潔高效許多!

經過幾個月的努力,Collabora 終于實作了第一個基于 Wayland 協定的 Wine。與 X11 和 win32 等更傳統的顯示系統相比,Wayland 協定在設計上受到了更多的限制,這給 Wayland 與 Wine 的內建帶來了巨大挑戰。Wayland 視窗模型不像 X11 那樣基于單一的二維平面坐标空間,Wayland 不允許應用程式控制它們在螢幕上的絕對坐标。而 Win32 應用程式則嚴重依賴這個特性,是以 Wayland 驅動程式使用了一些技巧來處理這些情況,比如臨時視窗(菜單、工具提示等)。Wayland driver 目前支援 GDI 和 OpenGL/DirectX應用程式,已經可以通路大量的 Win32 應用程式,如 Firefox、Stellarium、和 GIMP等。目前暫不支援 Vulkan,不過已經有另外一個項目 https://github.com/varmd/wine-wayland/,專注于 Wine Wayland+Vulkan。

部落格中還給出了一個視訊,用于展示部分 Windows 應用程式在 Weston Compositor 上的運作 Wine Wayland driver 效果,非常有趣。

詳情:A Wayland driver for Wine

Vulkan

Khronos:Vulkan SDK、Tools 和 Drivers 已添加對光線追蹤的支援

Vulkan SDK 于去年 12 月 15 日釋出,支援光線追蹤,包括驗證層(Validation Layer)。shader 工具、參考代碼以及開發指南也同時更新,以便能夠支援 Vulkan Ray Tracing,而驅動程式則由 GPU Vendor 廠商提供。

以下摘自 Beaverton 在 Khronos 官網發表的文章:

今天,Khronos 宣布 LunarG 釋出了詳細軟體開發工具包 (SDK) 版本 1.2.162.0,完全支援新的光線追蹤擴充 API,包括更新 GLSL 驗證層和內建 HLSL/SPIR-V shader 工具鍊。Khronos 的開源 Vulkan Samples 和 Vulkan Guide 已經更新,用于示範光線追蹤技術。最後,随着 AMD 和 NVIDIA 産品驅動程式的推出,開發人員現在可以輕松地将 Vulkan 光線追蹤內建到他們的應用程式中。

Khronos 在 2020 年 11 月釋出了最終版 Vulkan 光線追蹤 Extension,将光線追蹤功能與 Vulkan 的光栅化架構無縫內建,使 Vulkan 成為業界第一個開放、跨廠商、跨平台的光線追蹤加速标準。Vulkan 光線追蹤可使用現有的 GPU 計算或專用光線追蹤硬體進行部署。Vulkan SDK 現在內建了開發者所需的所有元件,以友善使用新的光線追蹤擴充,如新的着色器工具鍊,而不需要從多個存儲庫建構它們,并支援在 SDK 驗證層中進行光線追蹤的驗證。

詳情:Vulkan SDK, Tools and Drivers are Ray Tracing Ready

其它

1. RenderDoc 1.11 釋出

RenderDoc 1.11 支援從 Linux 到 Windows 到 任天堂 甚至谷歌的 Stadia 等平台,并支援所有主流的圖形 API。RenderDoc 1.11 有幾個顯著的 Bug 修複,包括 crash 修複,使用者界面和使用者體驗增強,API 修改,支援新的 Vulkan 擴充,如 ext_image_robustness / KHR_copy_commands2 / EXT_shader_atomic_float 等等。

詳情:RenderDoc 1.11 Released As The Leading Open-Source, Cross-Platform Graphics Debugger

2. KDE: Plasma KWin 如何在不同重新整理率的屏上工作, 以及如何在多線程上進行合成任務

摘要:我們經常收到關于 frame schedule 的投訴。特别是,合成操作沒有同步到vblank 事件上,丢幀,用不同的重新整理率重新繪制螢幕等等。這篇部落格将解釋為什麼會出現這些問題,以及我們打算如何解決這些問題。

詳情:KDE Plasma’s KWin Working On Per-Screen Refresh Rates, Compositing From Multiple Threads