From 3dba3458e94ac3ac7b7a7819d0fc87e64875ded2 Mon Sep 17 00:00:00 2001 From: Dave Airlie Date: Thu, 5 May 2022 12:17:15 +1000 Subject: [PATCH] aco: remove radv specific streamout info MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reviewed-by: Timur Kristóf Part-of: --- src/amd/compiler/aco_instruction_selection.cpp | 4 ++-- src/amd/compiler/aco_shader_info.h | 16 +++++++++++++++- src/amd/vulkan/radv_aco_shader_info.h | 12 +++++++++++- 3 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index d48aae816e1..186445dc8c1 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -10846,7 +10846,7 @@ create_fs_exports(isel_context* ctx) static void emit_stream_output(isel_context* ctx, Temp const* so_buffers, Temp const* so_write_offset, - const struct radv_stream_output* output) + const struct aco_stream_output* output) { assert(ctx->stage.hw == HWStage::VS); @@ -10946,7 +10946,7 @@ emit_streamout(isel_context* ctx, unsigned stream) } for (unsigned i = 0; i < ctx->program->info.so.num_outputs; i++) { - const struct radv_stream_output* output = &ctx->program->info.so.outputs[i]; + const struct aco_stream_output* output = &ctx->program->info.so.outputs[i]; if (stream != output->stream) continue; diff --git a/src/amd/compiler/aco_shader_info.h b/src/amd/compiler/aco_shader_info.h index 779ae0b5297..61963f370cd 100644 --- a/src/amd/compiler/aco_shader_info.h +++ b/src/amd/compiler/aco_shader_info.h @@ -35,6 +35,20 @@ extern "C" { #endif +struct aco_stream_output { + uint8_t location; + uint8_t buffer; + uint16_t offset; + uint8_t component_mask; + uint8_t stream; +}; + +struct aco_streamout_info { + uint16_t num_outputs; + struct aco_stream_output outputs[MAX_SO_OUTPUTS]; + uint16_t strides[MAX_SO_BUFFERS]; +}; + struct aco_shader_info { bool has_ngg_culling; bool has_ngg_early_prim_export; @@ -74,7 +88,7 @@ struct aco_shader_info { struct { struct radv_vs_output_info outinfo; } ms; - struct radv_streamout_info so; + struct aco_streamout_info so; uint32_t gfx9_gs_ring_lds_size; }; diff --git a/src/amd/vulkan/radv_aco_shader_info.h b/src/amd/vulkan/radv_aco_shader_info.h index 2a7da8651f0..54bdeebc2e1 100644 --- a/src/amd/vulkan/radv_aco_shader_info.h +++ b/src/amd/vulkan/radv_aco_shader_info.h @@ -34,6 +34,16 @@ #define ASSIGN_FIELD(x) aco_info->x = radv->x #define ASSIGN_FIELD_CP(x) memcpy(&aco_info->x, &radv->x, sizeof(radv->x)) +static inline void +radv_aco_convert_shader_so_info(struct aco_shader_info *aco_info, + const struct radv_shader_info *radv) +{ + ASSIGN_FIELD(so.num_outputs); + ASSIGN_FIELD_CP(so.outputs); + ASSIGN_FIELD_CP(so.strides); + /* enabled_stream_buffers_mask unused */ +} + static inline void radv_aco_convert_shader_info(struct aco_shader_info *aco_info, const struct radv_shader_info *radv) @@ -62,7 +72,7 @@ radv_aco_convert_shader_info(struct aco_shader_info *aco_info, ASSIGN_FIELD(ps.spi_ps_input); ASSIGN_FIELD(cs.subgroup_size); ASSIGN_FIELD(ms.outinfo); - ASSIGN_FIELD(so); + radv_aco_convert_shader_so_info(aco_info, radv); aco_info->gfx9_gs_ring_lds_size = radv->gs_ring_info.lds_size; } #undef ASSIGN_FIELD