nvk: Use load_global_constant for ubo loads

and support load_global_constant in nak

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
M Henning
2023-10-20 23:35:49 -04:00
committed by Marge Bot
parent 1d7e051a7f
commit f2495f47a7
4 changed files with 17 additions and 12 deletions
+8 -2
View File
@@ -1567,15 +1567,21 @@ impl<'a> ShaderFromNir<'a> {
nir_intrinsic_load_barycentric_centroid => (),
nir_intrinsic_load_barycentric_pixel => (),
nir_intrinsic_load_barycentric_sample => (),
nir_intrinsic_load_global => {
nir_intrinsic_load_global | nir_intrinsic_load_global_constant => {
let size_B =
(intrin.def.bit_size() / 8) * intrin.def.num_components();
assert!(u32::from(size_B) <= intrin.align());
let order =
if intrin.intrinsic == nir_intrinsic_load_global_constant {
MemOrder::Constant
} else {
MemOrder::Strong(MemScope::System)
};
let access = MemAccess {
addr_type: MemAddrType::A64,
mem_type: MemType::from_size(size_B, false),
space: MemSpace::Global,
order: MemOrder::Strong(MemScope::System),
order: order,
};
let (addr, offset) = self.get_io_addr_offset(&srcs[0], 32);
let dst = b.alloc_ssa(RegFile::GPR, size_B.div_ceil(4));
+1 -1
View File
@@ -813,7 +813,7 @@ nak_postprocess_nir(nir_shader *nir,
}
nir_lower_mem_access_bit_sizes_options mem_bit_size_options = {
.modes = nir_var_mem_ubo | nir_var_mem_generic,
.modes = nir_var_mem_constant | nir_var_mem_ubo | nir_var_mem_generic,
.callback = nak_mem_access_size_align,
};
OPT(nir, nir_lower_mem_access_bit_sizes, &mem_bit_size_options);
@@ -586,9 +586,9 @@ lower_load_ssbo_descriptor(nir_builder *b, nir_intrinsic_instr *intrin,
case nir_address_format_64bit_global:
/* Mask off the binding stride */
addr = nir_iand_imm(b, addr, BITFIELD64_MASK(56));
desc = nir_build_load_global(b, 1, 64, addr,
.access = ACCESS_NON_WRITEABLE,
.align_mul = 16, .align_offset = 0);
desc = nir_build_load_global_constant(b, 1, 64, addr,
.align_mul = 16,
.align_offset = 0);
break;
case nir_address_format_64bit_global_32bit_offset: {
+5 -6
View File
@@ -239,12 +239,11 @@ lower_load_global_constant_offset_instr(nir_builder *b,
}
nir_def *val =
nir_build_load_global(b, intrin->def.num_components,
intrin->def.bit_size,
nir_iadd(b, base_addr, nir_u2u64(b, offset)),
.access = nir_intrinsic_access(intrin),
.align_mul = nir_intrinsic_align_mul(intrin),
.align_offset = nir_intrinsic_align_offset(intrin));
nir_build_load_global_constant(b, intrin->def.num_components,
intrin->def.bit_size,
nir_iadd(b, base_addr, nir_u2u64(b, offset)),
.align_mul = nir_intrinsic_align_mul(intrin),
.align_offset = nir_intrinsic_align_offset(intrin));
if (intrin->intrinsic == nir_intrinsic_load_global_constant_bounded) {
nir_pop_if(b, NULL);