|
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-kms">
|
|
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-kms</refentrytitle>
|
|
Packit |
631bab |
<manvolnum>7</manvolnum>
|
|
Packit |
631bab |
</refmeta>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refnamediv>
|
|
Packit |
631bab |
<refname>drm-kms</refname>
|
|
Packit |
631bab |
<refpurpose>Kernel Mode-Setting</refpurpose>
|
|
Packit |
631bab |
</refnamediv>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsynopsisdiv>
|
|
Packit |
631bab |
<funcsynopsis>
|
|
Packit |
631bab |
<funcsynopsisinfo>#include <xf86drm.h></funcsynopsisinfo>
|
|
Packit |
631bab |
<funcsynopsisinfo>#include <xf86drmMode.h></funcsynopsisinfo>
|
|
Packit |
631bab |
</funcsynopsis>
|
|
Packit |
631bab |
</refsynopsisdiv>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsect1>
|
|
Packit |
631bab |
<title>Description</title>
|
|
Packit |
631bab |
<para>Each DRM device provides access to manage which monitors and displays
|
|
Packit |
631bab |
are currently used and what frames to be displayed. This task is
|
|
Packit |
631bab |
called <emphasis>Kernel Mode-Setting</emphasis> (KMS). Historically,
|
|
Packit |
631bab |
this was done in user-space and called
|
|
Packit |
631bab |
<emphasis>User-space Mode-Setting</emphasis> (UMS). Almost all
|
|
Packit |
631bab |
open-source drivers now provide the KMS kernel API to do this in the
|
|
Packit |
631bab |
kernel, however, many non-open-source binary drivers from different
|
|
Packit |
631bab |
vendors still do not support this. You can use
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSettingSupported</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
to check whether your driver supports this. To understand how KMS
|
|
Packit |
631bab |
works, we need to introduce 5 objects: <emphasis>CRTCs</emphasis>,
|
|
Packit |
631bab |
<emphasis>Planes</emphasis>, <emphasis>Encoders</emphasis>,
|
|
Packit |
631bab |
<emphasis>Connectors</emphasis> and
|
|
Packit |
631bab |
<emphasis>Framebuffers</emphasis>.
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<variablelist>
|
|
Packit |
631bab |
<varlistentry>
|
|
Packit |
631bab |
<term>CRTCs</term>
|
|
Packit |
631bab |
<listitem>
|
|
Packit |
631bab |
<para>A <emphasis>CRTC</emphasis> short for
|
|
Packit |
631bab |
<emphasis>CRT Controller</emphasis> is an abstraction
|
|
Packit |
631bab |
representing a part of the chip that contains a pointer to a
|
|
Packit |
631bab |
scanout buffer. Therefore, the number of CRTCs available
|
|
Packit |
631bab |
determines how many independent scanout buffers can be active
|
|
Packit |
631bab |
at any given time. The CRTC structure contains several fields
|
|
Packit |
631bab |
to support this: a pointer to some video memory (abstracted as
|
|
Packit |
631bab |
a frame-buffer object), a list of driven connectors, a display
|
|
Packit |
631bab |
mode and an (x, y) offset into the video memory to support
|
|
Packit |
631bab |
panning or configurations where one piece of video memory
|
|
Packit |
631bab |
spans multiple CRTCs. A CRTC is the central point where
|
|
Packit |
631bab |
configuration of displays happens. You select which objects to
|
|
Packit |
631bab |
use, which modes and which parameters and then configure each
|
|
Packit |
631bab |
CRTC via
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeCrtcSet</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
to drive the display devices.</para>
|
|
Packit |
631bab |
</listitem>
|
|
Packit |
631bab |
</varlistentry>
|
|
Packit |
631bab |
<varlistentry>
|
|
Packit |
631bab |
<term>Planes</term>
|
|
Packit |
631bab |
<listitem>
|
|
Packit |
631bab |
<para>A <emphasis>plane</emphasis> respresents an image source that
|
|
Packit |
631bab |
can be blended with or overlayed on top of a CRTC during the
|
|
Packit |
631bab |
scanout process. Planes are associated with a frame-buffer to
|
|
Packit |
631bab |
crop a portion of the image memory (source) and optionally
|
|
Packit |
631bab |
scale it to a destination size. The result is then blended
|
|
Packit |
631bab |
with or overlayed on top of a CRTC. Planes are not provided by
|
|
Packit |
631bab |
all hardware and the number of available planes is limited. If
|
|
Packit |
631bab |
planes are not available or if not enough planes are
|
|
Packit |
631bab |
available, the user should fall back to normal software
|
|
Packit |
631bab |
blending (via GPU or CPU).</para>
|
|
Packit |
631bab |
</listitem>
|
|
Packit |
631bab |
</varlistentry>
|
|
Packit |
631bab |
<varlistentry>
|
|
Packit |
631bab |
<term>Encoders</term>
|
|
Packit |
631bab |
<listitem>
|
|
Packit |
631bab |
<para>An <emphasis>encoder</emphasis> takes pixel data from a CRTC
|
|
Packit |
631bab |
and converts it to a format suitable for any attached
|
|
Packit |
631bab |
connectors. On some devices, it may be possible to have a CRTC
|
|
Packit |
631bab |
send data to more than one encoder. In that case, both
|
|
Packit |
631bab |
encoders would receive data from the same scanout buffer,
|
|
Packit |
631bab |
resulting in a <emphasis>cloned</emphasis> display
|
|
Packit |
631bab |
configuration across the connectors attached to each
|
|
Packit |
631bab |
encoder.</para>
|
|
Packit |
631bab |
</listitem>
|
|
Packit |
631bab |
</varlistentry>
|
|
Packit |
631bab |
<varlistentry>
|
|
Packit |
631bab |
<term>Connectors</term>
|
|
Packit |
631bab |
<listitem>
|
|
Packit |
631bab |
<para>A <emphasis>connector</emphasis> is the final destination of
|
|
Packit |
631bab |
pixel-data on a device, and usually connects directly to an
|
|
Packit |
631bab |
external display device like a monitor or laptop panel. A
|
|
Packit |
631bab |
connector can only be attached to one encoder at a time. The
|
|
Packit |
631bab |
connector is also the structure where information about the
|
|
Packit |
631bab |
attached display is kept, so it contains fields for display
|
|
Packit |
631bab |
data, <emphasis>EDID</emphasis> data,
|
|
Packit |
631bab |
<emphasis>DPMS</emphasis> and
|
|
Packit |
631bab |
<emphasis>connection status</emphasis>, and information about
|
|
Packit |
631bab |
modes supported on the attached displays.</para>
|
|
Packit |
631bab |
</listitem>
|
|
Packit |
631bab |
</varlistentry>
|
|
Packit |
631bab |
<varlistentry>
|
|
Packit |
631bab |
<term>Framebuffers</term>
|
|
Packit |
631bab |
<listitem>
|
|
Packit |
631bab |
<para><emphasis>Framebuffers</emphasis> are abstract memory objects
|
|
Packit |
631bab |
that provide a source of pixel data to scanout to a CRTC.
|
|
Packit |
631bab |
Applications explicitly request the creation of framebuffers
|
|
Packit |
631bab |
and can control their behavior. Framebuffers rely on the
|
|
Packit |
631bab |
underneath memory manager for low-level memory operations.
|
|
Packit |
631bab |
When creating a framebuffer, applications pass a memory handle
|
|
Packit |
631bab |
through the API which is used as backing storage. The
|
|
Packit |
631bab |
framebuffer itself is only an abstract object with no data. It
|
|
Packit |
631bab |
just refers to memory buffers that must be created with the
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drm-memory</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
|
Packit |
631bab |
API.</para>
|
|
Packit |
631bab |
</listitem>
|
|
Packit |
631bab |
</varlistentry>
|
|
Packit |
631bab |
</variablelist>
|
|
Packit |
631bab |
</para>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsect2>
|
|
Packit |
631bab |
<title>Mode-Setting</title>
|
|
Packit |
631bab |
<para>Before mode-setting can be performed, an application needs to call
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmSetMaster</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
to become <emphasis>DRM-Master</emphasis>. It then has exclusive
|
|
Packit |
631bab |
access to the KMS API. A call to
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetResources</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
returns a list of <emphasis>CRTCs</emphasis>,
|
|
Packit |
631bab |
<emphasis>Connectors</emphasis>, <emphasis>Encoders</emphasis> and
|
|
Packit |
631bab |
<emphasis>Planes</emphasis>.</para>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<para>Normal procedure now includes: First, you select which connectors
|
|
Packit |
631bab |
you want to use. Users are mostly interested in which monitor or
|
|
Packit |
631bab |
display-panel is active so you need to make sure to arrange them in
|
|
Packit |
631bab |
the correct logical order and select the correct ones to use. For
|
|
Packit |
631bab |
each connector, you need to find a CRTC to drive this connector. If
|
|
Packit |
631bab |
you want to clone output to two or more connectors, you may use a
|
|
Packit |
631bab |
single CRTC for all cloned connectors (if the hardware supports
|
|
Packit |
631bab |
this). To find a suitable CRTC, you need to iterate over the list of
|
|
Packit |
631bab |
encoders that are available for each connector. Each encoder
|
|
Packit |
631bab |
contains a list of CRTCs that it can work with and you simply select
|
|
Packit |
631bab |
one of these CRTCs. If you later program the CRTC to control a
|
|
Packit |
631bab |
connector, it automatically selects the best encoder. However, this
|
|
Packit |
631bab |
procedure is needed so your CRTC has at least one working encoder
|
|
Packit |
631bab |
for the selected connector. See the <emphasis>Examples</emphasis>
|
|
Packit |
631bab |
section below for more information.</para>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<para>All valid modes for a connector can be retrieved with a call to
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetConnector</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
You need to select the mode you want to use and save it. The first
|
|
Packit |
631bab |
mode in the list is the default mode with the highest resolution
|
|
Packit |
631bab |
possible and often a suitable choice.</para>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<para>After you have a working connector+CRTC+mode combination, you need
|
|
Packit |
631bab |
to create a framebuffer that is used for scanout. Memory buffer
|
|
Packit |
631bab |
allocation is driver-depedent and described in
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drm-memory</refentrytitle><manvolnum>7</manvolnum></citerefentry>.
|
|
Packit |
631bab |
You need to create a buffer big enough for your selected mode. Now
|
|
Packit |
631bab |
you can create a framebuffer object that uses your memory-buffer as
|
|
Packit |
631bab |
scanout buffer. You can do this with
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeAddFB</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
and
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeAddFB2</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<para>As a last step, you want to program your CRTC to drive your selected
|
|
Packit |
631bab |
connector. You can do this with a call to
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetCrtc</refentrytitle><manvolnum>3</manvolnum></citerefentry>.</para>
|
|
Packit |
631bab |
</refsect2>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsect2>
|
|
Packit |
631bab |
<title>Page-Flipping</title>
|
|
Packit |
631bab |
<para>A call to
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetCrtc</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
is executed immediately and forces the CRTC to use the new scanout
|
|
Packit |
631bab |
buffer. If you want smooth-transitions without tearing, you probably
|
|
Packit |
631bab |
use double-buffering. You need to create one framebuffer object for
|
|
Packit |
631bab |
each buffer you use. You can then call
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetCrtc</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
on the next buffer to flip. If you want to synchronize your flips
|
|
Packit |
631bab |
with <emphasis>vertical-blanks</emphasis>, you can use
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModePageFlip</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
which schedules your page-flip for the next
|
|
Packit |
631bab |
<emphasis>vblank</emphasis>.</para>
|
|
Packit |
631bab |
</refsect2>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsect2>
|
|
Packit |
631bab |
<title>Planes</title>
|
|
Packit |
631bab |
<para>Planes are controlled independently from CRTCs. That is, a call to
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetCrtc</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
does not affect planes. Instead, you need to call
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetPlane</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
to configure a plane. This requires the plane ID, a CRTC, a
|
|
Packit |
631bab |
framebuffer and offsets into the plane-framebuffer and the
|
|
Packit |
631bab |
CRTC-framebuffer. The CRTC then blends the content from the plane
|
|
Packit |
631bab |
over the CRTC framebuffer buffer during scanout. As this does not
|
|
Packit |
631bab |
involve any software-blending, it is way faster than traditional
|
|
Packit |
631bab |
blending. However, plane resources are limited. See
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetPlaneResources</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
for more information.</para>
|
|
Packit |
631bab |
</refsect2>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsect2>
|
|
Packit |
631bab |
<title>Cursors</title>
|
|
Packit |
631bab |
<para>Similar to planes, many hardware also supports cursors. A cursor is
|
|
Packit |
631bab |
a very small buffer with an image that is blended over the CRTC
|
|
Packit |
631bab |
framebuffer. You can set a different cursor for each CRTC with
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetCursor</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
and move it on the screen with
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeMoveCursor</refentrytitle><manvolnum>3</manvolnum></citerefentry>.
|
|
Packit |
631bab |
This allows to move the cursor on the screen without rerendering. If
|
|
Packit |
631bab |
no hardware cursors are supported, you need to rerender for each
|
|
Packit |
631bab |
frame the cursor is moved.</para>
|
|
Packit |
631bab |
</refsect2>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
</refsect1>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsect1>
|
|
Packit |
631bab |
<title>Examples</title>
|
|
Packit |
631bab |
<para>Some examples of how basic mode-setting can be done. See the man-page
|
|
Packit |
631bab |
of each DRM function for more information.</para>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<refsect2>
|
|
Packit |
631bab |
<title>CRTC/Encoder Selection</title>
|
|
Packit |
631bab |
<para>If you retrieved all display configuration information via
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetResources</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
as <structname>drmModeRes</structname> *<varname>res</varname>,
|
|
Packit |
631bab |
selected a connector from the list in
|
|
Packit |
631bab |
<varname>res</varname>-><structfield>connectors</structfield>
|
|
Packit |
631bab |
and retrieved the connector-information as
|
|
Packit |
631bab |
<structname>drmModeConnector</structname> *<varname>conn</varname>
|
|
Packit |
631bab |
via
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetConnector</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
then this example shows, how you can find a suitable CRTC id to
|
|
Packit |
631bab |
drive this connector. This function takes a file-descriptor to the
|
|
Packit |
631bab |
DRM device (see
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmOpen</refentrytitle><manvolnum>3</manvolnum></citerefentry>)
|
|
Packit |
631bab |
as <varname>fd</varname>, a pointer to the retrieved resources as
|
|
Packit |
631bab |
<varname>res</varname> and a pointer to the selected connector as
|
|
Packit |
631bab |
<varname>conn</varname>. It returns an integer smaller than 0 on
|
|
Packit |
631bab |
failure, otherwise, a valid CRTC id is returned.</para>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
<programlisting>
|
|
Packit |
631bab |
static int modeset_find_crtc(int fd, drmModeRes *res, drmModeConnector *conn)
|
|
Packit |
631bab |
{
|
|
Packit |
631bab |
drmModeEncoder *enc;
|
|
Packit |
631bab |
unsigned int i, j;
|
|
Packit |
631bab |
|
|
Packit |
631bab |
/* iterate all encoders of this connector */
|
|
Packit |
631bab |
for (i = 0; i < conn->count_encoders; ++i) {
|
|
Packit |
631bab |
enc = drmModeGetEncoder(fd, conn->encoders[i]);
|
|
Packit |
631bab |
if (!enc) {
|
|
Packit |
631bab |
/* cannot retrieve encoder, ignoring... */
|
|
Packit |
631bab |
continue;
|
|
Packit |
631bab |
}
|
|
Packit |
631bab |
|
|
Packit |
631bab |
/* iterate all global CRTCs */
|
|
Packit |
631bab |
for (j = 0; j < res->count_crtcs; ++j) {
|
|
Packit |
631bab |
/* check whether this CRTC works with the encoder */
|
|
Packit |
631bab |
if (!(enc->possible_crtcs & (1 << j)))
|
|
Packit |
631bab |
continue;
|
|
Packit |
631bab |
|
|
Packit |
631bab |
|
|
Packit |
631bab |
/* Here you need to check that no other connector
|
|
Packit |
631bab |
* currently uses the CRTC with id "crtc". If you intend
|
|
Packit |
631bab |
* to drive one connector only, then you can skip this
|
|
Packit |
631bab |
* step. Otherwise, simply scan your list of configured
|
|
Packit |
631bab |
* connectors and CRTCs whether this CRTC is already
|
|
Packit |
631bab |
* used. If it is, then simply continue the search here. */
|
|
Packit |
631bab |
if (res->crtcs[j] "is unused") {
|
|
Packit |
631bab |
drmModeFreeEncoder(enc);
|
|
Packit |
631bab |
return res->crtcs[j];
|
|
Packit |
631bab |
}
|
|
Packit |
631bab |
}
|
|
Packit |
631bab |
|
|
Packit |
631bab |
drmModeFreeEncoder(enc);
|
|
Packit |
631bab |
}
|
|
Packit |
631bab |
|
|
Packit |
631bab |
/* cannot find a suitable CRTC */
|
|
Packit |
631bab |
return -ENOENT;
|
|
Packit |
631bab |
}
|
|
Packit |
631bab |
</programlisting>
|
|
Packit |
631bab |
|
|
Packit |
631bab |
</refsect2>
|
|
Packit |
631bab |
|
|
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</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drm-memory</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetResources</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetConnector</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetEncoder</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetCrtc</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetCrtc</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetFB</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeAddFB</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeAddFB2</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeRmFB</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModePageFlip</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetPlaneResources</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeGetPlane</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetPlane</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeSetCursor</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmModeMoveCursor</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmSetMaster</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmAvailable</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmCheckModesettingSupported</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
|
|
Packit |
631bab |
<citerefentry><refentrytitle>drmOpen</refentrytitle><manvolnum>3</manvolnum></citerefentry>
|
|
Packit |
631bab |
</para>
|
|
Packit |
631bab |
</refsect1>
|
|
Packit |
631bab |
</refentry>
|