mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-05 16:08:04 +02:00
nak: Implement nir_intrinsic_shared_atomic_*
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24998>
This commit is contained in:
parent
d1c56b12b9
commit
d359c64b2a
2 changed files with 35 additions and 1 deletions
|
|
@ -1211,7 +1211,20 @@ impl SM75Instr {
|
|||
}
|
||||
|
||||
fn encode_atoms(&mut self, op: &OpAtom) {
|
||||
panic!("Shared atomic ops not yet implemented");
|
||||
self.set_opcode(0x38c);
|
||||
|
||||
self.set_dst(op.dst);
|
||||
|
||||
self.set_reg_src(24..32, op.addr);
|
||||
self.set_reg_src(32..40, op.data);
|
||||
self.set_field(40..64, op.addr_offset);
|
||||
|
||||
assert!(op.addr_type == MemAddrType::A32);
|
||||
assert!(op.mem_order == MemOrder::Strong);
|
||||
assert!(op.mem_scope == MemScope::CTA);
|
||||
|
||||
self.set_atom_type(73..76, op.atom_type);
|
||||
self.set_atom_op(87..91, op.atom_op);
|
||||
}
|
||||
|
||||
fn encode_atom(&mut self, op: &OpAtom) {
|
||||
|
|
|
|||
|
|
@ -1042,6 +1042,27 @@ impl<'a> ShaderFromNir<'a> {
|
|||
self.instrs.push(OpBar {}.into());
|
||||
}
|
||||
}
|
||||
nir_intrinsic_shared_atomic => {
|
||||
let (addr, offset) = self.get_io_addr_offset(&srcs[0], 24);
|
||||
let data = self.get_src(&srcs[1]);
|
||||
let atom_type = self.get_atomic_type(intrin);
|
||||
let atom_op = self.get_atomic_op(intrin);
|
||||
let dst = self.get_dst(&intrin.def);
|
||||
|
||||
let atom = OpAtom {
|
||||
dst: dst,
|
||||
addr: addr,
|
||||
data: data,
|
||||
atom_op: atom_op,
|
||||
atom_type: atom_type,
|
||||
addr_type: MemAddrType::A32,
|
||||
addr_offset: offset,
|
||||
mem_space: MemSpace::Shared,
|
||||
mem_order: MemOrder::Strong,
|
||||
mem_scope: MemScope::CTA,
|
||||
};
|
||||
self.instrs.push(atom.into());
|
||||
}
|
||||
nir_intrinsic_store_global => {
|
||||
let data = self.get_src(&srcs[0]);
|
||||
let size_B =
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue