diff options
author | David Herrmann | 2012-09-28 16:44:20 -0500 |
---|---|---|
committer | Jesse Barnes | 2013-01-09 18:17:07 -0600 |
commit | 0a766a5388ba6ff0983ad5181a5f6644aea8050a (patch) | |
tree | 188596bf35b0367ae56c0a0b812be62883c04aa2 | |
parent | 6b7e45c7516b7fdfe85e7792f82624458dcb2ac6 (diff) | |
download | libdrm-0a766a5388ba6ff0983ad5181a5f6644aea8050a.tar.gz libdrm-0a766a5388ba6ff0983ad5181a5f6644aea8050a.tar.xz libdrm-0a766a5388ba6ff0983ad5181a5f6644aea8050a.zip |
man: add drm.7 overview page
The drm.xml file compiles to drm.7 and is meant as a global overview page
for libdrm. It is targeted to new users of libdrm and redirects to all
other main man-pages.
Signed-off-by: David Herrmann <dh.herrmann@googlemail.com>
Reviewed-by: Jesse Barnes <jbarnes@virtuousgeek.org>
-rw-r--r-- | man/Makefile.am | 1 | ||||
-rw-r--r-- | man/drm.xml | 137 |
2 files changed, 138 insertions, 0 deletions
diff --git a/man/Makefile.am b/man/Makefile.am index b93fdef8..01b56994 100644 --- a/man/Makefile.am +++ b/man/Makefile.am | |||
@@ -5,6 +5,7 @@ | |||
5 | # | 5 | # |
6 | 6 | ||
7 | MANPAGES = \ | 7 | MANPAGES = \ |
8 | drm.7 \ | ||
8 | drmAvailable.3 \ | 9 | drmAvailable.3 \ |
9 | drmHandleEvent.3 \ | 10 | drmHandleEvent.3 \ |
10 | drmModeGetResources.3 | 11 | drmModeGetResources.3 |
diff --git a/man/drm.xml b/man/drm.xml new file mode 100644 index 00000000..5a49fe13 --- /dev/null +++ b/man/drm.xml | |||
@@ -0,0 +1,137 @@ | |||
1 | <?xml version='1.0'?> <!--*-nxml-*--> | ||
2 | <!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" | ||
3 | "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"> | ||
4 | |||
5 | <!-- | ||
6 | Written 2012 by David Herrmann <dh.herrmann@googlemail.com> | ||
7 | Dedicated to the Public Domain | ||
8 | --> | ||
9 | |||
10 | <refentry id="drm"> | ||
11 | <refentryinfo> | ||
12 | <title>Direct Rendering Manager</title> | ||
13 | <productname>libdrm</productname> | ||
14 | <date>September 2012</date> | ||
15 | <authorgroup> | ||
16 | <author> | ||
17 | <contrib>Developer</contrib> | ||
18 | <firstname>David</firstname> | ||
19 | <surname>Herrmann</surname> | ||
20 | <email>dh.herrmann@googlemail.com</email> | ||
21 | </author> | ||
22 | </authorgroup> | ||
23 | </refentryinfo> | ||
24 | |||
25 | <refmeta> | ||
26 | <refentrytitle>drm</refentrytitle> | ||
27 | <manvolnum>7</manvolnum> | ||
28 | </refmeta> | ||
29 | |||
30 | <refnamediv> | ||
31 | <refname>drm</refname> | ||
32 | <refpurpose>Direct Rendering Manager</refpurpose> | ||
33 | </refnamediv> | ||
34 | |||
35 | <refsynopsisdiv> | ||
36 | <funcsynopsis> | ||
37 | <funcsynopsisinfo>#include <xf86drm.h></funcsynopsisinfo> | ||
38 | </funcsynopsis> | ||
39 | </refsynopsisdiv> | ||
40 | |||
41 | <refsect1> | ||
42 | <title>Description</title> | ||
43 | <para>The <emphasis>Direct Rendering Manager</emphasis> (DRM) is a framework | ||
44 | to manage <emphasis>Graphics Processing Units</emphasis> (GPUs). It is | ||
45 | designed to support the needs of complex graphics devices, usually | ||
46 | containing programmable pipelines well suited to 3D graphics | ||
47 | acceleration. Furthermore, it is responsible for memory management, | ||
48 | interrupt handling and DMA to provide a uniform interface to | ||
49 | applications.</para> | ||
50 | |||
51 | <para>In earlier days, the kernel framework was solely used to provide raw | ||
52 | hardware access to priviledged user-space processes which implement | ||
53 | all the hardware abstraction layers. But more and more tasks where | ||
54 | moved into the kernel. All these interfaces are based on | ||
55 | <citerefentry><refentrytitle>ioctl</refentrytitle><manvolnum>2</manvolnum></citerefentry> | ||
56 | commands on the DRM character device. The <emphasis>libdrm</emphasis> | ||
57 | library provides wrappers for these system-calls and many helpers to | ||
58 | simplify the API.</para> | ||
59 | |||
60 | <para>When a GPU is detected, the DRM system loads a driver for the detected | ||
61 | hardware type. Each connected GPU is then presented to user-space via | ||
62 | a character-device that is usually available as | ||
63 | <filename>/dev/dri/card0</filename> and can be accessed with | ||
64 | <citerefentry><refentrytitle>open</refentrytitle><manvolnum>2</manvolnum></citerefentry> | ||
65 | and | ||
66 | <citerefentry><refentrytitle>close</refentrytitle><manvolnum>2</manvolnum></citerefentry>. | ||
67 | However, it still depends on the grapics driver which interfaces are | ||
68 | available on these devices. If an interface is not available, the | ||
69 | syscalls will fail with <literal>EINVAL</literal>.</para> | ||
70 | |||
71 | <refsect2> | ||
72 | <title>Authentication</title> | ||
73 | <para>All DRM devices provide authentication mechanisms. Only a DRM-Master | ||
74 | is allowed to perform mode-setting or modify core state and only one | ||
75 | user can be DRM-Master at a time. See | ||
76 | <citerefentry><refentrytitle>drmSetMaster</refentrytitle><manvolnum>3</manvolnum></citerefentry> | ||
77 | for information on how to become DRM-Master and what the limitations | ||
78 | are. Other DRM users can be authenticated to the DRM-Master via | ||
79 | <citerefentry><refentrytitle>drmAuthMagic</refentrytitle><manvolnum>3</manvolnum></citerefentry> | ||
80 | so they can perform buffer allocations and rendering.</para> | ||
81 | </refsect2> | ||
82 | |||
83 | <refsect2> | ||
84 | <title>Mode-Setting</title> | ||
85 | <para>Managing connected monitors and displays and changing the current | ||
86 | modes is called <emphasis>Mode-Setting</emphasis>. This is | ||
87 | restricted to the current DRM-Master. Historically, this was | ||
88 | implemented in user-space, but new DRM drivers implement a kernel | ||
89 | interface to perform mode-setting called | ||
90 | <emphasis>Kernel Mode Setting</emphasis> (KMS). If your | ||
91 | hardware-driver supports it, you can use the KMS API provided by | ||
92 | DRM. This includes allocating framebuffers, selecting modes and | ||
93 | managing CRTCs and encoders. See | ||
94 | <citerefentry><refentrytitle>drm-kms</refentrytitle><manvolnum>7</manvolnum></citerefentry> | ||
95 | for more.</para> | ||
96 | </refsect2> | ||
97 | |||
98 | <refsect2> | ||
99 | <title>Memory Management</title> | ||
100 | <para>The most sophisticated tasks for GPUs today is managing memory | ||
101 | objects. Textures, framebuffers, command-buffers and all other kinds | ||
102 | of commands for the GPU have to be stored in memory. The DRM driver | ||
103 | takes care of managing all memory objects, flushing caches, | ||
104 | synchronizing access and providing CPU access to GPU memory. All | ||
105 | memory management is hardware driver dependent. However, two generic | ||
106 | frameworks are available that are used by most DRM drivers. These | ||
107 | are the <emphasis>Translation Table Manager</emphasis> (TTM) and the | ||
108 | <emphasis>Graphics Execution Manager</emphasis> (GEM). They provide | ||
109 | generic APIs to create, destroy and access buffers from user-space. | ||
110 | However, there are still many differences between the drivers so | ||
111 | driver-depedent code is still needed. Many helpers are provided in | ||
112 | <emphasis>libgbm</emphasis> (Graphics Buffer Manager) from the | ||
113 | <emphasis>mesa-project</emphasis>. For more information on DRM | ||
114 | memory-management, see | ||
115 | <citerefentry><refentrytitle>drm-memory</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para> | ||
116 | </refsect2> | ||
117 | </refsect1> | ||
118 | |||
119 | <refsect1> | ||
120 | <title>Reporting Bugs</title> | ||
121 | <para>Bugs in this manual should be reported to | ||
122 | http://bugs.freedesktop.org under the "Mesa" product, with "Other" or | ||
123 | "libdrm" as the component.</para> | ||
124 | </refsect1> | ||
125 | |||
126 | <refsect1> | ||
127 | <title>See Also</title> | ||
128 | <para> | ||
129 | <citerefentry><refentrytitle>drm-kms</refentrytitle><manvolnum>7</manvolnum></citerefentry>, | ||
130 | <citerefentry><refentrytitle>drm-memory</refentrytitle><manvolnum>7</manvolnum></citerefentry>, | ||
131 | <citerefentry><refentrytitle>drmSetMaster</refentrytitle><manvolnum>3</manvolnum></citerefentry>, | ||
132 | <citerefentry><refentrytitle>drmAuthMagic</refentrytitle><manvolnum>3</manvolnum></citerefentry>, | ||
133 | <citerefentry><refentrytitle>drmAvailable</refentrytitle><manvolnum>3</manvolnum></citerefentry>, | ||
134 | <citerefentry><refentrytitle>drmOpen</refentrytitle><manvolnum>3</manvolnum></citerefentry> | ||
135 | </para> | ||
136 | </refsect1> | ||
137 | </refentry> | ||