freedreno/ir3: Fix driver_location of the added vertex_flags varying.
authorEric Anholt <eric@anholt.net>
Wed, 22 Apr 2020 20:27:20 +0000 (13:27 -0700)
committerMarge Bot <eric+marge@anholt.net>
Thu, 23 Apr 2020 18:52:46 +0000 (18:52 +0000)
It was ignoring the sizes of the output variables and assuming
single-slot, and failing to update num_outputs.

Reviewed-by: Connor Abbott <cwabbott0@gmail.com>
Reviewed-by: Jose Maria Casanova Crespo <jmcasanova@igalia.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/4670>

src/freedreno/ir3/ir3_nir_lower_tess.c

index 2f2abc10bbbfd9f1084d1faf8d8bd7dc77746719..249e36dad6a86260042e0ad2aa44536b04d94c7b 100644 (file)
@@ -890,15 +890,9 @@ ir3_nir_lower_gs(nir_shader *shader, struct ir3_shader *s)
 
        build_primitive_map(shader, &state.map, &shader->inputs);
 
-       uint32_t loc = 0;
-       nir_foreach_variable (var, &shader->outputs) {
-               uint32_t end = var->data.driver_location + glsl_count_attribute_slots(var->type, false);
-               loc = MAX2(loc, end);
-       }
-
        state.vertex_flags_out = nir_variable_create(shader, nir_var_shader_out,
                        glsl_uint_type(), "vertex_flags");
-       state.vertex_flags_out->data.driver_location = loc;
+       state.vertex_flags_out->data.driver_location = shader->num_outputs++;
        state.vertex_flags_out->data.location = VARYING_SLOT_GS_VERTEX_FLAGS_IR3;
 
        nir_function_impl *impl = nir_shader_get_entrypoint(shader);