Mesa & Gullium3D 介绍

栏目: 后端 · 发布时间: 5年前

内容简介:Mesa (或Mesa3D)是一个 OpenGL/Vulkan 的实现,以及为所有开源图形驱动提供各种 GL 的入口点, 它是一个项目的名字。由它编译出来的库是下面这些:或者这些文件:

一、Mesa 介绍

Mesa (或Mesa3D)是一个 OpenGL/Vulkan 的实现,以及为所有开源图形驱动提供各种 GL 的入口点, 它是一个项目的名字。由它编译出来的库是下面这些:

Mesa & Gullium3D 介绍

或者这些文件:

Mesa & Gullium3D 介绍

其中需要注意的是这几个文件:libGL.so,libEGL.so,libGLESv2.so,根据名字很显然,他们分别实现了对应的API。

Mesa有两个作用:

  1. 对接各种GPU硬件,将应用层对GL API的调用转换到对硬件GPU的调用上;
  2. 各种 GL API 的纯软实现,当没有可用的硬件时,它可以提供传软件的 GL API 的实现;

它可以用于Linux,Windows,Mac等系统平台。在Windows上运行时它提供OpenGL API over DirectX的转换。

它实现了 OpenGL,Vulkan以及其他的图形API。Mesa把这些API调用转换到相应驱动程序(其实并不是真正的驱动程序,是用户态的DRI驱动程序)调用上。AMD和Intel都提供他们对Mesa支持的驱动程序,Nvidia官方没有提供开源的支持Mesa的驱动程序,只提供了商用的驱动程序,因此开源界开发了 Nouveau 作为支持Nvidia显卡的开源版本的支持Mesa的驱动程序。

在Ubuntu上它由libglvnd-dev包提供(vnd=Vendor neutral GL dispatch library),大部分带图形界面的 Linux 发行版会内置Mesa(还没有找到特例,甚至ChromeOS系统都内置Mesa)。

具体来讲它实现了包括但不限于这些API: OpenGL,Vulkan,OpenVG,OpenGL ES,EGL,GLX。对每种API的支持情况如下:

Mesa & Gullium3D 介绍

二、Mesa对SL的支持情况

SL指 Shading Language,着色器语言,是用来写那些跑在GPU上的程序的语言,常见的有微软的 HLSL,以及OpenGL的 GLSL。他们需要先转换成IR(类似汇编指令)指令才能跑在GPU上,就像不同的CPU架构会有不同的指令集一样,各个GPU厂家也都开发了不同的GPU指令集。NIR是Mesa支持的用来统一各种IR的指令集。Intel对它的支持是最完善的。

Mesa中的IR架构:

Mesa & Gullium3D 介绍

三、Gallium3D

Gallium3D 是Mesa提出的用于简化GPU驱动开发的框架。

下面是Mesa结构图,展示了mesa如何通过libGL库跟内核打交道,以及展示了新旧两种用户态设备驱动程序的实现方式。

Mesa & Gullium3D 介绍

左边的驱动实现方式非常简单直接,DeviceDriver部分直接是和硬件相关的,一般由硬件厂商开发,这个方案的mesa就相当于一个OpenGL的转换器,把上层应用对OpenGL的调用转换到对特定硬件的调用上,缺点是设备厂商需要针对不同的操作系统,不同的GL API开发不同的驱动。

右边的方案是Gallium3D的方案,特点是添加了分层,它把DeviceDriver部分的上下都给抽象了出来,OS WInSys部分抽象了当前的操作系统使得同一个DeviceDriver可以用于不同的操作系统,API State Tracker部分抽象了上层的不同的GL接口,使得同一个DeviceDriver可以支持不同的GL接口。整体大大降低了DeviceDriver的开发和适配难度。

下图展示了基于Gallium3D的驱动实现方案的详细信息,可以看到各种GL API都可以通过不同的State Tracker来统一和不同的硬件驱动交互,并且不同的硬件驱动也可以通过WinSys和不同的系统对接。

Mesa & Gullium3D 介绍

四、极客发烧友动手指南

如果你想从0到1手工搭建出来GUI图形栈,你需要知道一个厂家是如何支持Linux图形栈的,以及如何使用各个厂家的驱动程序,可以去他们的官网上查找,比如Intel集成显卡的相关驱动以及固件可以在01.org/zh/linuxgra… 下载。

其他厂商的驱动:

Hardware drivers include:

  • Intel i965, i945, i915. SeeIntel's website
  • AMD Radeon series. SeeRadeonFeature
  • NVIDIA GPUs. SeeNouveau Wiki
  • VMware virtual GPU

Software drivers include:

  • llvmpipe - uses LLVM for x86 JIT code generation and is multi-threaded
  • softpipe - a reference Gallium driver
  • swrast - the legacy/original Mesa software rasterizer

Additional driver information:

  • DRI hardware drivers for the X Window System
  • Xlib / swrast driver for the X Window System and Unix-like operating systems
  • Microsoft Windows
  • VMware guest OS driver

参考链接:

en.wikipedia.org/wiki/Mesa_(…

mesa3d.org/systems.htm…

01.org/zh/linuxgra…

en.wikipedia.org/wiki/Free_a…

www.freedesktop.org/software/ga…

www.freedesktop.org/wiki/Softwa…

www.mesa3d.org/relnotes/18…

packages.debian.org/sid/libglvn…

www.linuxfromscratch.org/blfs/view/s…


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Linux 系统编程(第二版)

Linux 系统编程(第二版)

Robert Love / 东南大学出版社 / 2014-1-1 / 78

如何编写那些直接依赖于Linux内核和核心系统库提供的服务的软件?通过《Linux系统编程(第2版)(影印版)》,Linux内核参与者RobertLove(洛夫)为你提供了Linux系统编程方面的教程,Linux系统调用的参考手册,以及对于如何编写更聪明和更快的代码的来自内部人士的建议。Love清晰地指出了POSIX标准函数和Linux特别提供服务之间的差异。通过关于多线程的新章节,这本修订和扩展......一起来看看 《Linux 系统编程(第二版)》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

html转js在线工具
html转js在线工具

html转js在线工具