Module: Mesa Branch: master Commit: 60bee4c70c0d956ecdcae542a515f3e3a4ee328c URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=60bee4c70c0d956ecdcae542a515f3e3a4ee328c
Author: Timothy Arceri <tarc...@itsqueeze.com> Date: Thu May 28 11:08:42 2020 +1000 glsl: add can_remove_uniform() helper to the NIR linker This helper reflects the rules we follow in the GLSL IR linker when deciding if we can remove a dead uniform. This check is required to avoid regressions when turning on NIR dead uniform clean up in the following patch. Reviewed-by: Kenneth Graunke <kenn...@whitecape.org> Reviewed-by: Eric Anholt <e...@anholt.net> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4797> --- src/compiler/glsl/gl_nir_linker.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/src/compiler/glsl/gl_nir_linker.c b/src/compiler/glsl/gl_nir_linker.c index fb8b3e0c340..2fa1290bad4 100644 --- a/src/compiler/glsl/gl_nir_linker.c +++ b/src/compiler/glsl/gl_nir_linker.c @@ -34,6 +34,38 @@ * the counter-part glsl/linker.cpp */ +static bool +can_remove_uniform(nir_variable *var) +{ + /* Section 2.11.6 (Uniform Variables) of the OpenGL ES 3.0.3 spec + * says: + * + * "All members of a named uniform block declared with a shared or + * std140 layout qualifier are considered active, even if they are not + * referenced in any shader in the program. The uniform block itself is + * also considered active, even if no member of the block is + * referenced." + * + * Although the spec doesn't state it std430 layouts are expect to behave + * the same way. If the variable is in a uniform block with one of those + * layouts, do not eliminate it. + */ + if (nir_variable_is_in_block(var) && + (glsl_get_ifc_packing(var->interface_type) != + GLSL_INTERFACE_PACKING_PACKED)) + return false; + + if (glsl_get_base_type(glsl_without_array(var->type)) == + GLSL_TYPE_SUBROUTINE) + return false; + + /* Uniform initializers could get used by another stage */ + if (var->constant_initializer) + return false; + + return true; +} + /** * Built-in / reserved GL variables names start with "gl_" */ _______________________________________________ mesa-commit mailing list mesa-commit@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-commit