From 7ed55f839061b98c753e373a2e271d5db39a32b9 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Tue, 17 Mar 2026 11:31:59 -0500 Subject: [PATCH] compositor,renderers: Store a pointer to the view transform in pnode This pointer is the same for the life of the view, even if the matrix changes. This is a last pedantic step towards preventing renderers from directly accessing a weston_view. Signed-off-by: Derek Foreman --- libweston/compositor.c | 2 ++ libweston/libweston-internal.h | 1 + libweston/renderer-gl/gl-renderer.c | 4 ++-- libweston/renderer-vulkan/vulkan-renderer.c | 2 +- 4 files changed, 6 insertions(+), 3 deletions(-) diff --git a/libweston/compositor.c b/libweston/compositor.c index 2a761ccc8..c4b23a965 100644 --- a/libweston/compositor.c +++ b/libweston/compositor.c @@ -553,6 +553,8 @@ weston_paint_node_create(struct weston_surface *surface, pnode->plane = &pnode->output->primary_plane; pnode->plane_next = NULL; + pnode->view_transform_matrix = &view->transform.matrix; + pnode->need_hole = false; pnode->status = WESTON_PAINT_NODE_ALL_DIRTY & ~WESTON_PAINT_NODE_PLANE_DIRTY; diff --git a/libweston/libweston-internal.h b/libweston/libweston-internal.h index de4b1cf1c..08dd5085f 100644 --- a/libweston/libweston-internal.h +++ b/libweston/libweston-internal.h @@ -687,6 +687,7 @@ struct weston_paint_node { /* struct weston_view::paint_node_list */ struct wl_list view_link; struct weston_view *view; + struct weston_matrix *view_transform_matrix; /* struct weston_output::paint_node_list */ struct wl_list output_link; diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index 2d50ef8bb..7eab6ede0 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -1728,7 +1728,7 @@ prepare_solid_draw(struct gl_shader_config *sconf, .variant = SHADER_VARIANT_SOLID, .input_is_premult = true, }, - .projection = pnode->view->transform.matrix, + .projection = *pnode->view_transform_matrix, .view_alpha = pnode->view_alpha, .unicolor = { pnode->solid.r, pnode->solid.g, @@ -1917,7 +1917,7 @@ prepare_textured_draw(struct gl_shader_config *sconf, *sconf = (struct gl_shader_config) { .req.texcoord_input = SHADER_TEXCOORD_INPUT_SURFACE, - .projection = pnode->view->transform.matrix, + .projection = *pnode->view_transform_matrix, .surface_to_buffer = pnode->surface->surface_to_buffer_matrix, .view_alpha = pnode->view_alpha, diff --git a/libweston/renderer-vulkan/vulkan-renderer.c b/libweston/renderer-vulkan/vulkan-renderer.c index d5db7a1eb..987d730c2 100644 --- a/libweston/renderer-vulkan/vulkan-renderer.c +++ b/libweston/renderer-vulkan/vulkan-renderer.c @@ -1523,7 +1523,7 @@ vulkan_pipeline_config_init_for_paint_node(struct vulkan_pipeline_config *pconf, .renderpass = vo->renderpass, .green_tint = (vr->debug_mode == DEBUG_MODE_FRAGMENT), }, - .projection = pnode->view->transform.matrix, + .projection = *pnode->view_transform_matrix, .surface_to_buffer = pnode->surface->surface_to_buffer_matrix, .view_alpha = pnode->view_alpha,