mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-04-21 09:50:36 +02:00
glsl: Fix lack of i2u in lower_ubo_reference.
ir_binop_ubo_load takes unsigned integer operands. However, the array index used to compute these offsets may be a signed integer. (For example, see Piglit's spec/glsl-1.40/uniform_buffer/fs-bvec-array). For some reason, we were missing an ir_binop_i2u cast, and ir_validator was failing to catch that. Without this change, ir_builder's type inference code broke for me when writing a new optimization pass. Cc: mesa-stable@lists.freedesktop.org Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
parent
4311f9878d
commit
e14b93371c
1 changed files with 7 additions and 3 deletions
|
|
@ -194,12 +194,16 @@ lower_ubo_reference_visitor::handle_rvalue(ir_rvalue **rvalue)
|
|||
array_stride = glsl_align(array_stride, 16);
|
||||
}
|
||||
|
||||
ir_constant *const_index = deref_array->array_index->as_constant();
|
||||
ir_rvalue *array_index = deref_array->array_index;
|
||||
if (array_index->type->base_type == GLSL_TYPE_INT)
|
||||
array_index = i2u(array_index);
|
||||
|
||||
ir_constant *const_index = array_index->as_constant();
|
||||
if (const_index) {
|
||||
const_offset += array_stride * const_index->value.i[0];
|
||||
const_offset += array_stride * const_index->value.u[0];
|
||||
} else {
|
||||
offset = add(offset,
|
||||
mul(deref_array->array_index,
|
||||
mul(array_index,
|
||||
new(mem_ctx) ir_constant(array_stride)));
|
||||
}
|
||||
deref = deref_array->array->as_dereference();
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue