- Oct 24, 2017
-
-
Pekka Paalanen authored
It appears that wayland_shm_buffer::damage is in the global coordinate space. Therefore initializing it to width x height at 0,0 is not correct for any output not positioned at 0,0. That is, all outputs after the first one get it wrong. Initialize it from the output region, which is in the global coordinate space. While at it, add a comment to note that damage is in global coordinate space. As I can see, this was the last confusion about it. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Damage coordinates are in global coordinate space, and they need to be translated to local coordinate space so multiple outputs can work. This path now matches the similar path in the X11 backend. This patch fixes the appearance of multiple windows in the parent compositor. Previously, all windows except the one with nested output position 0,0 would have their damage for the parent wl_surface always fall outside of the wl_surface, save the decorations which were handled separately. If the parent compositor was Weston/GL, this would lead to the output area remaining black as partial GL texture uploads would practically never update the texture. If the parent compositor was Weston/pixman, the parent windows would not update on screen unless something else caused the area to be repainted. [Pekka: adjusted commit message] Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Pekka Paalanen authored
Clarify the error message to explicitly say one was trying to connect to a parent Wayland compositor. This hopefully is a good enough hint on what using the wayland-backend is trying to do. Add the command line display option value and WAYLAND_DISPLAY values for good measure. WAYLAND_SOCKET is not shown as libwayland-client removes it. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Pekka Paalanen authored
The set_windowed and set_fullscreen functions are only useful on a desktop shell, and never called on fullscreen-shell. Remove the confusing dead code, and ensure we notice if these functions get called in the wrong environment. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Pekka Paalanen authored
To be more symmetric with wayland_output_set_fullscreen(), implement the xdg-shell path in wayland_output_set_windowed(). This should make it possible to use the fullscreen key binding to toggle between a floating window and fullscreen also under xdg-shell. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Pekka Paalanen authored
I could not find anywhere where struct parent_output was freed, so apparently we were leaking it. Check against wayland_backend_register_output() and add the missing clean-up: removal from the parent output list, and free(). registry_handle_global_remove() also needs fixing to use a safer loop, because now we are actually removing the list item. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
- Oct 23, 2017
-
-
Pekka Paalanen authored
The wayland-backend with --sprawl is one way to trigger wayland_output_create_for_parent_output(), which intends to find a mode from the parent mode list and use it. Calling wayland_output_set_size() initialized an embedded struct weston_mode and inserts that into the mode list. Then the assignment output->mode = *mode; corrupts the mode_list by overwriting the link entry. This leads to an endless loop in bind_output() in compositor.c. Fix this by manually doing the setup that wayland_output_set_size() did and do not call it. As a side effect, it now relays the parent compositor's physical output size to our own clients. It no longer smashes the refresh rate either. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Pekka Paalanen authored
This member is only ever set and never read, therefore it is dead. Delete dead code. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Pekka Paalanen authored
Calling wl_display_roundtrip() from within a Wayland event handler means we will re-enter event dispatch, that is, it will lead to recursive dispatch. Even if libwayland-client was safe, this would lead to unexpected code paths: the first event handler function has not returned when other event handler functions may get called. In this particular case it maybe didn't hurt, but it's still a fragile pattern to use. Replace the wl_display_roundtrip() with a manual sync callback to do the work. This does not break the wayland-backend initialization sequence, because sprawl_across_outputs was set only after the roundtrip to ensure wl_registry globals have been received so the code would not have been hit anyway, and weston_backend_init() also has a second roundtrip that ensures the per wl_output events have been received before continuing. For wayland-backend output hotplug the change is insignificant because it will only delay the output creation a bit, and the parent outputs are not processed anywhere in between. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Pekka Paalanen authored
Surprisingly, WESTON_OPTION_BOOLEAN uses the type int32_t, not bool. Passing in a pointer bool does not end well. Fix this to pass in pointers as parse_options() expects. This fixes a bug where 'weston --use-pixman --sprawl' would work but 'weston --sprawl --use-pixman' would ignore the --sprawl option. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
- Oct 18, 2017
-
-
Quentin Glidic authored
If a surface is in state A, and we just sent a configure for state B, setting back state A would be ignored, because state B has not been committed yet. Now, we check against the latest configured state (which is current state if configure list is empty). Reported on wlroots https://github.com/swaywm/wlroots/pull/280 Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net> Reviewed-by: Jonas Ådahl <jadahl@gmail.com>
-
- Oct 13, 2017
-
-
This patch fixes the wayland backend to not use two different presentation methods when running on fullscreen-shell. See also: https://patchwork.freedesktop.org/patch/114534/ v2: - Add missing wayland_output_resize_surface() call - Start repaint loop after initial frame has been drawn v3: - Redraw the initial frame if present for mode fails Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=93514 Signed-off-by: Armin Krezović <krezovic.armin@gmail.com> Tested-by: nerdopolis <bluescreen_avenger@verizon.net> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
compositor-wayland: destroy the appropriate output instead of exiting when receiving an xdg_toplevel::close event v2: Fix use after free spotted by Daniel Stone Signed-off-by: Sergi Granell <xerpi.g.12@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
The opaque region is a few pixels off due to the rounded corners of the frame decorations, and, therefore, the input region matches the window's geometry more closely. Signed-off-by: Sergi Granell <xerpi.g.12@gmail.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
- Oct 04, 2017
-
-
Daniel Stone authored
Add a test environment variable to allow disabling universal planes. Signed-off-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Daniel Stone authored
If the user has passed an INVALID modifier, it's because there is no applicable modifier, and the buffer layout should be determined by a magic side-channel call (e.g. bo_get_tiling). If the modifier is INVALID, don't try to pass it through to EGL, but just drop it. On the other hand, if a modifier _is_ explicitly specified and we don't have the modifiers extension, then refuse to import the buffer. Signed-off-by: Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
The timer was never removed anywhere. Remove it in disable() to match what happens in enable(). Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
This is a more logical name for the function, matching the pattern used in other backends and the hook names. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
If we pass the base->enabled test, then the renderer output is guaranteed to be there, so we can just destroy it. Destroying it before unmap makes the sequence match better the enable path. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
Rename fbdev_frame_buffer_destroy() to fbdev_frame_buffer_unmap() because that is what it does. Adding the destruction of hw_surface in it makes it the perfect counterpart to fbdev_frame_buffer_map() which simplifies the code. fbdev_frame_buffer_map() can no longer call that, so just open-code the munmap() there. It is an error path, we don't really care about failures in an error path. The error path of fbdev_output_enable() is converted to call buffer_unmap() since that is exactly what it did. fbdev_output_disable() became redundant, being identical to fbdev_frame_buffer_unmap(). Invariant: output->hw_surface cannot be non-NULL without output->fb being non-NULL. hw_surface wraps the mmapped memory so cannot exist without the mmap. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
A few functions had argument 'output' which was not used at all. Remove such unused arguments. The coming migration to the head-based output API would have made it awkward to come up with the output argument for these, but luckily they are not actually needed. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Sergi Granell <xerpi.g.12@gmail.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
Change all backends to set the core backend pointer early. This is necessary for libweston core to be able to access the backend vfuncs before the backend init function returns. Particularly, weston_output_init() will be needing to inspect the backend vfuncs to see if the backend has been converted to a new API. Backends that create outputs as part of their init would fail without setting the pointer earlier. For consistency, all backends are modified instead of just those that could hit an issue. Libweston core will take care of resetting the backend pointer to NULL in case of error since "libweston: ensure backend is not loaded twice". Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
Check and ensure that a compositor can only load one backend successfully. If a backend fails to load, it is theoretically possible to try another backend. Once loading succeeds, only destroying the compositor would allow "unloading" a backend. If backend init fail, ensure the backend pointer remains NULL to avoid calling into a half-loaded backend on e.g. compositor destruction. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
'release' is a more appropriate name because the function does not free the underlying memory. The main reason for this is that we need the name weston_output_destroy() for new API that actually will free also the underlying memory. Since the function is only used in backends and external backends are not a thing, this does not cause libweston major version bump, even though it does change the ABI. There is no way external users could have successfully used this function. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
A client may have bound the same wl_output multiple times, for who knows what reason. As the server cannot know which wl_output resource to use for which wl_surface, send enter/leave events for all of them. This is a protocol correctness fix. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
Move the remaining scattered setup of the fixed properties into create_output_for_connector(). All these are already known and they cannot change. This helps future refactoring. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
This fixes a regression where monitor make and model would always be advertised as "unknown" to Wayland clients. The EDID strings were parsed at create_output_for_connector() time, but the fallback "unknown" values were set in weston_drm_output_api::set_mode vfunc later. This made the correct monitor info be shown in the log, but not sent to clients. The purpose of the "unknown" assignments is to give fallback values in case EDID is not providing them. Fix all that by moving all setting of the make, model and serial into create_output_for_connector(). These values cannot change afterwards anyway. While at it, document find_and_parse_output_edid(). The ugly casts in create_output_for_connector() are required to silence compositor warnings from ignoring const attribute. This is temporary, and a future refactoring will get rid of the casts. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
Move the weston_output_init() call into wayland_output_create_common(). This avoids passing the name twice to different functions, and follows the precedent set in "libweston: weston_output_init(..., +name)" for calling init before accessing fields. Since the error paths in wayland_output_create_for_parent_output() and wayland_output_create_fullscreen() are now guaranteed to have weston_output init'd, call weston_output_destroy() appropriately. There might be more to free than just the name. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
Add 'name' argument to weston_output_init(). This is much more obvious than the assert inside weston_output_init() to ensure the caller has set a field in weston_output first. Now weston_output_init() will strdup() the name itself, which means we can drop a whole bunch of strdup()s in the backends. This matches weston_output_destroy() which was already calling free() on the name. All backends are slightly reordered to call weston_output_init() before accessing any fields of weston_output, except the Wayland backend which would make it a little awkward to do it in this patch. Mind, that weston_output_init() still does not reset the struct to zero - it is presumed the caller has done it, since weston_output is embedded in the backend output structs. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Reviewed-by: David Fort <contact@hardening-consulting.com> [Daniel: document name copying] Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
There are IVI tests that require an output. Previously these tests would silently skip if no outputs were present. However, a test setup should always have outputs with these tests. Skipping could easily leave the tests dead without notice. Make these tests fail instead of skip if there are no outputs. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com> Reviewed-by: Emre Ucan <eucan@de.adit-jv.com> Acked-by Daniel Stone <daniels@collabora.com>
-
Pekka Paalanen authored
Initialize the list in weston_output_init() instead of doing it separately in each backend. One would expect weston_output_init() to initialize all weston_output members, at least those that are not NULL. We rely on the set_size() functions to be called only once, as is assert()'d. If set_size() becomes callable multiple times, this patch will force them to be fixed to properly manage the mode list instead of losing all members. compositor-wayland.c is strange in wayland_output_create_for_parent_output(): it first called wayland_output_set_size() that initialized the mode list with a single mode manufactured from width and height and set that mode as current. Then it continued to reset the mode list and adding the list of modes from the parent output, leaving the current mode left to point to a mode struct that is no longer in the mode list and with a broken 'link' element. This patch changes things such that the manufactured mode is left in the list, and the parent mode list is added. This is probably not quite right either. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Emre Ucan <eucan@de.adit-jv.com> Reviewed-by: Ian Ray <ian.ray@ge.com> Acked-by Daniel Stone <daniels@collabora.com>
-
- Oct 03, 2017
-
-
With FreeRDP 2.0 the crypto needs to be initialized or we fail as soon as we try to compute a md5. The API also changed for the suppress output callback. Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
- Oct 02, 2017
-
-
On the musl C library, tests/timespec-text.c does not build, with the following error: In file included from tests/timespec-test.c:36:0: ./shared/timespec-util.h:41:21: warning: ‘struct timespec’ declared inside parameter list will not be visible outside of this definition or declaration timespec_sub(struct timespec *r, ^~~~~~~~ [...] Indeed, struct timespec is defined in time.h, so we must include it. Signed-off-by: "Yann E. MORIN" <yann.morin.1998@free.fr> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
- Sep 29, 2017
-
-
Use EGL fence sync objects to emit timepoints for the beginning and the end of rendering on the GPU. The timepoints are emitted asynchronously using the sync file fds associated with the fence sync objects. The sync file fds are acquired using the facilities provided by the EGL_ANDROID_native_fence_sync extension. The asynchronous timepoint submissions are stored in a list in gl_output_state until they are executed, and any pending submissions that remain at output destruction time are cleaned up. If timelining is inactive or the required EGL extensions are not present, then GPU timepoint processing and emission are skipped. Note that the GPU timestamps returned by sync files are in the CLOCK_MONOTONIC clock domain, and are thus compatible with the timeline timestamps (which also are in the CLOCK_MONOTONIC domain). Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
The sync file functionality is required by the upcoming GPU render timeline work, but it's only available in relatively new linux kernel versions (4.7 and above). This commit provides a "sanitized" version of the required sync file definitions. On systems that don't have the sync file header (due to having an older kernel), we will be able to fall back to our own definitions when building. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
Check for the EGL_KHR_fence_sync and EGL_ANDROID_native_fence_sync extensions and get pointers to required extension functions. These extensions allow us to acquire GPU timestamp information asynchronously, and are required by the upcoming work to add rendering begin/end timepoints to the weston timeline. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
The purpose of this argument is to hold timestamp information about events that occurred on the GPU. This argument allows us to include GPU timestamps in timepoints such as the beginning and end of frame rendering. Signed-off-by: Alexandros Frantzis <alexandros.frantzis@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk>
-
- Sep 26, 2017
-
-
Matt Hoosier authored
This change replaces a queued emission of buffer-release events (which is prone to starvation) with a regular event emission. This means that client programs no longer need to secretly install surface frame listeners just to guarantee that they get correctly notified of buffer lifecycle events. v2: More information about the historical reasons why this change hadn't happened yet, and the consensus to finally move ahead with it can be found at the discussion terminating in this message: https://lists.freedesktop.org/archives/wayland-devel/2017-September/035147.html Signed-off-by: Matt Hoosier <matt.hoosier@gmail.com> Reviewed-by: Daniel Stone <daniels@collabora.com> Reviewed-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Derek Foreman <derekf@osg.samsung.com>
-
- Sep 25, 2017
-
-
Pekka Paalanen authored
Fixes a small memory leak, spotted with Valgrind. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com>
-
Pekka Paalanen authored
Fixes a small memory leak, spotted with Valgrind. Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.co.uk> Reviewed-by: Ian Ray <ian.ray@ge.com>
-