Provided by: libdrm-dev_2.4.113-2~ubuntu0.22.04.1_amd64 bug

NAME

       drm - Direct Rendering Manager

SYNOPSIS

       #include <xf86drm.h>

DESCRIPTION

       The  Direct  Rendering  Manager  (DRM)  is a framework to manage Graphics Processing Units
       (GPUs). It is  designed  to  support  the  needs  of  complex  graphics  devices,  usually
       containing programmable pipelines well suited to 3D graphics acceleration. Furthermore, it
       is responsible for memory management, interrupt handling and  DMA  to  provide  a  uniform
       interface to applications.

       In  earlier  days,  the kernel framework was solely used to provide raw hardware access to
       privileged user-space processes which implement all the hardware abstraction  layers.  But
       more and more tasks were moved into the kernel. All these interfaces are based on ioctl(2)
       commands on the DRM character device. The  libdrm  library  provides  wrappers  for  these
       system-calls and many helpers to simplify the API.

       When a GPU is detected, the DRM system loads a driver for the detected hardware type. Each
       connected GPU is then presented to user-space  via  a  character-device  that  is  usually
       available  as  /dev/dri/card0  and  can be accessed with open(2) and close(2). However, it
       still depends on the graphics driver which interfaces are available on these  devices.  If
       an interface is not available, the syscalls will fail with EINVAL.

   Authentication
       All DRM devices provide authentication mechanisms. Only a DRM master is allowed to perform
       mode-setting or modify core state and only one user can be  DRM  master  at  a  time.  See
       drmSetMaster(3)  for information on how to become DRM master and what the limitations are.
       Other DRM users can be authenticated to the DRM-Master via  drmAuthMagic(3)  so  they  can
       perform buffer allocations and rendering.

   Mode-Setting
       Managing  connected  monitors  and  displays  and  changing  the  current  modes is called
       Mode-Setting. This is restricted to  the  current  DRM  master.   Historically,  this  was
       implemented  in  user-space,  but  new DRM drivers implement a kernel interface to perform
       mode-setting called Kernel Mode Setting (KMS). If your hardware-driver  supports  it,  you
       can  use  the  KMS  API  provided by DRM. This includes allocating framebuffers, selecting
       modes and managing CRTCs and encoders. See drm-kms(7) for more.

   Memory Management
       The most sophisticated tasks  for  GPUs  today  is  managing  memory  objects.   Textures,
       framebuffers,  command-buffers  and  all  other  kinds  of commands for the GPU have to be
       stored in memory. The DRM driver takes care  of  managing  all  memory  objects,  flushing
       caches, synchronizing access and providing CPU access to GPU memory. All memory management
       is hardware driver dependent. However, two generic frameworks are available that are  used
       by  most  DRM  drivers.  These  are  the  Translation Table Manager (TTM) and the Graphics
       Execution Manager (GEM). They provide generic APIs to create, destroy and  access  buffers
       from  user-space.  However,  there  are  still  many  differences  between  the drivers so
       driver-dependent code is still needed. Many  helpers  are  provided  in  libgbm  (Graphics
       Buffer  Manager) from the Mesa project. For more information on DRM memory management, see
       drm-memory(7).

REPORTING BUGS

       Bugs        in        this        manual        should        be        reported        to
       https://gitlab.freedesktop.org/mesa/drm/-/issues.

SEE ALSO

       drm-kms(7), drm-memory(7), drmSetMaster(3), drmAuthMagic(3), drmAvailable(3), drmOpen(3)

                                          September 2012                                   DRM(7)