我是靠谱客的博主 拉长香氛,最近开发中收集的这篇文章主要介绍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

最后

以上就是拉长香氛为你收集整理的linux 3d加速测试,Linux的3D加速的全部内容,希望文章能够帮你解决linux 3d加速测试,Linux的3D加速所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部