From eb5f4c2f6b0d41073e33481a70ce8facf8a607ef Mon Sep 17 00:00:00 2001 From: Danylo Piliaiev Date: Fri, 27 May 2022 15:11:52 +0300 Subject: [PATCH] spirv: Workaround for RelaxedPrecision on OpLogical* in 3DMark Per spec RelaxedPrecision cannot be applied to bool types, however 3DMark Wild Life does it: OpDecorate %171 RelaxedPrecision ... %171 = OpLogicalAnd %bool %169 %170 Fixes crash in 3DMark Wild Life on Android. Signed-off-by: Danylo Piliaiev Reviewed-by: Emma Anholt Part-of: --- src/compiler/spirv/vtn_alu.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/compiler/spirv/vtn_alu.c b/src/compiler/spirv/vtn_alu.c index b35f38bffc5..f794b1b134c 100644 --- a/src/compiler/spirv/vtn_alu.c +++ b/src/compiler/spirv/vtn_alu.c @@ -165,6 +165,11 @@ vtn_mediump_downconvert(struct vtn_builder *b, enum glsl_base_type base_type, ni case GLSL_TYPE_INT: case GLSL_TYPE_UINT: return nir_i2imp(&b->nb, def); + /* Workaround for 3DMark Wild Life which has RelaxedPrecision on + * OpLogical* operations (which is forbidden by spec). + */ + case GLSL_TYPE_BOOL: + return def; default: unreachable("bad relaxed precision input type"); }