Mesa (master): glsl/lower_precision: split out const lowering
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Wed Aug 5 21:19:32 UTC 2020
Module: Mesa
Branch: master
Commit: 0a763c0c86bb9845c2eac9726690d83b82d46978
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=0a763c0c86bb9845c2eac9726690d83b82d46978
Author: Rob Clark <robdclark at chromium.org>
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 <robdclark at chromium.org>
Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Marek Olšák <marek.olsak at amd.com>
Reviewed-by: Eric Anholt <eric at anholt.net>
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 =
More information about the mesa-commit
mailing list