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

Author: Qiang Yu <[email protected]>
Date:   Mon Sep  4 14:56:21 2023 +0800

radeonsi: move llvm internal header to si_shader_llvm.h

Reviewed-by: Marek Olšák <[email protected]>
Signed-off-by: Qiang Yu <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/25632>

---

 src/gallium/drivers/radeonsi/meson.build           |   1 +
 src/gallium/drivers/radeonsi/si_pipe.c             |   5 +-
 src/gallium/drivers/radeonsi/si_shader_internal.h  |  90 +-----------------
 src/gallium/drivers/radeonsi/si_shader_llvm.c      |   1 +
 src/gallium/drivers/radeonsi/si_shader_llvm.h      | 101 +++++++++++++++++++++
 src/gallium/drivers/radeonsi/si_shader_llvm_gs.c   |   1 +
 src/gallium/drivers/radeonsi/si_shader_llvm_ps.c   |   1 +
 src/gallium/drivers/radeonsi/si_shader_llvm_tess.c |   1 +
 src/gallium/drivers/radeonsi/si_shader_llvm_vs.c   |   1 +
 9 files changed, 116 insertions(+), 86 deletions(-)

diff --git a/src/gallium/drivers/radeonsi/meson.build 
b/src/gallium/drivers/radeonsi/meson.build
index 28f0afc8f57..cc7253450fc 100644
--- a/src/gallium/drivers/radeonsi/meson.build
+++ b/src/gallium/drivers/radeonsi/meson.build
@@ -73,6 +73,7 @@ files_libradeonsi = files(
   'si_shader_info.c',
   'si_shader_internal.h',
   'si_shader_llvm.c',
+  'si_shader_llvm.h',
   'si_shader_llvm_gs.c',
   'si_shader_llvm_ps.c',
   'si_shader_llvm_tess.c',
diff --git a/src/gallium/drivers/radeonsi/si_pipe.c 
b/src/gallium/drivers/radeonsi/si_pipe.c
index 4e968fbdbf2..3218f54d2b3 100644
--- a/src/gallium/drivers/radeonsi/si_pipe.c
+++ b/src/gallium/drivers/radeonsi/si_pipe.c
@@ -10,7 +10,6 @@
 #include "driver_ddebug/dd_util.h"
 #include "radeon_uvd.h"
 #include "si_public.h"
-#include "si_shader_internal.h"
 #include "sid.h"
 #include "ac_shadowed_regs.h"
 #include "compiler/nir/nir.h"
@@ -26,6 +25,10 @@
 #include "vl/vl_decoder.h"
 #include "si_utrace.h"
 
+#ifdef LLVM_AVAILABLE
+#include "ac_llvm_util.h"
+#endif
+
 #include <xf86drm.h>
 
 static struct pipe_context *si_create_context(struct pipe_screen *screen, 
unsigned flags);
diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h 
b/src/gallium/drivers/radeonsi/si_shader_internal.h
index 9b85375d913..c86cd0d0edf 100644
--- a/src/gallium/drivers/radeonsi/si_shader_internal.h
+++ b/src/gallium/drivers/radeonsi/si_shader_internal.h
@@ -8,8 +8,8 @@
 #define SI_SHADER_PRIVATE_H
 
 #include "ac_hw_stage.h"
-#include "ac_shader_abi.h"
-#include "ac_llvm_build.h"
+#include "ac_shader_args.h"
+#include "ac_shader_util.h"
 #include "si_shader.h"
 
 #define SI_SPI_PS_INPUT_ADDR_FOR_PROLOG (       \
@@ -78,49 +78,15 @@ struct si_shader_args {
    struct ac_arg cs_image[3];
 };
 
-struct si_shader_context {
-   struct ac_llvm_context ac;
-   struct si_shader *shader;
-   struct si_screen *screen;
-
-   gl_shader_stage stage;
-
-   /* For clamping the non-constant index in resource indexing: */
-   unsigned num_const_buffers;
-   unsigned num_shader_buffers;
-   unsigned num_images;
-   unsigned num_samplers;
-
-   struct si_shader_args *args;
-   struct ac_shader_abi abi;
-
-   LLVMBasicBlockRef merged_wrap_if_entry_block;
-   int merged_wrap_if_label;
-
-   struct ac_llvm_pointer main_fn;
-   LLVMTypeRef return_type;
-
-   struct ac_llvm_compiler *compiler;
-
-   /* Preloaded descriptors. */
-   LLVMValueRef instance_divisor_constbuf;
-
-   LLVMValueRef gs_ngg_emit;
-   struct ac_llvm_pointer gs_ngg_scratch;
-   LLVMValueRef return_value;
-};
-
-static inline struct si_shader_context *si_shader_context_from_abi(struct 
ac_shader_abi *abi)
-{
-   return container_of(abi, struct si_shader_context, abi);
-}
-
 struct ac_nir_gs_output_info;
 typedef struct ac_nir_gs_output_info ac_nir_gs_output_info;
 
 struct nir_builder;
 typedef struct nir_builder nir_builder;
 
+struct nir_shader;
+typedef struct nir_shader nir_shader;
+
 /* si_shader.c */
 bool si_is_multi_part_shader(struct si_shader *shader);
 bool si_is_merged_shader(struct si_shader *shader);
@@ -184,31 +150,6 @@ bool si_nir_lower_vs_inputs(nir_shader *nir, struct 
si_shader *shader,
                             struct si_shader_args *args);
 
 /* si_shader_llvm.c */
-bool si_compile_llvm(struct si_screen *sscreen, struct si_shader_binary 
*binary,
-                     struct ac_shader_config *conf, struct ac_llvm_compiler 
*compiler,
-                     struct ac_llvm_context *ac, struct util_debug_callback 
*debug,
-                     gl_shader_stage stage, const char *name, bool 
less_optimized);
-void si_llvm_context_init(struct si_shader_context *ctx, struct si_screen 
*sscreen,
-                          struct ac_llvm_compiler *compiler, unsigned 
wave_size,
-                          bool exports_color_null, bool exports_mrtz,
-                          enum ac_float_mode float_mode);
-void si_llvm_create_func(struct si_shader_context *ctx, const char *name, 
LLVMTypeRef *return_types,
-                         unsigned num_return_elems, unsigned 
max_workgroup_size);
-void si_llvm_create_main_func(struct si_shader_context *ctx);
-void si_llvm_optimize_module(struct si_shader_context *ctx);
-void si_llvm_dispose(struct si_shader_context *ctx);
-LLVMValueRef si_buffer_load_const(struct si_shader_context *ctx, LLVMValueRef 
resource,
-                                  LLVMValueRef offset);
-void si_llvm_build_ret(struct si_shader_context *ctx, LLVMValueRef ret);
-LLVMValueRef si_insert_input_ret(struct si_shader_context *ctx, LLVMValueRef 
ret,
-                                 struct ac_arg param, unsigned return_index);
-LLVMValueRef si_insert_input_ret_float(struct si_shader_context *ctx, 
LLVMValueRef ret,
-                                       struct ac_arg param, unsigned 
return_index);
-LLVMValueRef si_insert_input_ptr(struct si_shader_context *ctx, LLVMValueRef 
ret,
-                                 struct ac_arg param, unsigned return_index);
-LLVMValueRef si_prolog_get_internal_binding_slot(struct si_shader_context 
*ctx, unsigned slot);
-LLVMValueRef si_unpack_param(struct si_shader_context *ctx, struct ac_arg 
param, unsigned rshift,
-                             unsigned bitwidth);
 bool si_llvm_compile_shader(struct si_screen *sscreen, struct ac_llvm_compiler 
*compiler,
                             struct si_shader *shader, struct si_shader_args 
*args,
                             struct util_debug_callback *debug, struct 
nir_shader *nir);
@@ -217,27 +158,6 @@ bool si_llvm_build_shader_part(struct si_screen *sscreen, 
gl_shader_stage stage,
                                struct util_debug_callback *debug, const char 
*name,
                                struct si_shader_part *result);
 
-/* si_shader_llvm_gs.c */
-LLVMValueRef si_is_es_thread(struct si_shader_context *ctx);
-LLVMValueRef si_is_gs_thread(struct si_shader_context *ctx);
-void si_llvm_es_build_end(struct si_shader_context *ctx);
-void si_llvm_gs_build_end(struct si_shader_context *ctx);
-
-/* si_shader_llvm_tess.c */
-LLVMValueRef si_get_rel_patch_id(struct si_shader_context *ctx);
-void si_llvm_ls_build_end(struct si_shader_context *ctx);
-void si_llvm_build_tcs_epilog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
-void si_llvm_tcs_build_end(struct si_shader_context *ctx);
-void si_llvm_init_tcs_callbacks(struct si_shader_context *ctx);
-
-/* si_shader_llvm_ps.c */
-void si_llvm_build_ps_prolog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
-void si_llvm_build_ps_epilog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
-void si_llvm_ps_build_end(struct si_shader_context *ctx);
-
-/* si_shader_llvm_vs.c */
-void si_llvm_build_vs_prolog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
-
 /* si_shader_aco.c */
 bool si_aco_compile_shader(struct si_shader *shader,
                            struct si_shader_args *args,
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c 
b/src/gallium/drivers/radeonsi/si_shader_llvm.c
index ab198267394..77b9c024974 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c
@@ -9,6 +9,7 @@
 #include "ac_rtld.h"
 #include "si_pipe.h"
 #include "si_shader_internal.h"
+#include "si_shader_llvm.h"
 #include "sid.h"
 #include "util/u_memory.h"
 #include "util/u_prim.h"
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.h 
b/src/gallium/drivers/radeonsi/si_shader_llvm.h
new file mode 100644
index 00000000000..8b0f6542be0
--- /dev/null
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm.h
@@ -0,0 +1,101 @@
+/*
+ * Copyright 2016 Advanced Micro Devices, Inc.
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#ifndef SI_SHADER_LLVM_H
+#define SI_SHADER_LLVM_H
+
+#include "ac_shader_abi.h"
+#include "ac_llvm_build.h"
+#include "si_shader.h"
+
+struct si_shader_args;
+
+struct si_shader_context {
+   struct ac_llvm_context ac;
+   struct si_shader *shader;
+   struct si_screen *screen;
+
+   gl_shader_stage stage;
+
+   /* For clamping the non-constant index in resource indexing: */
+   unsigned num_const_buffers;
+   unsigned num_shader_buffers;
+   unsigned num_images;
+   unsigned num_samplers;
+
+   struct si_shader_args *args;
+   struct ac_shader_abi abi;
+
+   LLVMBasicBlockRef merged_wrap_if_entry_block;
+   int merged_wrap_if_label;
+
+   struct ac_llvm_pointer main_fn;
+   LLVMTypeRef return_type;
+
+   struct ac_llvm_compiler *compiler;
+
+   /* Preloaded descriptors. */
+   LLVMValueRef instance_divisor_constbuf;
+
+   LLVMValueRef gs_ngg_emit;
+   struct ac_llvm_pointer gs_ngg_scratch;
+   LLVMValueRef return_value;
+};
+
+static inline struct si_shader_context *si_shader_context_from_abi(struct 
ac_shader_abi *abi)
+{
+   return container_of(abi, struct si_shader_context, abi);
+}
+
+/* si_shader_llvm.c */
+bool si_compile_llvm(struct si_screen *sscreen, struct si_shader_binary 
*binary,
+                     struct ac_shader_config *conf, struct ac_llvm_compiler 
*compiler,
+                     struct ac_llvm_context *ac, struct util_debug_callback 
*debug,
+                     gl_shader_stage stage, const char *name, bool 
less_optimized);
+void si_llvm_context_init(struct si_shader_context *ctx, struct si_screen 
*sscreen,
+                          struct ac_llvm_compiler *compiler, unsigned 
wave_size,
+                          bool exports_color_null, bool exports_mrtz,
+                          enum ac_float_mode float_mode);
+void si_llvm_create_func(struct si_shader_context *ctx, const char *name, 
LLVMTypeRef *return_types,
+                         unsigned num_return_elems, unsigned 
max_workgroup_size);
+void si_llvm_create_main_func(struct si_shader_context *ctx);
+void si_llvm_optimize_module(struct si_shader_context *ctx);
+void si_llvm_dispose(struct si_shader_context *ctx);
+LLVMValueRef si_buffer_load_const(struct si_shader_context *ctx, LLVMValueRef 
resource,
+                                  LLVMValueRef offset);
+void si_llvm_build_ret(struct si_shader_context *ctx, LLVMValueRef ret);
+LLVMValueRef si_insert_input_ret(struct si_shader_context *ctx, LLVMValueRef 
ret,
+                                 struct ac_arg param, unsigned return_index);
+LLVMValueRef si_insert_input_ret_float(struct si_shader_context *ctx, 
LLVMValueRef ret,
+                                       struct ac_arg param, unsigned 
return_index);
+LLVMValueRef si_insert_input_ptr(struct si_shader_context *ctx, LLVMValueRef 
ret,
+                                 struct ac_arg param, unsigned return_index);
+LLVMValueRef si_prolog_get_internal_binding_slot(struct si_shader_context 
*ctx, unsigned slot);
+LLVMValueRef si_unpack_param(struct si_shader_context *ctx, struct ac_arg 
param, unsigned rshift,
+                             unsigned bitwidth);
+
+/* si_shader_llvm_gs.c */
+LLVMValueRef si_is_es_thread(struct si_shader_context *ctx);
+LLVMValueRef si_is_gs_thread(struct si_shader_context *ctx);
+void si_llvm_es_build_end(struct si_shader_context *ctx);
+void si_llvm_gs_build_end(struct si_shader_context *ctx);
+
+/* si_shader_llvm_tess.c */
+LLVMValueRef si_get_rel_patch_id(struct si_shader_context *ctx);
+void si_llvm_ls_build_end(struct si_shader_context *ctx);
+void si_llvm_build_tcs_epilog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
+void si_llvm_tcs_build_end(struct si_shader_context *ctx);
+void si_llvm_init_tcs_callbacks(struct si_shader_context *ctx);
+
+/* si_shader_llvm_ps.c */
+void si_llvm_build_ps_prolog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
+void si_llvm_build_ps_epilog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
+void si_llvm_ps_build_end(struct si_shader_context *ctx);
+
+/* si_shader_llvm_vs.c */
+void si_llvm_build_vs_prolog(struct si_shader_context *ctx, union 
si_shader_part_key *key);
+
+#endif
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c 
b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
index c87e0d176d7..a06ae356a7a 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_gs.c
@@ -7,6 +7,7 @@
 #include "ac_nir.h"
 #include "si_pipe.h"
 #include "si_shader_internal.h"
+#include "si_shader_llvm.h"
 #include "si_query.h"
 #include "sid.h"
 #include "util/u_memory.h"
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c 
b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
index 67869f4b3ee..54fffc44874 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_ps.c
@@ -6,6 +6,7 @@
 
 #include "si_pipe.h"
 #include "si_shader_internal.h"
+#include "si_shader_llvm.h"
 #include "sid.h"
 
 static LLVMValueRef si_build_fs_interp(struct si_shader_context *ctx, unsigned 
attr_index,
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c 
b/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c
index 8a6a11bd0ea..ffb321e0cc0 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_tess.c
@@ -6,6 +6,7 @@
 
 #include "si_pipe.h"
 #include "si_shader_internal.h"
+#include "si_shader_llvm.h"
 #include "sid.h"
 
 LLVMValueRef si_get_rel_patch_id(struct si_shader_context *ctx)
diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c 
b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
index 8550e2449fa..32ae6dc3c71 100644
--- a/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
+++ b/src/gallium/drivers/radeonsi/si_shader_llvm_vs.c
@@ -6,6 +6,7 @@
 
 #include "si_pipe.h"
 #include "si_shader_internal.h"
+#include "si_shader_llvm.h"
 #include "sid.h"
 #include "util/u_memory.h"
 #include "ac_nir.h"

Reply via email to