[clang] [HLSL] Add various overloads for MiniEngine (PR #139800)

Sarah Spall via cfe-commits cfe-commits at lists.llvm.org
Tue May 13 15:01:53 PDT 2025


================
@@ -158,6 +158,42 @@ namespace hlsl {
     return fn((float4)V1, (float4)V2, (float4)V3);                             \
   }
 
+#define _DXC_COMPAT_BINARY_VECTOR_SCALAR_OVERLOADS(fn)                         \
+  template <typename T, uint N>                                                \
+  constexpr __detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>> fn(         \
+      vector<T, N> V1, T V2) {                                                 \
+    return fn(V1, (vector<T, N>)V2);                                           \
+  }                                                                            \
+  template <typename T, uint N>                                                \
+  constexpr __detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>> fn(         \
+      T V1, vector<T, N> V2) {                                                 \
+    return fn((vector<T, N>)V1, V2);                                           \
+  }
+
+#define _DXC_COMPAT_TERNARY_VECTOR_SCALAR_OVERLOADS(fn)                        \
+  template <typename T, uint N>                                                \
+  constexpr __detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>> fn(         \
+      T V1, vector<T, N> V2, vector<T, N> V3) {                                \
+    return fn((vector<T, N>)V1, V2, V3);                                       \
+  }                                                                            \
+  template <typename T, uint N>                                                \
+  constexpr __detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>> fn(         \
+      vector<T, N> V1, T V2, vector<T, N> V3) {                                \
+    return fn(V1, (vector<T, N>)V2, V3);                                       \
+  }                                                                            \
+  template <typename T, uint N>                                                \
+  constexpr __detail::enable_if_t<(N > 1 && N <= 4), vector<T, N>> fn(         \
+      vector<T, N> V1, vector<T, N> V2, T V3) {                                \
+    return fn(V1, V2, (vector<T, N>)V3);                                       \
+  }
+
+#define _DXC_COMPAT_TERNARY_SINGLE_VECTOR_SCALAR_OVERLOADS(fn)                 \
----------------
spall wrote:

why did you put this overload in its own macro and not in the previous one?

https://github.com/llvm/llvm-project/pull/139800


More information about the cfe-commits mailing list