From 284b71a2e1d33a86c65beab215b33747a28aea38 Mon Sep 17 00:00:00 2001 From: Alyssa Rosenzweig Date: Mon, 12 Jul 2021 19:15:46 -0400 Subject: [PATCH] panfrost: Compile pan_cmdstream per-gen Signed-off-by: Alyssa Rosenzweig Reviewed-by: Boris Brezillon Part-of: --- src/gallium/drivers/panfrost/meson.build | 16 +++++++++++++++- src/gallium/drivers/panfrost/pan_cmdstream.c | 5 ++--- src/gallium/drivers/panfrost/pan_screen.c | 11 ++++++++++- src/gallium/drivers/panfrost/pan_screen.h | 6 ++++-- 4 files changed, 31 insertions(+), 7 deletions(-) diff --git a/src/gallium/drivers/panfrost/meson.build b/src/gallium/drivers/panfrost/meson.build index 7db7f4d4c8b..221bf236962 100644 --- a/src/gallium/drivers/panfrost/meson.build +++ b/src/gallium/drivers/panfrost/meson.build @@ -30,7 +30,6 @@ files_panfrost = files( 'pan_blit.c', 'pan_job.c', 'pan_assemble.c', - 'pan_cmdstream.c', 'pan_compute.c', 'pan_mempool.c', 'pan_mempool.h', @@ -51,6 +50,20 @@ compile_args_panfrost = [ '-Wno-pointer-arith' ] +panfrost_versions = ['4', '5', '6', '7'] +libpanfrost_versions = [] + +foreach ver : panfrost_versions + libpanfrost_versions += static_library( + 'panfrost-v' + ver, + ['pan_cmdstream.c', midgard_pack], + include_directories : panfrost_includes, + c_args : ['-DPAN_ARCH=' + ver], + gnu_symbol_visibility : 'hidden', + dependencies : [idep_midgard_pack, idep_nir, dep_libdrm], +) +endforeach + libpanfrost = static_library( 'panfrost', files_panfrost, @@ -64,6 +77,7 @@ libpanfrost = static_library( include_directories : panfrost_includes, c_args : [c_msvc_compat_args, compile_args_panfrost], gnu_symbol_visibility : 'hidden', + link_with: [libpanfrost_versions], ) driver_panfrost = declare_dependency( diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c b/src/gallium/drivers/panfrost/pan_cmdstream.c index 5309f7a5eff..0b2866d9da1 100644 --- a/src/gallium/drivers/panfrost/pan_cmdstream.c +++ b/src/gallium/drivers/panfrost/pan_cmdstream.c @@ -35,6 +35,7 @@ #include "gallium/auxiliary/util/u_blend.h" #include "panfrost-quirks.h" +#include "gen_macros.h" #include "pan_pool.h" #include "pan_bo.h" @@ -3661,7 +3662,7 @@ context_init(struct pipe_context *pipe) } void -panfrost_cmdstream_screen_init(struct panfrost_screen *screen) +GENX(panfrost_cmdstream_screen_init)(struct panfrost_screen *screen) { struct panfrost_device *dev = &screen->dev; @@ -3676,5 +3677,3 @@ panfrost_cmdstream_screen_init(struct panfrost_screen *screen) pan_blitter_init(dev, &screen->blitter.bin_pool.base, &screen->blitter.desc_pool.base); } - - diff --git a/src/gallium/drivers/panfrost/pan_screen.c b/src/gallium/drivers/panfrost/pan_screen.c index a1201baa477..a7289440e5f 100644 --- a/src/gallium/drivers/panfrost/pan_screen.c +++ b/src/gallium/drivers/panfrost/pan_screen.c @@ -893,7 +893,16 @@ panfrost_create_screen(int fd, struct renderonly *ro) 4096, "Blitter shaders", false, true); panfrost_pool_init(&screen->blitter.desc_pool, NULL, dev, 0, 65536, "Blitter RSDs", false, true); - panfrost_cmdstream_screen_init(screen); + if (dev->arch == 4) + panfrost_cmdstream_screen_init_v4(screen); + else if (dev->arch == 5) + panfrost_cmdstream_screen_init_v5(screen); + else if (dev->arch == 6) + panfrost_cmdstream_screen_init_v6(screen); + else if (dev->arch == 7) + panfrost_cmdstream_screen_init_v7(screen); + else + unreachable("Unhandled architecture major"); return &screen->base; } diff --git a/src/gallium/drivers/panfrost/pan_screen.h b/src/gallium/drivers/panfrost/pan_screen.h index 416af403315..5ff084848cb 100644 --- a/src/gallium/drivers/panfrost/pan_screen.h +++ b/src/gallium/drivers/panfrost/pan_screen.h @@ -104,8 +104,10 @@ pan_device(struct pipe_screen *p) struct pipe_fence_handle * panfrost_fence_create(struct panfrost_context *ctx); -void -panfrost_cmdstream_screen_init(struct panfrost_screen *screen); +void panfrost_cmdstream_screen_init_v4(struct panfrost_screen *screen); +void panfrost_cmdstream_screen_init_v5(struct panfrost_screen *screen); +void panfrost_cmdstream_screen_init_v6(struct panfrost_screen *screen); +void panfrost_cmdstream_screen_init_v7(struct panfrost_screen *screen); #define perf_debug(dev, ...) \ do { \