diff --git a/src/compiler/nir/nir_lower_explicit_io.c b/src/compiler/nir/nir_lower_explicit_io.c index 1510b201604..87d9ce770ea 100644 --- a/src/compiler/nir/nir_lower_explicit_io.c +++ b/src/compiler/nir/nir_lower_explicit_io.c @@ -1173,7 +1173,8 @@ nir_explicit_io_address_from_deref(nir_builder *b, nir_deref_instr *deref, static nir_io_offset build_addr(nir_builder *b, nir_intrinsic_instr *intrin, nir_def *base_addr, - nir_address_format addr_format, unsigned comp_offset) + nir_address_format addr_format, unsigned comp_offset, + uint32_t align_mul, uint32_t align_offset) { nir_deref_instr *deref = nir_src_as_deref(intrin->src[0]); assert(deref); @@ -1237,7 +1238,8 @@ nir_lower_explicit_io_instr(nir_builder *b, for (unsigned i = 0; i < intrin->num_components; i++) { unsigned comp_offset = i * vec_stride; nir_io_offset comp_addr = - build_addr(b, intrin, base_addr, addr_format, comp_offset); + build_addr(b, intrin, base_addr, addr_format, comp_offset, + align_mul, align_offset); comps[i] = build_explicit_io_load(b, intrin, comp_addr, addr_format, deref->modes, align_mul, @@ -1247,7 +1249,8 @@ nir_lower_explicit_io_instr(nir_builder *b, } value = nir_vec(b, comps, intrin->num_components); } else { - nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0); + nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0, + align_mul, align_offset); value = build_explicit_io_load(b, intrin, addr, addr_format, deref->modes, align_mul, align_offset, intrin->num_components); @@ -1266,14 +1269,16 @@ nir_lower_explicit_io_instr(nir_builder *b, unsigned comp_offset = i * vec_stride; nir_io_offset comp_addr = - build_addr(b, intrin, base_addr, addr_format, comp_offset); + build_addr(b, intrin, base_addr, addr_format, comp_offset, + align_mul, align_offset); build_explicit_io_store(b, intrin, comp_addr, addr_format, deref->modes, align_mul, (align_offset + comp_offset) % align_mul, nir_channel(b, value, i), 1); } } else { - nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0); + nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0, + align_mul, align_offset); build_explicit_io_store(b, intrin, addr, addr_format, deref->modes, align_mul, align_offset, value, write_mask); @@ -1282,7 +1287,8 @@ nir_lower_explicit_io_instr(nir_builder *b, } case nir_intrinsic_load_deref_block_intel: { - nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0); + nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0, + align_mul, align_offset); nir_def *value = build_explicit_io_load(b, intrin, addr, addr_format, deref->modes, align_mul, align_offset, @@ -1292,7 +1298,8 @@ nir_lower_explicit_io_instr(nir_builder *b, } case nir_intrinsic_store_deref_block_intel: { - nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0); + nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0, + align_mul, align_offset); nir_def *value = intrin->src[1].ssa; const nir_component_mask_t write_mask = 0; build_explicit_io_store(b, intrin, addr, addr_format, @@ -1302,7 +1309,8 @@ nir_lower_explicit_io_instr(nir_builder *b, } default: { - nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0); + nir_io_offset addr = build_addr(b, intrin, base_addr, addr_format, 0, + align_mul, align_offset); nir_def *value = build_explicit_io_atomic(b, intrin, addr, addr_format, deref->modes); nir_def_rewrite_uses(&intrin->def, value);