diff --git a/src/nouveau/headers/nv_push_rs/lib.rs b/src/nouveau/headers/nv_push_rs/lib.rs index 7f823b6771e..077358fbaee 100644 --- a/src/nouveau/headers/nv_push_rs/lib.rs +++ b/src/nouveau/headers/nv_push_rs/lib.rs @@ -197,6 +197,31 @@ impl Push { self.push_mthd_bits(class_to_subc(M::CLASS), M::ADDR, mthd.to_bits()); } + pub fn push_mthd_0inc(&mut self, mthd: M) { + assert!(mthd.to_bits() == 0); + + self.last_inc = self.mem.len(); + let header = MthdHeader::new( + MthdType::ZeroInc, + class_to_subc(M::CLASS), + M::ADDR, + 0, + ); + self.mem.push(header.into_bits()); + } + + pub fn push_mthd_1inc(&mut self, mthd: M) { + self.last_inc = self.mem.len(); + let header = MthdHeader::new( + MthdType::OneInc, + class_to_subc(M::CLASS), + M::ADDR, + 0, + ); + self.mem.push(header.into_bits()); + self.mem.push(mthd.to_bits()); + } + pub fn push_array_method(&mut self, i: usize, mthd: M) { self.push_mthd_bits( class_to_subc(M::CLASS), @@ -205,6 +230,31 @@ impl Push { ); } + pub fn push_array_mthd_0inc(&mut self, i: usize, mthd: M) { + assert!(mthd.to_bits() == 0); + + self.last_inc = self.mem.len(); + let header = MthdHeader::new( + MthdType::ZeroInc, + class_to_subc(M::CLASS), + M::addr(i), + 0, + ); + self.mem.push(header.into_bits()); + } + + pub fn push_array_mthd_1inc(&mut self, i: usize, mthd: M) { + self.last_inc = self.mem.len(); + let header = MthdHeader::new( + MthdType::OneInc, + class_to_subc(M::CLASS), + M::addr(i), + 1, + ); + self.mem.push(header.into_bits()); + self.mem.push(mthd.to_bits()); + } + /// Push an array of dwords into the push buffer pub fn push_inline_data(&mut self, data: &[u32]) { if let Some(last) = self.mem.get_mut(self.last_inc) {