Go to file
Pekka Paalanen 23ab7159d2 protocol: add linux_dmabuf extension (v3)
An experimental (hence the 'z' prefix) linux_dmabuf Wayland protocol
extension for creating dmabuf-based wl_buffers in a generic manner.

This does not include proper dmabuf metadata negotiation because
there is no way to communicate all dmabuf constraints from the
compositor to a client before-hand. The client has to create a
wl_buffer wrapping one or more dmabuf buffers and then listen at
the feedback object returned to know if the operation was successful.

RFCv1 changes (after a first draft without code):
- some renames of interfaces and argument, no semantic changes
- added destructor protocol to dmabuf_batch
- added feedback interface for buffer creation

v2 changes:
- use drm_fourcc.h as authoritative source for format codes
- add support for the 64-bit layout qualifier and y-inverted dmabufs
- simplify the 'add' request (no need to preserve fd numerical id)
- add explicit plane index in the 'add' request
- integrate the 'feedback' object events to the batch interface
- rename 'create_buffer' to 'create' and move it into the batch interface
- add requirements needed from the graphics stack and clients
- improve existing errors and add batch error codes
- removed error codes from the global interface
- improve documentation for arguments, enums, etc.
- rename dmabuf_batch to zlinux_buffer_params
- The y-inverted property makes more sense as a whole buffer property.
  Y-flipping individual planes of the same buffer object is hardly useful.
  The y-invert is also converted into a flag, so we may add more flags
  later.
- add flags for interlaced buffer content

v3 changes:
- Apply Daniel Vetter's comments about wording on coherency.

Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
Signed-off-by: Louis-Francis Ratté-Boulianne <lfrb@collabora.com>
Reviewed-by: Daniel Stone <daniels@collabora.com>
Acked-by: Benjamin Gaignard <benjamin.gaignard@linaro.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
2015-08-14 15:49:53 +03:00
clients Coding style fixes 2015-08-07 12:01:22 -07:00
data data: Update boilerplate from MIT X11 license to MIT Expat license 2015-06-15 13:04:18 -07:00
desktop-shell input: add a weston_pointer_clear_focus() helper function 2015-08-06 16:28:30 +01:00
doc/doxygen Adding doxygen setup and info for the testing framework. 2015-07-17 13:28:02 +03:00
fullscreen-shell fullscreen-shell: Fix modeset on transformed outputs 2015-08-07 12:23:17 -07:00
ivi-shell Coding style fixes 2015-08-07 12:01:22 -07:00
m4 weston-build: Fix aclocal error during autogen.sh 2014-06-21 10:33:21 -07:00
man desktop-shell: remove screensaver support 2015-06-22 15:19:39 +03:00
protocol protocol: add linux_dmabuf extension (v3) 2015-08-14 15:49:53 +03:00
shared log: Open log file CLOEXEC so child processes don't get the fd 2015-07-16 19:28:36 -07:00
src weston-launch: On error putenv returns a non-zero value 2015-08-10 15:28:46 -07:00
tests Coding style fixes 2015-08-07 12:01:22 -07:00
tools/zunitc Coding style fixes 2015-08-07 12:01:22 -07:00
wcap wcap: Prefer quote form of include for config.h 2015-06-15 13:04:19 -07:00
xwayland Coding style fixes 2015-08-07 12:01:22 -07:00
.gitignore .gitignore: ignore doxygen generated files v2 2015-07-31 15:46:18 -07:00
COPYING COPYING: Specify origin of the library 2015-06-15 13:04:19 -07:00
Makefile.am protocol: add linux_dmabuf extension (v3) 2015-08-14 15:49:53 +03:00
README Adding doxygen setup and info for the testing framework. 2015-07-17 13:28:02 +03:00
autogen.sh Update autotools configuration 2010-11-06 21:04:03 -04:00
configure.ac Adding doxygen setup and info for the testing framework. 2015-07-17 13:28:02 +03:00
notes.txt notes: Don't manipulate lists while tranversing the list 2015-04-14 13:43:06 -07:00
releasing.txt releasing: Convert tabs to spacing for better formatting 2015-05-27 23:55:08 -07:00
weston.ini.in desktop-shell: remove screensaver support 2015-06-22 15:19:39 +03:00

README

			Weston
			======

Weston is the reference implementation of a Wayland compositor, and a
useful compositor in its own right.  Weston has various backends that
lets it run on Linux kernel modesetting and evdev input as well as
under X11.  Weston ships with a few example clients, from simple
clients that demonstrate certain aspects of the protocol to more
complete clients and a simplistic toolkit.  There is also a quite
capable terminal emulator (weston-terminal) and an toy/example desktop
shell.  Finally, weston also provides integration with the Xorg server
and can pull X clients into the Wayland desktop and act as a X window
manager.

Refer to http://wayland.freedesktop.org/building.html for building
weston and its dependencies.

The test suite can be invoked via `make check`; see
http://wayland.freedesktop.org/testing.html for additional details.

Developer documentation can be built via `make doc`. Output will be in
the build root under

docs/developer/html/index.html
docs/tools/html/index.html



			Libweston
			=========

Libweston is an effort to separate the re-usable parts of Weston into
a library. Libweston provides most of the boring and tedious bits of
correctly implementing core Wayland protocols and interfacing with
input and output systems, so that people who just want to write a new
"Wayland window manager" (WM) or a small desktop environment (DE) can
focus on the WM part.

Libweston was first introduced in Weston 1.9, and is expected to
continue evolving through many Weston releases before it achieves a
stable API and feature completeness.


API (in)stability and parallel installability
---------------------------------------------

As libweston's API surface is huge, it is impossible to get it right
in one go. Therefore developers reserve the right to break the API
between every 1.x.0 Weston release (minor version bumps), just like
Weston's plugin API does. For git snapshots of the master branch, the
API can break any time without warning or version bump.

Libweston API or ABI will not be broken between Weston's stable
releases 1.x.0 and 1.x.y, where y < 90.

To make things tolerable for libweston users despite ABI breakages,
libweston is designed to be perfectly parallel-installable. An
ABI-version is defined for libweston, and it is bumped for releases as
needed. Different ABI-versions of libweston can be installed in
parallel, so that external projects can easily depend on a particular
ABI-version, and they do not have to fight over which ABI-version is
installed in a user's system. This allows a user to install many
different compositors each requiring a different libweston ABI-version
without tricks or conflicts.

Note, that versions of Weston itself will not be parallel-installable,
only libweston is.

For more information about parallel installability, see
http://ometer.com/parallel.html


Libweston design goals
----------------------

The high-level goal of libweston is that what used to be shell plugins
will be main executables. Instead of launching 'weston' with various
arguments to choose the shell, one would be launching
'weston-desktop', 'weston-ivi', 'orbital', etc. The main executable
(the hosting program) links to libweston for a fundamental compositor
implementation. Libweston is also intended for use by other projects
who want to create new "Wayland WMs".

The libweston API/ABI will be separating the shell logic and main
program from the rest of the "Weston compositor" (libweston
internals).

Details:

- All configuration and user interfaces will be outside of libweston.
  This includes command line parsing, configuration files, and runtime
  (graphical) UI.

- The hosting program (main executable) will be in full control of all
  libweston options. Libweston should not have user settable options
  that would work behind the hosting program's back, except perhaps
  debugging features and such.

- Signal handling will be outside of libweston.

- Child process execution and management will be outside of libweston.

- The different backends (drm, fbdev, x11, etc) will be an internal
  detail of libweston. Libweston will not support third party
  backends. However, hosting programs need to handle
  backend-specific configuration due to differences in behaviour and
  available features.

- Renderers will be libweston internal details too, though again the
  hosting program may affect the choice of renderer if the backend
  allows, and maybe set renderer-specific options.

- plugin design ???

- xwayland ???

There are still many more details to be decided.


For packagers
-------------

Always build Weston with --with-cairo=image.

The Weston project is (will be) intended to be split into several
binary packages, each with its own dependencies. The maximal split
would be roughly like this:

- libweston (minimal dependencies):
	+ headless backend
	+ wayland backend

- gl-renderer (depends on GL libs etc.)

- drm-backend (depends on libdrm, libgbm, libudev, libinput, ...)

- x11-backend (depends of X11/xcb libs)

- xwayland (depends on X11/xcb libs)

- rpi-backend (depends on DispmanX, libudev, ...)

- fbdev-backend (depends on libudev...)

- rdp-backend (depends on freerdp)
	+ screen-share

- weston (the executable, not parallel-installable):
	+ desktop shell
	+ ivi-shell
	+ fullscreen shell
	+ weston-info, weston-terminal, etc. we install by default

- weston demos (not parallel-installable)
	+ weston-simple-* programs
	+ possibly all the programs we build but do not install by
	  default

- and possibly more...

Everything should be parallel-installable across libweston
ABI-versions, except those explicitly mentioned.

Weston's build may not sanely allow this yet, but this is the
intention.