DPI-scaled surfaces have artifacts larger than surface size
I have a mixed-DPI environment: 3200x1800 internal panel with output scale 2, and 2560x1440 external panel with output scale 1.
Weston's Wayland backend doesn't yet deal with scaling, so when I move it to the external panel it needs to be scaled by the compositor. It's also still using zxdg_shell_unstable_v6
rather than the stable version (sigh).
When I have Weston simply on my external panel, it displays fine. When I have it on the internal panel, the window appears to have a black area approximately twice its size in both dimensions which trails it around. I've made a video which should show it better.
I believe this is a regression introduced in 3.30.
mutter 3.30.0-1 (F29) Intel Skylake graphics (Mesa from recent git, kernel from drm-tip)
Client debug follows; at a glance I believe Weston's doing the right thing, e.g. set_window_geometry
is set to operate in surface rather than buffer co-ordinate space.
Protocol log from Weston startup
[3237260.467] -> wl_display@1.get_registry(new id wl_registry@2) [3237260.562] -> wl_display@1.sync(new id wl_callback@3) [3237260.895] wl_display@1.delete_id(3) [3237260.971] wl_registry@2.global(1, "wl_drm", 2) [3237261.023] wl_registry@2.global(2, "wl_compositor", 4) [3237261.051] -> wl_registry@2.bind(2, "wl_compositor", 4, new id [unknown]@4) [3237261.091] wl_registry@2.global(3, "wl_shm", 1) [3237261.120] -> wl_registry@2.bind(3, "wl_shm", 1, new id [unknown]@5) [3237261.171] wl_registry@2.global(4, "wl_output", 2) [3237261.205] -> wl_registry@2.bind(4, "wl_output", 1, new id [unknown]@6) [3237261.242] wl_registry@2.global(5, "wl_output", 2) [3237261.270] -> wl_registry@2.bind(5, "wl_output", 1, new id [unknown]@7) [3237261.317] wl_registry@2.global(6, "zxdg_output_manager_v1", 1) [3237261.346] wl_registry@2.global(7, "wl_data_device_manager", 3) [3237261.381] wl_registry@2.global(8, "gtk_primary_selection_device_manager", 1) [3237261.416] wl_registry@2.global(9, "wl_subcompositor", 1) [3237261.448] wl_registry@2.global(10, "xdg_wm_base", 1) [3237261.495] wl_registry@2.global(11, "zxdg_shell_v6", 1) [3237261.535] -> wl_registry@2.bind(11, "zxdg_shell_v6", 1, new id [unknown]@8) [3237261.637] wl_registry@2.global(12, "wl_shell", 1) [3237261.694] -> wl_registry@2.bind(12, "wl_shell", 1, new id [unknown]@9) [3237261.742] wl_registry@2.global(13, "gtk_shell1", 2) [3237261.772] wl_registry@2.global(14, "zwp_pointer_gestures_v1", 1) [3237261.811] wl_registry@2.global(15, "zwp_tablet_manager_v2", 1) [3237261.852] wl_registry@2.global(16, "wl_seat", 5) [3237261.911] -> wl_registry@2.bind(16, "wl_seat", 4, new id [unknown]@10) [3237261.958] -> wl_compositor@4.create_surface(new id wl_surface@11) [3237261.979] wl_registry@2.global(17, "zwp_relative_pointer_manager_v1", 1) [3237262.027] wl_registry@2.global(18, "zwp_pointer_constraints_v1", 1) [3237262.053] wl_registry@2.global(19, "zxdg_exporter_v1", 1) [3237262.080] wl_registry@2.global(20, "zxdg_importer_v1", 1) [3237262.107] wl_registry@2.global(21, "zwp_linux_dmabuf_v1", 3) [3237262.137] wl_registry@2.global(22, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [3237262.157] wl_registry@2.global(23, "zwp_text_input_manager_v3", 1) [3237262.176] wl_registry@2.global(24, "gtk_text_input_manager", 1)
Protocol log from EGL initialisation inside Weston
[3237269.233] -> wl_display@1.get_registry(new id wl_registry@12) [3237269.294] -> wl_display@1.sync(new id wl_callback@13) [3237270.278] wl_display@1.delete_id(13) [3237270.358] wl_registry@12.global(1, "wl_drm", 2) [3237270.450] -> wl_registry@12.bind(1, "wl_drm", 2, new id [unknown]@14) [3237270.545] wl_registry@12.global(2, "wl_compositor", 4) [3237270.774] wl_registry@12.global(3, "wl_shm", 1) [3237271.167] wl_registry@12.global(4, "wl_output", 2) [3237271.545] wl_registry@12.global(5, "wl_output", 2) [3237271.959] wl_registry@12.global(6, "zxdg_output_manager_v1", 1) [3237272.318] wl_registry@12.global(7, "wl_data_device_manager", 3) [3237272.661] wl_registry@12.global(8, "gtk_primary_selection_device_manager", 1) [3237272.852] wl_registry@12.global(9, "wl_subcompositor", 1) [3237273.058] wl_registry@12.global(10, "xdg_wm_base", 1) [3237273.266] wl_registry@12.global(11, "zxdg_shell_v6", 1) [3237273.463] wl_registry@12.global(12, "wl_shell", 1) [3237273.750] wl_registry@12.global(13, "gtk_shell1", 2) [3237273.956] wl_registry@12.global(14, "zwp_pointer_gestures_v1", 1) [3237274.160] wl_registry@12.global(15, "zwp_tablet_manager_v2", 1) [3237274.390] wl_registry@12.global(16, "wl_seat", 5) [3237274.455] wl_registry@12.global(17, "zwp_relative_pointer_manager_v1", 1) [3237274.530] wl_registry@12.global(18, "zwp_pointer_constraints_v1", 1) [3237274.607] wl_registry@12.global(19, "zxdg_exporter_v1", 1) [3237274.688] wl_registry@12.global(20, "zxdg_importer_v1", 1) [3237274.763] wl_registry@12.global(21, "zwp_linux_dmabuf_v1", 3) [3237274.866] -> wl_registry@12.bind(21, "zwp_linux_dmabuf_v1", 3, new id [unknown]@15) [3237275.008] wl_registry@12.global(22, "zwp_keyboard_shortcuts_inhibit_manager_v1", 1) [3237275.200] wl_registry@12.global(23, "zwp_text_input_manager_v3", 1) [3237275.365] wl_registry@12.global(24, "gtk_text_input_manager", 1) [3237275.518] wl_callback@13.done(4195) [3237275.625] -> wl_display@1.sync(new id wl_callback@13) [3237286.131] wl_display@1.delete_id(13) [3237286.226] wl_drm@14.device("/dev/dri/card0") [3237287.340] -> wl_drm@14.authenticate(11) [3237287.410] wl_drm@14.format(808669761) [3237287.433] wl_drm@14.format(808669784) [3237287.455] wl_drm@14.format(875713089) [3237287.475] wl_drm@14.format(875713112) [3237287.513] wl_drm@14.format(909199186) [3237287.534] wl_drm@14.format(961959257) [3237287.556] wl_drm@14.format(825316697) [3237287.576] wl_drm@14.format(842093913) [3237287.597] wl_drm@14.format(909202777) [3237287.630] wl_drm@14.format(875713881) [3237287.650] wl_drm@14.format(842094158) [3237287.672] wl_drm@14.format(909203022) [3237287.693] wl_drm@14.format(1448695129) [3237287.715] wl_drm@14.capabilities(1) [3237287.740] zwp_linux_dmabuf_v1@15.format(875713089) [3237287.796] zwp_linux_dmabuf_v1@15.modifier(875713089, 0, 0) [3237287.825] zwp_linux_dmabuf_v1@15.modifier(875713089, 16777216, 1) [3237287.857] zwp_linux_dmabuf_v1@15.modifier(875713089, 16777216, 2) [3237287.887] zwp_linux_dmabuf_v1@15.modifier(875713089, 16777216, 4) [3237287.914] zwp_linux_dmabuf_v1@15.format(875713112) [3237287.926] zwp_linux_dmabuf_v1@15.modifier(875713112, 0, 0) [3237287.944] zwp_linux_dmabuf_v1@15.modifier(875713112, 16777216, 1) [3237287.963] zwp_linux_dmabuf_v1@15.modifier(875713112, 16777216, 2) [3237287.984] zwp_linux_dmabuf_v1@15.modifier(875713112, 16777216, 4) [3237288.003] zwp_linux_dmabuf_v1@15.format(808669761) [3237288.012] zwp_linux_dmabuf_v1@15.modifier(808669761, 0, 0) [3237288.032] zwp_linux_dmabuf_v1@15.modifier(808669761, 16777216, 1) [3237288.049] zwp_linux_dmabuf_v1@15.modifier(808669761, 16777216, 2) [3237288.068] zwp_linux_dmabuf_v1@15.format(909199186) [3237288.082] zwp_linux_dmabuf_v1@15.modifier(909199186, 0, 0) [3237288.108] zwp_linux_dmabuf_v1@15.modifier(909199186, 16777216, 1) [3237288.152] zwp_linux_dmabuf_v1@15.modifier(909199186, 16777216, 2) [3237288.181] wl_callback@13.done(4195) [3237288.204] -> wl_display@1.sync(new id wl_callback@13) [3237288.376] wl_display@1.delete_id(13) [3237288.396] wl_drm@14.authenticated() [3237288.408] wl_callback@13.done(4195)
Protocol log from Weston surface creation
[16:01:51.307] Creating 1024x640 wayland output at (0, 0) [3237308.068] -> wl_compositor@4.create_surface(new id wl_surface@13) [3237308.102] -> zxdg_shell_v6@8.get_xdg_surface(new id zxdg_surface_v6@16, wl_surface@13) [3237308.128] -> zxdg_surface_v6@16.get_toplevel(new id zxdg_toplevel_v6@17) [3237308.145] -> zxdg_toplevel_v6@17.set_title("Weston Compositor - wayland0") [3237308.163] -> wl_surface@13.commit() [3237308.189] wl_output@6.geometry(0, 0, 290, 170, 0, "SHP", "0x1421", 0) [3237308.283] wl_output@6.mode(3, 3200, 1800, 59982) [3237308.319] wl_output@7.geometry(3200, 0, 600, 340, 0, "DEL", "DELL U2715H", 0) [3237308.407] wl_output@7.mode(3, 2560, 1440, 59951) [3237308.445] wl_seat@10.capabilities(7) [3237308.459] -> wl_seat@10.get_pointer(new id wl_pointer@18) [3237308.541] -> wl_seat@10.get_keyboard(new id wl_keyboard@19) [3237308.570] -> wl_seat@10.get_touch(new id wl_touch@20) [3237308.598] wl_seat@10.name("seat0") [3237317.640] zxdg_toplevel_v6@17.configure(0, 0, array) [3237317.709] zxdg_surface_v6@16.configure(4196) [3237317.736] -> zxdg_surface_v6@16.ack_configure(4196) [3237317.772] wl_keyboard@19.keymap(1, fd 14, 54012) [3237323.208] wl_keyboard@19.repeat_info(33, 500) [16:01:51.322] wayland-backend: Using xdg_shell_v6 [16:01:51.322] Chosen EGL config details: RGBA bits: 8 8 8 8 swap interval range: 0 - 1 [3237352.496] -> wl_compositor@4.create_region(new id wl_region@21) [3237352.570] -> wl_region@21.add(32, 32, 1036, 673) [3237352.650] -> wl_surface@13.set_input_region(wl_region@21) [3237352.676] -> wl_region@21.destroy() [3237352.696] -> zxdg_surface_v6@16.set_window_geometry(32, 32, 1036, 673) [3237352.768] -> wl_compositor@4.create_region(new id wl_region@22) [3237352.797] -> wl_region@22.add(35, 35, 1030, 667) [3237352.863] -> wl_surface@13.set_opaque_region(wl_region@22) [3237352.886] -> wl_region@22.destroy() [3237352.928] -> zxdg_toplevel_v6@17.unset_fullscreen() [16:01:51.352] Output 'wayland0' enabled with head(s) wayland0
First frame attachment
[ 1653.522] -> zwp_linux_dmabuf_v1@15.create_params(new id zwp_linux_buffer_params_v1@23) [ 1653.572] -> zwp_linux_buffer_params_v1@23.add(fd 27, 0, 0, 4480, 16777216, 4) [ 1653.630] -> zwp_linux_buffer_params_v1@23.add(fd 29, 1, 3440640, 256, 16777216, 4) [ 1653.667] -> zwp_linux_buffer_params_v1@23.create_immed(new id wl_buffer@22, 1100, 737, 875713089, 0) [ 1653.714] -> zwp_linux_buffer_params_v1@23.destroy() [ 1653.744] -> wl_surface@13.attach(wl_buffer@22, 0, 0) [ 1653.776] -> wl_surface@13.damage_buffer(0, 0, 1100, 737) [ 1654.115] -> wl_surface@13.commit()