Mesa (main): tu: Keep original blit shaders separately

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri May 13 17:52:17 UTC 2022


Module: Mesa
Branch: main
Commit: 91160dab979662d968f96953423139f6b6b3f1dc
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=91160dab979662d968f96953423139f6b6b3f1dc

Author: Connor Abbott <cwabbott0 at gmail.com>
Date:   Wed Feb 16 18:01:09 2022 +0100

tu: Keep original blit shaders separately

We won't be able to access them once the ->shader link is gone.

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16147>

---

 src/freedreno/vulkan/tu_clear_blit.c | 9 +++++----
 src/freedreno/vulkan/tu_private.h    | 3 ++-
 2 files changed, 7 insertions(+), 5 deletions(-)

diff --git a/src/freedreno/vulkan/tu_clear_blit.c b/src/freedreno/vulkan/tu_clear_blit.c
index 44a7fe8fff6..4b3682d4ca8 100644
--- a/src/freedreno/vulkan/tu_clear_blit.c
+++ b/src/freedreno/vulkan/tu_clear_blit.c
@@ -594,7 +594,8 @@ compile_shader(struct tu_device *dev, struct nir_shader *nir,
    struct tu6_global *global = dev->global_bo->map;
 
    assert(*offset + so->info.sizedwords <= ARRAY_SIZE(global->shaders));
-   dev->global_shaders[idx] = so;
+   dev->global_shaders[idx] = sh;
+   dev->global_shader_variants[idx] = so;
    memcpy(&global->shaders[*offset], so->bin,
           sizeof(uint32_t) * so->info.sizedwords);
    dev->global_shader_va[idx] = dev->global_bo->iova +
@@ -623,7 +624,7 @@ tu_destroy_clear_blit_shaders(struct tu_device *dev)
 {
    for (unsigned i = 0; i < GLOBAL_SH_COUNT; i++) {
       if (dev->global_shaders[i])
-         ir3_shader_destroy(dev->global_shaders[i]->shader);
+         ir3_shader_destroy(dev->global_shaders[i]);
    }
 }
 
@@ -634,7 +635,7 @@ r3d_common(struct tu_cmd_buffer *cmd, struct tu_cs *cs, bool blit,
    enum global_shader vs_id =
       blit ? GLOBAL_SH_VS_BLIT : GLOBAL_SH_VS_CLEAR;
 
-   struct ir3_shader_variant *vs = cmd->device->global_shaders[vs_id];
+   struct ir3_shader_variant *vs = cmd->device->global_shader_variants[vs_id];
    uint64_t vs_iova = cmd->device->global_shader_va[vs_id];
 
    enum global_shader fs_id = GLOBAL_SH_FS_BLIT;
@@ -648,7 +649,7 @@ r3d_common(struct tu_cmd_buffer *cmd, struct tu_cs *cs, bool blit,
    if (!blit)
       fs_id = GLOBAL_SH_FS_CLEAR0 + num_rts;
 
-   struct ir3_shader_variant *fs = cmd->device->global_shaders[fs_id];
+   struct ir3_shader_variant *fs = cmd->device->global_shader_variants[fs_id];
    uint64_t fs_iova = cmd->device->global_shader_va[fs_id];
 
    tu_cs_emit_regs(cs, A6XX_HLSQ_INVALIDATE_CMD(
diff --git a/src/freedreno/vulkan/tu_private.h b/src/freedreno/vulkan/tu_private.h
index 98bab9cd5ed..d9a7d826287 100644
--- a/src/freedreno/vulkan/tu_private.h
+++ b/src/freedreno/vulkan/tu_private.h
@@ -557,7 +557,8 @@ struct tu_device
    /* Lazily allocated, protected by the device mutex. */
    struct tu_bo *tess_bo;
 
-   struct ir3_shader_variant *global_shaders[GLOBAL_SH_COUNT];
+   struct ir3_shader_variant *global_shader_variants[GLOBAL_SH_COUNT];
+   struct ir3_shader *global_shaders[GLOBAL_SH_COUNT];
    uint64_t global_shader_va[GLOBAL_SH_COUNT];
 
    uint32_t vsc_draw_strm_pitch;



More information about the mesa-commit mailing list