From c2f80baa9398c708b773f96a27521282b2fad8fb Mon Sep 17 00:00:00 2001 From: Emma Anholt Date: Mon, 17 May 2021 12:08:35 -0700 Subject: [PATCH] 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 Reviewed-by: Adam Jackson Part-of: --- 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 =