Direct Rendering Manager
|This article needs additional citations for verification. (December 2013)|
The Direct Rendering Manager (DRM) is a device-independent kernel-level device driver that provides support for the Direct Rendering Infrastructure. The Direct Rendering Manager can be compiled into the Linux kernel or loaded via the standard module interface.
- The DRM provides synchronized access to the graphics hardware via the use of an optimized two-tiered lock.
- The DRM enforces the DRI security policy for access to the graphics hardware by only allowing authenticated X11 clients access to restricted regions of memory.
- The DRM provides a generic DMA engine, complete with multiple queues and the ability to detect the need for an OpenGL context switch.
- The DRM is extensible via the use of small device-specific modules that rely extensively on the API exported by the DRM module.
It consists of two in-kernel drivers (released as kernel modules on Linux): a generic drm driver, and another which has specific support for the GPUs. This pair of drivers allows a userspace client direct access to the video hardware. The entire DRI system enables hardware accelerated 3D rendering, video decoding as well as GPGPU.
Linux kernel version 3.11, which was released on 2013-09-02, included major changes to the direct rendering manager. As of September 2013, freedreno has been adopted into mainline Linux, and will be part of Linux kernel 3.12.
A render node is a character device that exposes a GPU's off-screen rendering and GPGPU capabilities to unprivileged programs, without exposing any display manipulation access. This is the first step in of an effort to decouple the kernel's interfaces for GPUs and display controllers from the obsolete notion of a graphics card. Coincidentally, unprivileged off-screen rendering is presumed by both the emerging Wayland and Mir display protocols — only the compositor is entitled to send its output to a display, and rendering on behalf of client programs is outside the scope of these protocols.
In Linux kernel 3.13
- DRM for freedreno by Rob Clark are expected to be merged.
- DRM support for Marvell's ARMADA 510 display subsystem.
The DRM core exports several interfaces to applications, generally intended to be used through corresponding libdrm wrapper functions. In addition, drivers export device-specific interfaces for use by userspace drivers & device-aware applications through ioctls and sysfs files. External interfaces include: memory mapping, context management, DMA operations, AGP management, vblank control, fence management, memory management, and output management.
- "Linux kernel/drivers/gpu/drm/README.drm". Retrieved 2014-02-26.
- "Pull-Request for the mainline Linux kernel 3.12". Retrieved 2013-10-02.
- "drm: implement experimental render nodes".
- "drm/i915: Support render nodes".
- "drm/radeon: Support render nodes".
- "drm/nouveau: Support render nodes".
- "Splitting DRM and KMS nodes".
- "drm/msm for Linux kernel 3.13".
- "Armada DRM support for Linux kernel 3.13".
- DRM home page
- The Direct Rendering Manager: Kernel Support for the Direct Rendering Infrastructure
- David Herrmann on Splitting DRM and KMS device nodes