mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-07 02:38:01 +02:00
renderer-gl: compress shader descriptions
Make the shader description strings easier to read. Before they looked
like this:
Compiling shader program for: SHADER_TEXCOORD_INPUT_ATTRIB
SHADER_VARIANT_SOLID SHADER_COLOR_EFFECT_NONE SHADER_COLOR_CURVE_LINPOW
SHADER_COLOR_MAPPING_IDENTITY SHADER_COLOR_CURVE_IDENTITY
+input_is_premult -tint -shader_blending (SHADER_COLOR_CURVE_IDENTITY,
SHADER_COLOR_CURVE_IDENTITY)
Now they look like this:
Compiling shader program for: attr tc, solid tex, no effect, CP{
linpow, I, I }, +premult_in -tint -shader_blending (I, I)
Turn the switches into arrays for easier handling.
This is different from weston_enum_map, because we need two different
strings for each value: a symbol for the shader code, and a description
for the debug logs.
Unknown enum values will abort(), but they should be asserted anyway.
Unfortunately getting a weston_compositor here would be inconvenient for
using weston-assert macros.
Signed-off-by: Pekka Paalanen <pekka.paalanen@collabora.com>
This commit is contained in:
parent
aaed41798f
commit
9d2fbd5455
1 changed files with 87 additions and 74 deletions
|
|
@ -101,81 +101,94 @@ struct gl_shader {
|
|||
GLint yuv_coefficients_uniform;
|
||||
};
|
||||
|
||||
static const char *
|
||||
struct gl_shader_enum_map {
|
||||
const char *symbol;
|
||||
const char *desc;
|
||||
};
|
||||
|
||||
static const struct gl_shader_enum_map *
|
||||
gl_shader_enum_map_get_(const struct gl_shader_enum_map *map,
|
||||
size_t map_len,
|
||||
unsigned value)
|
||||
{
|
||||
if (value >= map_len)
|
||||
abort();
|
||||
|
||||
if (!map[value].symbol)
|
||||
abort();
|
||||
|
||||
return &map[value];
|
||||
}
|
||||
|
||||
#define gl_shader_enum_map_get(map, value) gl_shader_enum_map_get_((map), ARRAY_LENGTH(map), (value))
|
||||
|
||||
#define ENUMVAL(sym, text) [sym] = { #sym, text }
|
||||
|
||||
static const struct gl_shader_enum_map gl_shader_texcoord_input_mapping[] = {
|
||||
ENUMVAL(SHADER_TEXCOORD_INPUT_SURFACE, "surf"),
|
||||
ENUMVAL(SHADER_TEXCOORD_INPUT_ATTRIB, "attr"),
|
||||
};
|
||||
|
||||
static const struct gl_shader_enum_map *
|
||||
gl_shader_texcoord_input_to_string(enum gl_shader_texcoord_input kind)
|
||||
{
|
||||
switch (kind) {
|
||||
#define CASERET(x) case x: return #x;
|
||||
CASERET(SHADER_TEXCOORD_INPUT_SURFACE)
|
||||
CASERET(SHADER_TEXCOORD_INPUT_ATTRIB)
|
||||
#undef CASERET
|
||||
}
|
||||
|
||||
return "!?!?"; /* never reached */
|
||||
return gl_shader_enum_map_get(gl_shader_texcoord_input_mapping, kind);
|
||||
}
|
||||
|
||||
static const char *
|
||||
static const struct gl_shader_enum_map gl_shader_texture_variant_mapping[] = {
|
||||
ENUMVAL(SHADER_VARIANT_NONE, "none"),
|
||||
ENUMVAL(SHADER_VARIANT_RGBA, "RGBA"),
|
||||
ENUMVAL(SHADER_VARIANT_Y_U_V, "Y_U_V"),
|
||||
ENUMVAL(SHADER_VARIANT_Y_UV, "Y_UV"),
|
||||
ENUMVAL(SHADER_VARIANT_XYUV, "XYUV"),
|
||||
ENUMVAL(SHADER_VARIANT_SOLID, "solid"),
|
||||
ENUMVAL(SHADER_VARIANT_EXTERNAL, "external"),
|
||||
};
|
||||
|
||||
static const struct gl_shader_enum_map *
|
||||
gl_shader_texture_variant_to_string(enum gl_shader_texture_variant v)
|
||||
{
|
||||
switch (v) {
|
||||
#define CASERET(x) case x: return #x;
|
||||
CASERET(SHADER_VARIANT_NONE)
|
||||
CASERET(SHADER_VARIANT_RGBA)
|
||||
CASERET(SHADER_VARIANT_Y_U_V)
|
||||
CASERET(SHADER_VARIANT_Y_UV)
|
||||
CASERET(SHADER_VARIANT_XYUV)
|
||||
CASERET(SHADER_VARIANT_SOLID)
|
||||
CASERET(SHADER_VARIANT_EXTERNAL)
|
||||
#undef CASERET
|
||||
}
|
||||
|
||||
return "!?!?"; /* never reached */
|
||||
return gl_shader_enum_map_get(gl_shader_texture_variant_mapping, v);
|
||||
}
|
||||
|
||||
static const char *
|
||||
static const struct gl_shader_enum_map gl_shader_color_effect_mapping[] = {
|
||||
ENUMVAL(SHADER_COLOR_EFFECT_NONE, "no"),
|
||||
ENUMVAL(SHADER_COLOR_EFFECT_INVERSION, "inv"),
|
||||
ENUMVAL(SHADER_COLOR_EFFECT_GRAYSCALE, "gray"),
|
||||
ENUMVAL(SHADER_COLOR_EFFECT_CVD_CORRECTION, "CVD-corr"),
|
||||
};
|
||||
|
||||
static const struct gl_shader_enum_map *
|
||||
gl_shader_color_effect_to_string(enum gl_shader_color_effect kind)
|
||||
{
|
||||
switch(kind) {
|
||||
#define CASERET(x) case x: return #x;
|
||||
CASERET(SHADER_COLOR_EFFECT_NONE)
|
||||
CASERET(SHADER_COLOR_EFFECT_INVERSION)
|
||||
CASERET(SHADER_COLOR_EFFECT_GRAYSCALE)
|
||||
CASERET(SHADER_COLOR_EFFECT_CVD_CORRECTION)
|
||||
#undef CASERET
|
||||
}
|
||||
|
||||
return "!?!?"; /* never reached */
|
||||
return gl_shader_enum_map_get(gl_shader_color_effect_mapping, kind);
|
||||
}
|
||||
|
||||
static const char *
|
||||
static const struct gl_shader_enum_map gl_shader_color_curve_mapping[] = {
|
||||
ENUMVAL(SHADER_COLOR_CURVE_IDENTITY, "I"),
|
||||
ENUMVAL(SHADER_COLOR_CURVE_LUT_3x1D, "3x1D"),
|
||||
ENUMVAL(SHADER_COLOR_CURVE_LINPOW, "linpow"),
|
||||
ENUMVAL(SHADER_COLOR_CURVE_POWLIN, "powlin"),
|
||||
ENUMVAL(SHADER_COLOR_CURVE_PQ, "PQ"),
|
||||
ENUMVAL(SHADER_COLOR_CURVE_PQ_INVERSE, "PQ⁻¹"),
|
||||
};
|
||||
|
||||
static const struct gl_shader_enum_map *
|
||||
gl_shader_color_curve_to_string(enum gl_shader_color_curve kind)
|
||||
{
|
||||
switch (kind) {
|
||||
#define CASERET(x) case x: return #x;
|
||||
CASERET(SHADER_COLOR_CURVE_IDENTITY)
|
||||
CASERET(SHADER_COLOR_CURVE_LUT_3x1D)
|
||||
CASERET(SHADER_COLOR_CURVE_LINPOW)
|
||||
CASERET(SHADER_COLOR_CURVE_POWLIN)
|
||||
CASERET(SHADER_COLOR_CURVE_PQ)
|
||||
CASERET(SHADER_COLOR_CURVE_PQ_INVERSE)
|
||||
#undef CASERET
|
||||
}
|
||||
|
||||
return "!?!?"; /* never reached */
|
||||
return gl_shader_enum_map_get(gl_shader_color_curve_mapping, kind);
|
||||
}
|
||||
|
||||
static const char *
|
||||
static const struct gl_shader_enum_map gl_shader_color_mapping_mapping[] = {
|
||||
ENUMVAL(SHADER_COLOR_MAPPING_IDENTITY, "I"),
|
||||
ENUMVAL(SHADER_COLOR_MAPPING_3DLUT, "3DLUT"),
|
||||
ENUMVAL(SHADER_COLOR_MAPPING_MATRIX, "M"),
|
||||
};
|
||||
|
||||
static const struct gl_shader_enum_map *
|
||||
gl_shader_color_mapping_to_string(enum gl_shader_color_mapping kind)
|
||||
{
|
||||
switch (kind) {
|
||||
#define CASERET(x) case x: return #x;
|
||||
CASERET(SHADER_COLOR_MAPPING_IDENTITY)
|
||||
CASERET(SHADER_COLOR_MAPPING_3DLUT)
|
||||
CASERET(SHADER_COLOR_MAPPING_MATRIX)
|
||||
#undef CASERET
|
||||
}
|
||||
|
||||
return "!?!?"; /* never reached */
|
||||
return gl_shader_enum_map_get(gl_shader_color_mapping_mapping, kind);
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -243,18 +256,18 @@ create_shader_description_string(const struct gl_shader_requirements *req)
|
|||
int size;
|
||||
char *str;
|
||||
|
||||
size = asprintf(&str, "%s %s %s %s %s %s %cinput_is_premult %ctint %cshader_blending (%s, %s)",
|
||||
gl_shader_texcoord_input_to_string(req->texcoord_input),
|
||||
gl_shader_texture_variant_to_string(req->variant),
|
||||
gl_shader_color_effect_to_string(req->color_effect),
|
||||
gl_shader_color_curve_to_string(req->color_pre_curve),
|
||||
gl_shader_color_mapping_to_string(req->color_mapping),
|
||||
gl_shader_color_curve_to_string(req->color_post_curve),
|
||||
size = asprintf(&str, "%s tc, %s tex, %s effect, CP{ %s, %s, %s }, %cpremult_in %ctint %cshader_blending (%s, %s)",
|
||||
gl_shader_texcoord_input_to_string(req->texcoord_input)->desc,
|
||||
gl_shader_texture_variant_to_string(req->variant)->desc,
|
||||
gl_shader_color_effect_to_string(req->color_effect)->desc,
|
||||
gl_shader_color_curve_to_string(req->color_pre_curve)->desc,
|
||||
gl_shader_color_mapping_to_string(req->color_mapping)->desc,
|
||||
gl_shader_color_curve_to_string(req->color_post_curve)->desc,
|
||||
req->input_is_premult ? '+' : '-',
|
||||
req->tint ? '+' : '-',
|
||||
req->shader_blending ? '+' : '-',
|
||||
gl_shader_color_curve_to_string(req->fb_fetch_curve),
|
||||
gl_shader_color_curve_to_string(req->fb_store_curve));
|
||||
gl_shader_color_curve_to_string(req->fb_fetch_curve)->desc,
|
||||
gl_shader_color_curve_to_string(req->fb_store_curve)->desc);
|
||||
if (size < 0)
|
||||
return NULL;
|
||||
return str;
|
||||
|
|
@ -269,7 +282,7 @@ create_vertex_shader_config_string(const struct gl_shader_requirements *req)
|
|||
size = asprintf(&str,
|
||||
"#define DEF_TEXCOORD_INPUT %s\n"
|
||||
"#define DEF_WIREFRAME %s\n",
|
||||
gl_shader_texcoord_input_to_string(req->texcoord_input),
|
||||
gl_shader_texcoord_input_to_string(req->texcoord_input)->symbol,
|
||||
req->wireframe ? "true" : "false");
|
||||
|
||||
if (size < 0)
|
||||
|
|
@ -300,14 +313,14 @@ create_fragment_shader_config_string(const struct gl_shader_requirements *req)
|
|||
req->tint ? "true" : "false",
|
||||
req->input_is_premult ? "true" : "false",
|
||||
req->wireframe ? "true" : "false",
|
||||
gl_shader_color_curve_to_string(req->color_pre_curve),
|
||||
gl_shader_color_mapping_to_string(req->color_mapping),
|
||||
gl_shader_color_curve_to_string(req->color_post_curve),
|
||||
gl_shader_color_curve_to_string(req->color_pre_curve)->symbol,
|
||||
gl_shader_color_mapping_to_string(req->color_mapping)->symbol,
|
||||
gl_shader_color_curve_to_string(req->color_post_curve)->symbol,
|
||||
req->shader_blending ? "1" : "0",
|
||||
gl_shader_color_curve_to_string(req->fb_fetch_curve),
|
||||
gl_shader_color_curve_to_string(req->fb_store_curve),
|
||||
gl_shader_color_effect_to_string(req->color_effect),
|
||||
gl_shader_texture_variant_to_string(req->variant));
|
||||
gl_shader_color_curve_to_string(req->fb_fetch_curve)->symbol,
|
||||
gl_shader_color_curve_to_string(req->fb_store_curve)->symbol,
|
||||
gl_shader_color_effect_to_string(req->color_effect)->symbol,
|
||||
gl_shader_texture_variant_to_string(req->variant)->symbol);
|
||||
if (size < 0)
|
||||
return NULL;
|
||||
return str;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue