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

Author: Boris Brezillon <[email protected]>
Date:   Wed Aug  4 13:45:47 2021 +0200

panfrost: Prepare shader helpers to per-gen XML

Signed-off-by: Boris Brezillon <[email protected]>
Reviewed-by: Alyssa Rosenzweig <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/12935>

---

 src/gallium/drivers/panfrost/pan_assemble.c  |  4 +-
 src/gallium/drivers/panfrost/pan_cmdstream.c |  8 ++--
 src/gallium/drivers/panfrost/pan_compute.c   |  4 +-
 src/gallium/drivers/panfrost/pan_screen.c    |  2 +-
 src/gallium/drivers/panfrost/pan_screen.h    | 10 ++++-
 src/panfrost/lib/meson.build                 |  2 +-
 src/panfrost/lib/pan_blend.c                 |  4 +-
 src/panfrost/lib/pan_blitter.c               |  4 +-
 src/panfrost/lib/pan_indirect_dispatch.c     |  6 +--
 src/panfrost/lib/pan_indirect_draw.c         |  8 ++--
 src/panfrost/lib/pan_shader.c                | 56 +++++++++++++++------------
 src/panfrost/lib/pan_shader.h                | 58 +++++++++++++++-------------
 src/panfrost/vulkan/panvk_vX_cs.c            |  7 +---
 src/panfrost/vulkan/panvk_vX_meta.c          |  6 +--
 src/panfrost/vulkan/panvk_vX_shader.c        |  4 +-
 15 files changed, 100 insertions(+), 83 deletions(-)

diff --git a/src/gallium/drivers/panfrost/pan_assemble.c 
b/src/gallium/drivers/panfrost/pan_assemble.c
index 1638c9aef0e..7dce4dde980 100644
--- a/src/gallium/drivers/panfrost/pan_assemble.c
+++ b/src/gallium/drivers/panfrost/pan_assemble.c
@@ -77,7 +77,7 @@ panfrost_shader_compile(struct pipe_screen *pscreen,
         struct util_dynarray binary;
 
         util_dynarray_init(&binary, NULL);
-        pan_shader_compile(dev, s, &inputs, &binary, &state->info);
+        screen->vtbl.compile_shader(s, &inputs, &binary, &state->info);
 
         if (binary.size) {
                 state->bin = panfrost_pool_take_ref(shader_pool,
@@ -89,7 +89,7 @@ panfrost_shader_compile(struct pipe_screen *pscreen,
         /* Don't upload RSD for fragment shaders since they need draw-time
          * merging for e.g. depth/stencil/alpha */
         bool upload = stage != MESA_SHADER_FRAGMENT;
-        screen->vtbl.prepare_rsd(dev, state, desc_pool, upload);
+        screen->vtbl.prepare_rsd(state, desc_pool, upload);
 
         panfrost_analyze_sysvals(state);
 
diff --git a/src/gallium/drivers/panfrost/pan_cmdstream.c 
b/src/gallium/drivers/panfrost/pan_cmdstream.c
index ff5f6b190e9..dea50a8b33e 100644
--- a/src/gallium/drivers/panfrost/pan_cmdstream.c
+++ b/src/gallium/drivers/panfrost/pan_cmdstream.c
@@ -3490,8 +3490,7 @@ panfrost_create_blend_state(struct pipe_context *pipe,
 }
 
 static void
-prepare_rsd(struct panfrost_device *dev,
-            struct panfrost_shader_state *state,
+prepare_rsd(struct panfrost_shader_state *state,
             struct panfrost_pool *pool, bool upload)
 {
         struct mali_renderer_state_packed *out =
@@ -3506,8 +3505,7 @@ prepare_rsd(struct panfrost_device *dev,
         }
 
         pan_pack(out, RENDERER_STATE, cfg) {
-                pan_shader_prepare_rsd(dev, &state->info, state->bin.gpu,
-                                       &cfg);
+                pan_shader_prepare_rsd(&state->info, state->bin.gpu, &cfg);
         }
 }
 
@@ -3667,6 +3665,8 @@ GENX(panfrost_cmdstream_screen_init)(struct 
panfrost_screen *screen)
         screen->vtbl.init_batch = init_batch;
         screen->vtbl.get_blend_shader = GENX(pan_blend_get_shader_locked);
         screen->vtbl.init_polygon_list = init_polygon_list;
+        screen->vtbl.get_compiler_options = 
GENX(pan_shader_get_compiler_options);
+        screen->vtbl.compile_shader = GENX(pan_shader_compile);
 
         GENX(pan_blitter_init)(dev, &screen->blitter.bin_pool.base,
                                &screen->blitter.desc_pool.base);
diff --git a/src/gallium/drivers/panfrost/pan_compute.c 
b/src/gallium/drivers/panfrost/pan_compute.c
index 99c8c28b698..8b1a4265fda 100644
--- a/src/gallium/drivers/panfrost/pan_compute.c
+++ b/src/gallium/drivers/panfrost/pan_compute.c
@@ -44,7 +44,7 @@ panfrost_create_compute_state(
         const struct pipe_compute_state *cso)
 {
         struct panfrost_context *ctx = pan_context(pctx);
-        struct panfrost_device *dev = pan_device(pctx->screen);
+        struct panfrost_screen *screen = pan_screen(pctx->screen);
 
         struct panfrost_shader_variants *so = 
CALLOC_STRUCT(panfrost_shader_variants);
         so->cbase = *cso;
@@ -63,7 +63,7 @@ panfrost_create_compute_state(
                 blob_reader_init(&reader, hdr->blob, hdr->num_bytes);
 
                 const struct nir_shader_compiler_options *options =
-                        pan_shader_get_compiler_options(dev);
+                        screen->vtbl.get_compiler_options();
 
                 so->cbase.prog = nir_deserialize(NULL, options, &reader);
                 so->cbase.ir_type = PIPE_SHADER_IR_NIR;
diff --git a/src/gallium/drivers/panfrost/pan_screen.c 
b/src/gallium/drivers/panfrost/pan_screen.c
index 46cd97bbf13..05ccda9c947 100644
--- a/src/gallium/drivers/panfrost/pan_screen.c
+++ b/src/gallium/drivers/panfrost/pan_screen.c
@@ -821,7 +821,7 @@ panfrost_screen_get_compiler_options(struct pipe_screen 
*pscreen,
                                      enum pipe_shader_ir ir,
                                      enum pipe_shader_type shader)
 {
-        return pan_shader_get_compiler_options(pan_device(pscreen));
+        return pan_screen(pscreen)->vtbl.get_compiler_options();
 }
 
 struct pipe_screen *
diff --git a/src/gallium/drivers/panfrost/pan_screen.h 
b/src/gallium/drivers/panfrost/pan_screen.h
index de080d33bbd..c7ab028c554 100644
--- a/src/gallium/drivers/panfrost/pan_screen.h
+++ b/src/gallium/drivers/panfrost/pan_screen.h
@@ -53,8 +53,7 @@ struct pan_blend_state;
 struct panfrost_vtable {
         /* Prepares the renderer state descriptor for a given compiled shader,
          * and if desired uploads it as well */
-        void (*prepare_rsd)(struct panfrost_device *,
-                            struct panfrost_shader_state *,
+        void (*prepare_rsd)(struct panfrost_shader_state *,
                             struct panfrost_pool *, bool);
 
         /* Emits a thread local storage descriptor */
@@ -87,6 +86,13 @@ struct panfrost_vtable {
 
         /* Initialize the polygon list */
         void (*init_polygon_list)(struct panfrost_batch *);
+
+        /* Shader compilation methods */
+        const nir_shader_compiler_options *(*get_compiler_options)(void);
+        void (*compile_shader)(nir_shader *s,
+                               const struct panfrost_compile_inputs *inputs,
+                               struct util_dynarray *binary,
+                               struct pan_shader_info *info);
 };
 
 struct panfrost_screen {
diff --git a/src/panfrost/lib/meson.build b/src/panfrost/lib/meson.build
index 8658637f607..021c8b98393 100644
--- a/src/panfrost/lib/meson.build
+++ b/src/panfrost/lib/meson.build
@@ -60,6 +60,7 @@ foreach ver : ['4', '5', '6', '7']
       'pan_cs.c',
       'pan_indirect_dispatch.c',
       'pan_indirect_draw.c',
+      'pan_shader.c',
       'pan_texture.c',
     ],
     include_directories : [inc_include, inc_src, inc_mapi, inc_mesa, 
inc_gallium, inc_gallium_aux, inc_panfrost_hw],
@@ -90,7 +91,6 @@ libpanfrost_lib_files = files(
   'pan_samples.c',
   'pan_tiler.c',
   'pan_texture.c',
-  'pan_shader.c',
   'pan_scratch.c',
   'pan_props.c',
   'pan_util.c',
diff --git a/src/panfrost/lib/pan_blend.c b/src/panfrost/lib/pan_blend.c
index de0a47da684..a7a204dba27 100644
--- a/src/panfrost/lib/pan_blend.c
+++ b/src/panfrost/lib/pan_blend.c
@@ -521,7 +521,7 @@ GENX(pan_blend_create_shader)(const struct panfrost_device 
*dev,
 
         nir_builder b =
                 nir_builder_init_simple_shader(MESA_SHADER_FRAGMENT,
-                                               
pan_shader_get_compiler_options(dev),
+                                               
GENX(pan_shader_get_compiler_options)(),
                                                
"pan_blend(rt=%d,fmt=%s,nr_samples=%d,%s=%s)",
                                                rt, 
util_format_name(rt_state->format),
                                                rt_state->nr_samples,
@@ -743,7 +743,7 @@ GENX(pan_blend_get_shader_locked)(const struct 
panfrost_device *dev,
 
         struct pan_shader_info info;
 
-        pan_shader_compile(dev, nir, &inputs, &variant->binary, &info);
+        GENX(pan_shader_compile)(nir, &inputs, &variant->binary, &info);
 
         variant->work_reg_count = info.work_reg_count;
 
diff --git a/src/panfrost/lib/pan_blitter.c b/src/panfrost/lib/pan_blitter.c
index 69cc967dd49..a17fab7dee1 100644
--- a/src/panfrost/lib/pan_blitter.c
+++ b/src/panfrost/lib/pan_blitter.c
@@ -455,7 +455,7 @@ pan_blitter_get_blit_shader(struct panfrost_device *dev,
 
         nir_builder b =
                 nir_builder_init_simple_shader(MESA_SHADER_FRAGMENT,
-                                               
pan_shader_get_compiler_options(dev),
+                                               
GENX(pan_shader_get_compiler_options)(),
                                                "pan_blit(%s)", sig);
         b.shader->info.internal = true;
 
@@ -607,7 +607,7 @@ pan_blitter_get_blit_shader(struct panfrost_device *dev,
 
         util_dynarray_init(&binary, NULL);
 
-        pan_shader_compile(dev, b.shader, &inputs, &binary, &info);
+        GENX(pan_shader_compile)(b.shader, &inputs, &binary, &info);
 
         shader = rzalloc(dev->blitter.shaders.blit,
                          struct pan_blit_shader_data);
diff --git a/src/panfrost/lib/pan_indirect_dispatch.c 
b/src/panfrost/lib/pan_indirect_dispatch.c
index 980ac6b1792..0f013db95a0 100644
--- a/src/panfrost/lib/pan_indirect_dispatch.c
+++ b/src/panfrost/lib/pan_indirect_dispatch.c
@@ -159,7 +159,7 @@ GENX(pan_indirect_dispatch_init)(struct panfrost_device 
*dev)
 {
         nir_builder b =
                 nir_builder_init_simple_shader(MESA_SHADER_COMPUTE,
-                                               
pan_shader_get_compiler_options(dev),
+                                               
GENX(pan_shader_get_compiler_options)(),
                                                "%s", "indirect_dispatch");
         b.shader->info.internal = true;
         nir_variable_create(b.shader, nir_var_mem_ubo,
@@ -226,7 +226,7 @@ GENX(pan_indirect_dispatch_init)(struct panfrost_device 
*dev)
         struct util_dynarray binary;
 
         util_dynarray_init(&binary, NULL);
-        pan_shader_compile(dev, b.shader, &inputs, &binary, &shader_info);
+        GENX(pan_shader_compile)(b.shader, &inputs, &binary, &shader_info);
 
         ralloc_free(b.shader);
 
@@ -256,7 +256,7 @@ GENX(pan_indirect_dispatch_init)(struct panfrost_device 
*dev)
 
         void *rsd = dev->indirect_dispatch.descs->ptr.cpu;
         pan_pack(rsd, RENDERER_STATE, cfg) {
-                pan_shader_prepare_rsd(dev, &shader_info, address, &cfg);
+                pan_shader_prepare_rsd(&shader_info, address, &cfg);
         }
 
         void *tsd = dev->indirect_dispatch.descs->ptr.cpu +
diff --git a/src/panfrost/lib/pan_indirect_draw.c 
b/src/panfrost/lib/pan_indirect_draw.c
index ef054163405..531d3f4e43c 100644
--- a/src/panfrost/lib/pan_indirect_draw.c
+++ b/src/panfrost/lib/pan_indirect_draw.c
@@ -356,13 +356,13 @@ init_shader_builder(struct indirect_draw_shader_builder 
*builder,
         if (index_min_max_search) {
                 builder->b =
                         nir_builder_init_simple_shader(MESA_SHADER_COMPUTE,
-                                                       
pan_shader_get_compiler_options(dev),
+                                                       
GENX(pan_shader_get_compiler_options)(),
                                                        
"indirect_draw_min_max_index(index_size=%d)",
                                                        builder->index_size);
         } else {
                 builder->b =
                         nir_builder_init_simple_shader(MESA_SHADER_COMPUTE,
-                                                       
pan_shader_get_compiler_options(dev),
+                                                       
GENX(pan_shader_get_compiler_options)(),
                                                        
"indirect_draw(index_size=%d%s%s%s)",
                                                        builder->index_size,
                                                        flags & 
PAN_INDIRECT_DRAW_HAS_PSIZ ?
@@ -1076,7 +1076,7 @@ create_indirect_draw_shader(struct panfrost_device *dev,
         struct util_dynarray binary;
 
         util_dynarray_init(&binary, NULL);
-        pan_shader_compile(dev, b->shader, &inputs, &binary, &shader_info);
+        GENX(pan_shader_compile)(b->shader, &inputs, &binary, &shader_info);
 
         assert(!shader_info.tls_size);
         assert(!shader_info.wls_size);
@@ -1102,7 +1102,7 @@ create_indirect_draw_shader(struct panfrost_device *dev,
                 util_dynarray_fini(&binary);
 
                 pan_pack(state, RENDERER_STATE, cfg) {
-                        pan_shader_prepare_rsd(dev, &shader_info, address, 
&cfg);
+                        pan_shader_prepare_rsd(&shader_info, address, &cfg);
                 }
                 pthread_mutex_unlock(&dev->indirect_draw_shaders.lock);
 
diff --git a/src/panfrost/lib/pan_shader.c b/src/panfrost/lib/pan_shader.c
index f1d4d4402da..8f7d43ecc5f 100644
--- a/src/panfrost/lib/pan_shader.c
+++ b/src/panfrost/lib/pan_shader.c
@@ -25,16 +25,20 @@
 #include "pan_device.h"
 #include "pan_shader.h"
 
+#if PAN_ARCH <= 5
 #include "panfrost/midgard/midgard_compile.h"
+#else
 #include "panfrost/bifrost/bifrost_compile.h"
+#endif
 
 const nir_shader_compiler_options *
-pan_shader_get_compiler_options(const struct panfrost_device *dev)
+GENX(pan_shader_get_compiler_options)(void)
 {
-        if (pan_is_bifrost(dev))
-                return &bifrost_nir_options;
-
+#if PAN_ARCH >= 6
+        return &bifrost_nir_options;
+#else
         return &midgard_nir_options;
+#endif
 }
 
 static enum pipe_format
@@ -83,7 +87,7 @@ varying_format(nir_alu_type t, unsigned ncomps)
 static void
 collect_varyings(nir_shader *s, nir_variable_mode varying_mode,
                  struct pan_shader_varying *varyings,
-                 unsigned *varying_count, bool is_bifrost)
+                 unsigned *varying_count)
 {
         *varying_count = 0;
 
@@ -116,7 +120,7 @@ collect_varyings(nir_shader *s, nir_variable_mode 
varying_mode,
                 type = nir_alu_type_get_base_type(type);
 
                 /* Can't do type conversion since GLSL IR packs in funny ways 
*/
-                if (is_bifrost && var->data.interpolation == INTERP_MODE_FLAT)
+                if (PAN_ARCH >= 6 && var->data.interpolation == 
INTERP_MODE_FLAT)
                         type = nir_type_uint;
 
                 /* Demote to fp16 where possible. int16 varyings are TODO as 
the hw
@@ -145,6 +149,7 @@ collect_varyings(nir_shader *s, nir_variable_mode 
varying_mode,
         }
 }
 
+#if PAN_ARCH >= 6
 static enum mali_bifrost_register_file_format
 bifrost_blend_type_from_nir(nir_alu_type nir_type)
 {
@@ -168,20 +173,21 @@ bifrost_blend_type_from_nir(nir_alu_type nir_type)
                 return 0;
         }
 }
+#endif
 
 void
-pan_shader_compile(const struct panfrost_device *dev,
-                   nir_shader *s,
-                   const struct panfrost_compile_inputs *inputs,
-                   struct util_dynarray *binary,
-                   struct pan_shader_info *info)
+GENX(pan_shader_compile)(nir_shader *s,
+                         const struct panfrost_compile_inputs *inputs,
+                         struct util_dynarray *binary,
+                         struct pan_shader_info *info)
 {
         memset(info, 0, sizeof(*info));
 
-        if (pan_is_bifrost(dev))
-                bifrost_compile_shader_nir(s, inputs, binary, info);
-        else
-                midgard_compile_shader_nir(s, inputs, binary, info);
+#if PAN_ARCH >= 6
+        bifrost_compile_shader_nir(s, inputs, binary, info);
+#else
+        midgard_compile_shader_nir(s, inputs, binary, info);
+#endif
 
         info->stage = s->info.stage;
         info->contains_barrier = s->info.uses_memory_barrier ||
@@ -192,20 +198,22 @@ pan_shader_compile(const struct panfrost_device *dev,
         case MESA_SHADER_VERTEX:
                 info->attribute_count = util_bitcount64(s->info.inputs_read);
 
+#if PAN_ARCH <= 5
                 bool vertex_id = BITSET_TEST(s->info.system_values_read,
                                              SYSTEM_VALUE_VERTEX_ID_ZERO_BASE);
-                if (vertex_id && !pan_is_bifrost(dev))
+                if (vertex_id)
                         info->attribute_count = MAX2(info->attribute_count, 
PAN_VERTEX_ID + 1);
 
                 bool instance_id = BITSET_TEST(s->info.system_values_read,
                                                SYSTEM_VALUE_INSTANCE_ID);
-                if (instance_id && !pan_is_bifrost(dev))
+                if (instance_id)
                         info->attribute_count = MAX2(info->attribute_count, 
PAN_INSTANCE_ID + 1);
+#endif
 
                 info->vs.writes_point_size =
                         s->info.outputs_written & (1 << VARYING_SLOT_PSIZ);
                 collect_varyings(s, nir_var_shader_out, info->varyings.output,
-                                 &info->varyings.output_count, 
pan_is_bifrost(dev));
+                                 &info->varyings.output_count);
                 break;
         case MESA_SHADER_FRAGMENT:
                 if (s->info.outputs_written & 
BITFIELD64_BIT(FRAG_RESULT_DEPTH))
@@ -265,7 +273,7 @@ pan_shader_compile(const struct panfrost_device *dev,
                 info->fs.reads_helper_invocation =
                         BITSET_TEST(s->info.system_values_read, 
SYSTEM_VALUE_HELPER_INVOCATION);
                 collect_varyings(s, nir_var_shader_in, info->varyings.input,
-                                 &info->varyings.input_count, 
pan_is_bifrost(dev));
+                                 &info->varyings.input_count);
                 break;
         case MESA_SHADER_COMPUTE:
                 info->wls_size = s->info.shared_size;
@@ -287,11 +295,11 @@ pan_shader_compile(const struct panfrost_device *dev,
 
         info->sampler_count = info->texture_count = 
BITSET_LAST_BIT(s->info.textures_used);
 
+#if PAN_ARCH >= 6
         /* This is "redundant" information, but is needed in a draw-time hot 
path */
-        if (pan_is_bifrost(dev)) {
-                for (unsigned i = 0; i < ARRAY_SIZE(info->bifrost.blend); ++i) 
{
-                        info->bifrost.blend[i].format =
-                                
bifrost_blend_type_from_nir(info->bifrost.blend[i].type);
-                }
+        for (unsigned i = 0; i < ARRAY_SIZE(info->bifrost.blend); ++i) {
+                info->bifrost.blend[i].format =
+                        
bifrost_blend_type_from_nir(info->bifrost.blend[i].type);
         }
+#endif
 }
diff --git a/src/panfrost/lib/pan_shader.h b/src/panfrost/lib/pan_shader.h
index ba9ce2facdb..fbf88b972f7 100644
--- a/src/panfrost/lib/pan_shader.h
+++ b/src/panfrost/lib/pan_shader.h
@@ -33,16 +33,17 @@
 
 struct panfrost_device;
 
+#ifdef PAN_ARCH
 const nir_shader_compiler_options *
-pan_shader_get_compiler_options(const struct panfrost_device *dev);
+GENX(pan_shader_get_compiler_options)(void);
 
 void
-pan_shader_compile(const struct panfrost_device *dev,
-                   nir_shader *nir,
-                   const struct panfrost_compile_inputs *inputs,
-                   struct util_dynarray *binary,
-                   struct pan_shader_info *info);
+GENX(pan_shader_compile)(nir_shader *nir,
+                         const struct panfrost_compile_inputs *inputs,
+                         struct util_dynarray *binary,
+                         struct pan_shader_info *info);
 
+#if PAN_ARCH <= 5
 static inline void
 pan_shader_prepare_midgard_rsd(const struct pan_shader_info *info,
                                struct MALI_RENDERER_STATE *rsd)
@@ -67,6 +68,8 @@ pan_shader_prepare_midgard_rsd(const struct pan_shader_info 
*info,
         }
 }
 
+#else
+
 /* Classify a shader into the following pixel kill categories:
  *
  * (force early, strong early): no side effects/depth/stencil/coverage writes 
(force)
@@ -112,19 +115,18 @@ pan_shader_classify_pixel_kill_coverage(const struct 
pan_shader_info *info,
 #undef SET_PIXEL_KILL
 
 static inline void
-pan_shader_prepare_bifrost_rsd(const struct panfrost_device *dev,
-                               const struct pan_shader_info *info,
+pan_shader_prepare_bifrost_rsd(const struct pan_shader_info *info,
                                struct MALI_RENDERER_STATE *rsd)
 {
         unsigned fau_count = DIV_ROUND_UP(info->push.count, 2);
         rsd->preload.uniform_count = fau_count;
 
-        if (dev->arch == 7) {
-                rsd->properties.bifrost.shader_register_allocation =
-                        (info->work_reg_count <= 32) ?
-                        MALI_SHADER_REGISTER_ALLOCATION_32_PER_THREAD :
-                        MALI_SHADER_REGISTER_ALLOCATION_64_PER_THREAD;
-        }
+#if PAN_ARCH >= 7
+        rsd->properties.bifrost.shader_register_allocation =
+                (info->work_reg_count <= 32) ?
+                MALI_SHADER_REGISTER_ALLOCATION_32_PER_THREAD :
+                MALI_SHADER_REGISTER_ALLOCATION_64_PER_THREAD;
+#endif
 
         switch (info->stage) {
         case MESA_SHADER_VERTEX:
@@ -135,10 +137,10 @@ pan_shader_prepare_bifrost_rsd(const struct 
panfrost_device *dev,
         case MESA_SHADER_FRAGMENT:
                 pan_shader_classify_pixel_kill_coverage(info, rsd);
 
-                if (dev->arch > 6) {
-                        rsd->properties.bifrost.shader_wait_dependency_6 = 
info->bifrost.wait_6;
-                        rsd->properties.bifrost.shader_wait_dependency_7 = 
info->bifrost.wait_7;
-                }
+#if PAN_ARCH >= 7
+                rsd->properties.bifrost.shader_wait_dependency_6 = 
info->bifrost.wait_6;
+                rsd->properties.bifrost.shader_wait_dependency_7 = 
info->bifrost.wait_7;
+#endif
 
                 rsd->properties.bifrost.allow_forward_pixel_to_be_killed =
                         !info->fs.sidefx;
@@ -177,14 +179,16 @@ pan_shader_prepare_bifrost_rsd(const struct 
panfrost_device *dev,
         }
 }
 
+#endif
+
 static inline void
-pan_shader_prepare_rsd(const struct panfrost_device *dev,
-                       const struct pan_shader_info *shader_info,
+pan_shader_prepare_rsd(const struct pan_shader_info *shader_info,
                        mali_ptr shader_ptr,
                        struct MALI_RENDERER_STATE *rsd)
 {
-        if (!pan_is_bifrost(dev))
-                shader_ptr |= shader_info->midgard.first_tag;
+#if PAN_ARCH <= 5
+        shader_ptr |= shader_info->midgard.first_tag;
+#endif
 
         rsd->shader.shader = shader_ptr;
         rsd->shader.attribute_count = shader_info->attribute_count;
@@ -211,10 +215,12 @@ pan_shader_prepare_rsd(const struct panfrost_device *dev,
                         shader_info->fs.sample_shading;
         }
 
-        if (pan_is_bifrost(dev))
-                pan_shader_prepare_bifrost_rsd(dev, shader_info, rsd);
-        else
-                pan_shader_prepare_midgard_rsd(shader_info, rsd);
+#if PAN_ARCH >= 6
+        pan_shader_prepare_bifrost_rsd(shader_info, rsd);
+#else
+        pan_shader_prepare_midgard_rsd(shader_info, rsd);
+#endif
 }
+#endif /* PAN_ARCH */
 
 #endif
diff --git a/src/panfrost/vulkan/panvk_vX_cs.c 
b/src/panfrost/vulkan/panvk_vX_cs.c
index fc8b13354a9..b5dfe8ec768 100644
--- a/src/panfrost/vulkan/panvk_vX_cs.c
+++ b/src/panfrost/vulkan/panvk_vX_cs.c
@@ -718,12 +718,11 @@ panvk_per_arch(emit_base_fs_rsd)(const struct 
panvk_device *dev,
                                  const struct panvk_pipeline *pipeline,
                                  void *rsd)
 {
-   const struct panfrost_device *pdev = &dev->physical_device->pdev;
    const struct pan_shader_info *info = &pipeline->fs.info;
 
    pan_pack(rsd, RENDERER_STATE, cfg) {
       if (pipeline->fs.required) {
-         pan_shader_prepare_rsd(pdev, info, pipeline->fs.address, &cfg);
+         pan_shader_prepare_rsd(info, pipeline->fs.address, &cfg);
 
 #if PAN_ARCH == 5
          /* If either depth or stencil is enabled, discard matters */
@@ -827,12 +826,10 @@ panvk_per_arch(emit_non_fs_rsd)(const struct panvk_device 
*dev,
                                 mali_ptr shader_ptr,
                                 void *rsd)
 {
-   const struct panfrost_device *pdev = &dev->physical_device->pdev;
-
    assert(shader_info->stage != MESA_SHADER_FRAGMENT);
 
    pan_pack(rsd, RENDERER_STATE, cfg) {
-      pan_shader_prepare_rsd(pdev, shader_info, shader_ptr, &cfg);
+      pan_shader_prepare_rsd(shader_info, shader_ptr, &cfg);
    }
 }
 
diff --git a/src/panfrost/vulkan/panvk_vX_meta.c 
b/src/panfrost/vulkan/panvk_vX_meta.c
index 7b7c981feb3..888abf5ee54 100644
--- a/src/panfrost/vulkan/panvk_vX_meta.c
+++ b/src/panfrost/vulkan/panvk_vX_meta.c
@@ -169,7 +169,7 @@ panvk_meta_clear_attachments_shader(struct panfrost_device 
*pdev,
                                     struct pan_shader_info *shader_info)
 {
    nir_builder b = nir_builder_init_simple_shader(MESA_SHADER_FRAGMENT,
-                                     pan_shader_get_compiler_options(pdev),
+                                     GENX(pan_shader_get_compiler_options)(),
                                      
"panvk_meta_clear_attachment(base_type=%d,rt=%d)",
                                      base_type,
                                      rt);
@@ -198,7 +198,7 @@ panvk_meta_clear_attachments_shader(struct panfrost_device 
*pdev,
    struct util_dynarray binary;
 
    util_dynarray_init(&binary, NULL);
-   pan_shader_compile(pdev, b.shader, &inputs, &binary, shader_info);
+   GENX(pan_shader_compile)(b.shader, &inputs, &binary, shader_info);
 
    /* Make sure UBO words have been upgraded to push constants */
    assert(shader_info->ubo_count == 1);
@@ -231,7 +231,7 @@ panvk_meta_clear_attachments_emit_rsd(struct 
panfrost_device *pdev,
    assert(rt == 0);
 
    pan_pack(rsd_ptr.cpu, RENDERER_STATE, cfg) {
-      pan_shader_prepare_rsd(pdev, shader_info, shader, &cfg);
+      pan_shader_prepare_rsd(shader_info, shader, &cfg);
       cfg.properties.depth_source = MALI_DEPTH_SOURCE_FIXED_FUNCTION;
       cfg.multisample_misc.sample_mask = UINT16_MAX;
       cfg.multisample_misc.depth_function = MALI_FUNC_ALWAYS;
diff --git a/src/panfrost/vulkan/panvk_vX_shader.c 
b/src/panfrost/vulkan/panvk_vX_shader.c
index f0245919cb5..13c76b9da6f 100644
--- a/src/panfrost/vulkan/panvk_vX_shader.c
+++ b/src/panfrost/vulkan/panvk_vX_shader.c
@@ -296,7 +296,7 @@ panvk_per_arch(shader_create)(struct panvk_device *dev,
                                         module->code_size,
                                         stage, stage_info->pName,
                                         stage_info->pSpecializationInfo,
-                                        pan_shader_get_compiler_options(pdev));
+                                        
GENX(pan_shader_get_compiler_options)());
    if (!nir) {
       vk_free2(&dev->vk.alloc, alloc, shader);
       return NULL;
@@ -370,7 +370,7 @@ panvk_per_arch(shader_create)(struct panvk_device *dev,
       .sysval_ubo = sysval_ubo,
    };
 
-   pan_shader_compile(pdev, nir, &inputs, &shader->binary, &shader->info);
+   GENX(pan_shader_compile)(nir, &inputs, &shader->binary, &shader->info);
 
    /* Patch the descriptor count */
    shader->info.ubo_count =

Reply via email to