From c190c54c3065f933eb6db2bc6ab5c2fa80250f61 Mon Sep 17 00:00:00 2001 From: Faith Ekstrand Date: Mon, 4 Dec 2023 15:40:45 -0600 Subject: [PATCH] nak: Handle 64-bit image atomics Part-of: --- src/nouveau/compiler/nak_from_nir.rs | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/src/nouveau/compiler/nak_from_nir.rs b/src/nouveau/compiler/nak_from_nir.rs index e34b03a8093..d23b3f15b50 100644 --- a/src/nouveau/compiler/nak_from_nir.rs +++ b/src/nouveau/compiler/nak_from_nir.rs @@ -1670,18 +1670,30 @@ impl<'a> ShaderFromNir<'a> { let atom_type = self.get_atomic_type(intrin); let atom_op = self.get_atomic_op(intrin); - assert!(intrin.def.bit_size() == 32); + assert!( + intrin.def.bit_size() == 32 || intrin.def.bit_size() == 64 + ); assert!(intrin.def.num_components() == 1); - let dst = b.alloc_ssa(RegFile::GPR, 1); + let dst = b.alloc_ssa(RegFile::GPR, intrin.def.bit_size() / 32); let data = if intrin.intrinsic == nir_intrinsic_bindless_image_atomic_swap { - SSARef::from([ - self.get_ssa(srcs[3].as_def())[0], - self.get_ssa(srcs[4].as_def())[0], - ]) - .into() + if intrin.def.bit_size() == 64 { + SSARef::from([ + self.get_ssa(srcs[3].as_def())[0], + self.get_ssa(srcs[3].as_def())[1], + self.get_ssa(srcs[4].as_def())[0], + self.get_ssa(srcs[4].as_def())[1], + ]) + .into() + } else { + SSARef::from([ + self.get_ssa(srcs[3].as_def())[0], + self.get_ssa(srcs[4].as_def())[0], + ]) + .into() + } } else { self.get_src(&srcs[3]) };