Mesa是OpenGL规范的开源实现,让显卡的3D加速特性透过此得到_第1页
Mesa是OpenGL规范的开源实现,让显卡的3D加速特性透过此得到_第2页
Mesa是OpenGL规范的开源实现,让显卡的3D加速特性透过此得到_第3页
Mesa是OpenGL规范的开源实现,让显卡的3D加速特性透过此得到_第4页
Mesa是OpenGL规范的开源实现,让显卡的3D加速特性透过此得到_第5页
免费预览已结束,剩余1页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 Gallium3D 架构文档 开始 Mesa 是 OpenGL 规范的开源实现,让显卡的 Mesa 引入了 Gallium3D 架构。 3D 加速特性透过此得到施展。从 Mesa7.5 开发 Mesa7.5 之前的版本的驱动比较复杂,每个显卡厂商的 3D 驱动都有各自不同的应 用后端,通过此调用 Mesa 的 API 来实现 3D 加速。 Intel 、AMD 和 NVIDIA 这三大厂商的显卡 都具备各自不同的应用后端,造成了开发和维护困难。 而 Mesa 7.5 最新引入的 Gallium3D 则是相当先进的一项技术,即使目前为止还未完全成熟。 Callium3D 提供一套统一的 API

2、,这套 API 将标准的硬件特性(而非软件特性)暴露出来(如 shader units ),也就是说, Callium3D 直接与统一的硬件级特性打交道,而非充当一个纯软件层。 因此, 这些 API 使得 OpenGL1.x/2.x ,OpenGL3.x ,OpenVG,GPGPU架构甚至 Direct3D 的实现,都只需要通过一个单独的后端即可。而无须各个厂商自行开发各自不同的后端。 一、从 DRI 演进到 Gallium3D DRI 在 Gallium3D 之前, Mesa 为了实现硬件加速,其 DRI 体系结构如下: 图 Mesa DRI( 非 Gallium3D) 作者认为,这个模型有

3、下面的缺点: 1. Mesa 和驱动之间的 Leaky interface ; 2. 驱动体系庞大而且越来越复杂; 3. API OS 相关的东西也写在驱动里面了; Mesa DRI 的模型导致 DRI 驱动层过于庞大。而 DRI 驱动通常是硬件相关的,这就导致为了适用新的设备, 开发工作较大。 所以有人觉得有必要在 DRI 驱动这一层, 提炼一些硬件无关的东西出来。于是 DRI Driver 初步被划分为三层: 图 DRI 驱动分层 ( 非 Gallium3D) 这个模型的特点是: 1. 将 API,OS,HW 分开; 2. 创建了新的接口; 3. 分割驱动;(和第一条差不多了) 现在将 D

4、RI 驱动分层的想法付诸实施,就得到了下面的模型: 图 DRI 驱动分层 (Gallium3D) 这个模型带来了下述特点: 1. 增加了 State tracker, HW Driver, Winsys 三个模块; 2. TG-Gallium 驱动栈 二、 Gallium3D 的特点 驱动模型: 1. 由 GL3(OpenGL 3.0?) , NV_GPU4, i965 等软硬件抽象出来的接口; 2. 常态状态对象; 3. 简单绘图接口;如 DrawArrays, DrawElements ; 4. 字节码形式的统一 Shade 语言; 5. Render 目标作为私有缓冲; 6. 可以将硬件

5、驱动运行在新的接口,如GL3,GLES 等; 7. 可以将硬件驱动运行在新的窗口系统; 硬件驱动: 1. 比 DRI 驱动简单很多; 2. 接口: a) -Create/Bind/Delete状态对象; b) -Draw , 1-2 个入口; c) - 缓冲管理; d) -Flush 3. 每个 Gallium 驱动定义它自己的 OS 层 (Winsys) 接口 ; 2. 通过重新实现 WInsys 层可以 Re-target 驱动;如 miniglx,EGL ; Mesa State Tracker 实现了当前的 Mesa 驱动模型; 使用了新的硬件驱动接口 硬件无关,可重用; 将 GL 状

6、态转化为常类型对象; 处理了所有费解的 GL 概念: a) - 所有不同的 GL 绘制路径; 1. - 像素路径操作, DrawPixels, Bitmap, CopyT exSubImage 2. -GL 纹理语义; 3. - 纹理环境, GL1.5 shader, GLSL O/S Dependencies c) 每一个 Gallium 驱动会定义其 OS 层 Winsys 接口; d) 通过切换 Winsys 层可以 retarget 驱动; Winsys Layer 2. 实现了两个接口: a) DRI 驱动接口: CreateDevice, CreateContext ,SwapBu

7、ffers (*) i. 硬件驱动的 Winsys 接口:缓冲管理,命令提交; 封装了下述内容: DRI lock 和 cliprects Swapbuffers, page flipping. 通用的操作系统相关内容; 三、 Gallium3D 的参考实现 Mesa 提供了 Gallium3D 驱动的软件参考实现 Softpipe : 图 Gallium3D 驱动的参考实现 Softpipe Mesa 同时还提供了 Gallium3D 驱动的 i915 参考实现 Softpipe : 图 Gallium3D 驱动的参考实现 i915 四、 Gallium3D 的使用 各模块简介及功能 在目前

8、最新的 gallium 版本中( Mesa-7.8.2 ), gallium 目录下主要有以下子目录: auxiliary , drivers , include , state_trackers 。 a) include 是 gallium 提供给前端的接口,定义了一些 gallium 中重要的概念比如 context , screen 等以及各种 state ,所有的头文件都遵循类似以下的形式: struct pipe_context struct pipe_winsys *winsys; struct pipe_winsys *screen; . void (*destroy)( str

9、uct pipe_context*); void (*draw_arrays)( struct pipe_context *pipe, Unsigned mode, unsigned start, unsigned count); . 整个 gallium 对外的接口都是这种含有大量函数指针的结构, 通过这种方式可以把前端 调用和后端实现分开,使得运行时决定应该调用哪个具体的实现函数。 此外, gallium 中提供的接口都是针对于硬件概念而非软件概念,这样降低了后端的实现难度。 b) auxiliary 是 gallium 中的工具模块,包括了处理 shader 程序的 tgsi 模块,用来

10、 实现存储和对象复用的 cso_cache 模块等等 drivers 是目前已经实现了的 gallium 的后端,针对不同的硬件,有不同的实现,其中 softpipe 是软件模拟的显示设备的实现,具有方便调试易于修改的特点。 state_trackers是目前已经实现了的前端, 其中包括 mesa即 OpenGL 的实现以 及 vega OpenVG 的实现,其中 OpenVG 是使用 gallium 的最好的例子。 接口使用方法 gallium 的使用方法是通过一系列的函数协作来完成,它具有一个显示设备具有的上下 文概念,整个库的使用围绕着这个上下文而来: 建立上下文 设置各渲染阶段的处理状态函数 创建状态 绑定状态 设置上下文处理对象 buffer d) 调用运行函数入口点一系列 draw 函数 销毁创建的 buffer 对象、状态对象 销毁上下文 3. tgsi 的使用 Tgsi 是 tg Shader Infrastructure 的缩写,简单来说这是一个 shader 的编程语言, 语言的方式类似于汇编,操纵一系列 shader 的寄存器完成

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论