aco: don't enable store_global for helper invocations

Signed-off-by: Rhys Perry <pendingchaos02@gmail.com>
Reviewed-by: Daniel Schürmann <daniel@schuermann.dev>
This commit is contained in:
Rhys Perry 2019-11-27 17:15:54 +00:00
parent 31e68e230f
commit cc742562c1
4 changed files with 8 additions and 0 deletions

View File

@ -134,6 +134,9 @@ bool needs_exact(aco_ptr<Instruction>& instr) {
} else if (instr->format == Format::MIMG) {
MIMG_instruction *mimg = static_cast<MIMG_instruction *>(instr.get());
return mimg->disable_wqm;
} else if (instr->format == Format::FLAT || instr->format == Format::GLOBAL) {
FLAT_instruction *flat = static_cast<FLAT_instruction *>(instr.get());
return flat->disable_wqm;
} else {
return instr->format == Format::EXP || instr->opcode == aco_opcode::p_fs_buffer_store_smem;
}

View File

@ -4764,6 +4764,8 @@ void visit_store_global(isel_context *ctx, nir_intrinsic_instr *instr)
flat->glc = glc;
flat->dlc = false;
flat->offset = offset;
flat->disable_wqm = true;
ctx->program->needs_exact = true;
ctx->block->instructions.emplace_back(std::move(flat));
}
}

View File

@ -850,6 +850,7 @@ struct FLAT_instruction : public Instruction {
bool dlc; /* NAVI: device level coherent */
bool lds;
bool nv;
bool disable_wqm;
};
struct Export_instruction : public Instruction {

View File

@ -371,6 +371,8 @@ static void print_instr_format_specific(struct Instruction *instr, FILE *output)
fprintf(output, " lds");
if (flat->nv)
fprintf(output, " nv");
if (flat->disable_wqm)
fprintf(output, " disable_wqm");
break;
}
case Format::MTBUF: {