diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp index 17f0632093e..9db94540be6 100644 --- a/src/mesa/state_tracker/st_glsl_to_nir.cpp +++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp @@ -401,6 +401,12 @@ st_nir_preprocess(struct st_context *st, struct gl_program *prog, NIR_PASS_V(nir, nir_split_var_copies); NIR_PASS_V(nir, nir_lower_var_copies); + enum pipe_shader_type pstage = pipe_shader_type_from_mesa(stage); + if (st->screen->get_shader_param(st->screen, pstage, PIPE_SHADER_CAP_FP16) && + st->screen->get_shader_param(st->screen, pstage, PIPE_SHADER_CAP_INT16)) { + NIR_PASS_V(nir, nir_lower_mediump_vars, nir_var_function_temp | nir_var_shader_temp | nir_var_mem_shared); + } + if (options->lower_to_scalar) { NIR_PASS_V(nir, nir_lower_alu_to_scalar, options->lower_to_scalar_filter, NULL);