Mesa Gallium框架入门初探

Mesa Gallium框架入门初探



MESA Gallium框架

MESA源码里面有2套架构,现在驱动主要基于Gallium架构。 这里我们重点来看看Gallium架构:

在这里插入图片描述

经典架构

在这里插入图片描述

Gallium架构

image




Gallium展开

Gallium中主要包含下面几块:

  • Auxiliary模块:一些公共函数或者辅助的服务,比如状态缓存和缓存管理等。

    tree   src/gallium/auxiliary/ -L 1
    src/gallium/auxiliary/
    ├── cso_cache
    ├── draw
    ├── driver_ddebug
    ├── driver_noop
    ├── driver_trace
    ├── gallivm
    ├── hud
    ├── indices
    ├── meson.build
    ├── nir
    ├── os
    ├── pipebuffer
    ├── pipe-loader
    ├── postprocess
    ├── renderonly
    ├── rtasm
    ├── target-helpers
    ├── tessellator
    ├── tgsi
    ├── translate
    ├── util
    └── vl
    
    21 directories, 1 file
    
    
  • State Tracker: 它负责把上层库的state(blend modes、texture statte等)和draw command(glDrawArrays、glDrawPixels)等转换成MESA内部的pipe对象和操作。

    tree src/mesa/state_tracker/  -L 1
    src/mesa/state_tracker/
    ├── st_atifs_to_nir.c
    ├── st_atifs_to_nir.h
    ├── st_atom_array.cpp
    ├── st_atom_atomicbuf.c
    ├── st_atom_blend.c
    ├── st_atom.c
    ├── st_atom_clip.c
    ├── st_atom_constbuf.c
    ├── st_atom_constbuf.h
    ├── st_atom_depth.c
    ├── st_atom_framebuffer.c
    ├── st_atom.h
    ├── st_atom_image.c
    ├── st_atom_list.h
    ├── st_atom_msaa.c
    ├── st_atom_pixeltransfer.c
    ├── st_atom_rasterizer.c
    ├── st_atom_sampler.c
    ├── st_atom_scissor.c
    ├── st_atom_shader.c
    ├── st_atom_stipple.c
    ├── st_atom_storagebuf.c
    ├── st_atom_tess.c
    ├── st_atom_texture.c
    ├── st_atom_viewport.c
    ├── st_cb_bitmap.c
    ├── st_cb_bitmap.h
    ├── st_cb_clear.c
    ├── st_cb_clear.h
    ├── st_cb_copyimage.c
    ├── st_cb_copyimage.h
    ├── st_cb_drawpixels.c
    ├── st_cb_drawpixels.h
    ├── st_cb_drawtex.c
    ├── st_cb_drawtex.h
    ├── st_cb_eglimage.c
    ├── st_cb_eglimage.h
    ├── st_cb_feedback.c
    ├── st_cb_feedback.h
    ├── st_cb_flush.c
    ├── st_cb_flush.h
    ├── st_cb_rasterpos.c
    ├── st_cb_rasterpos.h
    ├── st_cb_readpixels.c
    ├── st_cb_readpixels.h
    ├── st_cb_texture.c
    ├── st_cb_texture.h
    ├── st_context.c
    ├── st_context.h
    ├── st_copytex.c
    ├── st_copytex.h
    ├── st_debug.c
    ├── st_debug.h
    ├── st_draw.c
    ├── st_draw_feedback.c
    ├── st_draw.h
    ├── st_draw_hw_select.c
    ├── st_extensions.c
    ├── st_extensions.h
    ├── st_format.c
    ├── st_format.h
    ├── st_gen_mipmap.c
    ├── st_gen_mipmap.h
    ├── st_glsl_to_ir.cpp
    ├── st_glsl_to_ir.h
    ├── st_glsl_to_nir.cpp
    ├── st_interop.c
    ├── st_interop.h
    ├── st_manager.c
    ├── st_manager.h
    ├── st_nir_builtins.c
    ├── st_nir.h
    ├── st_nir_lower_builtin.c
    ├── st_nir_lower_tex_src_plane.c
    ├── st_pbo.c
    ├── st_pbo_compute.c
    ├── st_pbo.h
    ├── st_program.c
    ├── st_program.h
    ├── st_sampler_view.c
    ├── st_sampler_view.h
    ├── st_scissor.c
    ├── st_scissor.h
    ├── st_shader_cache.c
    ├── st_shader_cache.h
    ├── st_texture.c
    ├── st_texture.h
    ├── st_util.h
    ├── st_vdpau.c
    ├── st_vdpau.h
    └── tests
    
    1 directory, 90 files
    
  • Pipe Driver: 把Gallium的state、shader和primitive概念转换成硬件能懂的语言

    tree  src/gallium/drivers/  -L 1
    src/gallium/drivers/
    ├── asahi
    ├── crocus
    ├── d3d12
    ├── etnaviv
    ├── freedreno
    ├── i915
    ├── iris
    ├── lima
    ├── llvmpipe
    ├── xxx_gpu
    ├── nouveau
    ├── panfrost
    ├── r300
    ├── r600
    ├── radeonsi
    ├── softpipe
    ├── svga
    ├── tegra
    ├── v3d
    ├── vc4
    ├── virgl
    └── zink
    
    22 directories, 0 files
    
  • Winsys: 实例化state tracker和pipe driver,并和具体的操作系统及2D显示驱动绑定

    tree src/gallium/winsys/ -L 1
    src/gallium/winsys/
    ├── amdgpu
    ├── asahi
    ├── crocus
    ├── d3d12
    ├── etnaviv
    ├── freedreno
    ├── i915
    ├── iris
    ├── kmsro
    ├── lima
    ├── xxx_gpu
    ├── nouveau
    ├── panfrost
    ├── radeon
    ├── svga
    ├── sw
    ├── tegra
    ├── v3d
    ├── vc4
    └── virgl
    
    20 directories, 0 files
    

最后我们看下,构建完成生成gallium目录代码:

tree build-android-aarch64/src/gallium/  -L 2
build-android-aarch64/src/gallium/
├── auxiliary
│   ├── libgallium.a
│   ├── libgallium.a.p
│   ├── libgalliumvl.a
│   ├── libgalliumvl.a.p
│   ├── libgalliumvl_stub.a.p
│   ├── libgalliumvlwinsys.a.p
│   ├── pipe-loader
│   ├── tr_util.c
│   ├── tr_util.h
│   ├── u_indices_gen.c
│   ├── u_tracepoints.c
│   ├── u_tracepoints.h
│   └── u_unfilled_gen.c
├── drivers
│   └── xxx_gpu
├── frontends
│   └── dri
├── targets
│   └── dri
└── winsys
    ├── xxx_gpu
    └── sw

15 directories, 8 files

其中只有Pipe Driver和具体的硬件有关系。
对于GPU硬件厂家来说,主要实现Pipe driver和winsys层。

从数据流看,如下:

state tracker -> Pipe Driver -> Winsyst -> 具体的OS -> OS内核态GPU驱动 -> 具体的GPU硬件

另外Gallium中还有两个比较重要的概念:

  • CSO context:GPU中有些状态是不变的常量,Gallium提供了CSO机制帮助创建、销毁、管理这些对象
  • Draw: 有些硬件不支持坐标变换,光照、裁剪,Gallium也提供了软件机制帮忙实现
    加上这两个概念之后,数据流如下:
state tracker -> CSO context -> Draw -> Pipe Driver -> Winsys -> 具体的OS -> OS内核态GPU驱动 -> 具体的GPU硬件

state tracker和pipe driver通信是通过pipe context 和pipe screen这两个软件概念
state tracker也可以直接通过p_winsys和Winsys通信,一般GPU厂商也要实现一个自己的winsys,可以参考纯软的 kms_dri_sw_winsys.c



1. Mesa Gallium 驱动框架
2. GPU Mesa Gallium架构

这个系列博客,确实写得蛮好的。属于可以深入研读系列的!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/654213.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Word如何绘制三线表及设置磅值

插入表格, 开始 边框 边框和低温 设置磅值 先全部设置为无边框 上边 1.5 0.5 以上内容未完善,请等待作者更新

内网权限提升

打点进入内网中,权限一般为 web 服务的权限 1、什么是提权 一般一来说是低权限用户去申请高权限用户,可以是(配置不当、溢出类漏洞(历史漏洞)、本地漏洞) 2、常见用户分类 windows: 本地登录…

使用 Orange Pi AIpro开发板基于 YOLOv8 进行USB 摄像头实时目标检测

简介 官网:Orange-Pi-AIpro 算力指标与概念 TOPS是每秒数万亿或万亿次操作。它主要是衡量可实现的最大吞吐量,而不是实际吞吐量的衡量标准。大多数操作是 MAC(multiply/accumulates),因此: TOPS &#xf…

干货!渗透测试入门教程!(建议收藏)

渗透测试是指从内网、外网等网络环境中,利用各种手段对某个特定网络进行模拟攻击,目的是为了寻找可能被利用的漏洞,是企业中重要的一环、 虽然大多数人在学习后都能快速上手,但渗透测试还是有一定的门槛,今天就给大家…

HashMap在Go与Java的底层实现与区别

在Java中 在Java中hash表的底层数据结构与扩容等已经是面试集合类问题中几乎必问的点了。网上有对源码的解析已经非常详细了我们这里还是说说其底层实现。 基础架构 public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable,…

JAVA云HIS医院系统源码 云HIS运维平台源码 融合B/S版电子病历系统,支持电子病历四级,saas模式

JAVA云HIS医院系统源码 云HIS运维平台源码 融合B/S版电子病历系统&#xff0c;支持电子病历四级&#xff0c;saas模式 HIS系统就是医院信息管理系统&#xff0c;HIS系统是整个医院信息化的核心&#xff0c;门诊、住院、药房、药库等都是由HIS系统来承载起来的&#xff0c;所以…

高动态范围成像(HDRI)技术在AI去衣中的革新作用

引言&#xff1a; 在计算机视觉和图像处理领域&#xff0c;人工智能&#xff08;AI&#xff09;去衣技术是一项颇具争议但又不容忽视的技术。它不仅在娱乐和多媒体制作领域中扮演着重要角色&#xff0c;还在时尚设计与电子商务中展现了其独特的价值。随着技术的不断进步&#x…

动态规划part02 Day42

LC62不同路径 LC63不同路径II(超时10min) 超时原因分析&#xff1a;思路想错了&#xff0c;即便是正确思路初始化也有点问题&#xff0c;应该将不必要的判断逻辑引入初始化的过程中初始化&#xff1a; 从左上角到[i][0]和[0][j]都只有一条路径dp[i][0]1和dp[0][j]1引入故障&am…

探索减轻 AI 说服伤害的机制方法

随着生成式人工智能&#xff08;AI&#xff09;系统在各个领域的广泛应用&#xff0c;其说服能力也日益增强&#xff0c;引发了对 AI 说服可能带来伤害的担忧。AI 说服的伤害不仅来源于说服的结果&#xff0c;还包括说服过程中可能对个体或社会造成的不利影响。为了系统性地研究…

信息抽取模型TPLinker

1.motivation 早期传统方法首先抽取实体再抽取它们之间的关系&#xff0c;但是忽略了两个任务之间的关联。而后期采取的联合模型都存在着一个严重问题&#xff1a;训练时&#xff0c;真实值作为上下文传入训练&#xff1b;推理时&#xff0c;模型自身生成的值作为上下文传入&a…

DolphinScheduler 3.3.0版本更新一览

Apache DolphinScheduler即将迎来3.3.0版本的发布&#xff0c;届时将有一系列重要的更新和改进。在近期的社区5月份用户线上分享会上&#xff0c;项目PMC 阮文俊为大家介绍了3.3.0版本将带来的主要更新和改进&#xff0c;并为大家指出了如何参与社区的方式。 什么是DolphinSch…

企业内网终端监控管理软件有哪些?推荐4款企业终端监控管理软件

企业内网终端监控管理软件是一种专为企业内部网络设计的安全与管理工具&#xff0c;旨在帮助企业管理、监控和保护其内部网络中的各种终端设备&#xff0c;如个人电脑、笔记本、移动设备等。 这类软件的主要功能包括但不限于以下几个方面&#xff1a; 1&#xff0c;实时监控&a…

Java面试八股之start()和run()的区别

start()和run()的区别 在Java中&#xff0c;run()方法和start()方法是与线程操作紧密相关的&#xff0c;两者之间存在本质的区别&#xff1a; start()是Thread类的一个实例方法&#xff0c;它的主要作用是启动一个新的线程。当调用线程对象的start()方法时&#xff0c;Java虚…

手搓顺序表(C语言)

目录 SeqList.h SeqList.c 头插尾插复用任意位置插入 头删尾删复用任意位置删除 SLtest.c 测试示例 顺序表优劣分析 SeqList.h //SeqList.h#pragma once#include <stdio.h> #include <assert.h> #include <stdlib.h> #define IN_CY 3typedef int S…

Android环境下Mesa初始化流程重学习之eglInitialize

Mesa初始化流程重学习之eglInitialize 引言 说来也惭愧&#xff0c;Mesa搞了这么久了&#xff0c;每次都想深入下&#xff0c;可是每次都是浅尝辄止了。这次趁着有了一定的闲暇时间并且有了调试景嘉微显卡的机会&#xff0c;还是想重新学习下&#xff0c;深入研究下&#xff0…

MongoDB分片集群容灾方案

MongoDB分片集群容灾方案 1. 集群同步工具介绍1.1 第三方数据同步工具mongoshake1.2 官方同步工具mongosync 2. 工具对比2.1 数据一致性2.2 稳定性和可靠性2.3 维护成本 3. 总结 1. 集群同步工具介绍 最近客户咨询MongoDB分片集群市面上主流的容灾方案&#xff0c;所以抽空整理…

Node.js —— Express中服务器的创建、托管静态资源、nodemon

目录 Express的安装 创建基本的 Web 服务器 监听GET请求 监听POST请求 把内容响应给客户端 ​编辑获取 URL 中携带的查询参数 ​编辑获取 URL 中的动态参数 ​编辑托管静态资源 express.static() 托管多个静态资源目录 挂载路径前缀 nodemon: 为什么要使用 nodemon 安…

如何让UE4.26使用VS2022【Windows,源码下载】

使用UE5一直用的是VS2022&#xff0c;都是因为团队需要&#xff0c;只能用UE4&#xff0c;而我电脑中拥有的UE4的版本是UE4.26以及VS2022&#xff0c;我不可能去下载VS2019来为这么一个项目&#xff0c;所以就研究了一下是哪里阻止了UE4.26不让我使用VS2022. 首先下载UE4.26源码…

守护景区安全:探讨景区视频监控方案的搭建及必要性

据新闻报道&#xff0c;5月25日&#xff0c;安徽黄山景区内发生雷击&#xff0c;闪电击中飞来石景点的护栏&#xff0c;多人被碎石砸中受伤。景区工作人员表示&#xff0c;飞来石附近本就属于雷区&#xff0c;当天曾发过两次雷电预警。 随着旅游业的繁荣发展&#xff0c;越来越…

掌握Adobe XD:为自学者准备的软件学习秘籍

相信了解一些设计软件的朋友都听说过这个软件&#xff0c;Adobe XD软件是一款功能强大的原型创建工具。随着Adobe XD软件越来越受到用户的青睐&#xff0c;它几乎涵盖了所有大中小企业和企业的设计&#xff0c;可以说是设计公司最常用的软件之一。Adobe XD软件可以在很多方面满…