mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 02:28:10 +02:00
i965/vs: Try again when we've successfully spilled a reg.
Before, we'd spill one reg, then continue on without actually register allocating, then assertion fail when we tried to use a vgrf number as a register number. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> (cherry picked from commitd4bcc65918) This should have been picked when9237f0ewas picked. Bugzill: https://bugs.freedesktop.org/show_bug.cgi?id=59700
This commit is contained in:
parent
15693b7925
commit
4e35ffa762
3 changed files with 16 additions and 10 deletions
|
|
@ -312,8 +312,8 @@ public:
|
|||
int setup_attributes(int payload_reg);
|
||||
int setup_uniforms(int payload_reg);
|
||||
void setup_payload();
|
||||
void reg_allocate_trivial();
|
||||
void reg_allocate();
|
||||
bool reg_allocate_trivial();
|
||||
bool reg_allocate();
|
||||
void evaluate_spill_costs(float *spill_costs, bool *no_spill);
|
||||
int choose_spill_reg(struct ra_graph *g);
|
||||
void spill_reg(int spill_reg);
|
||||
|
|
|
|||
|
|
@ -829,7 +829,10 @@ vec4_visitor::run()
|
|||
}
|
||||
}
|
||||
|
||||
reg_allocate();
|
||||
while (!reg_allocate()) {
|
||||
if (failed)
|
||||
break;
|
||||
}
|
||||
|
||||
if (failed)
|
||||
return false;
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ assign(unsigned int *reg_hw_locations, reg *reg)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
vec4_visitor::reg_allocate_trivial()
|
||||
{
|
||||
unsigned int hw_reg_mapping[this->virtual_grf_count];
|
||||
|
|
@ -90,7 +90,10 @@ vec4_visitor::reg_allocate_trivial()
|
|||
if (prog_data->total_grf > max_grf) {
|
||||
fail("Ran out of regs on trivial allocator (%d/%d)\n",
|
||||
prog_data->total_grf, max_grf);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
static void
|
||||
|
|
@ -139,7 +142,7 @@ brw_alloc_reg_set_for_classes(struct brw_context *brw,
|
|||
ra_set_finalize(brw->vs.regs);
|
||||
}
|
||||
|
||||
void
|
||||
bool
|
||||
vec4_visitor::reg_allocate()
|
||||
{
|
||||
unsigned int hw_reg_mapping[virtual_grf_count];
|
||||
|
|
@ -151,10 +154,8 @@ vec4_visitor::reg_allocate()
|
|||
/* Using the trivial allocator can be useful in debugging undefined
|
||||
* register access as a result of broken optimization passes.
|
||||
*/
|
||||
if (0) {
|
||||
reg_allocate_trivial();
|
||||
return;
|
||||
}
|
||||
if (0)
|
||||
return reg_allocate_trivial();
|
||||
|
||||
calculate_live_intervals();
|
||||
|
||||
|
|
@ -213,7 +214,7 @@ vec4_visitor::reg_allocate()
|
|||
spill_reg(reg);
|
||||
}
|
||||
ralloc_free(g);
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
/* Get the chosen virtual registers for each node, and map virtual
|
||||
|
|
@ -239,6 +240,8 @@ vec4_visitor::reg_allocate()
|
|||
}
|
||||
|
||||
ralloc_free(g);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue