[RFC Weston 00/10] Sub-surfaces v2
ppaalanen at gmail.com
Fri Feb 22 07:07:44 PST 2013
this is a new spin of the sub-surfaces Wayland protocol
extension, v2. The v1 was announced in:
Earlier we have already landed some 14 patches of toytoolkit
restructuring, that was done after v1.
The major changes in v2 are:
- Moved protocol from Wayland to Weston. It is easier to handle
in one place, and will be moved into Wayland core once it is
deemed good enough.
- Protocol documentation is updated. The following requests have
been added to the protocol: wl_subcompositor.destroy,
wl_subsurface.destroy, and most importantly
- Clients can now choose between two commit behaviours for
sub-surfaces: parent-cached and independent. These are
explained in the protocol file.
- A totally new demo client presenting sub-surfaces, including
Cairo-image rendered window with a pure EGL/GL widget in a
sub-surface, running independently, but still without glitches
on resize (sans bugs).
The biggest improvement over v1 is that we have some thought-out
commit behaviours. It is possible to resize a window so that all
surfaces stay in sync on screen, and it is also possible to have
sub-surfaces running on their own (i.e. without commit the
parent surface, too).
- Does this commit behaviour satisfy all needs?
- Input events still very much unexplored. The demo just punts
- Clipping and scaling of surface content - this will most
likely be a new orthogonal extension altogether, so not really
- What should wl_subsurface.destroy do? Nothing, or reset the
wl_surface's role? Currently it resets the role, since it was
easy to implement.
- Should sub-surface nesting be allowed? I.e. creation of
sub-sub-surfaces etc. What would be semantics be? I have not
really thought about that. Input dispatching within clients
may be a problem.
- wl_shell and other protocols interact with sub-surfaces, and
all interactions have not been resolved yet.
If I forgot any other design issues, let me know, please.
To do, bugs:
- destroying the wl_surface of a wl_subsurface will prevent
destroying the wl_subsurface, fix this, and adjust the
protocol description accordingly
- double-buffering of sub-surface z-order changes
- a demo client with window decorations stitched from 4
- fix frame throttling in subsurfaces demo
- fix eglSwapInterval in Mesa (krh?)
- subsurfaces demo behaves strangely under the DRM backend of
Weston, debug and fix it. A timestamp issue?
- even with three buffers in a pool, subsurfaces may still run
out of free buffers. When that happens, "all buffers are held
by the server" error message appears, and sub-surfaces may be
out of sync. Related to frame throttling.
- glitched rendering of the GL widget in subsurfaces when Up or
Down key held pressed, might be related to frame throttling.
- fix full-surface alpha for surfaces that have sub-surfaces
- in subsurfaces demo, put the GL widget into its own thread, so
it is truely as concurrent as it can get.
- reimplement the "black surface" in shell as a sub-surface
The new code can be browsed in:
Pekka Paalanen (10):
protocol: add sub-surfaces
compositor: introduce sub-surfaces
tests: add sub-surface protocol tests
compositor: add sub-surfaces to repaint list
shell: keyboard focus and restacking fixes for sub-surfaces
window: implement shm triple-buffering
window: create sub-surfaces
window: implement per-surface redraws
clients: add subsurfaces demo
window: prevent EGL sub-surface deadlock
clients/.gitignore | 3 +
clients/Makefile.am | 12 +
clients/subsurfaces.c | 791 ++++++++++++++++++++++++++++++++++++++++++++++++
clients/window.c | 343 ++++++++++++++++++---
clients/window.h | 14 +
configure.ac | 3 +
protocol/subsurface.xml | 214 +++++++++++++
src/.gitignore | 3 +
src/Makefile.am | 4 +
src/compositor.c | 689 ++++++++++++++++++++++++++++++++++++++++-
src/compositor.h | 59 ++++
src/shell.c | 37 ++-
tests/.gitignore | 3 +
tests/Makefile.am | 9 +-
tests/subsurface-test.c | 327 ++++++++++++++++++++
15 files changed, 2437 insertions(+), 74 deletions(-)
create mode 100644 clients/subsurfaces.c
create mode 100644 protocol/subsurface.xml
create mode 100644 tests/subsurface-test.c
This patch series depends on further patches, so you cannot just
apply this series on top of Weston master. I did not include the
other patches, because they are waiting for a rewrite. Instead,
you can use my Weston branch subsurface-v2 which has everything
in place. You do not need any patches for Wayland, you can just
use master of Wayland upstream.
The following changes since commit a4575634f4a1f63430cfc4da5b7ab757f6c33c1c:
compositor: Rename lock and unlock signals to idle and wake (2013-02-21 21:12:45 -0500)
are available in the git repository at:
for you to fetch changes up to 2b3f13a2cd8ddadd87b5329e400fcddcb460a046:
window: prevent EGL sub-surface deadlock (2013-02-22 15:47:03 +0200)
When you build it, you should configure Weston with
--with-cairo-glesv2 regardless of whether your Cairo actually
has GLESv2. Otherwise the new subsurfaces demo might not be
More information about the wayland-devel