summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolai Hähnle <nicolai.haehnle@amd.com>2017-06-25 18:13:39 +0200
committerNicolai Hähnle <nicolai.haehnle@amd.com>2017-07-05 12:27:12 +0200
commitc2065ed687dd714240928827f620852e37f7dffc (patch)
tree2c1ed39c316b15f88eccf77af4e19bea1ee91806
parent8a4cd79d0049f98d1c0aff7a77aca73647e3f647 (diff)
st/glsl_to_nir: fix edgeflag passthrough
We have to mark the additional shader input as used, otherwise it will be eliminated, and we have to setup its index correctly. This is a bit of a hack, but so is everything surrounding edgeflag passthrough. Reviewed-by: Marek Olšák <marek.olsak@amd.com>
-rw-r--r--src/mesa/state_tracker/st_glsl_to_nir.cpp3
-rw-r--r--src/mesa/state_tracker/st_program.c4
2 files changed, 6 insertions, 1 deletions
diff --git a/src/mesa/state_tracker/st_glsl_to_nir.cpp b/src/mesa/state_tracker/st_glsl_to_nir.cpp
index 524eefa236c..89f78884389 100644
--- a/src/mesa/state_tracker/st_glsl_to_nir.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_nir.cpp
@@ -92,6 +92,9 @@ st_nir_assign_vs_in_locations(struct gl_program *prog, nir_shader *nir)
}
}
+ /* bit of a hack, mirroring st_translate_vertex_program */
+ input_to_index[VERT_ATTRIB_EDGEFLAG] = num_inputs;
+
nir->num_inputs = 0;
nir_foreach_variable_safe(var, &nir->inputs) {
attr = var->data.location;
diff --git a/src/mesa/state_tracker/st_program.c b/src/mesa/state_tracker/st_program.c
index eb44fc57b57..6b6d41536cf 100644
--- a/src/mesa/state_tracker/st_program.c
+++ b/src/mesa/state_tracker/st_program.c
@@ -557,8 +557,10 @@ st_create_vp_variant(struct st_context *st,
vpv->tgsi.ir.nir = nir_shader_clone(NULL, stvp->tgsi.ir.nir);
if (key->clamp_color)
NIR_PASS_V(vpv->tgsi.ir.nir, nir_lower_clamp_color_outputs);
- if (key->passthrough_edgeflags)
+ if (key->passthrough_edgeflags) {
NIR_PASS_V(vpv->tgsi.ir.nir, nir_lower_passthrough_edgeflags);
+ vpv->num_inputs++;
+ }
st_finalize_nir(st, &stvp->Base, vpv->tgsi.ir.nir);