Blame man/drm.xml

Packit Service 103f6b
 
Packit Service 103f6b
Packit Service 103f6b
          "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
Packit Service 103f6b
Packit Service 103f6b
Packit Service 103f6b
  Written 2012 by David Herrmann <dh.herrmann@googlemail.com>
Packit Service 103f6b
  Dedicated to the Public Domain
Packit Service 103f6b
-->
Packit Service 103f6b
Packit Service 103f6b
<refentry id="drm">
Packit Service 103f6b
  <refentryinfo>
Packit Service 103f6b
    <title>Direct Rendering Manager</title>
Packit Service 103f6b
    <productname>libdrm</productname>
Packit Service 103f6b
    <date>September 2012</date>
Packit Service 103f6b
    <authorgroup>
Packit Service 103f6b
      <author>
Packit Service 103f6b
        <contrib>Developer</contrib>
Packit Service 103f6b
        <firstname>David</firstname>
Packit Service 103f6b
        <surname>Herrmann</surname>
Packit Service 103f6b
        <email>dh.herrmann@googlemail.com</email>
Packit Service 103f6b
      </author>
Packit Service 103f6b
    </authorgroup>
Packit Service 103f6b
  </refentryinfo>
Packit Service 103f6b
Packit Service 103f6b
  <refmeta>
Packit Service 103f6b
    <refentrytitle>drm</refentrytitle>
Packit Service 103f6b
    <manvolnum>7</manvolnum>
Packit Service 103f6b
  </refmeta>
Packit Service 103f6b
Packit Service 103f6b
  <refnamediv>
Packit Service 103f6b
    <refname>drm</refname>
Packit Service 103f6b
    <refpurpose>Direct Rendering Manager</refpurpose>
Packit Service 103f6b
  </refnamediv>
Packit Service 103f6b
Packit Service 103f6b
  <refsynopsisdiv>
Packit Service 103f6b
    <funcsynopsis>
Packit Service 103f6b
      <funcsynopsisinfo>#include <xf86drm.h></funcsynopsisinfo>
Packit Service 103f6b
    </funcsynopsis>
Packit Service 103f6b
  </refsynopsisdiv>
Packit Service 103f6b
Packit Service 103f6b
  <refsect1>
Packit Service 103f6b
    <title>Description</title>
Packit Service 103f6b
    <para>The <emphasis>Direct Rendering Manager</emphasis> (DRM) is a framework
Packit Service 103f6b
          to manage <emphasis>Graphics Processing Units</emphasis> (GPUs). It is
Packit Service 103f6b
          designed to support the needs of complex graphics devices, usually
Packit Service 103f6b
          containing programmable pipelines well suited to 3D graphics
Packit Service 103f6b
          acceleration. Furthermore, it is responsible for memory management,
Packit Service 103f6b
          interrupt handling and DMA to provide a uniform interface to
Packit Service 103f6b
          applications.</para>
Packit Service 103f6b
Packit Service 103f6b
    <para>In earlier days, the kernel framework was solely used to provide raw
Packit Service 103f6b
          hardware access to privileged user-space processes which implement
Packit Service 103f6b
          all the hardware abstraction layers. But more and more tasks were
Packit Service 103f6b
          moved into the kernel. All these interfaces are based on
Packit Service 103f6b
          <citerefentry><refentrytitle>ioctl</refentrytitle><manvolnum>2</manvolnum></citerefentry>
Packit Service 103f6b
          commands on the DRM character device. The <emphasis>libdrm</emphasis>
Packit Service 103f6b
          library provides wrappers for these system-calls and many helpers to
Packit Service 103f6b
          simplify the API.</para>
Packit Service 103f6b
Packit Service 103f6b
    <para>When a GPU is detected, the DRM system loads a driver for the detected
Packit Service 103f6b
          hardware type. Each connected GPU is then presented to user-space via
Packit Service 103f6b
          a character-device that is usually available as
Packit Service 103f6b
          <filename>/dev/dri/card0</filename> and can be accessed with
Packit Service 103f6b
          <citerefentry><refentrytitle>open</refentrytitle><manvolnum>2</manvolnum></citerefentry>
Packit Service 103f6b
          and
Packit Service 103f6b
          <citerefentry><refentrytitle>close</refentrytitle><manvolnum>2</manvolnum></citerefentry>.
Packit Service 103f6b
          However, it still depends on the graphics driver which interfaces are
Packit Service 103f6b
          available on these devices. If an interface is not available, the
Packit Service 103f6b
          syscalls will fail with <literal>EINVAL</literal>.</para>
Packit Service 103f6b
Packit Service 103f6b
    <refsect2>
Packit Service 103f6b
      <title>Authentication</title>
Packit Service 103f6b
      <para>All DRM devices provide authentication mechanisms. Only a DRM-Master
Packit Service 103f6b
            is allowed to perform mode-setting or modify core state and only one
Packit Service 103f6b
            user can be DRM-Master at a time. See
Packit Service 103f6b
            <citerefentry><refentrytitle>drmSetMaster</refentrytitle><manvolnum>3</manvolnum></citerefentry>
Packit Service 103f6b
            for information on how to become DRM-Master and what the limitations
Packit Service 103f6b
            are. Other DRM users can be authenticated to the DRM-Master via
Packit Service 103f6b
            <citerefentry><refentrytitle>drmAuthMagic</refentrytitle><manvolnum>3</manvolnum></citerefentry>
Packit Service 103f6b
            so they can perform buffer allocations and rendering.</para>
Packit Service 103f6b
    </refsect2>
Packit Service 103f6b
Packit Service 103f6b
    <refsect2>
Packit Service 103f6b
      <title>Mode-Setting</title>
Packit Service 103f6b
      <para>Managing connected monitors and displays and changing the current
Packit Service 103f6b
            modes is called <emphasis>Mode-Setting</emphasis>. This is
Packit Service 103f6b
            restricted to the current DRM-Master. Historically, this was
Packit Service 103f6b
            implemented in user-space, but new DRM drivers implement a kernel
Packit Service 103f6b
            interface to perform mode-setting called
Packit Service 103f6b
            <emphasis>Kernel Mode Setting</emphasis> (KMS). If your
Packit Service 103f6b
            hardware-driver supports it, you can use the KMS API provided by
Packit Service 103f6b
            DRM. This includes allocating framebuffers, selecting modes and
Packit Service 103f6b
            managing CRTCs and encoders. See
Packit Service 103f6b
            <citerefentry><refentrytitle>drm-kms</refentrytitle><manvolnum>7</manvolnum></citerefentry>
Packit Service 103f6b
            for more.</para>
Packit Service 103f6b
    </refsect2>
Packit Service 103f6b
Packit Service 103f6b
    <refsect2>
Packit Service 103f6b
      <title>Memory Management</title>
Packit Service 103f6b
      <para>The most sophisticated tasks for GPUs today is managing memory
Packit Service 103f6b
            objects. Textures, framebuffers, command-buffers and all other kinds
Packit Service 103f6b
            of commands for the GPU have to be stored in memory. The DRM driver
Packit Service 103f6b
            takes care of managing all memory objects, flushing caches,
Packit Service 103f6b
            synchronizing access and providing CPU access to GPU memory. All
Packit Service 103f6b
            memory management is hardware driver dependent. However, two generic
Packit Service 103f6b
            frameworks are available that are used by most DRM drivers. These
Packit Service 103f6b
            are the <emphasis>Translation Table Manager</emphasis> (TTM) and the
Packit Service 103f6b
            <emphasis>Graphics Execution Manager</emphasis> (GEM). They provide
Packit Service 103f6b
            generic APIs to create, destroy and access buffers from user-space.
Packit Service 103f6b
            However, there are still many differences between the drivers so
Packit Service 103f6b
            driver-depedent code is still needed. Many helpers are provided in
Packit Service 103f6b
            <emphasis>libgbm</emphasis> (Graphics Buffer Manager) from the
Packit Service 103f6b
            <emphasis>mesa-project</emphasis>. For more information on DRM
Packit Service 103f6b
            memory-management, see
Packit Service 103f6b
            <citerefentry><refentrytitle>drm-memory</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
Packit Service 103f6b
    </refsect2>
Packit Service 103f6b
  </refsect1>
Packit Service 103f6b
Packit Service 103f6b
  <refsect1>
Packit Service 103f6b
    <title>Reporting Bugs</title>
Packit Service 103f6b
    <para>Bugs in this manual should be reported to
Packit Service 103f6b
      https://gitlab.freedesktop.org/mesa/drm/-/issues</para>
Packit Service 103f6b
  </refsect1>
Packit Service 103f6b
Packit Service 103f6b
  <refsect1>
Packit Service 103f6b
    <title>See Also</title>
Packit Service 103f6b
    <para>
Packit Service 103f6b
      <citerefentry><refentrytitle>drm-kms</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
Packit Service 103f6b
      <citerefentry><refentrytitle>drm-memory</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
Packit Service 103f6b
      <citerefentry><refentrytitle>drmSetMaster</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
Packit Service 103f6b
      <citerefentry><refentrytitle>drmAuthMagic</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
Packit Service 103f6b
      <citerefentry><refentrytitle>drmAvailable</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
Packit Service 103f6b
      <citerefentry><refentrytitle>drmOpen</refentrytitle><manvolnum>3</manvolnum></citerefentry>
Packit Service 103f6b
    </para>
Packit Service 103f6b
  </refsect1>
Packit Service 103f6b
</refentry>