XDC2020

XDC2020

X.Org Developers Conference (XDC) 是一年一度的开源图形开发者大会,主要围绕着开源社区 Graphics 相关的主题演讲(包括 DRM、Mesa、Xorg、Wayland 等)。和其它各种大型会议一样,今年的 XDC2020 因受全球新冠影响而在线上举办,时间为 9 月 16 日 ~ 18 日总共为期三天,共涉及 40 多个 Topic,演讲的嘉宾主要来自于 Intel、Google、NVIDIA、AMD、Collabora、Igalia 等重度参与开源项目的大公司,当然这次微软也带来了 3 个关于 WSL2 的 Topic。Intel 是此次大会的铂金赞助商,Google 和 NVIDIA 为黄金赞助商,Collabora、Igalia、AMD、ARM 以及 Linux 基金会则为白银赞助商。

40 个 Topic 实在太多了,这里只挑几个我个人比较感兴趣的 Topic 给大家分享一下,如果想了解全部 Topic,请在公众号后台回复 XDC2020 关键字获取全部 Topic 演讲 PPT 资源,视频的话因为从 Youtube 搬运会比较麻烦,所以有条件的同学请直接在 Youtube 上在线观看吧,文末会列出此次 XDC2020 所有的 Topic 及其链接。

Collabora

ARM 拥抱 Panfrost 开源社区

Topic: From witchcraft to production

一直以来,ARM 官方的 Mali GPU 驱动都是闭源的,准确的说,是 User Mode 驱动闭源,Kernel Mode 驱动是开源的,开源部分遵循 MIT 协议。而 GPU 驱动中最重要的部分就是 user mode 驱动,因为 OpenGL/Vulkan 的具体实现就是在 user mode 驱动中完成的。在移动平台市场,ARM Mali GPU 几乎占据了绝大部分市场,使得 Mali GPU 普及率非常高。但由于其官方驱动闭源,且在桌面 Linux 系统下的支持度并不高(在 Android 系统下的支持却很给力),导致许多搭载 Mali GPU 的开源硬件无法随着系统版本的升级而支持相对较新的图形系统(如 GNOME/KDE/Weston),于是 Panfrost 诞生了。

Panfrost 是开源社区版的 Arm Mali GPU 驱动,它是由一群来自 Collabora 公司的开源爱好者在去年发起的一个开源项目,通过对 Mali GPU User-Mode Driver 的逆向工程,最终开发出了一套完全开源的 Mali GPU User-Mode & Kernel Mode 驱动,并将其命名为 “Panfrost” 驱动(其中 Alyssa Rosenzweig 是该逆向工程的主要贡献者)。该驱动源码遵循 GPL 协议,User Mode 驱动代码被集成到了 Mesa Gallium3D 中,Kernel Mode 驱动代码被集成到了 kernel DRM 下。目前 Panfrost 驱动主要支持的硬件架构为 Mali Midgard 架构(T系列)和 Bifrost 架构(部分G系列),而更早的 Mali Utgard 架构则早已在 lima 驱动中被支持(同样也是通过逆向工程而来的)。Panfrost 目前只支持 OpenGL、OpenGLES API,不支持 Vulkan,可以很好的适配 GNOME & Weston 桌面,运行一些常见的开源 3D 游戏。Panfrost 的诞生在开源社区引起了巨大反响,但 ARM 官方却从未就此发表过任何看法,直到此次的 XDC2020 大会。

在这次的 XDC2020 大会上,Alyssa 演讲了关于近期在 Panfrost 上的最新进展,其中包括一份长达一万行的 merge request,用于重写反汇编和指令打包工具。但最令人感到意外的是,Alyssa 宣称他们正在和 ARM 一起合作,试图将 Panfrost 打造成一个更加稳定、纯净、扎实的基础平台。他们希望借助 ARM 的支持,在未来几年能让 Panfrost 支持更多的 Mali GPU 硬件。这可算得上是重磅消息了!这也就意味着,Panfrost 驱动将不再是一个纯粹的逆向工程了,它转正了!同时 Alyssa 这群逆向工程师再也不用像以前那样,因为没有 ARM 官方的 Spec 硬件手册,而只能通过反汇编的源码来猜测各个寄存器的用途和含义了。这将加快 Panfrost 项目前进的步伐,我们可以预料到,越来越多的 ARM GPU 将会被添加进 Panfrost,同时对 Vulkan 的支持也将被尽早提上日程。

更多资讯:

  1. Arm Officially Supports Panfrost Open-Source Mali GPU Driver Development
  2. Arm Is Now Backing Panfrost Gallium3D As Open-Source Mali Graphics Driver

gfx-pps 介绍:使用 Perfetto 工具跟踪 GPU 性能问题

Topic: Graphics tracing with Perfetto

以下摘自《Linux Graphics 周刊(第 4 期)》:

Perfetto 是 Google 去年新推出的一个开源性能分析工具,用于取代 systrace。它的功能远比 systrace 强大,抓取 trace 的时间更长,抓取的信息量更大,且提供了灵活的扩展接口,方便开发人员抓取自定义的数据信息。
目前的 Perfetto 虽然也可以抓取 GPU 的信息,但也只限于 GPU 的频率信息,如果想要抓取更多 GPU 相关信息,则只能通过 Perfetto 的扩展功能进行抓取。

gfx-pps (Graphics Performance Producers) 是由 Collabora 公司开发的一款专门搜集 Graphics 性能数据的 Perfetto 扩展插件,它作为 client 进程将搜集到的 Graphics 性能数据发送给 Perfetto trace service。它是开源的,遵循 MIT license,源码放在 freedesktop GitLab 上托管。目前 gfx-pps 主要搜集两种 data source:一种是 Mali GPU 的 Performance Counters 信息,另一种则是 Weston timeline 的 track events。

Antonio Caggiano 在 XDC2020 大会上介绍了 GPU 用于性能分析所提供的 Hardware Performance Counter 的作用,并着重介绍了 Collabora 公司为 Mali GPU 开发的 Perfetto Producer 工具 gfx-pps,包括如何下载和使用。

Igalia

V3DV 完成 Vulkan 1.0 符合性测试,准备 Upstream 到 Mesa 主线

Topic: Overview of the open source Vulkan driver for Raspberry Pi 4

V3DV 是树莓派4 VideoCore GPU 的开源 Vulkan 驱动,由 Igalia 公司开发人员在他们自己的 mesa 仓库中独立开发。目前该驱动已基本通过 Vulkan 1.0 的 CTS 测试,其中 106776 项 pass,18 项 fail。并且已经可以稳定运行诸如 Quake 1-3(雷神之锤)这样的 Vulkan 游戏。在本次的 XDC2020 大会上,Iago Toral 演讲了关于 V3DV 目前的进展,并且他们已经开始将该驱动提交到了 Mesa 主线上,正在进行 review 中。该提交总共 525 笔,约3万行代码,其中只有5笔修改到了 Mesa 的公共代码(如 NIR、Vulkan WSI 以及 build system),其余 patch 基本上都是和 Vulkan 具体实现相关。他们希望 Mesa 社区的 Reviewer 能够尽快 review 那些和 Mesa 公共代码相关的 patch,而那些和 Vulkan 具体实现相关的代码则由 Broadcom / Raspberry Pi 开发团队负责 review,以便能够尽早 merge 到 Mesa 主线分支中。所以如果顺利的话,我们将在今年年底的 Mesa-20.3 中看到 V3DV 驱动,要么就是在明年的 Mesa-21.0 中才能见到。

更多资讯:

  1. [Mesa-dev] Plan for merging v3dv in mesa
  2. GitLab: Merge Request
  3. V3DV Developers Lay Out Plans For Upstreaming The Raspberry Pi 4 Vulkan Driver In Mesa

VK_EXT_extended_dynamic_state 扩展是如何诞生的

Topic: How the Vulkan VK_EXT_extended_dynamic_state extension came to be

VK_EXT_extended_dynamic_state 这个 Extension 是在 Vulkan 1.2.145 中被添加进去的,负责添加该 Extension 的 Owner 为 Igalia 公司 Graphics Team 的 Ricardo García,他主要负责 VK-GL-CTS (即 Vulkan & OpenGL 符合性测试套件) 的开发。

Vulkan 本身包含 dynamic state 元素,这些元素允许应用程序在 GPU 硬件 pipeline 中动态修改某些参数。但这些自带的 dynamic state 还是太少了,无法满足复杂应用的需求,因此 VK_EXT_extended_dynamic_state 被添加到了 Vulkan 中,专门用于扩展 dynamic state 的种类,例如新增 culling mode(剔除模式)、front face(正面)、primitive topology(图元拓扑)等参数。

Ricardo 参加了此次的 XDC2020 大会,并分享了 VK_EXT_extended_dynamic_state Extension 创建的原因以及它在 Vulkan pipeline 中所起的作用。并以该 Extension 的创建过程为例,重点讨论在 Khronos 组织内部引发创建 Extension 的事件,以及从设计阶段到在 RADV 上获得支持的整个过程。另外,作为他本职工作的一部分,他还讨论了对 Vulkan 规范作出贡献的首选方式。

如果想进一步了解 VK_EXT_extended_dynamic_state,可以阅读本人之前翻译的文章:《Vulkan VK_EXT_extended_dynamic_state 介绍》

关于 OpenGL 与 Vulkan 之间的互操作性

Topic: About OpenGL and Vulkan interoperability

之前曾在《Linux Graphics 周刊(第2期)》中介绍过关于“Vulkan 与 OpenGL 之间的交互实验” ,其中 Eleni Maria Stea (昵称 hikiko)在自己的博客中发表了关于 Vulkan 和 OpenGL 之间的互操作性文章,目前已经更新到了第三篇。其中第一篇介绍基本概念,第二篇演示基本代码,第三篇基于 Piglit 开源测试项目演示互操作性的使用案例。

所谓互操作性,是指在 OpenGL 程序中使用 Vulkan 应用程序创建的对象(如 texture、buffer、semaphore),或者反过来在 Vulkan 程序中使用 OpenGL 应用程序创建的对象。该互操作性依赖两个重要的 OpenGL Extension:EXT_external_objects 和 EXT_external_objects_fd。EXT_external_objects 允许 OpenGL 应用程序创建特殊的 OpenGL objects,这些 objects 可以直接对应外部 Vulkan 的 objects(如 texture、buffer、semaphore)。而 EXT_external_objects_fd 则允许 OpenGL 应用程序 import 一个来自外部的 memory / semaphore object,这个外部的 object 是以 POSIX 文件描述符(fd)的形式传递的。

而在此次的 XDC2020 大会上,Eleni 就关于如何实现 OpenGL 与 Vulkan 的交互操作进行演讲,包括都有哪些 Mesa 驱动已经支持了该功能,以及在 Piglit 中可以使用哪些测试 case 来验证这一功能。

NVIDIA

VK_EXT_present_timing 简介

Topic: Vulkan Presentation Timing Extension

Vulkan System Integration 工作组上周公布了关于 VK_EXT_present_timing 扩展的提案,该扩展用于将 Display 驱动详细的 timing 信息导出给 Vulkan 应用程序,以便让每帧渲染的图像都是在指定的时间点显示出来。该扩展可以大大降低延迟和卡顿现象,并且对于诸如 VRR (可变刷新率)这样的应用场景起到了关键作用。该扩展由 NVIDIA、Google、AMD、Intel、Collabora、Unity 和 Samsung 联合制定,目前处于 WIP (Work In Progress)阶段,VSI 工作组将该扩展提前公布出来的目的,是希望能尽早搜集来自外界的反馈意见,以便能更好的完善该 Extension 的功能。

以下内容翻译自 Vulkan-Doc merge request 中的 VK_EXT_present_timing.txt 说明文档:

借助 VK_EXT_present_timing 扩展,应用程序可以使用 VK_KHR_swapchain 扩展来获取 presentation engine 的 Display 信息。通过获取 Display 每帧的 timing 信息,再对显示任务调度进行控制,避免过早的显示某一帧图像内容,以此来减少诸如卡顿等现象的发生。
传统的游戏和实时动画应用程序需要清楚的知道它们渲染的几何图形何时必须渲染结束,这样才能确保在向用户显示下一帧画面时有可用的图像内容。为了实现这一点,应用程序需要获取 presentation engine 的各种 display timing 信息。它们需要知道什么时候可以开始显示某个画面,以及什么时候某个画面已经彻底显示完成。应用程序还需要告诉 presentation engine 不要过早的显示某个画面,以此来避免卡顿现象的发生,这样才能确保用户看到的动画是流畅。

在该 VK_EXT_present_timing.txt 文档中,最精彩的部分莫过于 Issues 章节的问答,诸如:

  • 应用程序如何检测每次刷新持续的时间、有多少组 timing 参数、是固定刷新率(FRR)还是可变刷新率(VRR),等等?
  • 针对 VRR,我们是否需要返回刷新持续时间的最大值和最小值?
  • 如何处理变化的 timing properties?
  • 用一个 Query 来获取所有的 timing 信息?还是先在初始化时一个 Query 来检测当前是 FRR 还是 VRR,然后再根据实际情况来使用 FRR-specific 或 VRR-specific Query?

更多细节请访问 GitHub Merge Request:WIP: Add the VK_EXT_present_timing extension

来自 NVIDIA 的工程师 James Jones,作为该 Extension 联合制定人员之一,也在 XDC2020 大会上对该 Extension 做了简单的分享,其主要目的是想通过广而告之,让更多的开发人员参与到该 Extension 的意见反馈中来。

AMD

AMD Trusted Memory Zone (TMZ) 简介

Topic: Secure Buffer Object Support with Trusted Memory Zone

今年年初,AMD Trusted Memory Zone 的功能就已合入 Linux kernel 主线。AMD TMZ 技术可以阻止未经授权的应用程序访问 GPU 的安全 memory,这种权限检查是直接在 memory 总线上进行的,即地址总线上发出的地址信号还未到达 DDR 控制器就已经被拦截了,它基于 AES 加密方式。AMDGPU TMZ 通常应用于加密视频场景,如典型的 Widevine DRM 视频。此外,AMD TMZ 技术不仅支持独立显卡的 VRAM 加密,也支持如 APU 这类集成显卡的系统级 RAM 加密。

本次的 XDC2020 大会上,来自 AMD 的 Mr Ray Huang 和大家分享了关于 AMD TMZ 底层实现的细节,包括要使用 TMZ 功能,需对 GPU 硬件的限制、DRM 驱动、Mesa 驱动以及应用程序的要求。该演讲的 PPT 写的十分详细,值得一看!

AMDGPU TMZ + HDCP Should Allow Widevine DRM To Behave Nicely With AMD Linux Systems
http://www.phoronix.com/scan.php?page=news_item&px=AMDGPU-TMZ-HDCP-2020

Intel

Ray-tracing in Vulkan

Topic: Ray-tracing in Vulkan: A brief overview of the provisional VK_KHR_ray_tracing API

光线追踪(Ray-tracing),即根据投射到摄像机(或观察者眼睛)的光线,反向追踪光源,通过光线与物体表面的反射、折射、阴影等作用,最终呈现出物体的颜色。光线追踪的原理早在上个世纪就被人提出,但由于该技术需要很强的算力,对 GPU 硬件要求极其高,所以在游戏渲染领域普及度并不高。直到 2018 年 NVIDIA 首次推出支持实时光线追踪的 RTX 系列 GPU,光线追踪技术才正式进入大众程序员的视野。首先,微软针对 NVIDIA 显卡推出了 DirectX Ray-tracing (DXR) API,专门用于支持光线追踪硬件加速功能。同年,NVIDIA 为 Vulkan API 引入了 VK_NVX_ray_tracing 扩展,用于支持 RTX GPU。而在今年年初,由 NVIDIA、AMD、Intel 等多家巨头联合制定的跨平台(Cross-Vendor) VK_KHR_ray_tracing 扩展,被作为临时方案合入了 Vulkan API中。

此次的 XDC2020 大会则由来自 Intel 的 Jason Ekstrand 为大家简单介绍光线追踪的基本原理,以及 VK_KHR_ray_tracing 所涉及到的相关 shader stage、objects 等知识概念。Jason 也希望通过该分享,能让更多的 Xorg/Mesa 社区开发人员了解光线追踪的相关概念及其作用。

扩展阅读:

微软

WSL2 Graphics 架构设计

Topic: WSL Graphics Architecture

今年5月份,微软在其 BUILD 2020 大会上公布了 WSL2 开发者预览版本,该版本最大的亮点是实现了在 WSL 中直接使用 GPU 硬件加速功能,该功能主要针对的是在 WSL 中使用 NVIDIA 显卡做 CUDA 并行运算。而微软官方的博客 DirectX Love Linux 则更详细的描述了这一功能的实现细节。简要概括就是微软在 linux kernel 中实现了一个与 Windows 下同名的模块:dxgkrnl。该模块主要负责将 Windows 下的 GPU 硬件映射到 Linux 用户空间的 /dev/dxg 节点下,接收来自 Linux 下的 DirectX 应用程序操作指令,并通过 Windows 下的 VM bus 与 Windows 下同名模块进行交互,而 Windows 下的 dxgkrnl 则会将这些 DirectX 指令交给真正的 GPU 驱动去处理。除此之外还需要依赖两个重要的so文件:libdxcore.so 和 libd3d12.so,这两个so正是微软 DirectX 最核心的模块,内部包含了 DirectX API 的具体实现,应用程序通过调用 libd3d12.so 提供的接口,来实现在 Linux 下使用 Windows 的 GPU 硬件加速功能。对于那些使用 OpenGL/OpenCL 的应用程序,想要在 WSL2 中使用 GPU 硬件加速,则可以借助 Mesa D3D12 这个 Graphics API 转换层来实现。D3D12 是微软和 Collabora 一起联合开发的 Mesa 驱动,用于将 OpenGL/OpenCL 转换为 Direct3D 12 。

DirectX Love Linux 作者 Steve Pronovost (Windows Graphics Kernel Leader)在本次的 XDC 大会上对 WSL2 Graphics 架构做了进一步分享。

在 WSL2 中运行 X11 和 Wayland 应用程序

Topic: X11 and Wayland applications in WSL

WSL2 除了支持 GPU 硬件加速功能,另一大亮点便是可以运行 GUI 应用程序,如 X11 和 Wayland 应用程序。微软以 Weston 为基础,在 WSL2 中定制了一个 Wayland Compositor,他们利用 Weston 现有的 RDP backend 功能,以远程桌面的形式来在 Windows 桌面上显示 Linux 窗口。不过他们对该 compositor 的 RDP 协议做了改进,称其为 RDP-RAIL (RAIL=Remote Application Integrated Locally),与传统的 RDP 相比,RAIL并不是将 compositor 最终合成后的桌面像素发送给远程 Server,而是将每个 UI 进程的 wl_surface 直接发送给 server,由 Windows 系统转换为本地窗口而做渲染与合成。所以从这个角度来说,所有的 pixel 全部在 Windows 端进行渲染合成,而 Linux 端则不会真正接触显示 buffer。而 X11 应用则只能通过 XWayland 模块来完成基本功能,对于更复杂的 X11 应用,则 XWayland 无法胜任。

在 XDC 大会上,Steve 更详细的介绍了他们是如何来实现 X11/Wayland 应用程序与 Windows 进行通信的。

Topic 汇总

官网:https://xdc2020.x.org/event/9/sessions/86/#all

Day 1

  1. Overview of the open source Vulkan driver for Raspberry Pi 4
  2. WSL Graphics Architecture
  3. X11 and Wayland applications in WSL
  4. Mesa for D3D12 Mapping Layers
  5. Profiling on AMD GPUs using tracing
  6. Secure Buffer Object Support with Trusted Memory Zone
  7. GSoC/EVoC Overview
  8. VKMS improvements using IGT GPU Tools
  9. Allocation Constraints
  10. Why is Peer to Peer DMA so hard on Linux?
  11. IGT GPU Tools 2020 Update
  12. Gamescope update and demos
  13. State of text input on Wayland
  14. Vulkan Presentation Timing Extension
  15. From witchcraft to production

Day 2

  1. A year of ACO: from prototype to default
  2. etnaviv: status update
  3. etnaviv: The wonderful world of performance counters
  4. LiteDIP: bridging the gap between open source hardware, and open source operating systems
  5. The Libre-SOC Project
  6. About OpenGL and Vulkan interoperability
  7. Buffer constraints
  8. Ray-tracing in Vulkan: A brief overview of the provisional VK_KHR_ray_tracing API
  9. Quick GL and Vulkan tests with shader_runner and Amber
  10. Don’t bake your Graphics cards!
  11. X.Org Foundation Board of Directors Meeting

Day 3

  1. Improving Khronos CTS tests with Mesa code coverage
  2. How the Vulkan VK_EXT_extended_dynamic_state extension came to be
  3. Status of freedesktop.org gitlab/cloud hosting
  4. Graphics tracing with Perfetto
  5. DRM-backend tests in Weston’s GitLab CI
  6. Software and hardware images decoding on the RaspberryPi
  7. Introducing adriconf, a tool for mesa driver configuration
  8. State of the X.org
  9. Buffer constraints workshop summary
  10. Next steps for wlroots
  11. Universal display management with Disman
  12. Update on AMD DRM modifiers

视频

day1: https://www.youtube.com/watch?v=b2mnbyRgXkY
day2: https://www.youtube.com/watch?v=FxFPFsT1wDw
day3: https://www.youtube.com/watch?v=C3gltQa-SiM

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

何小龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值