[建筑]Mesa是OpenGL规范的开源实现_让显卡的3D加速特性透过此得到.doc_第1页
[建筑]Mesa是OpenGL规范的开源实现_让显卡的3D加速特性透过此得到.doc_第2页
[建筑]Mesa是OpenGL规范的开源实现_让显卡的3D加速特性透过此得到.doc_第3页
[建筑]Mesa是OpenGL规范的开源实现_让显卡的3D加速特性透过此得到.doc_第4页
[建筑]Mesa是OpenGL规范的开源实现_让显卡的3D加速特性透过此得到.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

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

文档简介

Gallium3D架构文档Mesa 是OpenGL规范的开源实现,让显卡的3D加速特性透过此得到施展。从Mesa7.5开始Mesa引入了Gallium3D架构。开发Mesa7.5之前的版本的驱动比较复杂,每个显卡厂商的3D驱动都有各自不同的应用后端,通过此调用Mesa的API来实现3D加速。Intel、AMD和NVIDIA这三大厂商的显卡都具备各自不同的应用后端,造成了开发和维护困难。而Mesa 7.5最新引入的Gallium3D则是相当先进的一项技术,即使目前为止还未完全成熟。Callium3D提供一套统一的API,这套API将标准的硬件特性(而非软件特性)暴露出来(如shader units),也就是说,Callium3D直接与统一的硬件级特性打交道,而非充当一个纯软件层。因此,这些API使得OpenGL 1.x/2.x,OpenGL 3.x,OpenVG,GPGPU架构甚至 Direct3D 的实现,都只需要通过一个单独的后端即可。而无须各个厂商自行开发各自不同的后端。1、 从DRI演进到Gallium3D DRI在Gallium3D之前,Mesa为了实现硬件加速,其DRI体系结构如下:图 Mesa DRI(非Gallium3D)作者认为,这个模型有下面的缺点:1. Mesa和驱动之间的Leaky interface;2. 驱动体系庞大而且越来越复杂;3. API OS相关的东西也写在驱动里面了;Mesa DRI的模型导致DRI 驱动层过于庞大。而DRI驱动通常是硬件相关的,这就导致为了适用新的设备,开发工作较大。所以有人觉得有必要在DRI驱动这一层,提炼一些硬件无关的东西出来。于是DRI Driver初步被划分为三层:图 DRI 驱动分层(非Gallium3D)这个模型的特点是:1. 将API,OS,HW分开;2. 创建了新的接口;3. 分割驱动;(和第一条差不多了)现在将DRI驱动分层的想法付诸实施,就得到了下面的模型:图 DRI 驱动分层(Gallium3D)这个模型带来了下述特点:1. 增加了State tracker, HW Driver, Winsys三个模块;2. TG-Gallium驱动栈 2、 Gallium3D的特点驱动模型:1. 由GL3(OpenGL 3.0?),NV_GPU4, i965等软硬件抽象出来的接口;2. 常态状态对象;3. 简单绘图接口;如DrawArrays, DrawElements;4. 字节码形式的统一Shade语言;5. Render目标作为私有缓冲;6. 可以将硬件驱动运行在新的接口,如GL3,GLES等;7. 可以将硬件驱动运行在新的窗口系统;硬件驱动:1. 比DRI驱动简单很多;2. 接口:a) -Create/Bind/Delete状态对象;b) -Draw,1-2个入口;c) -缓冲管理;d) -Flush3. 每个Gallium驱动定义它自己的OS层(Winsys)接口;4. 通过重新实现WInsys层可以Re-target驱动;如miniglx,EGL; Mesa State Tracker1. 实现了当前的Mesa驱动模型;2. 使用了新的硬件驱动接口3. 硬件无关,可重用;4. 将GL状态转化为常类型对象;5. 处理了所有费解的GL概念:a) -所有不同的GL绘制路径;b) -像素路径操作,DrawPixels, Bitmap, CopyT exSubImagec) -GL纹理语义;d) -纹理环境,GL1.5 shader, GLSL O/S Dependencies1. 每一个Gallium驱动会定义其OS层Winsys接口;2. 通过切换Winsys层可以retarget驱动; Winsys Layer1. 实现了两个接口:a) DRI驱动接口:CreateDevice, CreateContext,SwapBuffers (*)b) 硬件驱动的Winsys接口:缓冲管理,命令提交;2. 封装了下述内容:a) DRI lock和cliprectsb) Swapbuffers, page flipping.c) 通用的操作系统相关内容; 3、 Gallium3D的参考实现Mesa提供了Gallium3D驱动的软件参考实现Softpipe:图 Gallium3D驱动的参考实现SoftpipeMesa同时还提供了Gallium3D驱动的i915参考实现Softpipe:图 Gallium3D驱动的参考实现i915 4、 Gallium3D的使用1.各模块简介及功能在目前最新的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)( struct pipe_context*);void (*draw_arrays)( struct pipe_context *pipe,Unsigned mode, unsigned start, unsigned count);.整个gallium对外的接口都是这种含有大量函数指针的结构,通过这种方式可以把前端调用和后端实现分开,使得运行时决定应该调用哪个具体的实现函数。此外,gallium中提供的接口都是针对于硬件概念而非软件概念,这样降低了后端的实现难度。b) auxiliary是gallium中的工具模块,包括了处理shader程序的tgsi模块,用来实现存储和对象复用的cso_cache模块等等c) drivers是目前已经实现了的gallium的后端,针对不同的硬件,有不同的实现,其中softpipe是软件模拟的显示设备的实现,具有方便调试易于修改的特点。d) state_trackers是目前已经实现了的前端,其中包括mesa即OpenGL的实现以及vegaOpenVG的实现,其中OpenVG是使用gallium的最好的例子。2. 接口使用方法gallium的使用方法是通过一系列的函数协作来完成,它具有一个显示设备具有的上下文概念,整个库的使用围绕着这个上下文而来:a) 建立上下文b) 设置各渲染阶段的处理状态函数i. 创建状态ii. 绑定状态c)设置上下文处理对象bufferd)调用运行函数入口点一系列draw函数f)销毁创建的buffer对象、状态对象g)销毁上下文3. tgsi的使用Tgsi是tg Shader Infrastructure的缩写,简单来说这是一个shader的编程语言,语言的方式类似于汇编,操纵一系列shade

温馨提示

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

评论

0/150

提交评论