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 <robdclark@chromium.org>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6189>
This commit is contained in:
Rob Clark
2020-08-05 09:56:52 -07:00
committed by Marge Bot
parent 4f060549be
commit 0a763c0c86
4 changed files with 13 additions and 0 deletions

View File

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