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