Mesa (master): panfrost/midgard: Safety check immediate precision degradations
GitLab Mirror
gitlab-mirror at kemper.freedesktop.org
Sun Apr 28 21:41:47 UTC 2019
Module: Mesa
Branch: master
Commit: 3978614d8818ece6e1e252490f4bcab670db806a
URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=3978614d8818ece6e1e252490f4bcab670db806a
Author: Alyssa Rosenzweig <alyssa at rosenzweig.io>
Date: Sun Apr 28 15:46:47 2019 +0000
panfrost/midgard: Safety check immediate precision degradations
Signed-off-by: Alyssa Rosenzweig <alyssa at rosenzweig.io>
---
src/gallium/drivers/panfrost/midgard/midgard_compile.c | 15 ++++++++++++++-
1 file changed, 14 insertions(+), 1 deletion(-)
diff --git a/src/gallium/drivers/panfrost/midgard/midgard_compile.c b/src/gallium/drivers/panfrost/midgard/midgard_compile.c
index 2b97bbc86f6..348ec861404 100644
--- a/src/gallium/drivers/panfrost/midgard/midgard_compile.c
+++ b/src/gallium/drivers/panfrost/midgard/midgard_compile.c
@@ -3047,7 +3047,20 @@ embedded_to_inline_constant(compiler_context *ctx)
if (scaled_constant != iconstants[component])
continue;
} else {
- scaled_constant = _mesa_float_to_half((float) ins->constants[component]);
+ float original = (float) ins->constants[component];
+ scaled_constant = _mesa_float_to_half(original);
+
+ /* Check for loss of precision. If this is
+ * mediump, we don't care, but for a highp
+ * shader, we need to pay attention. NIR
+ * doesn't yet tell us which mode we're in!
+ * Practically this prevents most constants
+ * from being inlined, sadly. */
+
+ float fp32 = _mesa_half_to_float(scaled_constant);
+
+ if (fp32 != original)
+ continue;
}
/* We don't know how to handle these with a constant */
More information about the mesa-commit
mailing list