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) {