diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h index 598bc1d2fdb..c65d7dbdf08 100644 --- a/src/gallium/drivers/radeonsi/si_pipe.h +++ b/src/gallium/drivers/radeonsi/si_pipe.h @@ -1040,9 +1040,7 @@ struct si_context { uint64_t ps_inputs_read_or_disabled; struct si_vertex_elements *vertex_elements; unsigned num_vertex_elements; - unsigned sprite_coord_enable; unsigned cs_max_waves_per_sh; - bool flatshade; bool do_update_shaders; bool compute_shaderbuf_sgprs_dirty; bool compute_image_sgprs_dirty; diff --git a/src/gallium/drivers/radeonsi/si_state.c b/src/gallium/drivers/radeonsi/si_state.c index be84e9b50cd..3abe32afc7e 100644 --- a/src/gallium/drivers/radeonsi/si_state.c +++ b/src/gallium/drivers/radeonsi/si_state.c @@ -1114,6 +1114,10 @@ static void si_bind_rs_state(struct pipe_context *ctx, void *state) old_rs->pa_cl_clip_cntl != rs->pa_cl_clip_cntl) si_mark_atom_dirty(sctx, &sctx->atoms.s.clip_regs); + if (old_rs->sprite_coord_enable != rs->sprite_coord_enable || + old_rs->flatshade != rs->flatshade) + si_mark_atom_dirty(sctx, &sctx->atoms.s.spi_map); + if (old_rs->clip_plane_enable != rs->clip_plane_enable || old_rs->rasterizer_discard != rs->rasterizer_discard || old_rs->sprite_coord_enable != rs->sprite_coord_enable || diff --git a/src/gallium/drivers/radeonsi/si_state_draw.cpp b/src/gallium/drivers/radeonsi/si_state_draw.cpp index 0940e69dd38..c53c7c18a3d 100644 --- a/src/gallium/drivers/radeonsi/si_state_draw.cpp +++ b/src/gallium/drivers/radeonsi/si_state_draw.cpp @@ -208,13 +208,8 @@ static bool si_update_shaders(struct si_context *sctx) if (si_pm4_state_changed(sctx, ps) || (!NGG && si_pm4_state_changed(sctx, vs)) || - (NGG && si_pm4_state_changed(sctx, gs)) || - sctx->sprite_coord_enable != rs->sprite_coord_enable || - sctx->flatshade != rs->flatshade) { - sctx->sprite_coord_enable = rs->sprite_coord_enable; - sctx->flatshade = rs->flatshade; + (NGG && si_pm4_state_changed(sctx, gs))) si_mark_atom_dirty(sctx, &sctx->atoms.s.spi_map); - } if ((GFX_VERSION >= GFX10_3 || (GFX_VERSION >= GFX9 && sctx->screen->info.rbplus_allowed)) && si_pm4_state_changed(sctx, ps) && diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.c b/src/gallium/drivers/radeonsi/si_state_shaders.c index 7e4543d8701..55708b09645 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.c +++ b/src/gallium/drivers/radeonsi/si_state_shaders.c @@ -3478,16 +3478,17 @@ static unsigned si_get_ps_input_cntl(struct si_context *sctx, struct si_shader * ubyte fp16_lo_hi_mask) { struct si_shader_info *vsinfo = &vs->selector->info; + struct si_state_rasterizer *rs = sctx->queued.named.rasterizer; unsigned offset, ps_input_cntl = 0; if (interpolate == INTERP_MODE_FLAT || - (interpolate == INTERP_MODE_COLOR && sctx->flatshade) || + (interpolate == INTERP_MODE_COLOR && rs->flatshade) || semantic == VARYING_SLOT_PRIMITIVE_ID) ps_input_cntl |= S_028644_FLAT_SHADE(1); if (semantic == VARYING_SLOT_PNTC || (semantic >= VARYING_SLOT_TEX0 && semantic <= VARYING_SLOT_TEX7 && - sctx->sprite_coord_enable & (1 << (semantic - VARYING_SLOT_TEX0)))) { + rs->sprite_coord_enable & (1 << (semantic - VARYING_SLOT_TEX0)))) { ps_input_cntl |= S_028644_PT_SPRITE_TEX(1); if (fp16_lo_hi_mask & 0x1) { ps_input_cntl |= S_028644_FP16_INTERP_MODE(1) |