iris: Only set key->flat_shade if COL0/COL1 are written.
authorKenneth Graunke <kenneth@whitecape.org>
Sun, 7 Jul 2019 23:32:09 +0000 (16:32 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Thu, 11 Jul 2019 07:12:50 +0000 (00:12 -0700)
This was just laziness on my part, we already added similar checks in
the VS key handling.  Just need to do it here too.  Should improve cache
hits.

src/gallium/drivers/iris/iris_context.h
src/gallium/drivers/iris/iris_program.c
src/gallium/drivers/iris/iris_state.c

index e38ec77d1ece37013db22ccf8e7b17cb6add7869..a1cdb75a7323f1f2534a3e77cb49cc55d6b1360c 100644 (file)
@@ -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);
index 2fe842e9807768cb99753195524763ef3dc6c486..502cbebb024d673466ce5623252bdc6eca07527a 100644 (file)
@@ -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;
index 99f006e8dfa09c3369fe983dbc99e27eccad52be..6fe3e04d92af99cd87eb4577052dc8cee1c9a050 100644 (file)
@@ -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;