radeonsi: check flatshade and sprite_coord_enable for spi_map in bind_rs_state

it doesn't need to be in si_update_shaders

Reviewed-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12343>
This commit is contained in:
Marek Olšák 2021-08-10 11:08:44 -04:00 committed by Marge Bot
parent 2dfe01db01
commit 70220a1896
4 changed files with 8 additions and 10 deletions

View File

@ -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;

View File

@ -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 ||

View File

@ -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) &&

View File

@ -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) |