Mesa GL Dispatch分发分析与理解

Mesa GL Dispatch分发分析与理解



引言

这篇博客的核心是从OpenGL应用程序的典型api入手,分析gl api 调用到用户态驱动后端的过程,进而总结出一个典型的调用栈。理解了这个典型调用栈,对后续任何一个API的调用过程分析,都是a piece of cake。

在正式分析相关分发流程之前,我们必须明确的一点就是现在的Mesa采用的是最新的gallium架构,下图的左侧调用栈是在gallium 架构之前采用的模式,右侧是gallium架构下的模式。可以看出gallium架构有比较明显的三个分层(夹心饼干):

  • state_tracker层:负责收集OpenGL状态

  • GPU-specific层:厂商的用户态驱动核心部分

  • OS WinSys层:操作系统对接层

下面章节出现的build-android-aarch64目录是通过meson编译的out目录!



二. glClear和glFlush的调用栈分析

接下来以glClear的函数实现,来分析从应用程序到GPU-specific的调用栈。先把关键调用栈组织如下(省略了不相关的调用)。

glClear(GL_COLOR_BUFFER_BIT);
    _mesa_Clear(GL_COLOR_BUFFER_BIT);
        st_Clear(ctx, GL_COLOR_BUFFER_BIT);
            st->pipe->Clear(...);
                gpu_specific_Clear(...);

我们详细分析下glFlush的流程实现:

GL_API void GL_APIENTRY glFlush (void)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值