Go to file
Rob Clark 419a154dbe freedreno: support growable cmdstream buffers
The issue that userspace needed to solve is that there is ~two orders of
magnitude size difference in cmdstream buffers (both for gmem commands
and for draw commands), and that the previous practice of allocating
worst-case sizes is quite wasteful.  Previously a submit would be
constructed (for example) like:

  CMD  TARGET  DESCRIPTION
   g0    N     gmem/tiling commands
   b0    Y     binning commands
   d0    Y     draw commands

Which, after the one non-IB-target cmd buffer is inserted into the
kernel controlled ringbuffer, looks like (not to scale):

         b0:           d0:
        +-----+       +-----+
   IB1  | ... |       | ... |
        +-----+       +-----+
         ^             ^
         |             |
         +-----+       +-+---------+
         g0:   |         |         |
        +----+----+----+----+----+----+----
   IB0  | .. | IB | .. | IB | .. | IB | ...
        +----+----+----+----+----+----+----
         ^              tile0     tile1
         |
         +-----------+
  userspace          |
  ~~~~~~~~~~~~~~~~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  kernel             |
               ----+----+----
   ringbuffer  ... | IB | ...
               ----+----+----

Now, multiple physical cmdstream buffers per fd_ringbuffer are supported,
so this becomes:

  CMD  TARGET  DESCRIPTION
   g0    N
   ...   N     gmem/tiling commands
   gN    N
   b0    Y
   ...   Y     binning commands
   bN    Y
   d0    Y
   ...   Y     draw commands
   dN    Y

Which, after the non-IB-target cmd buffers (g0..gN) are inserted into
the kernel controlled ringbuffer, looks like:

             b0:      b1            d0:      d1
            +-----+  +-----+        +-----+  +-----+
       IB1  | ... |  | ... | ...    | ... |  | ... | ...
            +-----+  +-----+        +-----+  +-----+
             ^        ^              ^        ^
             |        |              |        |
             |        +-+            |  +-----+------+
             +-----+    |            |  |            |
                   |    |         +--+----------+    |
             g0:   |    |         |     |       |    |
            +----+----+----+----+----+----+---+----+----+----
       IB0  | .. | IB | IB | .. | IB | IB |.. | IB | IB |...
            +----+----+----+----+----+----+---+----+----+----
             ^                   tile0         tile1
             | to b0  to b1
             |   |      |          to|d0    to|d1
             |   |      +----+       |      +-+-----------+
             |   |           |       |      |             |
             |   +------+    |       +-+-------------+    |
             |    g1:   |    |         |    |        |    |
             |   +----+----+----+----+----+----+---+----+----+----
       IB0   |   | .. | IB | IB | .. | IB | IB |.. | IB | IB |...
             |   +----+----+----+----+----+----+---+----+----+----
             |    ^                   tileX         tileY
             |    |
             |    +-----------+
             +-----------+    |
      userspace          |    |
      ~~~~~~~~~~~~~~~~~~~|~~~~|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      kernel             |    |
                   ----+----+----+----
       ringbuffer  ... | IB | IB | ...
                   ----+----+----+----

Signed-off-by: Rob Clark <robclark@freedesktop.org>
2016-07-20 19:42:21 -04:00
amdgpu Android: strip out header files from sources list 2016-07-06 16:58:38 +01:00
exynos exynos: Fix spelling mistake 2016-04-07 18:15:52 +01:00
freedreno freedreno: support growable cmdstream buffers 2016-07-20 19:42:21 -04:00
include/drm vc4: Update kernel headers for getparam addition. 2016-07-15 15:38:12 -07:00
intel Android: strip out header files from sources list 2016-07-06 16:58:38 +01:00
libkms pull in sys/sysmacros.h when available 2016-07-06 16:58:38 +01:00
m4 build: Update autotools configuration 2011-03-21 13:43:43 +00:00
man man: remove .man_fixup workaround 2015-07-29 18:04:15 +01:00
nouveau Android: strip out header files from sources list 2016-07-06 16:58:38 +01:00
omap omap: Initialize DMA BUF file descriptor to -1 2015-08-26 15:15:54 +02:00
radeon Android: strip out header files from sources list 2016-07-06 16:58:38 +01:00
tegra drm: remove drm_public macro 2015-04-28 11:19:15 +01:00
tests tests/drmdevice: be move verbose when using open() 2016-07-20 23:44:40 +01:00
vc4 vc4: Add headers and .pc files for VC4 userspace development. 2016-02-03 11:29:52 -08:00
.gitignore gitignore: ignore kms-steal-crtc and kms-universal-planes 2016-03-28 22:12:54 +01:00
Android.mk Android: strip out header files from sources list 2016-07-06 16:58:38 +01:00
CleanSpec.mk tests: Split helpers into library 2015-12-18 17:43:40 +00:00
Makefile.am vc4: Add headers and .pc files for VC4 userspace development. 2016-02-03 11:29:52 -08:00
Makefile.sources vc4: Add the DRM header file. 2016-02-03 11:29:44 -08:00
README Update README 2009-11-20 17:08:28 -05:00
RELEASING RELEASING: Fix annouce typo 2015-03-20 15:55:23 +00:00
autogen.sh autogen.sh: handle out-of-tree invokation 2015-03-17 22:35:51 +00:00
configure.ac Bump version to 2.4.69 for release. 2016-07-20 11:43:04 -07:00
libdrm.pc.in Revert "Fix pkgconfig includes for /usr/include/drm" 2010-04-09 16:33:38 -04:00
libdrm_lists.h lists: add nicer+unsafe foreach, and list join macros 2012-04-14 02:47:04 +10:00
libdrm_macros.h drm: remove drm_public macro 2015-04-28 11:19:15 +01:00
util_double_list.h list: add first/last entry macros 2016-07-20 19:42:21 -04:00
util_math.h util_math: add MAX3 macro 2015-09-21 17:42:51 +01:00
xf86atomic.h Fix SunOS/NetBSD atomic macro 2015-09-21 17:43:14 +01:00
xf86drm.c drm: fix drmFreeDevices memory leak on multi GPU setups 2016-07-20 23:44:40 +01:00
xf86drm.h xf86drm: add drm{Get,Free}Device 2015-09-21 17:43:08 +01:00
xf86drmHash.c drm: use correct printf modifiers 2015-04-05 15:33:33 +01:00
xf86drmHash.h tests/hash: extract test out of xf86drmHash.c 2015-04-05 15:19:42 +01:00
xf86drmMode.c xf86drm: Fix spelling mistakes 2016-04-07 18:16:01 +01:00
xf86drmMode.h remove usage of 'c_plusplus' preprocessor macro 2015-08-10 11:25:39 +03:00
xf86drmRandom.c drm: replace HASH_DEBUG with DEBUG 2015-04-05 15:33:33 +01:00
xf86drmRandom.h tests/random: extract test out of xf86drmRandom.c 2015-04-05 15:33:33 +01:00
xf86drmSL.c drm: replace HASH_DEBUG with DEBUG 2015-04-05 15:33:33 +01:00

README

libdrm - userspace library for drm

This  is libdrm,  a userspace  library for  accessing the  DRM, direct
rendering  manager, on  Linux,  BSD and  other  operating systes  that
support the  ioctl interface.  The library  provides wrapper functions
for the  ioctls to avoid  exposing the kernel interface  directly, and
for chipsets with drm memory manager, support for tracking relocations
and  buffers.   libdrm  is  a  low-level library,  typically  used  by
graphics drivers  such as the Mesa  DRI drivers, the  X drivers, libva
and  similar projects.  New  functionality in  the kernel  DRM drivers
typically requires  a new  libdrm, but a  new libdrm will  always work
with an older kernel.


Compiling
---------

libdrm  is  a  standard  autotools  packages and  follows  the  normal
configure, build  and install steps.   The first step is  to configure
the package, which is done by running the configure shell script:

	./configure

By default, libdrm  will install into the /usr/local/  prefix.  If you
want  to  install   this  DRM  to  replace  your   system  copy,  pass
--prefix=/usr and  --exec-prefix=/ to configure.  If  you are building
libdrm  from a  git checkout,  you first  need to  run  the autogen.sh
script.  You can  pass any options to autogen.sh  that you would other
wise  pass to configure,  or you  can just  re-run configure  with the
options you need once autogen.sh finishes.

Next step is to build libdrm:

	make

and once make finishes successfully, install the package using

	make install

If you are install into a system location, you will need to be root to
perform the install step.