freedreno/ir3: unify shader create/delete paths
authorRob Clark <robdclark@chromium.org>
Fri, 5 Jun 2020 19:41:29 +0000 (12:41 -0700)
committerMarge Bot <eric+marge@anholt.net>
Mon, 15 Jun 2020 15:46:37 +0000 (15:46 +0000)
In particular, to move the fd_bo create/delete (which is unneeded by
turnip) out of the shared ir3 code, it is useful to have a single
delete path.

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

src/gallium/drivers/freedreno/a5xx/fd5_compute.c
src/gallium/drivers/freedreno/a6xx/fd6_compute.c
src/gallium/drivers/freedreno/a6xx/fd6_program.c
src/gallium/drivers/freedreno/ir3/ir3_gallium.c
src/gallium/drivers/freedreno/ir3/ir3_gallium.h

index cbc265eb3d3bc42ef0c7d9cd711371ffb1081432..468070770db03c9ba2f488a06f48c7410cbf70e0 100644 (file)
@@ -64,7 +64,7 @@ static void
 fd5_delete_compute_state(struct pipe_context *pctx, void *hwcso)
 {
        struct fd5_compute_stateobj *so = hwcso;
-       ir3_shader_destroy(so->shader);
+       ir3_shader_state_delete(pctx, so->shader);
        free(so);
 }
 
index 613291280e2a08c6314177a1f5a4899bb17b19f8..508a85d06881340dc74a268c2d3ced3ff41805b7 100644 (file)
@@ -67,7 +67,7 @@ static void
 fd6_delete_compute_state(struct pipe_context *pctx, void *hwcso)
 {
        struct fd6_compute_stateobj *so = hwcso;
-       ir3_shader_destroy(so->shader);
+       ir3_shader_state_delete(pctx, so->shader);
        free(so);
 }
 
index 4cb1eaae678ffa1a6eaef3174c4404cd54982e8a..9faa11bd3840dff5c52e08a8364ac63d1f84332c 100644 (file)
@@ -1045,10 +1045,7 @@ static const struct ir3_cache_funcs cache_funcs = {
 static void *
 fd6_shader_state_create(struct pipe_context *pctx, const struct pipe_shader_state *cso)
 {
-       struct fd_context *ctx = fd_context(pctx);
-       struct ir3_compiler *compiler = ctx->screen->compiler;
-       struct ir3_shader *shader =
-               ir3_shader_create(compiler, cso, &ctx->debug, pctx->screen);
+       struct ir3_shader *shader = ir3_shader_state_create(pctx, cso);
        unsigned packets, size;
 
        /* pre-calculate size required for userconst stateobj: */
@@ -1067,10 +1064,9 @@ fd6_shader_state_create(struct pipe_context *pctx, const struct pipe_shader_stat
 static void
 fd6_shader_state_delete(struct pipe_context *pctx, void *hwcso)
 {
-       struct ir3_shader *so = hwcso;
        struct fd_context *ctx = fd_context(pctx);
        ir3_cache_invalidate(fd6_context(ctx)->shader_cache, hwcso);
-       ir3_shader_destroy(so);
+       ir3_shader_state_delete(pctx, hwcso);
 }
 
 void
index 720c87a72b8a9c786409b19ccf1509da4dc89ff1..6c0aa9f4b80bbbdcae57bab8740c62d44883eb44 100644 (file)
@@ -225,7 +225,7 @@ ir3_shader_create_compute(struct ir3_compiler *compiler,
        return shader;
 }
 
-static void *
+void *
 ir3_shader_state_create(struct pipe_context *pctx, const struct pipe_shader_state *cso)
 {
        struct fd_context *ctx = fd_context(pctx);
@@ -233,7 +233,7 @@ ir3_shader_state_create(struct pipe_context *pctx, const struct pipe_shader_stat
        return ir3_shader_create(compiler, cso, &ctx->debug, pctx->screen);
 }
 
-static void
+void
 ir3_shader_state_delete(struct pipe_context *pctx, void *hwcso)
 {
        struct ir3_shader *so = hwcso;
index da83eb7c00cdbc1921504d2507a7ea2b99e3da29..0f103388b67179418fe7ac4031ecd10472856eb6 100644 (file)
@@ -44,6 +44,9 @@ struct ir3_shader_variant * ir3_shader_variant(struct ir3_shader *shader,
                struct ir3_shader_key key, bool binning_pass,
                struct pipe_debug_callback *debug);
 
+void * ir3_shader_state_create(struct pipe_context *pctx, const struct pipe_shader_state *cso);
+void ir3_shader_state_delete(struct pipe_context *pctx, void *hwcso);
+
 void ir3_prog_init(struct pipe_context *pctx);
 
 #endif /* IR3_GALLIUM_H_ */