freedreno: Pass shader cache key instead of shader key
authorRob Clark <robdclark@chromium.org>
Thu, 20 Jan 2022 23:24:18 +0000 (15:24 -0800)
committerMarge Bot <emma+marge@anholt.net>
Mon, 24 Jan 2022 15:51:47 +0000 (15:51 +0000)
We are going to need to extend the cache key to add state that effects
the program stateobj, but not necessarily the shader itself (ie. so
ir3_shader_key wouldn't be the correct place to add it).

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/14643>

src/gallium/drivers/freedreno/a3xx/fd3_program.c
src/gallium/drivers/freedreno/a4xx/fd4_program.c
src/gallium/drivers/freedreno/a5xx/fd5_program.c
src/gallium/drivers/freedreno/a6xx/fd6_program.c
src/gallium/drivers/freedreno/ir3/ir3_cache.c
src/gallium/drivers/freedreno/ir3/ir3_cache.h

index 9d85f79..c126ca0 100644 (file)
@@ -454,7 +454,7 @@ fd3_program_create(void *data, struct ir3_shader_variant *bs,
                    struct ir3_shader_variant *vs, struct ir3_shader_variant *hs,
                    struct ir3_shader_variant *ds, struct ir3_shader_variant *gs,
                    struct ir3_shader_variant *fs,
-                   const struct ir3_shader_key *key) in_dt
+                   const struct ir3_cache_key *key) in_dt
 {
    struct fd_context *ctx = fd_context(data);
    struct fd3_program_state *state = CALLOC_STRUCT(fd3_program_state);
index 20d48bf..d2eeab5 100644 (file)
@@ -575,7 +575,7 @@ fd4_program_create(void *data, struct ir3_shader_variant *bs,
                    struct ir3_shader_variant *vs, struct ir3_shader_variant *hs,
                    struct ir3_shader_variant *ds, struct ir3_shader_variant *gs,
                    struct ir3_shader_variant *fs,
-                   const struct ir3_shader_key *key) in_dt
+                   const struct ir3_cache_key *key) in_dt
 {
    struct fd_context *ctx = fd_context(data);
    struct fd4_program_state *state = CALLOC_STRUCT(fd4_program_state);
index 36c54b3..ceda53b 100644 (file)
@@ -713,7 +713,7 @@ fd5_program_create(void *data, struct ir3_shader_variant *bs,
                    struct ir3_shader_variant *vs, struct ir3_shader_variant *hs,
                    struct ir3_shader_variant *ds, struct ir3_shader_variant *gs,
                    struct ir3_shader_variant *fs,
-                   const struct ir3_shader_key *key) in_dt
+                   const struct ir3_cache_key *key) in_dt
 {
    struct fd_context *ctx = fd_context(data);
    struct fd5_program_state *state = CALLOC_STRUCT(fd5_program_state);
index 1459a75..889ff8d 100644 (file)
@@ -394,8 +394,10 @@ fd6_emit_tess_bos(struct fd_screen *screen, struct fd_ringbuffer *ring,
 static void
 setup_stateobj(struct fd_ringbuffer *ring, struct fd_context *ctx,
                struct fd6_program_state *state,
-               const struct ir3_shader_key *key, bool binning_pass) assert_dt
+               const struct ir3_cache_key *cache_key,
+               bool binning_pass) assert_dt
 {
+   const struct ir3_shader_key *key = &cache_key->key;
    uint32_t pos_regid, psize_regid, color_regid[8], posz_regid;
    uint32_t clip0_regid, clip1_regid;
    uint32_t face_regid, coord_regid, zwcoord_regid, samp_id_regid;
@@ -1233,7 +1235,7 @@ fd6_program_create(void *data, struct ir3_shader_variant *bs,
                    struct ir3_shader_variant *vs, struct ir3_shader_variant *hs,
                    struct ir3_shader_variant *ds, struct ir3_shader_variant *gs,
                    struct ir3_shader_variant *fs,
-                   const struct ir3_shader_key *key) in_dt
+                   const struct ir3_cache_key *key) in_dt
 {
    struct fd_context *ctx = fd_context(data);
    struct fd_screen *screen = ctx->screen;
index c402b3c..0ba6a9c 100644 (file)
@@ -157,7 +157,7 @@ ir3_cache_lookup(struct ir3_cache *cache, const struct ir3_cache_key *key,
       cache->data, bs, variants[MESA_SHADER_VERTEX],
       variants[MESA_SHADER_TESS_CTRL], variants[MESA_SHADER_TESS_EVAL],
       variants[MESA_SHADER_GEOMETRY], variants[MESA_SHADER_FRAGMENT],
-      &key->key);
+      key);
    state->key = *key;
 
    /* NOTE: uses copy of key in state obj, because pointer passed by caller
index 26135d9..276b78b 100644 (file)
@@ -54,7 +54,7 @@ struct ir3_cache_funcs {
       void *data, struct ir3_shader_variant *bs, /* binning pass vs */
       struct ir3_shader_variant *vs, struct ir3_shader_variant *hs,
       struct ir3_shader_variant *ds, struct ir3_shader_variant *gs,
-      struct ir3_shader_variant *fs, const struct ir3_shader_key *key);
+      struct ir3_shader_variant *fs, const struct ir3_cache_key *key);
    void (*destroy_state)(void *data, struct ir3_program_state *state);
 };