Mesa (main): panfrost: Compile pan_cmdstream per-gen

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Fri Jul 23 20:28:03 UTC 2021


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

Author: Alyssa Rosenzweig <alyssa at collabora.com>
Date:   Mon Jul 12 19:15:46 2021 -0400

panfrost: Compile pan_cmdstream per-gen

Signed-off-by: Alyssa Rosenzweig <alyssa at collabora.com>
Reviewed-by: Boris Brezillon <boris.brezillon at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11851>

---

 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 { \



More information about the mesa-commit mailing list