diff --git a/src/gallium/drivers/iris/iris_context.h b/src/gallium/drivers/iris/iris_context.h index e38ec77d1ec..a1cdb75a732 100644 --- a/src/gallium/drivers/iris/iris_context.h +++ b/src/gallium/drivers/iris/iris_context.h @@ -475,6 +475,7 @@ struct iris_vtable { void (*populate_gs_key)(const struct iris_context *ice, struct brw_gs_prog_key *key); void (*populate_fs_key)(const struct iris_context *ice, + const struct shader_info *info, struct brw_wm_prog_key *key); void (*populate_cs_key)(const struct iris_context *ice, struct brw_cs_prog_key *key); diff --git a/src/gallium/drivers/iris/iris_program.c b/src/gallium/drivers/iris/iris_program.c index 2fe842e9807..502cbebb024 100644 --- a/src/gallium/drivers/iris/iris_program.c +++ b/src/gallium/drivers/iris/iris_program.c @@ -1494,7 +1494,7 @@ iris_update_compiled_fs(struct iris_context *ice) struct iris_screen *screen = (struct iris_screen *)ice->ctx.screen; const struct gen_device_info *devinfo = &screen->devinfo; struct brw_wm_prog_key key = { KEY_INIT(devinfo->gen) }; - ice->vtbl.populate_fs_key(ice, &key); + ice->vtbl.populate_fs_key(ice, &ish->nir->info, &key); if (ish->nos & (1ull << IRIS_NOS_LAST_VUE_MAP)) key.input_slots_valid = ice->shaders.last_vue_map->slots_valid; diff --git a/src/gallium/drivers/iris/iris_state.c b/src/gallium/drivers/iris/iris_state.c index 99f006e8dfa..6fe3e04d92a 100644 --- a/src/gallium/drivers/iris/iris_state.c +++ b/src/gallium/drivers/iris/iris_state.c @@ -3442,6 +3442,7 @@ iris_populate_gs_key(const struct iris_context *ice, */ static void iris_populate_fs_key(const struct iris_context *ice, + const struct shader_info *info, struct brw_wm_prog_key *key) { struct iris_screen *screen = (void *) ice->ctx.screen; @@ -3458,8 +3459,8 @@ iris_populate_fs_key(const struct iris_context *ice, key->alpha_test_replicate_alpha = fb->nr_cbufs > 1 && zsa->alpha.enabled; - /* XXX: only bother if COL0/1 are read */ - key->flat_shade = rast->flatshade; + key->flat_shade = rast->flatshade && + (info->inputs_read & (VARYING_BIT_COL0 | VARYING_BIT_COL1)); key->persample_interp = rast->force_persample_interp; key->multisample_fbo = rast->multisample && fb->samples > 1;