mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-08 19:20:12 +01:00
zink: compute correct location for line-smooth gs
The GS and the FS needs to agree on the driver_location. But we just
used the num_outputs variable for the GS instead of matching the logic
from lower_aaline_instr in nir_draw_helpers.c.
This does that, but cleans up our copy slightly to avoid computing the
needless location, as well as using unsigned values.
This used to *mostly* work before, but only because we were lucky and
not too much crazy stuff went on with the inputs / outputs in
smooth-line cases.
Fixes: edecb66b01 ("nir: avoid generating conflicting output variables")
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/23316>
This commit is contained in:
parent
955a6ffa6e
commit
ffc77d5262
1 changed files with 8 additions and 1 deletions
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue