Mesa (main): spirv: Workaround for RelaxedPrecision on OpLogical* in 3DMark

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jun 3 08:28:42 UTC 2022


Module: Mesa
Branch: main
Commit: eb5f4c2f6b0d41073e33481a70ce8facf8a607ef
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=eb5f4c2f6b0d41073e33481a70ce8facf8a607ef

Author: Danylo Piliaiev <dpiliaiev at igalia.com>
Date:   Fri May 27 15:11:52 2022 +0300

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 <dpiliaiev at igalia.com>
Reviewed-by: Emma Anholt <emma at anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16746>

---

 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");
    }



More information about the mesa-commit mailing list