freedreno/a6xx: Share shader state constructor and destructor
authorKristian H. Kristensen <hoegsberg@google.com>
Mon, 10 Jun 2019 19:04:21 +0000 (12:04 -0700)
committerKristian H. Kristensen <hoegsberg@google.com>
Wed, 18 Sep 2019 23:59:10 +0000 (16:59 -0700)
Also, swap vs and fs constructor or so fs comes first.

Signed-off-by: Kristian H. Kristensen <hoegsberg@google.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
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_gallium.c
src/gallium/drivers/freedreno/ir3/ir3_gallium.h

index af7f19d59bacee5a740d9446230b0ba27c5d56b6..a9d4fd0784f594d5886d6f3956351243a8747f2d 100644 (file)
 #include "fd3_texture.h"
 #include "fd3_format.h"
 
-static struct ir3_shader *
-create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso,
-               gl_shader_stage type)
-{
-       struct fd_context *ctx = fd_context(pctx);
-       struct ir3_compiler *compiler = ctx->screen->compiler;
-       return ir3_shader_create(compiler, cso, type, &ctx->debug, pctx->screen);
-}
-
-static void *
-fd3_fp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_FRAGMENT);
-}
-
-static void
-fd3_fp_state_delete(struct pipe_context *pctx, void *hwcso)
-{
-       struct ir3_shader *so = hwcso;
-       ir3_shader_destroy(so);
-}
-
-static void *
-fd3_vp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_VERTEX);
-}
-
-static void
-fd3_vp_state_delete(struct pipe_context *pctx, void *hwcso)
-{
-       struct ir3_shader *so = hwcso;
-       ir3_shader_destroy(so);
-}
-
 bool
 fd3_needs_manual_clipping(const struct ir3_shader *shader,
                                                  const struct pipe_rasterizer_state *rast)
@@ -485,11 +448,6 @@ fd3_program_emit(struct fd_ringbuffer *ring, struct fd3_emit *emit,
 void
 fd3_prog_init(struct pipe_context *pctx)
 {
-       pctx->create_fs_state = fd3_fp_state_create;
-       pctx->delete_fs_state = fd3_fp_state_delete;
-
-       pctx->create_vs_state = fd3_vp_state_create;
-       pctx->delete_vs_state = fd3_vp_state_delete;
-
+       ir3_prog_init(pctx);
        fd_prog_init(pctx);
 }
index 5fa1f8e0200ae2860eacaf7e78e8b674f093551c..b982d5d06e7de5dd1b04d4b5f327a884111f0a28 100644 (file)
 #include "fd4_texture.h"
 #include "fd4_format.h"
 
-static struct ir3_shader *
-create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso,
-               gl_shader_stage type)
-{
-       struct fd_context *ctx = fd_context(pctx);
-       struct ir3_compiler *compiler = ctx->screen->compiler;
-       return ir3_shader_create(compiler, cso, type, &ctx->debug, pctx->screen);
-}
-
-static void *
-fd4_fp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_FRAGMENT);
-}
-
-static void
-fd4_fp_state_delete(struct pipe_context *pctx, void *hwcso)
-{
-       struct ir3_shader *so = hwcso;
-       ir3_shader_destroy(so);
-}
-
-static void *
-fd4_vp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_VERTEX);
-}
-
-static void
-fd4_vp_state_delete(struct pipe_context *pctx, void *hwcso)
-{
-       struct ir3_shader *so = hwcso;
-       ir3_shader_destroy(so);
-}
-
 static void
 emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
 {
@@ -569,11 +532,6 @@ fd4_program_emit(struct fd_ringbuffer *ring, struct fd4_emit *emit,
 void
 fd4_prog_init(struct pipe_context *pctx)
 {
-       pctx->create_fs_state = fd4_fp_state_create;
-       pctx->delete_fs_state = fd4_fp_state_delete;
-
-       pctx->create_vs_state = fd4_vp_state_create;
-       pctx->delete_vs_state = fd4_vp_state_delete;
-
+       ir3_prog_init(pctx);
        fd_prog_init(pctx);
 }
index e52ba900e05ae4da3a6cacfbc46fe4a58a1ab054..8f6ee9a687e4d314b4addc47f41a7b00e819bb2a 100644 (file)
 
 #include "ir3_cache.h"
 
-static struct ir3_shader *
-create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso,
-               gl_shader_stage type)
-{
-       struct fd_context *ctx = fd_context(pctx);
-       struct ir3_compiler *compiler = ctx->screen->compiler;
-       return ir3_shader_create(compiler, cso, type, &ctx->debug, pctx->screen);
-}
-
-static void *
-fd5_fp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_FRAGMENT);
-}
-
-static void
-fd5_fp_state_delete(struct pipe_context *pctx, void *hwcso)
-{
-       struct ir3_shader *so = hwcso;
-       ir3_shader_destroy(so);
-}
-
-static void *
-fd5_vp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_VERTEX);
-}
-
-static void
-fd5_vp_state_delete(struct pipe_context *pctx, void *hwcso)
-{
-       struct ir3_shader *so = hwcso;
-       ir3_shader_destroy(so);
-}
-
 void
 fd5_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
 {
@@ -722,11 +685,6 @@ fd5_program_emit(struct fd_context *ctx, struct fd_ringbuffer *ring,
 void
 fd5_prog_init(struct pipe_context *pctx)
 {
-       pctx->create_fs_state = fd5_fp_state_create;
-       pctx->delete_fs_state = fd5_fp_state_delete;
-
-       pctx->create_vs_state = fd5_vp_state_create;
-       pctx->delete_vs_state = fd5_vp_state_delete;
-
+       ir3_prog_init(pctx);
        fd_prog_init(pctx);
 }
index 47ba86353b1a2e611e4b8afc9b1e2ea77f355634..26be370833d7d89d5eaab4ce64a564a333be42db 100644 (file)
 #include "fd6_texture.h"
 #include "fd6_format.h"
 
-static struct ir3_shader *
-create_shader_stateobj(struct pipe_context *pctx, const struct pipe_shader_state *cso,
-               gl_shader_stage type)
-{
-       struct fd_context *ctx = fd_context(pctx);
-       struct ir3_compiler *compiler = ctx->screen->compiler;
-       struct ir3_shader *shader =
-               ir3_shader_create(compiler, cso, type, &ctx->debug, pctx->screen);
-       unsigned packets, size;
-
-       /* pre-calculate size required for userconst stateobj: */
-       ir3_user_consts_size(&shader->ubo_state, &packets, &size);
-
-       /* also account for UBO addresses: */
-       packets += 1;
-       size += 2 * shader->const_state.num_ubos;
-
-       unsigned sizedwords = (4 * packets) + size;
-       shader->ubo_state.cmdstream_size = sizedwords * 4;
-
-       return shader;
-}
-
-static void *
-fd6_fp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_FRAGMENT);
-}
-
-static void
-fd6_fp_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);
-}
-
-static void *
-fd6_vp_state_create(struct pipe_context *pctx,
-               const struct pipe_shader_state *cso)
-{
-       return create_shader_stateobj(pctx, cso, MESA_SHADER_VERTEX);
-}
-
-static void
-fd6_vp_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);
-}
-
 void
 fd6_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so)
 {
@@ -749,6 +694,37 @@ static const struct ir3_cache_funcs cache_funcs = {
        .destroy_state = fd6_program_destroy,
 };
 
+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);
+       unsigned packets, size;
+
+       /* pre-calculate size required for userconst stateobj: */
+       ir3_user_consts_size(&shader->ubo_state, &packets, &size);
+
+       /* also account for UBO addresses: */
+       packets += 1;
+       size += 2 * shader->const_state.num_ubos;
+
+       unsigned sizedwords = (4 * packets) + size;
+       shader->ubo_state.cmdstream_size = sizedwords * 4;
+
+       return shader;
+}
+
+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);
+}
+
 void
 fd6_prog_init(struct pipe_context *pctx)
 {
@@ -756,11 +732,11 @@ fd6_prog_init(struct pipe_context *pctx)
 
        fd6_context(ctx)->shader_cache = ir3_cache_create(&cache_funcs, ctx);
 
-       pctx->create_fs_state = fd6_fp_state_create;
-       pctx->delete_fs_state = fd6_fp_state_delete;
+       pctx->create_vs_state = fd6_shader_state_create;
+       pctx->delete_vs_state = fd6_shader_state_delete;
 
-       pctx->create_vs_state = fd6_vp_state_create;
-       pctx->delete_vs_state = fd6_vp_state_delete;
+       pctx->create_fs_state = fd6_shader_state_create;
+       pctx->delete_fs_state = fd6_shader_state_delete;
 
        fd_prog_init(pctx);
 }
index 7456a82ed7b2e07f0b9ec8d2748d1cd8b194520e..11a4dc78161a15f59417af459af7f8001c93630d 100644 (file)
@@ -110,7 +110,7 @@ copy_stream_out(struct ir3_stream_output_info *i,
 
 struct ir3_shader *
 ir3_shader_create(struct ir3_compiler *compiler,
-               const struct pipe_shader_state *cso, gl_shader_stage type,
+               const struct pipe_shader_state *cso,
                struct pipe_debug_callback *debug,
                struct pipe_screen *screen)
 {
@@ -689,3 +689,37 @@ ir3_emit_cs_consts(const struct ir3_shader_variant *v, struct fd_ringbuffer *rin
                }
        }
 }
+
+static void *
+ir3_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;
+       return ir3_shader_create(compiler, cso, &ctx->debug, pctx->screen);
+}
+
+static void
+ir3_shader_state_delete(struct pipe_context *pctx, void *hwcso)
+{
+       struct ir3_shader *so = hwcso;
+       ir3_shader_destroy(so);
+}
+
+void
+ir3_prog_init(struct pipe_context *pctx)
+{
+       pctx->create_vs_state = ir3_shader_state_create;
+       pctx->delete_vs_state = ir3_shader_state_delete;
+
+       pctx->create_tcs_state = ir3_shader_state_create;
+       pctx->delete_tcs_state = ir3_shader_state_delete;
+
+       pctx->create_tes_state = ir3_shader_state_create;
+       pctx->delete_tes_state = ir3_shader_state_delete;
+
+       pctx->create_gs_state = ir3_shader_state_create;
+       pctx->delete_gs_state = ir3_shader_state_delete;
+
+       pctx->create_fs_state = ir3_shader_state_create;
+       pctx->delete_fs_state = ir3_shader_state_delete;
+}
index b0cf7ed9805441da066fcf5341bb42cefd3d9c64..5352df5199080e24f2e916126a490454ffd594d7 100644 (file)
@@ -32,7 +32,7 @@
 #include "ir3/ir3_shader.h"
 
 struct ir3_shader * ir3_shader_create(struct ir3_compiler *compiler,
-               const struct pipe_shader_state *cso, gl_shader_stage type,
+               const struct pipe_shader_state *cso,
                struct pipe_debug_callback *debug,
                struct pipe_screen *screen);
 struct ir3_shader *
@@ -83,4 +83,6 @@ void ir3_emit_fs_consts(const struct ir3_shader_variant *v, struct fd_ringbuffer
 void ir3_emit_cs_consts(const struct ir3_shader_variant *v, struct fd_ringbuffer *ring,
                struct fd_context *ctx, const struct pipe_grid_info *info);
 
+void ir3_prog_init(struct pipe_context *pctx);
+
 #endif /* IR3_GALLIUM_H_ */