mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 13:58:04 +02:00
i965/vec4: Don't overwrite op[1] when doing a UBO load.
Prior to the GLSL CSE pass, all of our testing happened to have a freshly computed temporary in op[1], from the multiply by 16 to get a byte offset. As of CSE you'll get var_refs of a reused value when you've got multiple loads from the same offset. Make a proper temporary for computing our temporary value, to avoid shifting the value farther and farther down. Avoids a regression in gs-float-array-variable-index Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
parent
2197967cd4
commit
3641b97bdc
1 changed files with 3 additions and 2 deletions
|
|
@ -1569,7 +1569,7 @@ vec4_visitor::visit(ir_expression *ir)
|
|||
ir_constant *uniform_block = ir->operands[0]->as_constant();
|
||||
ir_constant *const_offset_ir = ir->operands[1]->as_constant();
|
||||
unsigned const_offset = const_offset_ir ? const_offset_ir->value.u[0] : 0;
|
||||
src_reg offset = op[1];
|
||||
src_reg offset;
|
||||
|
||||
/* Now, load the vector from that offset. */
|
||||
assert(ir->type->is_vector() || ir->type->is_scalar());
|
||||
|
|
@ -1581,7 +1581,8 @@ vec4_visitor::visit(ir_expression *ir)
|
|||
if (const_offset_ir) {
|
||||
offset = src_reg(const_offset / 16);
|
||||
} else {
|
||||
emit(SHR(dst_reg(offset), offset, src_reg(4)));
|
||||
offset = src_reg(this, glsl_type::uint_type);
|
||||
emit(SHR(dst_reg(offset), op[1], src_reg(4)));
|
||||
}
|
||||
|
||||
vec4_instruction *pull =
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue