From fc1424f1d8ffe615f43e762b68dc72f4203aca7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Thu, 28 Oct 2021 21:04:16 +0200 Subject: [PATCH] aco: Use the correct outinfo for mesh shaders. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Timur Kristóf Reviewed-by: Rhys Perry Part-of: --- .../compiler/aco_instruction_selection.cpp | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/amd/compiler/aco_instruction_selection.cpp b/src/amd/compiler/aco_instruction_selection.cpp index 9e01e2965d3..7c0d485ef78 100644 --- a/src/amd/compiler/aco_instruction_selection.cpp +++ b/src/amd/compiler/aco_instruction_selection.cpp @@ -10686,9 +10686,15 @@ export_vs_varying(isel_context* ctx, int slot, bool is_pos, int* next_pos) { assert(ctx->stage.hw == HWStage::VS || ctx->stage.hw == HWStage::NGG); - int offset = (ctx->stage.has(SWStage::TES) && !ctx->stage.has(SWStage::GS)) - ? ctx->program->info->tes.outinfo.vs_output_param_offset[slot] - : ctx->program->info->vs.outinfo.vs_output_param_offset[slot]; + const uint8_t *vs_output_param_offset = + ctx->stage.has(SWStage::GS) ? ctx->program->info->vs.outinfo.vs_output_param_offset : + ctx->stage.has(SWStage::TES) ? ctx->program->info->tes.outinfo.vs_output_param_offset : + ctx->stage.has(SWStage::MS) ? ctx->program->info->ms.outinfo.vs_output_param_offset : + ctx->program->info->vs.outinfo.vs_output_param_offset; + + assert(vs_output_param_offset); + + int offset = vs_output_param_offset[slot]; unsigned mask = ctx->outputs.mask[slot]; if (!is_pos && !mask) return; @@ -10788,11 +10794,13 @@ static void create_vs_exports(isel_context* ctx) { assert(ctx->stage.hw == HWStage::VS || ctx->stage.hw == HWStage::NGG); + const radv_vs_output_info* outinfo = + ctx->stage.has(SWStage::GS) ? &ctx->program->info->vs.outinfo : + ctx->stage.has(SWStage::TES) ? &ctx->program->info->tes.outinfo : + ctx->stage.has(SWStage::MS) ? &ctx->program->info->ms.outinfo : + &ctx->program->info->vs.outinfo; - const radv_vs_output_info* outinfo = (ctx->stage.has(SWStage::TES) && !ctx->stage.has(SWStage::GS)) - ? &ctx->program->info->tes.outinfo - : &ctx->program->info->vs.outinfo; - + assert(outinfo); ctx->block->kind |= block_kind_export_end; if (outinfo->export_prim_id && ctx->stage.hw != HWStage::NGG) {