Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package wlroots for openSUSE:Factory checked in at 2022-12-28 10:54:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/wlroots (Old)
and /work/SRC/openSUSE:Factory/.wlroots.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "wlroots"
Wed Dec 28 10:54:30 2022 rev:24 rq:1045488 version:0.16.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/wlroots/wlroots.changes 2022-12-02 13:13:10.933866709 +0100
+++ /work/SRC/openSUSE:Factory/.wlroots.new.1563/wlroots.changes 2022-12-28 10:54:37.868140838 +0100
@@ -1,0 +2,24 @@
+Sun Dec 25 16:51:41 UTC 2022 - llyyr
+
+- Update to 0.16.1:
+ * backend: error out when missing DRM and libinput in wlr_backend_autocreate()
+ * backend/drm: only request page-flip if active
+ * backend/drm: log refresh rate in Hz
+ * backend/drm: log modesetting commits
+ * backend/drm: fix FPE when disabling output
+ * backend/drm: fix VRR test
+ * backend/wayland: ensure buffers are released on shutdown
+ * backend/x11: ensure buffers are released on shutdown
+ * render/egl: fix uninitialized pointers in init_dmabuf_formats
+ * scene/layer_shell_v1.c: set exclusive zone correctly
+ * scene/layer_shell_v1.c: remove redundant comment
+ * types/wlr_seat: finish keyboard_state during wlr_seat_destroy
+ * seat/pointer: Initialize low_res_value
+ * cursor: compare to scaled coords
+ * wlr_drm: Add missing wlr_buffer import
+ * wlr_seat: clear `drag->seat_client` when destroyed
+ * xwayland: fix wlr_xwayland_surface_from_wlr_surface() docs
+ * scene: fix output damage expansion condition
+ * build: exclude without DRM backend
+
+-------------------------------------------------------------------
Old:
----
wlroots-0.16.0.tar.gz
wlroots-0.16.0.tar.gz.sig
New:
----
wlroots-0.16.1.tar.gz
wlroots-0.16.1.tar.gz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ wlroots.spec ++++++
--- /var/tmp/diff_new_pack.nMFkOi/_old 2022-12-28 10:54:38.384143517 +0100
+++ /var/tmp/diff_new_pack.nMFkOi/_new 2022-12-28 10:54:38.392143559 +0100
@@ -24,7 +24,7 @@
%bcond_without xcb_errors
Name: wlroots
-Version: 0.16.0
+Version: 0.16.1
Release: 0
Summary: Modular Wayland compositor library
License: MIT
++++++ wlroots-0.16.0.tar.gz -> wlroots-0.16.1.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/backend/backend.c new/wlroots-0.16.1/backend/backend.c
--- old/wlroots-0.16.0/backend/backend.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/backend/backend.c 2022-12-25 16:50:12.000000000 +0100
@@ -346,6 +346,11 @@
}
#endif
+#if !(WLR_HAS_LIBINPUT_BACKEND || WLR_HAS_DRM_BACKEND)
+ wlr_log(WLR_ERROR, "Neither DRM nor libinput backend support is compiled in");
+ goto error;
+#endif
+
// Attempt DRM+libinput
multi->session = session_create_and_wait(display);
if (!multi->session) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/backend/drm/drm.c new/wlroots-0.16.1/backend/drm/drm.c
--- old/wlroots-0.16.0/backend/drm/drm.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/backend/drm/drm.c 2022-12-25 16:50:12.000000000 +0100
@@ -459,12 +459,6 @@
}
}
- if ((state->committed & WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) &&
- state->adaptive_sync_enabled &&
- !drm_connector_supports_vrr(conn)) {
- return false;
- }
-
struct wlr_drm_connector_state pending = {0};
drm_connector_state_init(&pending, conn, state);
@@ -484,6 +478,12 @@
}
}
+ if ((state->committed & WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) &&
+ state->adaptive_sync_enabled &&
+ !drm_connector_supports_vrr(conn)) {
+ return false;
+ }
+
if (conn->backend->parent) {
// If we're running as a secondary GPU, we can't perform an atomic
// commit without blitting a buffer.
@@ -577,10 +577,20 @@
return false;
}
}
- if (pending.modeset) {
+ if (pending.modeset && pending.active) {
flags |= DRM_MODE_PAGE_FLIP_EVENT;
}
+ if (pending.modeset) {
+ if (pending.active) {
+ wlr_drm_conn_log(conn, WLR_INFO, "Modesetting with %dx%d @ %.3f Hz",
+ pending.mode.hdisplay, pending.mode.vdisplay,
+ (float)calculate_refresh_rate(&pending.mode) / 1000);
+ } else {
+ wlr_drm_conn_log(conn, WLR_INFO, "Turning off");
+ }
+ }
+
if (!drm_crtc_commit(conn, &pending, flags, false)) {
return false;
}
@@ -1302,9 +1312,9 @@
wlr_conn->crtc->mode_id = mode_id;
}
- wlr_log(WLR_INFO, " %"PRId32"x%"PRId32"@%"PRId32" %s",
+ wlr_log(WLR_INFO, " %"PRId32"x%"PRId32" @ %.3f Hz %s",
mode->wlr_mode.width, mode->wlr_mode.height,
- mode->wlr_mode.refresh,
+ (float)mode->wlr_mode.refresh / 1000,
mode->wlr_mode.preferred ? "(preferred)" : "");
wl_list_insert(wlr_conn->output.modes.prev, &mode->wlr_mode.link);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/backend/wayland/output.c new/wlroots-0.16.1/backend/wayland/output.c
--- old/wlroots-0.16.0/backend/wayland/output.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/backend/wayland/output.c 2022-12-25 16:50:12.000000000 +0100
@@ -116,6 +116,9 @@
wl_list_remove(&buffer->buffer_destroy.link);
wl_list_remove(&buffer->link);
wl_buffer_destroy(buffer->wl_buffer);
+ if (!buffer->released) {
+ wlr_buffer_unlock(buffer->buffer);
+ }
free(buffer);
}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/backend/x11/output.c new/wlroots-0.16.1/backend/x11/output.c
--- old/wlroots-0.16.0/backend/x11/output.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/backend/x11/output.c 2022-12-25 16:50:12.000000000 +0100
@@ -140,6 +140,9 @@
wl_list_remove(&buffer->buffer_destroy.link);
wl_list_remove(&buffer->link);
xcb_free_pixmap(buffer->x11->xcb, buffer->pixmap);
+ for (size_t i = 0; i < buffer->n_busy; i++) {
+ wlr_buffer_unlock(buffer->buffer);
+ }
free(buffer);
}
@@ -263,6 +266,7 @@
wl_list_for_each(buffer, &output->buffers, link) {
if (buffer->buffer == wlr_buffer) {
wlr_buffer_lock(buffer->buffer);
+ buffer->n_busy++;
return buffer;
}
}
@@ -675,6 +679,8 @@
return;
}
+ assert(buffer->n_busy > 0);
+ buffer->n_busy--;
wlr_buffer_unlock(buffer->buffer); // may destroy buffer
break;
case XCB_PRESENT_COMPLETE_NOTIFY:;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/include/backend/x11.h new/wlroots-0.16.1/include/backend/x11.h
--- old/wlroots-0.16.0/include/backend/x11.h 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/include/backend/x11.h 2022-12-25 16:50:12.000000000 +0100
@@ -113,6 +113,7 @@
xcb_pixmap_t pixmap;
struct wl_list link; // wlr_x11_output::buffers
struct wl_listener buffer_destroy;
+ size_t n_busy;
};
struct wlr_x11_format {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/include/meson.build new/wlroots-0.16.1/include/meson.build
--- old/wlroots-0.16.0/include/meson.build 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/include/meson.build 2022-12-25 16:50:12.000000000 +0100
@@ -3,6 +3,7 @@
exclude_files = ['meson.build', 'config.h.in', 'version.h.in']
if not features.get('drm-backend')
exclude_files += 'backend/drm.h'
+ exclude_files += 'types/wlr_drm_lease_v1.h'
endif
if not features.get('libinput-backend')
exclude_files += 'backend/libinput.h'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/include/wlr/types/wlr_drm.h new/wlroots-0.16.1/include/wlr/types/wlr_drm.h
--- old/wlroots-0.16.0/include/wlr/types/wlr_drm.h 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/include/wlr/types/wlr_drm.h 2022-12-25 16:50:12.000000000 +0100
@@ -10,6 +10,7 @@
#define WLR_TYPES_WLR_DRM_H
#include
+#include
struct wlr_renderer;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/include/wlr/xwayland/xwayland.h new/wlroots-0.16.1/include/wlr/xwayland/xwayland.h
--- old/wlroots-0.16.0/include/wlr/xwayland/xwayland.h 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/include/wlr/xwayland/xwayland.h 2022-12-25 16:50:12.000000000 +0100
@@ -232,7 +232,7 @@
* Get a struct wlr_xwayland_surface from a struct wlr_surface.
* Asserts that the surface has the xwayland surface role.
* May return NULL even if the surface has the xwayland surface role if the
- * corresponding xwayland surface has been destroyed.
+ * corresponding xwayland surface has been unmapped or destroyed.
*/
struct wlr_xwayland_surface *wlr_xwayland_surface_from_wlr_surface(
struct wlr_surface *surface);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/meson.build new/wlroots-0.16.1/meson.build
--- old/wlroots-0.16.0/meson.build 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/meson.build 2022-12-25 16:50:12.000000000 +0100
@@ -1,7 +1,7 @@
project(
'wlroots',
'c',
- version: '0.16.0',
+ version: '0.16.1',
license: 'MIT',
meson_version: '>=0.59.0',
default_options: [
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/render/egl.c new/wlroots-0.16.1/render/egl.c
--- old/wlroots-0.16.0/render/egl.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/render/egl.c 2022-12-25 16:50:12.000000000 +0100
@@ -124,8 +124,8 @@
for (int i = 0; i < formats_len; i++) {
uint32_t fmt = formats[i];
- uint64_t *modifiers;
- EGLBoolean *external_only;
+ uint64_t *modifiers = NULL;
+ EGLBoolean *external_only = NULL;
int modifiers_len = 0;
if (!no_modifiers) {
modifiers_len = get_egl_dmabuf_modifiers(egl, fmt, &modifiers, &external_only);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/types/data_device/wlr_drag.c new/wlroots-0.16.1/types/data_device/wlr_drag.c
--- old/wlroots-0.16.0/types/data_device/wlr_drag.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/types/data_device/wlr_drag.c 2022-12-25 16:50:12.000000000 +0100
@@ -55,14 +55,14 @@
goto out;
}
- if (!drag->source &&
+ if (!drag->source && drag->seat_client &&
wl_resource_get_client(surface->resource) !=
drag->seat_client->client) {
goto out;
}
struct wlr_seat_client *focus_client = wlr_seat_client_for_wl_client(
- drag->seat_client->seat, wl_resource_get_client(surface->resource));
+ drag->seat, wl_resource_get_client(surface->resource));
if (!focus_client) {
goto out;
}
@@ -71,7 +71,7 @@
drag->source->accepted = false;
uint32_t serial =
- wl_display_next_serial(drag->seat_client->seat->display);
+ wl_display_next_serial(drag->seat->display);
struct wl_resource *device_resource;
wl_resource_for_each(device_resource, &focus_client->data_devices) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/types/output/cursor.c new/wlroots-0.16.1/types/output/cursor.c
--- old/wlroots-0.16.0/types/output/cursor.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/types/output/cursor.c 2022-12-25 16:50:12.000000000 +0100
@@ -533,6 +533,10 @@
bool wlr_output_cursor_move(struct wlr_output_cursor *cursor,
double x, double y) {
+ // Scale coordinates for the output
+ x *= cursor->output->scale;
+ y *= cursor->output->scale;
+
if (cursor->x == x && cursor->y == y) {
return true;
}
@@ -541,11 +545,9 @@
output_cursor_damage_whole(cursor);
}
- bool was_visible = cursor->visible;
- x *= cursor->output->scale;
- y *= cursor->output->scale;
cursor->x = x;
cursor->y = y;
+ bool was_visible = cursor->visible;
output_cursor_update_visible(cursor);
if (!was_visible && !cursor->visible) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/types/scene/layer_shell_v1.c new/wlroots-0.16.1/types/scene/layer_shell_v1.c
--- old/wlroots-0.16.0/types/scene/layer_shell_v1.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/types/scene/layer_shell_v1.c 2022-12-25 16:50:12.000000000 +0100
@@ -39,6 +39,7 @@
struct wlr_layer_surface_v1_state *state,
struct wlr_box *usable_area) {
switch (state->anchor) {
+ case ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP:
case (ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT):
@@ -46,12 +47,14 @@
usable_area->y += state->exclusive_zone + state->margin.top;
usable_area->height -= state->exclusive_zone + state->margin.top;
break;
+ case ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM:
case (ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM |
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT |
ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT):
// Anchor bottom
usable_area->height -= state->exclusive_zone + state->margin.bottom;
break;
+ case ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT:
case (ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM |
ZWLR_LAYER_SURFACE_V1_ANCHOR_LEFT):
@@ -59,9 +62,10 @@
usable_area->x += state->exclusive_zone + state->margin.left;
usable_area->width -= state->exclusive_zone + state->margin.left;
break;
+ case ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT:
case (ZWLR_LAYER_SURFACE_V1_ANCHOR_TOP |
ZWLR_LAYER_SURFACE_V1_ANCHOR_BOTTOM |
- ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT): // Anchor right
+ ZWLR_LAYER_SURFACE_V1_ANCHOR_RIGHT):
// Anchor right
usable_area->width -= state->exclusive_zone + state->margin.right;
break;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/types/scene/wlr_scene.c new/wlroots-0.16.1/types/scene/wlr_scene.c
--- old/wlroots-0.16.0/types/scene/wlr_scene.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/types/scene/wlr_scene.c 2022-12-25 16:50:12.000000000 +0100
@@ -644,21 +644,29 @@
wlr_region_scale_xy(&output_damage, &trans_damage,
output_scale_x, output_scale_y);
- // One buffer pixel will match (output_scale_x)x(output_scale_y) output
- // pixels. If max(output_scale_x, output_scale_y) is bigger than 1,
- // the result will be blurry, and with linear filtering, will bleed into
- // adjacent (output_scale_x / 2) pixels on X axis and (output_scale_y / 2)
- // pixels on Y axis. To fix this, the damage region is expanded by largest
- // distance of the two.
- float bigger_scale = fmaxf(output_scale_x, output_scale_y);
- if (bigger_scale > 1.0f) {
- wlr_region_expand(&output_damage, &output_damage,
- ceilf(bigger_scale / 2.0f));
- }
+ // One output pixel will match (buffer_scale_x)x(buffer_scale_y) buffer pixels.
+ // If the buffer is upscaled on the given axis (output_scale_* > 1.0,
+ // buffer_scale_* < 1.0), its contents will bleed into adjacent
+ // (ceil(output_scale_* / 2)) output pixels because of linear filtering.
+ // Additionally, if the buffer is downscaled (output_scale_* < 1.0,
+ // buffer_scale_* > 1.0), and one output pixel matches a non-integer number of
+ // buffer pixels, its contents will bleed into neighboring output pixels.
+ // Handle both cases by computing buffer_scale_{x,y} and checking if they are
+ // integer numbers; ceilf() is used to ensure that the distance is at least 1.
+ float buffer_scale_x = 1.0f / output_scale_x;
+ float buffer_scale_y = 1.0f / output_scale_y;
+ int dist_x = floor(buffer_scale_x) != buffer_scale_x ?
+ (int)ceilf(output_scale_x / 2.0f) : 0;
+ int dist_y = floor(buffer_scale_y) != buffer_scale_y ?
+ (int)ceilf(output_scale_y / 2.0f) : 0;
+ // TODO: expand with per-axis distances
+ wlr_region_expand(&output_damage, &output_damage,
+ dist_x >= dist_y ? dist_x : dist_y);
pixman_region32_t cull_region;
pixman_region32_init(&cull_region);
- wlr_region_scale(&cull_region, &scene_buffer->node.visible, output_scale);
+ pixman_region32_copy(&cull_region, &scene_buffer->node.visible);
+ scale_output_damage(&cull_region, output_scale);
pixman_region32_translate(&cull_region, -lx * output_scale, -ly * output_scale);
pixman_region32_intersect(&output_damage, &output_damage, &cull_region);
pixman_region32_fini(&cull_region);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/types/seat/wlr_seat.c new/wlroots-0.16.1/types/seat/wlr_seat.c
--- old/wlroots-0.16.0/types/seat/wlr_seat.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/types/seat/wlr_seat.c 2022-12-25 16:50:12.000000000 +0100
@@ -75,6 +75,10 @@
client->seat->keyboard_state.focused_client = NULL;
}
+ if (client->seat->drag && client == client->seat->drag->seat_client) {
+ client->seat->drag->seat_client = NULL;
+ }
+
struct wl_resource *resource, *tmp;
wl_resource_for_each_safe(resource, tmp, &client->pointers) {
wl_resource_destroy(resource);
@@ -175,6 +179,8 @@
wlr_seat_pointer_clear_focus(seat);
wlr_seat_keyboard_clear_focus(seat);
+ wlr_seat_set_keyboard(seat, NULL);
+
struct wlr_touch_point *point;
wl_list_for_each(point, &seat->touch_state.touch_points, link) {
wlr_seat_touch_point_clear_focus(seat, 0, point->touch_id);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/types/seat/wlr_seat_pointer.c new/wlroots-0.16.1/types/seat/wlr_seat_pointer.c
--- old/wlroots-0.16.0/types/seat/wlr_seat_pointer.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/types/seat/wlr_seat_pointer.c 2022-12-25 16:50:12.000000000 +0100
@@ -326,7 +326,7 @@
send_source = true;
}
- double low_res_value;
+ double low_res_value = 0.0;
int32_t low_res_value_discrete = 0;
update_value120_accumulators(client, orientation, value, value_discrete,
&low_res_value, &low_res_value_discrete);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wlroots-0.16.0/types/wlr_compositor.c new/wlroots-0.16.1/types/wlr_compositor.c
--- old/wlroots-0.16.0/types/wlr_compositor.c 2022-11-11 18:22:17.000000000 +0100
+++ new/wlroots-0.16.1/types/wlr_compositor.c 2022-12-25 16:50:12.000000000 +0100
@@ -36,14 +36,6 @@
static void surface_handle_destroy(struct wl_client *client,
struct wl_resource *resource) {
- struct wlr_surface *surface = wlr_surface_from_resource(resource);
- if (surface->role_data != NULL) {
- // TODO: send WL_SURFACE_ERROR_DEFUNCT_ROLE_OBJECT
- // https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/278
- wl_resource_post_error(resource, -1,
- "surface was destroyed before its role object");
- return;
- }
wl_resource_destroy(resource);
}