state = Exact;
}
- /* if the block doesn't need both, WQM and Exact, we can skip processing the instructions */
- bool process = (ctx.handle_wqm && (ctx.info[block->index].block_needs & state) !=
- (ctx.info[block->index].block_needs & (WQM | Exact))) ||
- block->kind & block_kind_uses_discard || block->kind & block_kind_needs_lowering;
- if (!process) {
- std::vector<aco_ptr<Instruction>>::iterator it = std::next(block->instructions.begin(), idx);
- instructions.insert(instructions.end(),
- std::move_iterator<std::vector<aco_ptr<Instruction>>::iterator>(it),
- std::move_iterator<std::vector<aco_ptr<Instruction>>::iterator>(
- block->instructions.end()));
- return;
- }
-
Builder bld(ctx.program, &instructions);
for (; idx < block->instructions.size(); idx++) {
* Otherwise, these two behave the same. */
Temp dst = get_ssa_temp(ctx, &instr->def);
bld.pseudo(aco_opcode::p_is_helper, Definition(dst), Operand(exec, bld.lm));
- ctx->block->kind |= block_kind_needs_lowering;
ctx->program->needs_exact = true;
break;
}
*/
Temp elected = bld.pseudo(aco_opcode::p_elect, bld.def(bld.lm), Operand(exec, bld.lm));
emit_wqm(bld, elected, get_ssa_temp(ctx, &instr->def));
- ctx->block->kind |= block_kind_needs_lowering;
break;
}
case nir_intrinsic_shader_clock: {
block_kind_invert = 1 << 10,
block_kind_discard_early_exit = 1 << 11,
block_kind_uses_discard = 1 << 12,
- block_kind_needs_lowering = 1 << 13,
- block_kind_resume = 1 << 14,
- block_kind_export_end = 1 << 15,
+ block_kind_resume = 1 << 13,
+ block_kind_export_end = 1 << 14,
};
struct RegisterDemand {
fprintf(output, "invert, ");
if (kind & block_kind_uses_discard)
fprintf(output, "discard, ");
- if (kind & block_kind_needs_lowering)
- fprintf(output, "needs_lowering, ");
if (kind & block_kind_export_end)
fprintf(output, "export_end, ");
}