直接渲染管理器(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;
creq.height = dev->height;
creq.bpp = 32;
ret = drmIoctl(fd, DR

本文介绍了Direct Rendering Manager (DRM) 中的Dumb Buffer和Prime Buffer。Dumb Buffer适用于小分辨率简单场景,依赖于kernel的通用CMA API。而Prime Buffer是跨设备缓冲区共享框架,适合大内存复杂场景,基于dma-buf实现。通过libdrm API,文章展示了如何使用Dumb和Prime创建并映射framebuffer到用户空间。
最低0.47元/天 解锁文章
970

被折叠的 条评论
为什么被折叠?



