freedreno/ir3: fix gpu hang with pre-fs-tex-fetch
[mesa.git] / src / freedreno / ir3 / ir3_ra.c
index 1f24b5eadacf7aa4574b76766f526141557ffba2..67d8a93884ef0b3a3412f5c8fd7f246978868e52 100644 (file)
@@ -701,6 +701,15 @@ ra_block_compute_live_ranges(struct ir3_ra_ctx *ctx, struct ir3_block *block)
 
        block->data = bd;
 
+       struct ir3_instruction *first_non_input = NULL;
+       list_for_each_entry (struct ir3_instruction, instr, &block->instr_list, node) {
+               if (instr->opc != OPC_META_INPUT) {
+                       first_non_input = instr;
+                       break;
+               }
+       }
+
+
        list_for_each_entry (struct ir3_instruction, instr, &block->instr_list, node) {
                struct ir3_instruction *src;
                struct ir3_register *reg;
@@ -767,6 +776,9 @@ ra_block_compute_live_ranges(struct ir3_ra_ctx *ctx, struct ir3_block *block)
 
                                def(name, id->defn);
 
+                               if (instr->opc == OPC_META_INPUT)
+                                       use(name, first_non_input);
+
                                if (is_high(id->defn)) {
                                        ra_set_node_class(ctx->g, name,
                                                        ctx->set->high_classes[id->cls - HIGH_OFFSET]);