aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2022-08-30output: fail commits if adaptive sync cannot be enabledSimon Ser
Previously, adaptive sync was just a hint and wouldn't make any atomic commit fail if the backend didn't support it. The main reason is wlr_output_test wasn't supported at the time. Now that we have a way for compositors to test whether a change can work, let's remove the exception for adaptive sync and convert it to a regular output state field.
2022-08-30output-layout: improve wlr_output_layout_output_in_direction()Kirill Primak
Now the function checks if the reference output belongs to the layout, and returns NULL if it doesn't.
2022-08-30output-layout: avoid uninitialized wlr_box fieldsKirill Primak
2022-08-30cursor: avoid uninitialized wlr_box fieldsKirill Primak
2022-08-30wlr_compositor: Don't leak region32 when calculating opaque regionAlexander Orzechowski
2022-08-29wlr_scene: Don't leak a region32 when texture failed to uploadAlexander Orzechowski
2022-08-29wlr_scene: More sanity checkingAlexander Orzechowski
The render list should neither contain scene trees or null buffers.
2022-08-29util/set: overhaulKirill Primak
2022-08-29util/array: unclutterKirill Primak
2022-08-28render/vulkan: fix memory type detectionBernardo Meurer
From a comment by emersion: > There is a logic error here: we pass 0xFFFFFFFF to vulkan_find_mem_type, which > returns an index, and then we logical-and that with mem_reqs.memoryTypeBits. > Instead we should pass mem_reqs.memoryTypeBits to vulkan_find_mem_type and use > the result for the memoryTypeIndex field directly. Ideally checking for errors > (-1 return value) in case no memory type is suitable. Closes: #3470
2022-08-28output: clean up after modifierless test failureIsaac Freund
If the first test in output_ensure_buffer() fails with modifiers we replace the swapchain with a modifierless swapchain and try again. However if that fails as well the output is currently stuck without modifiers until the next modeset. To fix this, destroy the modifierless swapchain if the test using it fails. The next output_attach_back_buffer() call will create a swapchain that allows modifiers when needed.
2022-08-26wlr_scene: Only consider visible parts of the node when culling backgroundAlexander Orzechowski
Originally, I thought that we could safely subtract opaque regions from the background even if the black rect optimization was kicking in. This is wrong because a scene node that isn't fully occluded will still appear in the render list even if its partially under a black rect. We need to make sure that while culling the background, we only consider opaque regions that are also visible. This will fix the black rect optimization with the background.
2022-08-26scene/wlr_scene:fix judgment of invisible nodeyiqiang
2022-08-25wlr_compositor: Use wlr_fbox_equalAlexander Orzechowski
2022-08-25wlr-output-management: fix broken assertsIsaac Freund
These asserts were broken in 4c1afb12 as new implementations were added without updating the wl_resource_instance_of() calls.
2022-08-24wlr-output-management: Implement version 3 release requestsIsaac Freund
Head/mode resources older than version 3 and lacking a release request are intentionally leaked as this is the only way to fix the race. Implements: https://gitlab.freedesktop.org/wlroots/wlr-protocols/-/merge_requests/114
2022-08-22wlr_scene: Initialize region32 before trying to use itAlexander Orzechowski
2022-08-22Use env helpersAlexander Orzechowski
2022-08-22util: Introduce env helpersAlexander Orzechowski
2022-08-22wlr_scene: Improve awkward code styleAlexander Orzechowski
2022-08-22wlr_scene: Cull backgroundAlexander Orzechowski
We don't need to worry about the black rect optimization here (that always assumes that there will be a black background) because the background is culled based on the render list. That means if a black rect is removed, the visibility will reach all the way to the bottom forcing the renderer to clear the area not breaking the assumption.
2022-08-19wlr_scene: Only enable black rect optimization if culling is enabledAlexander Orzechowski
If culling is not enabled, there is no longer any guarantee that the elements behind the rect won't be rendered. We must render the black rect in all circumstances to cover up anything rendered. This fixes the WLR_SCENE_DISABLE_VISIBILTY option.
2022-08-19wlr_scene: Simplify calculate_visibilty optionAlexander Orzechowski
2022-08-19wlr_scene: Convert render_list to wl_arrayKenny Levinsen
This simplifies some of the growth logic, but uses array_realloc to shrink the array if needed.
2022-08-19util/array: Add array_realloc for wl_arrayKenny Levinsen
array_realloc will grow the array for the target size like wl_insert_add, but will also shrink the array if the target size is sufficiently smaller than the current allocation.
2022-08-19types/wlr_xdg_output_v1: Fix wl_output.done bug.Mark Bolhuis
If the client binds to version 3 of zxdg_output_v1 and version 1 of wl_output no wl_output.done or zxdg_output_v1.done event is emitted [1]. Also no wl_output.done event is emitted when version 2 or lower of zxdg_output_v1 is bound to. Add a version check to output_manager_handle_get_xdg_output so that no wl_output.done event is emitted when using version 1 of wl_output and version 2 or lower of zxdg_output_v1. [1]: https://gitlab.freedesktop.org/wayland/wayland-protocols/-/issues/81
2022-08-18Remove wlr_signal_emit_safeAlexander Orzechowski
2022-08-18Use wl_signal_emit_mutableAlexander Orzechowski
2022-08-18build: remove libkms option and disable tests for libdrm fallbackSimon Zeni
2022-08-16wlr_scene: fix color value when filtering black boxesyiqiang
Signed-off-by: yiqiang <yiqiang@kylinos.cn>
2022-08-15wlr_scene: Use wlr_box_equalAlexander Orzechowski
2022-08-15wlr_scene: Use wlr_fbox_equalsAlexander Orzechowski
2022-08-15util/box: Introduce wlr_fbox_equalAlexander Orzechowski
2022-08-15util/box: Introduce wlr_box_equalAlexander Orzechowski
2022-08-14wlr_scene: Remove unused typedefAlexander Orzechowski
2022-08-14wlr_scene: Account for occlusion by other scene nodes when calculating ↵Alexander Orzechowski
visibility
2022-08-14wlr_scene: Calculate output intersections based on node visibilityAlexander Orzechowski
This has a few benefits one of them crucial for proper operation: - The primary output will be based on the largest area that is actually visible to the user. Presentation and frame done events are based on this state. This is important to do since we cull frame done events. If we happen to be in a situation where a surface sits mostly on output A and some on output B but is completely obstructed by for instance a fullscreen surface on output A we will erroneously send frame_done events based on output A. If we base things as they are in reality (visibility) the primary output will instead be output B and things will work properly. - The primary output will be NULL if the surface is completely hidden. Due to quirks with wayland, on a surface commit, frame done events are required to be sent. Therefore, a new frame will be submitted for rendering on the primary output. We can improve adaptive sync on completely hidden but enabled surfaces if we null out the primary output in this state. - The client will be more likely to choose better metadata to use for rendering to an output's optimal rendering characteristics.
2022-08-14wlr_scene/surface: Hook through opaque metadataAlexander Orzechowski
2022-08-14wlr_scene: Introduce buffer opaque region metadataAlexander Orzechowski
2022-08-14wlr_scene: Rewrite direct scan out logic to rely on visibilityAlexander Orzechowski
Also make the regular rendering logic use the introduced render list.
2022-08-14wlr_scene: Don't render non visible parts of textures/rectsAlexander Orzechowski
We can also get rid of the intersection checks in the rendering functions because we are guaranteed to already be in the node do to the prior intersection checking of the node visibility.
2022-08-14wlr_scene: Only send frame done events for visible buffersAlexander Orzechowski
2022-08-14wlr_scene_set_buffer_with_damage: Only damage the visible parts of the nodeAlexander Orzechowski
2022-08-14wlr_scene: Rework damage handlingAlexander Orzechowski
Simplify damage handling by using our cached visibility state. Damaging can happen in one step because since we can use the old visibility state which represent what portions of the screen the scene node was. This way we can damage everything in one step after the fact.
2022-08-14wlr_scene: Add per scene node visibilityAlexander Orzechowski
2022-08-14wlr_scene: Damage scene on node destroy by disabling nodeAlexander Orzechowski
This removes one trivial call of scene_node_damage_whole. It's easier to disable the node later than it is to do the damage dance later.
2022-08-14wlr_scene: Introduce scene_nodes_in_boxAlexander Orzechowski
Will query the scene for all nodes that appear in the given wlr_box. The nodes will be sent to the iterator from closest to farthest from the eye. Refactor wlr_scene_node_at to use this new function.
2022-08-12surface: implement wl_surface.offsetSimon Ser
References: https://gitlab.freedesktop.org/wayland/wayland/-/merge_requests/123
2022-08-12surface: add WLR_SURFACE_STATE_OFFSETSimon Ser
This indicates whether the surface offset has changed.
2022-08-12render: replace wlr_texture_write_pixels with update_from_bufferSimon Ser
This lets the renderer handle the wlr_buffer directly, just like it does in texture_from_buffer. This also allows the renderer to batch the rectangle updates, and update more than the damage region if desirable (e.g. too many rects), so can be more efficient.