mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 11:00:11 +01:00
nir/builder: Cast array indices in build_deref_follower
There's no guarantee when build_deref_follower is called that the two derefs have the same bit size destination. Insert a cast on the array index in case we have differing bit sizes. While we're here, insert some asserts in build_deref_array and build_deref_ptr_as_array. The validator will catch violations here but they're easier to debug if we catch them while building. Reviewed-by: Karol Herbst <kherbst@redhat.com> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
This commit is contained in:
parent
cd4c1458ba
commit
fcf2a0122e
1 changed files with 7 additions and 1 deletions
|
|
@ -824,6 +824,8 @@ nir_build_deref_array(nir_builder *build, nir_deref_instr *parent,
|
|||
glsl_type_is_matrix(parent->type) ||
|
||||
glsl_type_is_vector(parent->type));
|
||||
|
||||
assert(index->bit_size == parent->dest.ssa.bit_size);
|
||||
|
||||
nir_deref_instr *deref =
|
||||
nir_deref_instr_create(build->shader, nir_deref_type_array);
|
||||
|
||||
|
|
@ -849,6 +851,8 @@ nir_build_deref_ptr_as_array(nir_builder *build, nir_deref_instr *parent,
|
|||
parent->deref_type == nir_deref_type_ptr_as_array ||
|
||||
parent->deref_type == nir_deref_type_cast);
|
||||
|
||||
assert(index->bit_size == parent->dest.ssa.bit_size);
|
||||
|
||||
nir_deref_instr *deref =
|
||||
nir_deref_instr_create(build->shader, nir_deref_type_ptr_as_array);
|
||||
|
||||
|
|
@ -965,7 +969,9 @@ nir_build_deref_follower(nir_builder *b, nir_deref_instr *parent,
|
|||
|
||||
if (leader->deref_type == nir_deref_type_array) {
|
||||
assert(leader->arr.index.is_ssa);
|
||||
return nir_build_deref_array(b, parent, leader->arr.index.ssa);
|
||||
nir_ssa_def *index = nir_i2i(b, leader->arr.index.ssa,
|
||||
parent->dest.ssa.bit_size);
|
||||
return nir_build_deref_array(b, parent, index);
|
||||
} else {
|
||||
return nir_build_deref_array_wildcard(b, parent);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue