summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/mesa/state_tracker/st_program.c36
1 files changed, 14 insertions, 22 deletions
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index 81d6e16fefa..1beba6317b6 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -450,7 +450,20 @@ st_translate_vertex_program(struct st_context *st,
if (stp->Base.Parameters->NumParameters)
stp->affected_states |= ST_NEW_VS_CONSTANTS;
- /* No samplers are allowed in ARB_vp. */
+ /* Translate to NIR if preferred. */
+ if (st->pipe->screen->get_shader_param(st->pipe->screen,
+ PIPE_SHADER_VERTEX,
+ PIPE_SHADER_CAP_PREFERRED_IR)) {
+ assert(!stp->glsl_to_tgsi);
+
+ if (stp->Base.nir)
+ ralloc_free(stp->Base.nir);
+
+ stp->state.type = PIPE_SHADER_IR_NIR;
+ stp->Base.nir = st_translate_prog_to_nir(st, &stp->Base,
+ MESA_SHADER_VERTEX);
+ return true;
+ }
}
/* Get semantic names and indices. */
@@ -541,27 +554,6 @@ st_translate_vertex_program(struct st_context *st,
st_store_ir_in_disk_cache(st, &stp->Base, false);
}
- /* Translate to NIR.
- *
- * This must be done after the translation to TGSI is done, because
- * we'll pass the NIR shader to the driver and the TGSI version to
- * the draw module for the select/feedback/rasterpos code.
- */
- if (st->pipe->screen->get_shader_param(st->pipe->screen,
- PIPE_SHADER_VERTEX,
- PIPE_SHADER_CAP_PREFERRED_IR)) {
- assert(!stp->glsl_to_tgsi);
-
- nir_shader *nir =
- st_translate_prog_to_nir(st, &stp->Base, MESA_SHADER_VERTEX);
-
- if (stp->Base.nir)
- ralloc_free(stp->Base.nir);
- stp->state.type = PIPE_SHADER_IR_NIR;
- stp->Base.nir = nir;
- return true;
- }
-
return stp->state.tokens != NULL;
}