Mesa (master): iris: Only set key->flat_shade if COL0/COL1 are written.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Thu Jul 11 07:43:40 UTC 2019


Module: Mesa
Branch: master
Commit: c58f52f0ef39db7ca6574381931203f435b03280
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=c58f52f0ef39db7ca6574381931203f435b03280

Author: Kenneth Graunke <kenneth at whitecape.org>
Date:   Sun Jul  7 16:32:09 2019 -0700

iris: Only set key->flat_shade if COL0/COL1 are written.

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 | 1 +
 src/gallium/drivers/iris/iris_program.c | 2 +-
 src/gallium/drivers/iris/iris_state.c   | 5 +++--
 3 files changed, 5 insertions(+), 3 deletions(-)

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;




More information about the mesa-commit mailing list