Module: Mesa Branch: master Commit: 0a763c0c86bb9845c2eac9726690d83b82d46978 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a763c0c86bb9845c2eac9726690d83b82d46978
Author: Rob Clark <[email protected]> Date: Wed Aug 5 09:56:52 2020 -0700 glsl/lower_precision: split out const lowering Some hw can narrow 32b const/uniform to 16b on load.. and in particular lowering constants to 16b would break const->uniform lowering. Allow them to lower temps to 16b, while skipping consts. Initially it is set to the same value as LowerPrecisionTemporaries, to preserve the current behavior. Signed-off-by: Rob Clark <[email protected]> Reviewed-by: Alyssa Rosenzweig <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Reviewed-by: Eric Anholt <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6189> --- src/compiler/glsl/lower_precision.cpp | 4 ++++ src/compiler/glsl/standalone.cpp | 1 + src/mesa/main/mtypes.h | 7 +++++++ src/mesa/state_tracker/st_extensions.c | 1 + 4 files changed, 13 insertions(+) diff --git a/src/compiler/glsl/lower_precision.cpp b/src/compiler/glsl/lower_precision.cpp index 1f116cd40ff..07798f3b200 100644 --- a/src/compiler/glsl/lower_precision.cpp +++ b/src/compiler/glsl/lower_precision.cpp @@ -1028,6 +1028,8 @@ lower_variables_visitor::visit(ir_variable *var) /* Lower constant initializers. */ if (var->constant_value && var->type == var->constant_value->type) { + if (!options->LowerPrecisionConstants) + return visit_continue; var->constant_value = var->constant_value->clone(ralloc_parent(var), NULL); lower_constant(var->constant_value); @@ -1035,6 +1037,8 @@ lower_variables_visitor::visit(ir_variable *var) if (var->constant_initializer && var->type == var->constant_initializer->type) { + if (!options->LowerPrecisionConstants) + return visit_continue; var->constant_initializer = var->constant_initializer->clone(ralloc_parent(var), NULL); lower_constant(var->constant_initializer); diff --git a/src/compiler/glsl/standalone.cpp b/src/compiler/glsl/standalone.cpp index f0305f735bb..c1510d51e0b 100644 --- a/src/compiler/glsl/standalone.cpp +++ b/src/compiler/glsl/standalone.cpp @@ -442,6 +442,7 @@ standalone_compile_shader(const struct standalone_options *_options, options->LowerPrecisionInt16 = true; options->LowerPrecisionDerivatives = true; options->LowerPrecisionTemporaries = true; + options->LowerPrecisionConstants = true; } } diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index a6af3fbca17..1df6d34b5d4 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -3210,6 +3210,13 @@ struct gl_shader_compiler_options GLboolean LowerPrecisionInt16; GLboolean LowerPrecisionDerivatives; + /** + * This enables lowering of 16b constants. Some drivers may not + * to lower constants to 16b (ie. if the hw can do automatic + * narrowing on constant load) + */ + GLboolean LowerPrecisionConstants; + /** * This enables 16-bit phis in NIR, 16-bit loop counters, 16-bit indirect * arrays, etc. diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c index e39ee75905e..331df122dda 100644 --- a/src/mesa/state_tracker/st_extensions.c +++ b/src/mesa/state_tracker/st_extensions.c @@ -348,6 +348,7 @@ void st_init_limits(struct pipe_screen *screen, screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_INT16); options->LowerPrecisionTemporaries = screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_GLSL_16BIT_TEMPS); + options->LowerPrecisionConstants = options->LowerPrecisionTemporaries; } c->MaxUserAssignableUniformLocations = _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
