Commit d684fb37 authored by Danylo Piliaiev's avatar Danylo Piliaiev 💬
Browse files

st/mesa: Update shader info of ffvp/ARB_vp after translation to NIR

We must update stp->Base.info after translation and before
st_prepare_vertex_program is called, because inputs_read
may become outdated after NIR optimization passes.

For ffvp/ARB_vp inputs_read is populated based on declared
attributes without taking their usage into consideration.
When creating shader variants we expect that their inputs_read
would match the base ones for input mapping to work properly.

Cc: <mesa-stable@lists.freedesktop.org>
Fixes: 8a0dd0af
Closes: #2758

Signed-off-by: Danylo Piliaiev's avatarDanylo Piliaiev <danylo.piliaiev@globallogic.com>
Reviewed-by: default avatarMarek Olšák <marek.olsak@amd.com>
Part-of: <!4598>
parent c4ca9e66
Pipeline #133740 passed with stages
in 10 minutes and 53 seconds
......@@ -491,8 +491,6 @@ st_translate_vertex_program(struct st_context *st,
if (stp->Base.arb.IsPositionInvariant)
_mesa_insert_mvp_code(st->ctx, &stp->Base);
st_prepare_vertex_program(stp);
/* ARB_vp: */
if (!stp->glsl_to_tgsi) {
_mesa_remove_output_reads(&stp->Base, PROGRAM_OUTPUT);
......@@ -524,14 +522,33 @@ st_translate_vertex_program(struct st_context *st,
stp->state.type = PIPE_SHADER_IR_NIR;
stp->Base.nir = st_translate_prog_to_nir(st, &stp->Base,
MESA_SHADER_VERTEX);
/* We must update stp->Base.info after translation and before
* st_prepare_vertex_program is called, because inputs_read
* may become outdated after NIR optimization passes.
*
* For ffvp/ARB_vp inputs_read is populated based
* on declared attributes without taking their usage into
* consideration. When creating shader variants we expect
* that their inputs_read would match the base ones for
* input mapping to work properly.
*/
nir_shader_gather_info(stp->Base.nir,
nir_shader_get_entrypoint(stp->Base.nir));
stp->Base.info = stp->Base.nir->info;
/* For st_draw_feedback, we need to generate TGSI too if draw doesn't
* use LLVM.
*/
if (draw_has_llvm())
if (draw_has_llvm()) {
st_prepare_vertex_program(stp);
return true;
}
}
}
st_prepare_vertex_program(stp);
/* Get semantic names and indices. */
for (attr = 0; attr < VARYING_SLOT_MAX; attr++) {
if (stp->Base.info.outputs_written & BITFIELD64_BIT(attr)) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment