Mesa (main): mesa/st: Only use 16-bit ints or floats in the NIR path.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu May 20 23:41:06 UTC 2021


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

Author: Emma Anholt <emma at anholt.net>
Date:   Mon May 17 12:08:35 2021 -0700

mesa/st: Only use 16-bit ints or floats in the NIR path.

For i915g or other drivers using the draw path, llvmpipe (reasonably)
reports int16 support.  However, if we try to link and translate an int16
shader using st_glsl_to_tgsi, it will throw assertion failures.

Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig at collabora.com>
Reviewed-by: Adam Jackson <ajax at redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10874>

---

 src/mesa/state_tracker/st_extensions.c | 22 ++++++++++++----------
 1 file changed, 12 insertions(+), 10 deletions(-)

diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 85c56c057df..462861fb8bf 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -379,16 +379,18 @@ void st_init_limits(struct pipe_screen *screen,
             options->LowerBuiltinVariablesXfb |= VARYING_BIT_PSIZ;
       }
 
-      options->LowerPrecisionFloat16 =
-         screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_FP16);
-      options->LowerPrecisionDerivatives =
-         screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_FP16_DERIVATIVES);
-      options->LowerPrecisionInt16 =
-         screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_INT16);
-      options->LowerPrecisionConstants =
-         screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_GLSL_16BIT_CONSTS);
-      options->LowerPrecisionFloat16Uniforms =
-         screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_FP16_CONST_BUFFERS);
+      if (prefer_nir) {
+         options->LowerPrecisionFloat16 =
+            screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_FP16);
+         options->LowerPrecisionDerivatives =
+            screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_FP16_DERIVATIVES);
+         options->LowerPrecisionInt16 =
+            screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_INT16);
+         options->LowerPrecisionConstants =
+            screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_GLSL_16BIT_CONSTS);
+         options->LowerPrecisionFloat16Uniforms =
+            screen->get_shader_param(screen, sh, PIPE_SHADER_CAP_FP16_CONST_BUFFERS);
+      }
    }
 
    c->MaxUserAssignableUniformLocations =



More information about the mesa-commit mailing list