From f4ba4f49bbb556e8b850f4ca922c7c18de5ceb22 Mon Sep 17 00:00:00 2001 From: Marius Vlad Date: Tue, 28 Apr 2026 17:40:03 +0300 Subject: [PATCH] renderer-gl: Add Perfetto debug annotations for shader configs This adds Perfetto debug annotations for printing optimizations, color vision deficiencies, alpha. Signed-off-by: Marius Vlad --- libweston/renderer-gl/gl-renderer-internal.h | 2 +- libweston/renderer-gl/gl-renderer.c | 8 ++--- libweston/renderer-gl/gl-shaders.c | 31 ++++++++++++++++++-- 3 files changed, 33 insertions(+), 8 deletions(-) diff --git a/libweston/renderer-gl/gl-renderer-internal.h b/libweston/renderer-gl/gl-renderer-internal.h index a15574f05..87bd70132 100644 --- a/libweston/renderer-gl/gl-renderer-internal.h +++ b/libweston/renderer-gl/gl-renderer-internal.h @@ -765,7 +765,7 @@ void gl_renderer_garbage_collect_programs(struct gl_renderer *gr); bool -gl_renderer_use_program(struct gl_renderer *gr, +gl_renderer_use_program(struct gl_renderer *gr, struct weston_paint_node *pnode, const struct gl_shader_config *sconf); struct weston_log_scope * diff --git a/libweston/renderer-gl/gl-renderer.c b/libweston/renderer-gl/gl-renderer.c index e4e2de61a..5eb45f6cd 100644 --- a/libweston/renderer-gl/gl-renderer.c +++ b/libweston/renderer-gl/gl-renderer.c @@ -2414,7 +2414,7 @@ draw_mesh(struct gl_renderer *gr, set_debug_mode(gr, sconf, barycentrics, opaque); gl_log_paint_node(gr, "\t\tdrawing paint node mesh\n"); - if (!gl_renderer_use_program(gr, sconf)) + if (!gl_renderer_use_program(gr, pnode, sconf)) gl_renderer_send_shader_error(pnode); /* Use fallback shader. */ glVertexAttribPointer(SHADER_ATTRIB_LOC_POSITION, 2, GL_FLOAT, GL_FALSE, @@ -2954,7 +2954,7 @@ draw_output_border_texture(struct gl_renderer *gr, sconf->input_num = 1; gl_log_paint_node(gr, "\t\tdrawing output border texture\n"); - gl_renderer_use_program(gr, sconf); + gl_renderer_use_program(gr, NULL, sconf); GLfloat texcoord[] = { 0.0f, 0.0f, @@ -3075,7 +3075,7 @@ blit_shadow_to_output(struct weston_output *output, pixman_region32_init(&translated_damage); gl_log_paint_node(gr, "\t\tdrawing shadow output\n"); - gl_renderer_use_program(gr, &sconf); + gl_renderer_use_program(gr, NULL, &sconf); set_blend_state(gr, NULL, false); /* output_damage is in global coordinates */ @@ -4566,7 +4566,7 @@ gl_renderer_surface_copy_content(struct weston_surface *surface, WESTON_MATRIX_TRANSFORM_TRANSLATE; gl_log_paint_node(gr, "\t\tcopying surface\n"); - if (!gl_renderer_use_program(gr, &sconf)) + if (!gl_renderer_use_program(gr, NULL, &sconf)) goto use_program_error; glEnableVertexAttribArray(SHADER_ATTRIB_LOC_POSITION); diff --git a/libweston/renderer-gl/gl-shaders.c b/libweston/renderer-gl/gl-shaders.c index 02ba41c7d..8861a69b4 100644 --- a/libweston/renderer-gl/gl-shaders.c +++ b/libweston/renderer-gl/gl-shaders.c @@ -46,6 +46,7 @@ #include "shared/helpers.h" #include "shared/timespec-util.h" #include "shared/weston-assert.h" +#include "weston-trace.h" /* static const char vertex_shader[]; vertex.glsl */ #include "vertex-shader.h" @@ -843,7 +844,7 @@ gl_shader_texture_variant_get_target(enum gl_shader_texture_variant v) } static void -gl_shader_load_config(struct gl_renderer *gr, +gl_shader_load_config(struct gl_renderer *gr, struct weston_paint_node *pnode, struct gl_shader *shader, const struct gl_shader_config *sconf) { @@ -853,6 +854,11 @@ gl_shader_load_config(struct gl_renderer *gr, float swizzle_sub[4]; int i, j; + WESTON_TRACE_BEGIN_ANNOTATION(); + if (pnode) { + WESTON_TRACE_ANNOTATE_ADD_STR("paint node", pnode->internal_name); + } + glUniformMatrix4fv(shader->proj_uniform, 1, GL_FALSE, sconf->projection.M.colmaj); @@ -865,6 +871,10 @@ gl_shader_load_config(struct gl_renderer *gr, "\t\tcolor: r: %.2f, g: %.2f, b: %.2f, a: %.2f\n", sconf->unicolor[0], sconf->unicolor[1], sconf->unicolor[2], sconf->unicolor[3]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("color r", sconf->unicolor[0]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("color g", sconf->unicolor[1]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("color b", sconf->unicolor[2]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("color a", sconf->unicolor[3]); glUniform4fv(shader->color_uniform, 1, sconf->unicolor); } if (shader->tint_uniform != -1) { @@ -872,10 +882,15 @@ gl_shader_load_config(struct gl_renderer *gr, "\t\ttint: r: %.2f, g: %.2f, b: %.2f, a: %.2f\n", sconf->tint[0], sconf->tint[1], sconf->tint[2], sconf->tint[3]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("tint r", sconf->tint[0]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("tint g", sconf->tint[1]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("tint b", sconf->tint[2]); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("tint a", sconf->tint[3]); glUniform4fv(shader->tint_uniform, 1, sconf->tint); } weston_log_scope_printf(gr->paint_node_scope, "\t\talpha: %.2f\n", sconf->view_alpha); + WESTON_TRACE_ANNOTATE_ADD_FLOAT("alpha", sconf->view_alpha); glUniform1f(shader->view_alpha_uniform, sconf->view_alpha); assert(sconf->input_num <= SHADER_INPUT_TEX_MAX); @@ -920,9 +935,11 @@ gl_shader_load_config(struct gl_renderer *gr, break; case SHADER_COLOR_EFFECT_INVERSION: weston_log_scope_printf(gr->paint_node_scope, "\t\tcolor effect: inversion\n"); + WESTON_TRACE_ANNOTATE_ADD_STR("color effect", "inversion"); break; case SHADER_COLOR_EFFECT_GRAYSCALE: weston_log_scope_printf(gr->paint_node_scope, "\t\tcolor effect: grayscale\n"); + WESTON_TRACE_ANNOTATE_ADD_STR("color effect", "greyscale"); break; case SHADER_COLOR_EFFECT_CVD_CORRECTION: weston_assert_int_ne(gr->compositor, shader->cvd_correction_uniform, -1); @@ -931,6 +948,8 @@ gl_shader_load_config(struct gl_renderer *gr, glUniformMatrix3fv(shader->cvd_correction_uniform, 1, GL_FALSE, sconf->color_effect.cvd.correction.colmaj); + WESTON_TRACE_ANNOTATE_ADD_STR("color effect", + weston_output_cvd_type_to_str(sconf->color_effect.cvd)); break; } @@ -958,11 +977,17 @@ gl_shader_load_config(struct gl_renderer *gr, TEX_UNIT_FB_STORE_CURVE); } + if (pnode) { + WESTON_TRACE_COMMIT_ANNOTATION(&pnode->flow_id); + } else { + WESTON_TRACE_COMMIT_ANNOTATION(NULL); + } + glActiveTexture(GL_TEXTURE0); } bool -gl_renderer_use_program(struct gl_renderer *gr, +gl_renderer_use_program(struct gl_renderer *gr, struct weston_paint_node *pnode, const struct gl_shader_config *sconf) { static const GLfloat fallback_shader_color[4] = { 0.2, 0.1, 0.0, 1.0 }; @@ -1004,7 +1029,7 @@ gl_renderer_use_program(struct gl_renderer *gr, weston_log_scope_printf(gr->paint_node_scope, "\t\t\tshader id: %d\n", gr->current_shader->program); - gl_shader_load_config(gr, shader, sconf); + gl_shader_load_config(gr, pnode, shader, sconf); return true; }