diff --git a/src/gallium/drivers/zink/zink_compiler.c b/src/gallium/drivers/zink/zink_compiler.c index ce1f70fcad2..a7c91aa31f5 100644 --- a/src/gallium/drivers/zink/zink_compiler.c +++ b/src/gallium/drivers/zink/zink_compiler.c @@ -1097,13 +1097,20 @@ lower_line_smooth_gs(nir_shader *shader) if (!state.pos_out) return false; + unsigned location = 0; + nir_foreach_shader_in_variable(var, shader) { + if (var->data.driver_location >= location) + location = var->data.driver_location + 1; + } + state.line_coord_out = nir_variable_create(shader, nir_var_shader_out, glsl_vec4_type(), "__line_coord"); state.line_coord_out->data.interpolation = INTERP_MODE_NOPERSPECTIVE; - state.line_coord_out->data.driver_location = shader->num_outputs++; + state.line_coord_out->data.driver_location = location; state.line_coord_out->data.location = MAX2(util_last_bit64(shader->info.outputs_written), VARYING_SLOT_VAR0); shader->info.outputs_written |= BITFIELD64_BIT(state.line_coord_out->data.location); + shader->num_outputs++; // create temp variables state.prev_pos = nir_variable_create(shader, nir_var_shader_temp,