Mesa (main): aco/radv: convert to aco shader info at the radv level.

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed May 11 19:36:12 UTC 2022


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

Author: Dave Airlie <airlied at redhat.com>
Date:   Thu May  5 13:34:41 2022 +1000

aco/radv: convert to aco shader info at the radv level.

This removes the radv shader info type from aco completely.

Reviewed-by: Timur Kristóf <timur.kristof at gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/16342>

---

 src/amd/compiler/aco_instruction_selection.cpp       |  8 ++++----
 src/amd/compiler/aco_instruction_selection.h         |  2 +-
 src/amd/compiler/aco_instruction_selection_setup.cpp |  2 +-
 src/amd/compiler/aco_interface.cpp                   |  4 ++--
 src/amd/compiler/aco_interface.h                     |  5 +++--
 src/amd/compiler/aco_ir.cpp                          |  6 ++----
 src/amd/compiler/aco_ir.h                            | 11 +++++------
 src/amd/compiler/aco_shader_info.h                   |  9 +++++----
 src/amd/compiler/tests/helpers.cpp                   |  6 +-----
 src/amd/compiler/tests/helpers.h                     |  2 +-
 src/amd/vulkan/radv_shader.c                         | 10 ++++++++--
 11 files changed, 33 insertions(+), 32 deletions(-)

diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp
index 88c32e4ccd0..d948ba1b0b7 100644
--- a/src/amd/compiler/aco_instruction_selection.cpp
+++ b/src/amd/compiler/aco_instruction_selection.cpp
@@ -11294,7 +11294,7 @@ ngg_emit_sendmsg_gs_alloc_req(isel_context* ctx, Temp vtx_cnt, Temp prm_cnt)
 void
 select_program(Program* program, unsigned shader_count, struct nir_shader* const* shaders,
                ac_shader_config* config, const struct radv_nir_compiler_options* options,
-               const struct radv_shader_info* info,
+               const struct aco_shader_info* info,
                const struct radv_shader_args* args)
 {
    isel_context ctx = setup_isel_context(program, shader_count, shaders, config, options, info, args, false);
@@ -11422,7 +11422,7 @@ select_program(Program* program, unsigned shader_count, struct nir_shader* const
 void
 select_gs_copy_shader(Program* program, struct nir_shader* gs_shader, ac_shader_config* config,
                       const struct radv_nir_compiler_options* options,
-                      const struct radv_shader_info* info,
+                      const struct aco_shader_info* info,
                       const struct radv_shader_args* args)
 {
    isel_context ctx = setup_isel_context(program, 1, &gs_shader, config, options, info, args, true);
@@ -11521,7 +11521,7 @@ select_gs_copy_shader(Program* program, struct nir_shader* gs_shader, ac_shader_
 void
 select_trap_handler_shader(Program* program, struct nir_shader* shader, ac_shader_config* config,
                            const struct radv_nir_compiler_options* options,
-                           const struct radv_shader_info* info,
+                           const struct aco_shader_info* info,
                            const struct radv_shader_args* args)
 {
    assert(options->chip_class == GFX8);
@@ -11685,7 +11685,7 @@ calc_nontrivial_instance_id(Builder& bld, const struct radv_shader_args* args, u
 void
 select_vs_prolog(Program* program, const struct radv_vs_prolog_key* key, ac_shader_config* config,
                  const struct radv_nir_compiler_options* options,
-                 const struct radv_shader_info* info,
+                 const struct aco_shader_info* info,
                  const struct radv_shader_args* args, unsigned* num_preserved_sgprs)
 {
    assert(key->num_attributes > 0);
diff --git a/src/amd/compiler/aco_instruction_selection.h b/src/amd/compiler/aco_instruction_selection.h
index 65f74b32605..7a1f0c5f9f7 100644
--- a/src/amd/compiler/aco_instruction_selection.h
+++ b/src/amd/compiler/aco_instruction_selection.h
@@ -117,7 +117,7 @@ void cleanup_context(isel_context* ctx);
 isel_context setup_isel_context(Program* program, unsigned shader_count,
                                 struct nir_shader* const* shaders, ac_shader_config* config,
                                 const struct radv_nir_compiler_options* options,
-                                const struct radv_shader_info* info,
+                                const struct aco_shader_info* info,
                                 const struct radv_shader_args* args, bool is_gs_copy_shader);
 
 } // namespace aco
diff --git a/src/amd/compiler/aco_instruction_selection_setup.cpp b/src/amd/compiler/aco_instruction_selection_setup.cpp
index 059ab516ca0..fb3e51cbdf1 100644
--- a/src/amd/compiler/aco_instruction_selection_setup.cpp
+++ b/src/amd/compiler/aco_instruction_selection_setup.cpp
@@ -844,7 +844,7 @@ cleanup_context(isel_context* ctx)
 isel_context
 setup_isel_context(Program* program, unsigned shader_count, struct nir_shader* const* shaders,
                    ac_shader_config* config, const struct radv_nir_compiler_options* options,
-                   const struct radv_shader_info* info,
+                   const struct aco_shader_info* info,
                    const struct radv_shader_args* args, bool is_gs_copy_shader)
 {
    SWStage sw_stage = SWStage::None;
diff --git a/src/amd/compiler/aco_interface.cpp b/src/amd/compiler/aco_interface.cpp
index d2180fa3750..8077d590855 100644
--- a/src/amd/compiler/aco_interface.cpp
+++ b/src/amd/compiler/aco_interface.cpp
@@ -105,7 +105,7 @@ get_disasm_string(aco::Program* program, std::vector<uint32_t>& code,
 
 void
 aco_compile_shader(const struct radv_nir_compiler_options* options,
-                   const struct radv_shader_info* info,
+                   const struct aco_shader_info* info,
                    unsigned shader_count, struct nir_shader* const* shaders,
                    const struct radv_shader_args *args,
                    struct radv_shader_binary** binary)
@@ -280,7 +280,7 @@ aco_compile_shader(const struct radv_nir_compiler_options* options,
 
 void
 aco_compile_vs_prolog(const struct radv_nir_compiler_options* options,
-                      const struct radv_shader_info* info,
+                      const struct aco_shader_info* info,
                       const struct radv_vs_prolog_key* key,
                       const struct radv_shader_args* args,
                       struct radv_prolog_binary** binary)
diff --git a/src/amd/compiler/aco_interface.h b/src/amd/compiler/aco_interface.h
index b0b5c74190b..02a19c03dc9 100644
--- a/src/amd/compiler/aco_interface.h
+++ b/src/amd/compiler/aco_interface.h
@@ -32,6 +32,7 @@ extern "C" {
 #endif
 
 struct ac_shader_config;
+struct aco_shader_info;
 
 struct aco_compiler_statistic_info {
    char name[32];
@@ -42,13 +43,13 @@ extern const unsigned aco_num_statistics;
 extern const struct aco_compiler_statistic_info* aco_statistic_infos;
 
 void aco_compile_shader(const struct radv_nir_compiler_options* options,
-                        const struct radv_shader_info* info,
+                        const struct aco_shader_info* info,
                         unsigned shader_count, struct nir_shader* const* shaders,
                         const struct radv_shader_args *args,
                         struct radv_shader_binary** binary);
 
 void aco_compile_vs_prolog(const struct radv_nir_compiler_options* options,
-                           const struct radv_shader_info* info,
+                           const struct aco_shader_info* info,
                            const struct radv_vs_prolog_key* key,
                            const struct radv_shader_args* args,
                            struct radv_prolog_binary** binary);
diff --git a/src/amd/compiler/aco_ir.cpp b/src/amd/compiler/aco_ir.cpp
index 58dfc795e5a..be31b95e3a2 100644
--- a/src/amd/compiler/aco_ir.cpp
+++ b/src/amd/compiler/aco_ir.cpp
@@ -30,8 +30,6 @@
 
 #include "c11/threads.h"
 
-#include "vulkan/radv_aco_shader_info.h"
-
 namespace aco {
 
 uint64_t debug_flags = 0;
@@ -67,13 +65,13 @@ init()
 }
 
 void
-init_program(Program* program, Stage stage, const struct radv_shader_info* info,
+init_program(Program* program, Stage stage, const struct aco_shader_info* info,
              enum chip_class chip_class, enum radeon_family family, bool wgp_mode,
              ac_shader_config* config)
 {
    program->stage = stage;
    program->config = config;
-   radv_aco_convert_shader_info(&program->info, info);
+   program->info = *info;
    program->chip_class = chip_class;
    if (family == CHIP_UNKNOWN) {
       switch (chip_class) {
diff --git a/src/amd/compiler/aco_ir.h b/src/amd/compiler/aco_ir.h
index 6507be67ed3..e676068db61 100644
--- a/src/amd/compiler/aco_ir.h
+++ b/src/amd/compiler/aco_ir.h
@@ -38,7 +38,6 @@
 #include <vector>
 
 struct radv_shader_args;
-struct radv_shader_info;
 struct radv_vs_prolog_key;
 
 namespace aco {
@@ -2152,27 +2151,27 @@ struct ra_test_policy {
 
 void init();
 
-void init_program(Program* program, Stage stage, const struct radv_shader_info* info,
+void init_program(Program* program, Stage stage, const struct aco_shader_info* info,
                   enum chip_class chip_class, enum radeon_family family, bool wgp_mode,
                   ac_shader_config* config);
 
 void select_program(Program* program, unsigned shader_count, struct nir_shader* const* shaders,
                     ac_shader_config* config, const struct radv_nir_compiler_options* options,
-                    const struct radv_shader_info* info,
+                    const struct aco_shader_info* info,
                     const struct radv_shader_args* args);
 void select_gs_copy_shader(Program* program, struct nir_shader* gs_shader, ac_shader_config* config,
                            const struct radv_nir_compiler_options* options,
-                           const struct radv_shader_info* info,
+                           const struct aco_shader_info* info,
                            const struct radv_shader_args* args);
 void select_trap_handler_shader(Program* program, struct nir_shader* shader,
                                 ac_shader_config* config,
                                 const struct radv_nir_compiler_options* options,
-                                const struct radv_shader_info* info,
+                                const struct aco_shader_info* info,
                                 const struct radv_shader_args* args);
 void select_vs_prolog(Program* program, const struct radv_vs_prolog_key* key,
                       ac_shader_config* config,
                       const struct radv_nir_compiler_options* options,
-                      const struct radv_shader_info* info,
+                      const struct aco_shader_info* info,
                       const struct radv_shader_args* args,
                       unsigned* num_preserved_sgprs);
 
diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h
index fea4a29ce8e..83a1c304499 100644
--- a/src/amd/compiler/aco_shader_info.h
+++ b/src/amd/compiler/aco_shader_info.h
@@ -28,13 +28,14 @@
 #define ACO_SHADER_INFO_H
 
 #include "shader_enums.h"
-/* temporary */
-#include "vulkan/radv_shader.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
+#define ACO_MAX_SO_OUTPUTS 64
+#define ACO_MAX_SO_BUFFERS 4
+
 struct aco_vp_output_info {
    uint8_t vs_output_param_offset[VARYING_SLOT_MAX];
    uint8_t clip_dist_mask;
@@ -63,8 +64,8 @@ struct aco_stream_output {
 
 struct aco_streamout_info {
    uint16_t num_outputs;
-   struct aco_stream_output outputs[MAX_SO_OUTPUTS];
-   uint16_t strides[MAX_SO_BUFFERS];
+   struct aco_stream_output outputs[ACO_MAX_SO_OUTPUTS];
+   uint16_t strides[ACO_MAX_SO_BUFFERS];
 };
 
 struct aco_shader_info {
diff --git a/src/amd/compiler/tests/helpers.cpp b/src/amd/compiler/tests/helpers.cpp
index fc1ca054348..567ee934659 100644
--- a/src/amd/compiler/tests/helpers.cpp
+++ b/src/amd/compiler/tests/helpers.cpp
@@ -38,7 +38,7 @@ PFN_vkVoidFunction VKAPI_CALL vk_icdGetInstanceProcAddr(
 }
 
 ac_shader_config config;
-radv_shader_info info;
+aco_shader_info info;
 std::unique_ptr<Program> program;
 Builder bld(NULL);
 Temp inputs[16];
@@ -106,10 +106,6 @@ bool setup_cs(const char *input_spec, enum chip_class chip_class,
       return false;
 
    memset(&info, 0, sizeof(info));
-   info.cs.block_size[0] = 1;
-   info.cs.block_size[1] = 1;
-   info.cs.block_size[2] = 1;
-
    create_program(chip_class, compute_cs, wave_size, family);
 
    if (input_spec) {
diff --git a/src/amd/compiler/tests/helpers.h b/src/amd/compiler/tests/helpers.h
index 0e93c0dd177..f6fe6695939 100644
--- a/src/amd/compiler/tests/helpers.h
+++ b/src/amd/compiler/tests/helpers.h
@@ -61,7 +61,7 @@ struct QoShaderModuleCreateInfo {
 };
 
 extern ac_shader_config config;
-extern radv_shader_info info;
+extern aco_shader_info info;
 extern std::unique_ptr<aco::Program> program;
 extern aco::Builder bld;
 extern aco::Temp inputs[16];
diff --git a/src/amd/vulkan/radv_shader.c b/src/amd/vulkan/radv_shader.c
index 707d8d750b8..e17d6ff28e9 100644
--- a/src/amd/vulkan/radv_shader.c
+++ b/src/amd/vulkan/radv_shader.c
@@ -45,6 +45,8 @@
 #include "sid.h"
 #include "vk_format.h"
 
+#include "aco_shader_info.h"
+#include "radv_aco_shader_info.h"
 #ifdef LLVM_AVAILABLE
 #include "ac_llvm_util.h"
 #endif
@@ -1988,7 +1990,9 @@ shader_compile(struct radv_device *device, struct nir_shader *const *shaders, in
    if (false) {
 #endif
    } else {
-      aco_compile_shader(options, info, shader_count, shaders, args, &binary);
+      struct aco_shader_info ac_info;
+      radv_aco_convert_shader_info(&ac_info, info);
+      aco_compile_shader(options, &ac_info, shader_count, shaders, args, &binary);
    }
 
    binary->info = *info;
@@ -2181,7 +2185,9 @@ radv_create_vs_prolog(struct radv_device *device, const struct radv_vs_prolog_ke
 #endif
 
    struct radv_prolog_binary *binary = NULL;
-   aco_compile_vs_prolog(&options, &info, key, &args, &binary);
+   struct aco_shader_info ac_info;
+   radv_aco_convert_shader_info(&ac_info, &info);
+   aco_compile_vs_prolog(&options, &ac_info, key, &args, &binary);
    struct radv_shader_prolog *prolog = upload_vs_prolog(device, binary, info.wave_size);
    if (prolog) {
       prolog->nontrivial_divisors = key->state->nontrivial_divisors;



More information about the mesa-commit mailing list