linux 3d加速测试,Linux的3D加速

关键字

DRI    Direct Rendering Infrastructure

DRM   Direct Rendering Manager

XLib               XServer 的客户端库

GlxLib            OpenGL的通过XServer方式的客户端库, OpenGL也可以不通过XServer的方式。

libdrm  即可为XServer使用,又可以为直接渲染客户端程序使用,它们都直接使用/dev/drm 这个设备接口。

GPU The graphics processor

CPU

GPU  有自己的内存,称之为显存VRAM。

GPU 不能访问主存,但是VRAM可以通过地址映射的方式映射到CPU的地址空间,这样CPU就能读写显存。

如果我们不使用GPU的加速功能,我们仅仅是简单的访问显存的一部分,以便让我们想显示的部分显示到屏幕上。

这就是我们普通的LINUX显示驱动,fbcon vga16fb。

如果我们想使用显卡的加速功能,使之承担主要的图形运算任务,我们必须发送一系列命令给GPU的命令队列。

CPU通过“环形缓冲”发送命令给GPU。

DRM是一个内核模块。

DRI 通过 DRM实现对图形加速卡的控制,以一种安全有效的方式实现对图形卡的使用。

Xserver 和 OpenGL是 DRI 的直接使用者。

DRI为显卡驱动提供公用的一种机制和框架。

各种图形程序的数据流:

0818b9ca8b590ca3270a3433284dd417.png

Direct rendering program (3D):

Direct rendering (3D data) -> 3D data -> Graphics Hardware

Direct rendering program (2D):

X Protocol Encode -> Protocol Decode -> DIX -> XAA -> DDX Driver -> Graphics Hardware

Indirect rendering program (2D):

X Protocol Encode -> Protocol Decode -> DIX -> XAA -> DDX Driver -> Graphics Hardware

Indirect rendering program (3D):

X Protocol Decode -> GLX -> Mesa (including SW rasterizer) -> DDX Driver -> Graphics Hardware

各种图形的控制流图:

0818b9ca8b590ca3270a3433284dd417.png

现在对上面的两个图进行详细的讲解:

1)MMIO

Memory-mapped I/O(MMIO)

和port I/O(also calledport-mapped I/O(PMIO) orisolated I/O)

内存映射的IO和端口映射的IO是计算机CPU和外围设备实现输入输出的两种互补基本方式。

另外一种方式是DMA不过这种方式,是绕过CPU的,直接实现主存和外围设备之间的数据交换。

内存映射的IO其实是通过和主存一样的地址总线,通过硬件的方式连接到CPU上。映射的内存和寄存器都有自己的物理地址。其实际相当于物理内存的一部分。CPU用访问普通内存的方式访问它们。

端口映射的IO使用专门的指令实现IO操作。这种方式常见于INTEL的处理器,这种方式的IO地址空间和普通内存的地址空间是相互隔离的。

2) 图形协议栈

1. X driver

- sometimes referred to as DDX

- handles display/modesetting, 2D and video acceleration

- accesses hardware directly for modesetting; acceleration can access hardware directly or use drm driver

- acceleration must go through drm driver if also running 3D

- modesetting is starting to migrate to kernel/drm; for "kernel modesetting" (KMS) the X driver calls drm to set modes

- memory management is done by X driver today but starting to migrate to kernel/drm (GEM, TTM)

- source code in xorg/driver/xf86-video-ati, xorg/driver/xf86-video-radeonhd

2. DRM aka kernel driver

- manages DMA mechanism for feeding commands to GPU, typically ring buffer

- starting to include memory management and modesetting (as these move from X driver to drm)

- comes built into kernel or you can download & install a newer copy

- source code in mesa/drm

3. Mesa aka 3D driver

- originally written for software rendering, accessed via X server ("indirect rendering")

- hardware acceleration added years ago; interface for plugging in hardware drivers

- Mesa itself supports full GL 2.1, most hardware drivers support less

- submits commands to GPU via drm driver (#2 above)

- two modes - "direct" rendering (interface lib calls Mesa directly) or "indirect" rendering (interface lib passes commands to X server, X server calls Mesa)

- when running "direct" rendering the DRI protocols allow 3D and 2D (X) drivers to work together

- when running "indirect" rendering the X server can coordinate everything itself and convert pixmaps to textures for compositing through GL

- Accelerated Indirect GL rendering through X = AIGLX

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值