Blame man/drm.xml

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