首页 > 其他分享 >Graphics Stack总结(三) Mesa source tree概览

Graphics Stack总结(三) Mesa source tree概览

时间:2022-11-07 15:25:40浏览次数:116  
标签:src 驱动程序 tree drivers driver source Graphics Mesa mesa

 回顾

上篇文章中我们介绍了Mesa的loder模块,该模块负责自动为我们的硬件选择正确的driver。如果loader没能为找到匹配的hardware driver,那么它会fall back到software driver,但我们也可以为了debug等需求在某些情景下强制使用software driver。我们同样简单介绍了glxinfo tool,可以用它来查询选定driver的capabilities和features。

今天的话题是聚焦在Mesa source code tree的快速概览,这会帮助我们识别除mesa中的哪些代码是与我们的兴趣/正在工作的feature相关。

Browsing the source code

首先,on the Mesa 3D website上已经有一些文档作为一个很好的开始。由于这已经对mesa repo的每个部分是干啥的已经做出了解析,所以我将会专注于对我接触过的比较重要的部分进行一些细节的补充。

  • src/egl/ 中我们进行了EGL标准的实现。如果你工作在EGL的特定features,追踪EGL的特性问题或者只是好奇EGL是如何链接到GL的实现中,这里就是你需要访问的地方。这里包括了X11,DRM和Wayland平台的EGL实现(implementation)。
  • src/glx/ 中是OpenGL相关与X11平台的部分,known as GLX。如果你工作在GLX层,就去这个文件夹下。在这里面是所有于X server进行交互的部分,以及client端的DRI的实现等。
  • src/glsl/ 中包含了Mesa中的关键部分:被Mesa所有driver用到的GLSL编译器。包含了一个GLSL解析器,Mesa IR的定义,也称为GLSL IR,用于在内部表示着色器程序、着色器链接器和在Mesa IR上运行的各种优化过程。GLSL编译器生成的Mesa IR随后被各种驱动程序使用,这些驱动程序将其转换为可在硬件中加载和运行的本地GPU代码。
  • src/mesa/main/ 包含了核心的Mesa元素。这包含了硬件无关的核心部分:比如纹理(textures),缓冲区(buffers),顶点数组对象(vertex arrary objects),OpenGL上下文,以及基本基础设施,比如链接列表(linked lists)。
  • src/mesa/drivers/包含了实际的经典driver(非Gallium).特别一提,DRI driver在src/mesa/drivers/dri中。比如Intel i965 driver在src/mesa/drivers/dri/i965中。这里面的code很大程度上是针对底层硬件平台的。
  • src/mesa/swrast*/src/mesa/tnl*/ 为光栅化(rasterization)和顶点变换(vertex transforms)等提供了软件实现(software implementation)。这被某些software drivers和某些hardware drivers所用,以实现他们没有硬件支(hardware support)持或者driver中尚未提供硬件支持的某些特性(features)。举个例子,i965驱动通过这些模块以software的方式实现了累加和选择buffers的操作。
  • src/mesa/vbo/是另外一个重要的模块。通过它的各种各样的版本,OpenGL在一个程序中指定了许多方法,这个程序可以告诉OpenGL关于顶点数据,从 使用glBegin()/glEnd()代码块中glVertex*()  faimily中的函数,到顶点数组、顶点数组对象、显示列表等。然而,驱动程序不需要处理这一切,Mesa来处理这些工作,使得其始终接收顶点数据,这些顶点数据是是顶点数组的集合,显著降低了驱动实现器(driver implementation)一侧的复杂性。这是一个负责管理所有这些的模块,因此无论您的GL程序正在做什么类型的绘图,或者它如何指定顶点数据,它都会在到达驱动程序之前通过这个模块。
  • src/loader/,是我们在之前的文章中介绍过的,包含了Mesa的driver loader,它用来根据不同的特定硬件调用正确的mesa driver,这样Mesa的libGL.so在加载时就可以自动检测正确的driver.
  • src/gallium/ 包含了Gallium 3D架构的实现。如果你像我一样工作在classic driver上,你完全不需要管这块内容。然而如果你工作在Gallium  driver上,你在这里可以找到开发中的各种各样的Gallium driver(inside src/gallium/drivers/), 比如各种各样的Gallium ATI/AMD driver, Nouveau或者基于LLVM实现的software driver,和Gallium状态追踪器

所以,你有足够的信息知道,如果有问题的话该从哪部分代码看起。

  • 如果兴趣点在于vertex data时怎样被操纵和提供给OpenGL,然后上传至GPU的,vbo模块很可能是正确的地方来查看。
  • 如果我们想研究具体硬件驱动程序的特定方面,如果它是classic驱动程序,我们应该转到src/mesa/drivers/中的相应目录;如果它是Gallium驱动程序,则应该转到src/gallium/drivers中的对应目录。
  • 如果我们想了解Mesa框架如何抽象各种OpenGL概念,如纹理、顶点数组对象、着色器程序等,我们应该看看src/Mesa/main/。
  • 如果我们对特定于平台的支持感兴趣,无论是EGL还是GLX,我们都希望了解src/EGL或src/GLX。
  • 如果我们对GLSL实现感兴趣,它涉及从编译器到中间IR和各种优化过程的任何内容,我们需要研究src/GLSL/。
  • 如果兴趣点在于

Coming up next

我们现在已经对Mesa repo的内容已经有了宏观(鸟瞰,eagle view)的了解,接下来将看如何准备Mesa的开发环境。

标签:src,驱动程序,tree,drivers,driver,source,Graphics,Mesa,mesa
From: https://www.cnblogs.com/ArsenalfanInECNU/p/16853727.html

相关文章

  • 解决GIT可视化工具Sourcetree的远程仓库无法clone的问题
    最简单的方法就是先用gitbash拉取仓库的一个项目,完成sourcetree和本地的链接,然后将这个项目用sourcetree添加上,这样就自动完成了链接。接着直接用clone远程仓库代码就成功......
  • 3、SourceTree通过PUTTY连接GitLab
    一、生成公钥和私钥使用命令行生成(两种生成方式选择一种即可) 1、安装SourceTree打开SourceTree,点击“命令行模式”。2、输入如下命令生成key“[email protected]”是你在......
  • TAVLTree及其相关应用
    1.TAVLTreeTAVLTree maintainsabalancedAVLtree.Thetreeconsistsof TAVLTreeNode nodes,eachofwhichhasa Data pointerassociatedwithit.The TAVL......
  • 【模板】动态树 Link-Cut Tree
    postedon2022-08-1718:05:59|under模板|sourcetemplate<intN>structlctree{ intval[N+10],sum[N+10],fa[N+10],ch[N+10][2],rev[N+10]; boolgetson(intp)......
  • Treeland Tour
    TreelandTour题目大意给出一棵带点权树,选出一条简单路径,使得其上的最长上升子序列的长度最大。分析这题其实数据范围不大,是可以\(O(n^2)\)做的。但是我们讲的是线段树......
  • Codeforces Round #826 (Div. 3) D. Masha and a Beautiful Tree(树+dfs)
    D.MashaandaBeautifulTree题目大意:给定一颗满二叉树的叶子节点,让我们更换子树位置,从而让叶子节点排序为升序求最小操作数,如果不能移动成那样的话,直接输出-1.in......
  • P3521 [POI2011]ROT-Tree Rotations
    P3521[POI2011]ROT-TreeRotations分析我们看操作,我们可以将任意一个节点的左右子树交换。则,我们是改变的一段序列的顺序。这里类似于的归并排序求逆序对的过程。对于......
  • C# tree view节点解析数据+model、DAL、TOOl
    EnginneModel.csnamespaceWindowsFormsApp3{publicclassEnginneModel{publicstringparamsName{get;set;}publicstringparamsT......
  • L - Fenwick Tree Gym - 103861L(打表,树状数组)
    题意:一开始数组的每个数都是零对于每次操作:可以对一个数加上一个实数在加上实数的同时,对应的i+lowbit(i)一直到<=n都会加上这个实数不同操作可以加上不同的实......
  • Python xml 文件解析操作之 ElementTree 模块
    首先我们了解下XML格式Element类型是一种灵活的容器对象,用于在内存中存储结构化数据。每个element对象都具有以下属性:1.tag标签:string对象,表示数据代表的种类。......