Browse Source

nir: Make nir_deref_instr_build/get_const_offset actually use size_align.

I think this was copy-and-paste mistake -- nir_opt_large_constants was
passing in glsl_get_natural_size_align_bytes() given brw_nir.c's arguments
to the opt pass.

I wanted to reuse this function for handling constant offsets of arrays of
images in V3D.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Reviewed-by: Rob Clark <robdclark@gmail.com>
tags/19.0-branchpoint
Eric Anholt 6 years ago
parent
commit
211b826790
1 changed files with 2 additions and 3 deletions
  1. 2
    3
      src/compiler/nir/nir_deref.c

+ 2
- 3
src/compiler/nir/nir_deref.c View File

glsl_type_size_align_func size_align) glsl_type_size_align_func size_align)
{ {
unsigned elem_size, elem_align; unsigned elem_size, elem_align;
glsl_get_natural_size_align_bytes(elem_type, &elem_size, &elem_align);
size_align(elem_type, &elem_size, &elem_align);
return ALIGN_POT(elem_size, elem_align); return ALIGN_POT(elem_size, elem_align);
} }


unsigned offset = 0; unsigned offset = 0;
for (unsigned i = 0; i <= field_idx; i++) { for (unsigned i = 0; i <= field_idx; i++) {
unsigned elem_size, elem_align; unsigned elem_size, elem_align;
glsl_get_natural_size_align_bytes(glsl_get_struct_field(struct_type, i),
&elem_size, &elem_align);
size_align(glsl_get_struct_field(struct_type, i), &elem_size, &elem_align);
offset = ALIGN_POT(offset, elem_align); offset = ALIGN_POT(offset, elem_align);
if (i < field_idx) if (i < field_idx)
offset += elem_size; offset += elem_size;

Loading…
Cancel
Save