From: Alyssa Rosenzweig Date: Sun, 28 Apr 2019 15:46:47 +0000 (+0000) Subject: panfrost/midgard: Safety check immediate precision degradations X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=3978614d8818ece6e1e252490f4bcab670db806a;p=mesa.git panfrost/midgard: Safety check immediate precision degradations Signed-off-by: Alyssa Rosenzweig --- 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 */