Module: Mesa Branch: main Commit: 91160dab979662d968f96953423139f6b6b3f1dc URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=91160dab979662d968f96953423139f6b6b3f1dc
Author: Connor Abbott <[email protected]> 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;
