您的位置:首页 > 其它

Gallium3D简介——从DRI到Gallium3D

2012-11-01 13:01 1766 查看


Gallium3D简介——从DRI到Gallium3D

分类: OpenGL2010-04-10
10:32 1035人阅读 评论(0) 收藏 举报

目录(?)[+]


1. Gallium3D

Gallium3D是新出来的3D模型。网上评论比较多,这里就不废话了。

本文翻译自Keith Whitwell的演讲:

TG-Gallium Driver Stack(Softpipe, Cell and Beyond), keith@tungstengraphics.com


2. 从DRI演进到Gallium3D DRI

在Gallium3D之前,Mesa为了实现硬件加速,其DRI体系结构如下:



图 Mesa DRI(非Gallium3D)

作者认为,这个模型有下面的缺点:

(1) Mesa和驱动之间的Leaky interface;

(2) 驱动体系庞大而且越来越复杂;

(3) API OS相关的东西也写在驱动里面了;

Mesa DRI的模型导致DRI 驱动层过于庞大。而DRI驱动通常是硬件相关的,这就导致为了适用新的设备,开发工作较大。

所以好事者觉得有必要在DRI驱动这一层,提炼一些硬件无关的东西出来。于是他们提出了一个初步的想法,就是将其划分为三层:



图 DRI 驱动分层(非Gallium3D)

这个模型的特点是:

(1) 将API,OS,HW分开;

(2) 创建了新的接口;

(3) 分割驱动;(和第一条差不多了)

现在将DRI驱动分层的想法付诸实施,就得到了下面的模型:



图 DRI 驱动分层(Gallium3D)

这个模型带来了下述特点:

●增加了State tracker, HW Driver, Winsys三个模块;

● TG-Gallium驱动栈




3. Gallium3D的特点和参考实现

驱动模型:

●由GL3(OpenGL 3.0?),NV_GPU4, i965等软硬件抽象出来的接口;

●常态状态对象;

●简单绘图接口;如DrawArrays, DrawElements;

●字节码形式的统一Shade语言;

● Render目标作为私有缓冲;

●可以将硬件驱动运行在新的接口,如GL3,GLES等;

●可以将硬件驱动运行在新的窗口系统;



硬件驱动:

●比DRI驱动简单很多;

●接口:

-Create/Bind/Delete状态对象;

-Draw,1-2个入口;

-缓冲管理;

-Flush

●每个Gallium驱动定义它自己的OS层(Winsys)接口;

●通过重新实现WInsys层可以Re-target驱动;如miniglx,EGL;



Mesa State Tracker

● 实现了当前的Mesa驱动模型;

● 使用了新的硬件驱动接口

● 硬件无关,可重用;

● 将GL状态转化为常类型对象;

● 处理了所有费解的GL概念:

-所有不同的GL绘制路径;

-像素路径操作,DrawPixels, Bitmap, CopyT exSubImage

-GL纹理语义;

-纹理环境,GL1.5 shader, GLSL



O/S Dependencies

● 每一个Gallium驱动会定义其OS层Winsys接口;

● 通过切换Winsys层可以retarget驱动;



Winsys Layer

● 实现了两个接口:

-DRI驱动接口:CreateDevice, CreateContext,SwapBuffers (**)

-硬件驱动的Winsys接口:缓冲管理,命令提交;

● 封装了下述内容:

-DRI lock和cliprects

-Swapbuffers, page flipping.

-通用的操作系统相关内容;



Mesa提供了Gallium3D驱动的软件参考实现Softpipe:



图 Gallium3D驱动的参考实现Softpipe

Mesa同时还提供了Gallium3D驱动的i915参考实现Softpipe:



图 Gallium3D驱动的参考实现i915
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: