kmstest: Separate reservation phase from command line parsing

In the new order the planes are not reserved before the whole command
line is parsed. This way we know the color format of the framebuffer
that is going to be on the reserved plane and we can select a plane
that supports the format. After this patch kmstest makes no distinction
between primary and overlay planes if atomic mode setting is
supported. If no plane is specified then a default plane, matching the
screen size is created.

Signed-off-by: Jyri Sarha <jsarha@ti.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
1 file changed
tree: 396fceb999ec1e1162ad49e7f7fe455a3ad6a890
  1. ext/
  2. kms++/
  3. kms++util/
  4. kmscube/
  5. py/
  6. scripts/
  7. utils/
  8. .gitignore
  9. .gitmodules
  10. .travis.yml
  11. CMakeLists.txt
  12. LICENSE
  13. LTO.cmake
  14. README.md
  15. TODO
README.md

Build Status

kms++ - C++ library for kernel mode setting

kms++ is a C++11 library for kernel mode setting.

Also included are some simple utilities for KMS and python bindings for kms++.

Utilities

  • kmstest - set modes and planes and show test pattern on crtcs/planes, and test page flips
  • kmsprint - print information about DRM objects
  • kmsview - view raw images
  • kmscube - rotating 3D cube on crtcs/planes
  • kmscapture - show captured frames from a camera on screen

Dependencies:

  • libdrm
  • Python 3.x (for python bindings)

Build instructions:

To build the Python bindings you need to set up the git-submodule for pybind11:

git submodule update --init

And to compile:

$ mkdir build
$ cd build
$ cmake ..
$ make -j4

Cross compiling instructions:

Directions for cross compiling depend on your environment.

These are for mine with buildroot:

$ mkdir build
$ cd build
$ cmake -DCMAKE_TOOLCHAIN_FILE=<buildrootpath>/output/host/usr/share/buildroot/toolchainfile.cmake ..
$ make -j4

Your environment may provide similar toolchainfile. If not, you can create a toolchainfile of your own, something along these lines:

SET(CMAKE_SYSTEM_NAME Linux)

SET(BROOT "<buildroot>/output/")

# specify the cross compiler
SET(CMAKE_C_COMPILER   ${BROOT}/host/usr/bin/arm-buildroot-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER ${BROOT}/host/usr/bin/arm-buildroot-linux-gnueabihf-g++)

# where is the target environment
SET(CMAKE_FIND_ROOT_PATH ${BROOT}/target ${BROOT}/host)

SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Build options

You can use the following cmake flags to control the build. Use -DFLAG=VALUE to set them.

Option nameValuesDefaultNotes
CMAKE_BUILD_TYPERelease/DebugRelease
BUILD_SHARED_LIBSON/OFFOFF
KMSXX_ENABLE_PYTHONON/OFFON
KMSXX_ENABLE_KMSCUBEON/OFFOFF
KMSXX_PYTHON_VERSIONpython3/python2python3;python2Name of the python pkgconfig file

Env variables

You can use the following runtime environmental variables to control the behavior of kms++.

VariableDescription
KMSXX_DISABLE_UNIVERSAL_PLANESSet to disable the use of universal planes
KMSXX_DISABLE_ATOMICSet to disable the use of atomic modesetting

Python notes

You can run the python code directly from the build dir by defining PYTHONPATH env variable. For example:

PYTHONPATH=build/py py/tests/hpd.py