Module: Mesa
Branch: main
Commit: 952e06672fdb6b3fd968ef7d93889356ed0c330b
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=952e06672fdb6b3fd968ef7d93889356ed0c330b

Author: Faith Ekstrand <faith.ekstr...@collabora.com>
Date:   Tue Dec 12 18:06:13 2023 -0600

nak/sm50: Add legalization and encoding for OpLdc

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26615>

---

 src/nouveau/compiler/nak/encode_sm50.rs | 20 ++++++++++++++++++++
 src/nouveau/compiler/nak/legalize.rs    |  1 +
 2 files changed, 21 insertions(+)

diff --git a/src/nouveau/compiler/nak/encode_sm50.rs 
b/src/nouveau/compiler/nak/encode_sm50.rs
index d2e39b75f5d..e70e95cbf1e 100644
--- a/src/nouveau/compiler/nak/encode_sm50.rs
+++ b/src/nouveau/compiler/nak/encode_sm50.rs
@@ -480,6 +480,25 @@ impl SM50Instr {
         }
     }
 
+    fn encode_ldc(&mut self, op: &OpLdc) {
+        assert!(op.cb.src_mod.is_none());
+        let SrcRef::CBuf(cb) = &op.cb.src_ref else {
+            panic!("Not a CBuf source");
+        };
+        let CBuf::Binding(cb_idx) = cb.buf else {
+            panic!("Must be a bound constant buffer");
+        };
+
+        self.set_opcode(0xef90);
+
+        self.set_dst(op.dst);
+        self.set_reg_src(8..16, op.offset);
+        self.set_field(20..36, cb.offset);
+        self.set_field(36..41, cb_idx);
+        self.set_field(44..46, 0_u8); // TODO: subop
+        self.set_mem_type(48..51, op.mem_type);
+    }
+
     fn encode_stg(&mut self, op: &OpSt) {
         self.set_opcode(0xeed8);
 
@@ -1747,6 +1766,7 @@ impl SM50Instr {
             Op::PopC(op) => si.encode_popc(&op),
             Op::Prmt(op) => si.encode_prmt(&op),
             Op::Ld(op) => si.encode_ld(&op),
+            Op::Ldc(op) => si.encode_ldc(&op),
             Op::St(op) => si.encode_st(&op),
             Op::Lop2(op) => si.encode_lop2(&op),
             Op::Shf(op) => si.encode_shf(&op),
diff --git a/src/nouveau/compiler/nak/legalize.rs 
b/src/nouveau/compiler/nak/legalize.rs
index cccc9368806..4b7098db60e 100644
--- a/src/nouveau/compiler/nak/legalize.rs
+++ b/src/nouveau/compiler/nak/legalize.rs
@@ -199,6 +199,7 @@ fn legalize_sm50_instr(
             copy_src_if_not_reg(b, &mut op.srcs[1], RegFile::GPR);
             copy_src_if_not_reg(b, &mut op.srcs[2], RegFile::GPR);
         }
+        Op::Ldc(_) => (),  // Nothing to do
         Op::Copy(_) => (), // Nothing to do
         _ => {
             let src_types = instr.src_types();

Reply via email to