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 <marius.vlad@collabora.com>
This commit is contained in:
Marius Vlad 2026-04-28 17:40:03 +03:00 committed by Derek Foreman
parent b43cc0a5d4
commit f4ba4f49bb
3 changed files with 33 additions and 8 deletions

View file

@ -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 *

View file

@ -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);

View file

@ -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;
}