ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

linux图形栈

2021-09-21 21:59:12  阅读:468  来源: 互联网

标签:kernel 硬件 Server DRI rendering linux 图形 3D


直接上图看关系 (这个图一定要熟记于心)

从上图可以看出Linux图形栈主要分为3d和显示

部分名词解释

mesa是一个OpenGL的开源实现,前期是软件实现,后期加入硬件加速

libGL是openGL接口的实现,3D application(如这里的3D-game engine)可以直接调用libGL进行3D渲染。

libDRM和kernel DRM是DRI(Direct Render Infrastructure)的kernel实现,及其library。X-server或者Mesa 3D,可以通过DRI的接口,直接访问底层的图形设备(如GPU等)libdrm是drm下沟通驱动和用户层的库。

kms是一个用于控制显示设备属性的内核driver,如显示分辨率等。直接由X-server控制。

显示主要是就是X11和Wayland,其中,Wayland是近几年才发展起来的,首先介绍X11,它指提供GUI环境的基本框架(定义protocol, 基本的图形·单元(点、线、面等等)、鼠标键盘等输入设备交互等等)直接看图

img

从图中可以看出,X主要是 X server和X clients组成,通过X protocol通信,x protocol是基于网络的,所以可以跨平台,

X设计之初就规定只提供GUI环境的基本框架,如定义 protocol、设备上绘制基本的图形单元(点 线 面等等)、和鼠标键盘等输入设备交互、等等。它并没有实现UI设计所需的button、menu、window title-bar styles等元素,而是由第三方的应用程序提供。即”提供机制,而非策略“。对用户接口不作要求,比如它提供了生成窗口(window)的方法,却对窗口呈现方式不作任何要求。

拿一个简单的应用场景举例。点击按钮引发按钮更新动作。

  1. 内核捕获鼠标点击事件并发送给 X server。
  2. X Server 会计算该把这一事件发送给哪个窗口(事实上,窗口位置是由 Compositor (合成器)控制的,X Server 并不能够正确的计算 Compositor 做过特效变化之后的按钮的正确位置)。
  3. 应用程序对此事件进行处理(将引发按钮更新动作)。但是,在此之前它得向X Server 发送绘制请求。
  4. X Server 接收到这条绘制请求,然后把它发给视频驱动来渲染。X 还计算了更新区域,并且这条“垃圾信息”发送给了 Compositor。
  5. 这时,Compositor 知道它必须要重新合成屏幕上的一块区域。当然,这还是要向X Server发送绘制请求的。
  6. 开始绘制。但是 X Server 还会去做一些不必要的本职工作(窗口重叠计算、窗口剪裁计算等)。

但是在上述情况下,一个应用不应该直接访问硬件,但对一些游戏等图形应用需要应用直接访问硬件就不行了,这时候就出现了DRI。

首先必须明确DRI是一个软件架构,包含一系列软件模块,诸如DRM(后面会详细提到)和KMS,是用来协调linux kernel,X windows系统,3D图形硬件以及OpenGL渲染引擎之间的工作。其目的是使应用程序和显示硬件之间传输更高效,从而更高效。其参考下图
img

其显示流程如下:
1)Application(如3D game)根据用户动作,需要重绘界面,此时它会通过OpenGL|ES、EGL等接口,将一系列的绘图请求,提交给GPU。

a)OpenGL|ES、EGL的实现,可以有多种形式,这里以Mesa 3D为例,所有的3D rendering请求,都会经过该软件库,它会根据实际情况,通过硬件或者软件的方式,响应Application的rendering请求。

b)当系统存在基于DRI的硬件rendering机制时,Mesa 3D会通过libGL-meas-DRI,调用DRI提供的rendering功能。

c)libGL-meas-DRI会调用libdrm,libdrm会通过ioctl调用kernel态的DRI驱动,这里称作DRM(Direct Rendering Module)。

d)kernel的DRM模块,最终通过GPU完成rendering动作

2)GPU绘制完成后,将rendering的结果返回给Application。

rendering的结果是以image buffer的形式返回给应用程序。

3)Application将这些绘制完成的图像buffer(可能不知一个)送给Wayland compositor,Wayland compositor会控制硬件,将buffer显示到屏幕上。

参考文章
蜂窝科技
惺忪牛犊子
https://blog.csdn.net/eydwyz/article/details/105800101

标签:kernel,硬件,Server,DRI,rendering,linux,图形,3D
来源: https://blog.csdn.net/weixin_44716867/article/details/120405126

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有