直接渲染管理器(Direct Rendering Manager)是给予DRI客户端直接访问硬件的内核模块,简称DRM。DRM 中管理内存的模块叫做GEM(Graphics Execution Manager),主要的工作就是管理内存的申请和释放。GEM 中有两种常用的buffer,Dumb 和 Prime。
-
Dumb Buffer
Dumb Buffer 只支持连续物理内存,基于kernel中通用CMA API实现。多用于小分辨率简单场景。
-
Prime Buffer
Prime是DRM中的跨设备缓冲区共享框架,最初是为多GPU平台创建的。对于用户空间,Prime缓冲区是基于dma-buf是基于dma-buf 实现,可以是连续物理内存,也可以离散的物理内存,多用于大内存复杂场景。
-
应用实例:
下面以libdrm api 为例来展示Dumb 和 Prime buffer 的使用方法:
-
Dumb 示例:
static int modeset_create_fb(int fd, struct modeset_dev *dev)
{
struct drm_mode_destroy_dumb dreq;
struct drm_mode_map_dumb mreq;
struct drm_prime_handle prime;
int ret;
struct drm_mode_create_dumb creq;
/* create dumb buffer */
memset(&creq, 0, sizeof(creq));
creq.width = dev->width;