首页 > 系统相关 >Linux Graphics Stack(图图图)

Linux Graphics Stack(图图图)

时间:2024-03-16 22:37:33浏览次数:28  
标签:4.6 OpenGL Graphics Wayland Linux 图形 Vulkan Stack

Linux图形相关涉及到硬件、内核驱动、协议API、2D/3D渲染框架、GUI框架、桌面环境等,相当复杂,这里简单收集架构图作为记录。

1 硬件相关

显示相关的有:

  • Displaying:显示器、投影等。包括Display engine、Timings controller、Display interface PHY。
  • Rendering:3D rendering, 2D shape drawing, font rendering 等。
  • Processing:Filtering, scaling, converting, compositing等。

Rendering/Processing相关硬件有:GPU、DSP、CPU(SIMD)。

媒体相关的有:

  • Decoding/Encoding:压缩/解压缩图片,Picture codecs (JPEG, PNG, etc), Video codecs (H.264, VP8, etc)。
  • Capturing/outputting:采集或者输出图像,例如 Cameras, DVB 等。

2 Linux Graphics stack

简单示意了应用/游戏、图形框架、图形加速引擎、内核驱动、硬件之间的关系:

Linux Graphic Stack

相对于上图重点介绍了X和Wayland在实现上的差异:

 参考《The Linux Graphics Stack | Clean Rinse (mecheye.net)》《Linux graphic stack · Nathan Gauër | Blog (studiopixl.com)》《深夜磨刀,Linux Graphics Stack 概述 | Linux 驱动 - 知乎 (zhihu.com)》《Linux Graphics Drivers: an Introduction (people.freedesktop.org)》。

3 内核空间

内核空间相关的图形框架包括:Framebuffer、DRM等。

3.1 Framebuffer Drivers

参考《Linux显示(一):Framebuffer子系统 - ArnoldLu - 博客园 (cnblogs.com)》。

3.2 DRM

参考《Linux图形显示系统之DRM》、《Linux显示(三):DRM子系统(以及LCDC/Panel/Backlight驱动) - ArnoldLu - 博客园 (cnblogs.com)》。

4 用户空间

4.1 libdrm

libdrm的作用就是将内核功能封装成 一系列的open/close/ioctl 等标准接口,应用程序调用这些接口来驱动设备实现画面显示,绝大部分可以分成两类行为:Graphics Execution Manager (GEM)、Kernel Mode-Setting (KMS),gem:显存管理,如显存的分配和释放,kms:显示模式管理,如分辨率等的设置。

参考《LIBDRM使用-CSDN博客》。

4.2 OpenGL

OpenGL是用于渲染2D、3D矢量图形的跨语言、跨平台API。其具有其他功能:建立3D模型、图形变换、颜色模式、光照和材质设置、纹理映射、图像增强功能和位图显示扩展功能、双缓存功能。

Vulkan的最大任务不是竞争DirectX,而是取代OpenGL,所以重点要看和后者的对比。在高分辨率、高画质、需要GPU发挥的时候,Vulkan、OpenGL的速度基本差不多,但是随着分辨率的降低,CPU越来越重要,Vulkan逐渐体现了出来。

OpenGL体系架构可以通过基于状态的pipeline表达,命令从左侧进入pipeline,输出到FrameBuffer。

4.2.1 OpenGL ES

OpenGL ES是OpenGL针对嵌入式系统版本。

4.3 Vulkan

Vulkan的设计理念与Direct3D 12和Metal基本类似,但Vulkan作为OpenGL的替代者,它设计之初就是为了跨平台实现的,可以同时在Windows、Linux和Android开发。甚至在Mac OS系统上,Khronos也提供了Vulkan的SDK,虽然这个SDK底层其实是使用MoltenVK实现的。

Vulkan和OpenGL主要区别如下:

其中Vulkan在部署时可以关闭Validation,效率更高:

参考《Vulkan简介-腾讯云开发者社区-腾讯云 (tencent.com)》。

4.4 Mesa

Mesa是OpenGL的一个实现,同时还包括很多硬件图形加速驱动。Mesa还实现了OpenGL ES、Vulkan、EGL、OpenCL、OpenMAX等协议。

Mesa内部分为Graphics API层和用户空间驱动层。Graphics API层实现各种协议的API接口;用户空间驱动层实现不同GPU驱动,对接DRM设备。

下面结合应用和libdrm说明里不同应用、图形API、Mesa类别、GPU驱动流程:

参考《Linux图形显示系统之Mesa》《Linux GPU系列-05-MESA架构 | 记录成长的痕迹 (joyxu.github.io)》。

4.4.1 Gallinum 3D

Gallium3D是一个给不同操作系统和不同图形API开发3D图形驱动的框架。

参考文档:《Linux图形显示系统之Gallium3D》《Gallium3D Architecture》。

4.5 cairo

cairo是一款开源2D矢量图形库,支持X-Windows、Win32、图像、pdf在内的各种输出设备。支持多种后端输出。

4.6 X

X即X Windows系统,是一种位图显示的视窗系统。

参考《The X New Developer’s Guide: X Window System Concepts》。

4.6.1 X11

X11是X Window System所使用的协议的版本11。

4.6.2 Xserver

4.6.2.1 DDX

Driver Dependent X是XServer中驱动无关部分。

4.6.2.2 DIX

Driver Independent X是XServer中驱动相关部分,

4.6.3 Xorg

Xorg是X11的服务器端参考实现。

4.6.4 Xclient

4.6.4.1 Xlib

Xlib是X11客户端参考设计,以及众多运行于X Window System上的工具。

4.6.4.2 XCB

是被视为Xlib的替代,实现了大多数X11协议。并且其API在Xlib之下,Xlib多建立于XCB之上。 

4.6.5 XRrender

Xrender是X11特殊扩展,增加了anti-aliased drawing primitives (X11’s existing graphics were aliased), gradients, matrix transforms等支持。

4.7 pixman

pixman提供对像素操作API,供cairo和Xorg调用。

4.8 Wayland

Wayland只是一个协议(Protocol),就像X Window当前的协议——X11一样,它只定义了如何与内核通讯、如何与Client通讯,具体的策略,依然是交给开发者自己。

1. 内核收到了鼠标发出的信息,经过处理后转发到了Wayland Compositor,就像之前发往X Server一样。 2. Compositor收到消息后,立马能知道哪个窗口该收到这个消息,因为它就是总控制中心,它掌握窗口的层级关系、动画效果,因此它知道该坐标产生的鼠标点击信息应该发送给谁,就这样,Compositor将鼠标的点击信息发送给了Firefox。 3. Firefox收到了消息,这时如果是在X Window下的话,Firefox会向X Server请求绘制按钮被按下的效果。然而在Wayland里,Firefox可以自行进行绘制而不需要再请求Compositor的许可。这就是传说中的:直接渲染机制(Direct Render)。Wayland不管Client的绘制工作,整个过程变得十分简单而且高效。当Firefox自行完成了按钮状态的绘制后,它只需要通知Compositor,某块区域已经被更新了。 4. Compositor收到Firefox发来的信息后,再重新合成那块更新的区域,将最终桌面效果呈现给用户。这个过程主要是跟内核、显卡驱动打交道了。 

作为对比X流程如下:

 

参考《Wayland》《Wayland_百度百科》。

4.9 GNOME

GNOME是 Linux及各种主流Unix的GUI桌面系统。在 GNOME上面已经发展了许多自由应用软件,如文字处理软件Go、电子表格软件 Gnumeric、日历程序GNOMECAL、可与 Photoshop媲美的图形图像处理软件GIMP等。与KDE一样,GNOME项目为Linux 在桌面领域的发展及应用起到了至关重要的作用。

GNOME不像KDE那样有许多自己开发的工具,而是比较倾向于集成现有的X应用程序,可以允许用户选用任何种窗口管理程序(一般是 Windowmaker和 Enlightenment)。

4.10 KDE

KDE,即K桌面环境,全称K Desktop Environment。它是一种著名的运行于Linux、Unix以及BSD等类UNIX操作系统上的自由图形桌面环境,整个系统采用的都是TrollTech公司所开发的Qt程序库。 [17]KDE是Linux操作系统上流行的桌面环境之一。

4.11 QT

Qt [1]是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正的组件编程。

Qt支持X和Wayland等。

 

标签:4.6,OpenGL,Graphics,Wayland,Linux,图形,Vulkan,Stack
From: https://www.cnblogs.com/arnoldlu/p/18077391

相关文章

  • windows11配置ssh别名实现免密登录linux系统
    1在windows11上安装git2在git终端输入以下命令生成id_rsa进入到.ssh目录C:\Users\xxxxx.ssh,一般情况目录在这个位置ssh-keygen-trsa-b4096-C"[email protected]"输入命令后一直回车生成3将生成的rsa_pub的内容复制到linux服务器的~/用户名/.ssh/authorized_keys中......
  • Linux的基础
    linux的基础命令linux命令的基本形式:command【-options】【parameter】command:命令command:参数(可选,非必填)options:选项(可选,非必填)Ls:以平铺的形式列出当前目录下的所有内容。ls【-a,-l,-h】【parameter】(可选,非必填)。-a:表示all,即列出全部文件(包含隐藏的文件/文件夹)。-l:......
  • Linux常用命令
    目录find./-typef-size+102400kfind./-typef-size+102400kfind./-typef-size+102400kfind:这是一个命令行工具,用于在目录树中搜索和定位文件的列表。./:这指定了find命令应该从哪里开始搜索。在这个例子中,它从当前目录开始。-typef:这个选项告诉find......
  • Linux第79步_使用自旋锁保护某个全局变量来实现“互斥访问”共享资源
    自旋锁使用注意事项:自旋锁保护的“临界区”要尽可能的短。因此,在open()函数中申请“spinlock_t自旋锁结构变量”,然后在release()函数中释放“spinlock_t自旋锁结构变量”,这种方法就行不通了。如果使用一个变量“dev_stats”来表示“共享资源的使用标志”,则“dev_stats>0”,......
  • Linux各大发行版安装Docker
    在当今的数字化时代,Docker作为一种强大的容器技术,已经成为了开发、部署和管理应用程序的重要工具。无论是Ubuntu、CentOS还是Debian系统,掌握Docker的安装和使用方法都具有重要的现实意义。本文将详细介绍如何在这三个系统上安装Docker,并提供具体的步骤和示例,希望能为读者......
  • 【Mongodb】Linux安装Mongodb
    目录:一、官网下载安装包二、安装配置Mongodb三、安装mongosh四、安全配置 一、官网下载安装包1、下载安装包(Mongodb官网地址:https://www.mongodb.com/zh-cn)二、安装配置Mongodb 1、上传到服务器后解压#解压tar-xvfmongodb-linux-x86_64-enter......
  • 2、Linux入门
    一、查看硬件1、查看硬件:lscpu2、查看内存:free-h3、查看磁盘和分区:lsblk4、查看系统架构:arch5、查看内核:uname-r6、查看os版本:lsb_release-rs二、日期时间设置时区: timedatectllist-timezones timedatectlset-timezoneAsia/Shanghai timedatectlstatus三、文......
  • 在 Ubuntu 和 Linux Mint 上更改运行级别的简单方法
    在Ubuntu和LinuxMint等基于Linux的操作系统中,运行级别(runlevel)是指系统的工作状态或运行模式。每个运行级别都对应着一组特定的服务和进程,用于满足用户或系统的不同需求。通过更改运行级别,用户可以控制系统启动时所加载的服务和进程,从而实现定制化的系统配置。运行......
  • Linux-网络架构
    1.网线类型 2.交换机特点在一个交换机的端口上所连接的所有终端设备,均在一个网段(局域网LAN)上(称为一个广播域)产生广播消耗设备CPU资源终端用户的设备接入,连接交换机.一般情况下交换机24口,48口,96口.一个网段会有一个统一的网络标识,网段192.168.15.xxx企业级交换机......
  • Linux入门命令讲解
    //========================================================命令提示符,显示了1)当前登录的用户名2)用户当前所在的路径//========================================================linux命令的格式        命令  [选项] [参数]举例:         ......