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

Author: Faith Ekstrand <[email protected]>
Date:   Mon Nov 20 10:16:20 2023 -0600

nak: Implement DisplayOp on Op instead of Display

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

---

 src/nouveau/compiler/nak_ir.rs      |  3 ++-
 src/nouveau/compiler/nak_ir_proc.rs | 26 ++++++++++++++++++--------
 2 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/src/nouveau/compiler/nak_ir.rs b/src/nouveau/compiler/nak_ir.rs
index b4e7e4294a3..21eb841ec09 100644
--- a/src/nouveau/compiler/nak_ir.rs
+++ b/src/nouveau/compiler/nak_ir.rs
@@ -4261,7 +4261,7 @@ impl DisplayOp for OpOutFinal {
 }
 impl_display_for_op!(OpOutFinal);
 
-#[derive(Display, DstsAsSlice, SrcsAsSlice, FromVariants)]
+#[derive(DisplayOp, DstsAsSlice, SrcsAsSlice, FromVariants)]
 pub enum Op {
     FAdd(OpFAdd),
     FFma(OpFFma),
@@ -4339,6 +4339,7 @@ pub enum Op {
     Out(OpOut),
     OutFinal(OpOutFinal),
 }
+impl_display_for_op!(Op);
 
 #[derive(Clone, Copy, Eq, Hash, PartialEq)]
 pub enum PredRef {
diff --git a/src/nouveau/compiler/nak_ir_proc.rs 
b/src/nouveau/compiler/nak_ir_proc.rs
index a368772f5a1..580333f92c1 100644
--- a/src/nouveau/compiler/nak_ir_proc.rs
+++ b/src/nouveau/compiler/nak_ir_proc.rs
@@ -251,23 +251,33 @@ pub fn derive_dsts_as_slice(input: TokenStream) -> 
TokenStream {
     derive_as_slice(input, "DstsAsSlice", "dsts", "Dst")
 }
 
-#[proc_macro_derive(Display)]
-pub fn enum_derive_display(input: TokenStream) -> TokenStream {
+#[proc_macro_derive(DisplayOp)]
+pub fn enum_derive_display_op(input: TokenStream) -> TokenStream {
     let DeriveInput { ident, data, .. } = parse_macro_input!(input);
 
     if let Data::Enum(e) = data {
-        let mut cases = TokenStream2::new();
+        let mut fmt_dsts_cases = TokenStream2::new();
+        let mut fmt_op_cases = TokenStream2::new();
         for v in e.variants {
             let case = v.ident;
-            cases.extend(quote! {
-                #ident::#case(x) => x.fmt(f),
+            fmt_dsts_cases.extend(quote! {
+                #ident::#case(x) => x.fmt_dsts(f),
+            });
+            fmt_op_cases.extend(quote! {
+                #ident::#case(x) => x.fmt_op(f),
             });
         }
         quote! {
-            impl fmt::Display for #ident {
-                fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+            impl DisplayOp for #ident {
+                fn fmt_dsts(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
+                    match self {
+                        #fmt_dsts_cases
+                    }
+                }
+
+                fn fmt_op(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
                     match self {
-                        #cases
+                        #fmt_op_cases
                     }
                 }
             }

Reply via email to