概述
关键字
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为显卡驱动提供公用的一种机制和框架。
各种图形程序的数据流:
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
各种图形的控制流图:
现在对上面的两个图进行详细的讲解:
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加速所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复