技术关键词:mesa、OpenGL、meson





目录

前言:meson 构建系统

一、静态库列表(.a文件)

二、动态库列表(.so文件)

三、模块关系


前言:meson 构建系统

        在详述mesa模块功能和关系前,先来说下如何分析mesa的模块和关系。很简单,熟悉mesa的构建系统:meson。meson 是一个生成 ninja 文件的构建系统,不同的构建系统有不同的语法,但万变不离其宗:程序的编译、链接。通过跟踪分析meson.build里的static_library、executable、shared_library生成目标文件的语句,就可以把整个模块关系图梳理出来。


一、静态库列表(.a文件)

库名称

库功能

库详细描述

libglx

实现linux系统上的render context创建与管理

类似于windows上的wgl。负责linux平台上的一些可新概念的的初始化和管理,如display、screen、context

libmesa

用户态gl*函数的入口库,维护opengl 状态

libloader

负责后端驱动加载

提供环境变量、dri配置文件、pci id、 device driver四种加载方式

libloader_dri3_helper

dri3 扩展的实现

对接使用xserver的dri3+present扩展进行送显

libdri

linux dri的支持

gallium frontends

lib***

显卡厂商的用户态驱动核心部分,负责组织硬件接收的数据

gallium driver。例如ADM的radeonsi,则生成的库就是libradeonsi.a

lib***winsys

负责对接linux内核驱动

gallium winsys,封装与操作系统相关的内容

二、动态库列表(.so文件)

库名称

库功能

库详细描述

libGL

gl的初始化库

由libglx.a、libloader.a、libloader_dri3_helper.a组成,负责初始化gl,加载后端驱动

libEGL

egl库

负责egl的具体api规范的实现

libglapi

gl函数的dispatch库

负责gl函数的入口分发

libgbm

graph buffer manager,统一bo的管理

该库是想统一设备内存的管理,提供一个统一的与后端驱动无关的存储管理接口

libgallium_dri

厂商实现的后端驱动

由libdri.a、lib***.a、lib***winsys.a组成,厂商的用户态驱动

三、模块关系

一图胜千言。模块关系图如下,该图罗列了mesa的核心模块的包含和依赖关系。本图在上一篇文章mesa 概述中也有涉及,但该图给出了更多的模块内部的细节。后续内容会也会看到该类似图,但每次出现,都会有新内容。

MES云部署框架 mes模块架构图_图形渲染

mesa 模块关系图