forked from 12to11/12to11

* 12to11.c (XLMain): Initialize explicit synchronization. * Imakefile (SRCS, OBJS): Remove generated files. (ScannerTarget): New macro. (clean): Clean GENSRCS as well. (linux-dmabuf-unstable-v1.h): (linux-dmabuf-unstable-v1.c): (xdg-shell.h): (xdg-shell.c): (primary-selection-unstable-v1.h): (primary-selection-unstable-v1.c): Remove and replace with ScannerTarget. * README: Announce explicit synchronization support. * compositor.h (union _RenderFence): New union. (struct _RenderFuncs): Add fence functions. (struct _Surface): New fields for explicit synchronization objects and release callbacks. * egl.c (EglInitFuncs, EglInitGlFuncs, EglInitDisplay): Initialize functions and extensions used for explicit synchronization, and set render func flags. (ImportFdFence, WaitFence, DeleteFence, HandleFenceReadable) (GetFinishFence): New functions. (egl_render_funcs): Add those functions. (AddRenderFlag): New function. * fns.c (MaybeInstallBusHandler): Fix coding style. * picture_renderer.c (ImportFdFence, WaitFence, DeleteFence) (GetFinishFence): New stubs. (picture_render_funcs): Add those functions; they should never be called. * renderer.c (RenderImportFdFence): (RenderWaitFence): (RenderDeleteFence): (RenderGetFinishFence): New wrapper functions. * run.c (struct _PollFd, XLAddWriteFd, XLAddReadFd): Add pollfd field to callback args. (RunStep): Pass them to callbacks. Also, fix a comment. * surface.c (DoRelease): New function. (DestroySurface): Clear release if possible. (SavePendingState, TryEarlyRelease): Extract release code to DoRelease. (InternalCommit): Wait for sync fences before continuing. (Commit): Close acquire fence and release sync release object. (HandleSurfaceDestroy): Destroy release callback and close acquire fence. (XLCreateSurface): Clear acquire fence field with right initial value. * xdata.c (NoticeTransferWritable): (NoticeTransferReadable): (NoticeConversionTransferReadable): (NoticeConversionTransferWritable): Adjust arguments for new callback data.
101 lines
3.8 KiB
Text
101 lines
3.8 KiB
Text
This is a tool for running Wayland applications on an X server,
|
|
preferably with a compositing manager running.
|
|
|
|
It is not yet complete. What is not yet implemented includes support
|
|
for touchscreens, input methods, device switching in dmabuf feedback,
|
|
and the viewporter protocol extension.
|
|
|
|
There are also problems with output reporting in subsurfaces.
|
|
|
|
It is not portable to systems other than recent versions of GNU/Linux
|
|
running the X.Org server 1.20 or later, and has not been tested on
|
|
window (and compositing) managers other than GNOME Shell.
|
|
|
|
It will not work very well unless the compositing manager supports the
|
|
EWMH frame synchronization protocol.
|
|
|
|
Building and running this tool requires the following X protocol
|
|
extensions:
|
|
|
|
Nonrectangular Window Shape Extension, version 1.1 or later
|
|
MIT Shared Memory Extension, version 1.2 or later
|
|
X Resize, Rotate and Reflect Extension, version 1.3 or later
|
|
(this will soon be 1.4, once support for multiple GPU
|
|
systems is fully implemented)
|
|
X Synchronization Extension, version 1.0 or later
|
|
X Rendering Extension, version 1.2 or later
|
|
X Input Extension, version 2.3 or later
|
|
Direct Rendering Interface 3, version 1.2 or later
|
|
X Fixes Extension, version 1 or later
|
|
|
|
In addition, it requires Xlib to be built with the XCB transport, and
|
|
the XCB bindings for MIT-SHM and DRI3 to be available.
|
|
|
|
Sometimes, it might be desirable to build with EGL, and use OpenGL ES
|
|
2.0 for i.e. YUV video format support. To do so, uncomment the block
|
|
of code for EGL support in libraries.def before running `xmkmf'. This
|
|
will additionally require the EGL and GLESv2 development files, and
|
|
for the following EGL and GLES extensions to be present at runtime:
|
|
|
|
EGL_EXT_platform_base
|
|
EGL_EXT_device_query
|
|
EGL_KHR_image_base
|
|
EGL_EXT_image_dma_buf_import_modifiers
|
|
EGL_EXT_image_dma_buf_import
|
|
EGL_EXT_buffer_age
|
|
|
|
GL_OES_EGL_image
|
|
GL_OES_EGL_image_external
|
|
GL_EXT_read_format_bgra
|
|
GL_EXT_unpack_subimage
|
|
|
|
After building with EGL support, the renderer must be enabled by
|
|
setting the environment variable "RENDERER" to "egl".
|
|
|
|
The following Wayland protocols are implemented to a more-or-less
|
|
complete degree:
|
|
|
|
'wl_output', version: 2
|
|
'wl_compositor', version: 5
|
|
'wl_shm', version: 1
|
|
'xdg_wm_base', version: 5
|
|
'wl_subcompositor', version: 1
|
|
'wl_seat', version: 7
|
|
'wl_data_device_manager', version: 3
|
|
'zwp_linux_dmabuf_v1', version: 4
|
|
'zwp_primary_selection_device_manager_v1', version: 1
|
|
|
|
When built with EGL, the following Wayland protocol is also supported:
|
|
|
|
'zwp_linux_explicit_synchronization_v1', version: 2
|
|
|
|
With the main caveat being that zwp_linux_dmabuf_v1 has no real
|
|
support for multiple-provider setups (help wanted).
|
|
|
|
Window decorations are also not supported, even though they fit in
|
|
nicely with X window management.
|
|
|
|
It would also be nice to have pinch gesture support.
|
|
|
|
This directory is organized as follows:
|
|
|
|
Imakefile - the top level Makefile template
|
|
libraries.def - files for libraries that don't provide Imakefiles
|
|
*.xml - Wayland protocol definition source
|
|
*.c, *.h - C source code
|
|
*.awk - scripts used to generate headers
|
|
*.txt - text data used to generate some headers, i.e.
|
|
those containing MIME types or shaders
|
|
|
|
Building the source code is simple, provided that you have the
|
|
necessary libwayland-server library, wayland-scanner, pixman, XCB, and
|
|
X extension libraries installed:
|
|
|
|
xmkmf # to generate the Makefile
|
|
make # to build the binary
|
|
|
|
Running the binary should be simple as well:
|
|
|
|
./12to11
|
|
|
|
Wayland programs will then run as regular X windows.
|