render: introduce wlr_render_rect_pass

Split rectangle rendering out of wlr_render_pass and add a dedicated
wlr_render_rect_pass interface.

Remove the add_rect hook from wlr_render_pass_impl and implement
rectangle rendering separately in the pixman, GLES2 and Vulkan
renderers.
This commit is contained in:
YaoBing Xiao 2026-03-13 10:49:41 +08:00
parent fd870f6d27
commit 33a27b055c
13 changed files with 258 additions and 9 deletions

View file

@ -377,6 +377,7 @@ void wlr_output_init(struct wlr_output *output, struct wlr_backend *backend,
wl_signal_init(&output->events.description);
wl_signal_init(&output->events.request_state);
wl_signal_init(&output->events.destroy);
wl_signal_init(&output->events.render_inited);
output->software_cursor_locks = env_parse_bool("WLR_NO_HARDWARE_CURSORS");
if (output->software_cursor_locks) {
@ -407,6 +408,7 @@ void wlr_output_finish(struct wlr_output *output) {
assert(wl_list_empty(&output->events.description.listener_list));
assert(wl_list_empty(&output->events.request_state.listener_list));
assert(wl_list_empty(&output->events.destroy.listener_list));
assert(wl_list_empty(&output->events.render_inited.listener_list));
wlr_output_destroy_global(output);

View file

@ -5,6 +5,7 @@
#include <wlr/render/allocator.h>
#include <wlr/render/interface.h>
#include <wlr/render/swapchain.h>
#include <wlr/render/interface.h>
#include <wlr/util/log.h>
#include <xf86drm.h>
#include "render/drm_format_set.h"
@ -35,6 +36,10 @@ bool wlr_output_init_render(struct wlr_output *output,
output->allocator = allocator;
output->renderer = renderer;
get_or_create_render_rect_pass(renderer);
wl_signal_emit_mutable(&output->events.render_inited, output);
return true;
}