[clang] [HLSL] add extra scalar vector overloads for clamp (PR #129939)
Joshua Batista via cfe-commits
cfe-commits at lists.llvm.org
Thu Mar 6 10:13:06 PST 2025
================
@@ -35,25 +35,48 @@ namespace hlsl {
#define _HLSL_16BIT_AVAILABILITY_STAGE(environment, version, stage)
#endif
-#define GEN_VEC_SCALAR_OVERLOADS(FUNC_NAME, BASE_TYPE, AVAIL) \
- GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, BASE_TYPE##2, AVAIL) \
- GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, BASE_TYPE##3, AVAIL) \
- GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, BASE_TYPE##4, AVAIL)
-
-#define GEN_BOTH_OVERLOADS(FUNC_NAME, BASE_TYPE, VECTOR_TYPE, AVAIL) \
- IF_TRUE_##AVAIL( \
- _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)) constexpr VECTOR_TYPE \
- FUNC_NAME(VECTOR_TYPE p0, BASE_TYPE p1) { \
- return __builtin_elementwise_##FUNC_NAME(p0, (VECTOR_TYPE)p1); \
+#define _HLSL_CAT(a, b) a##b
+#define _HLSL_VEC_SCALAR_OVERLOADS(NAME, BASE_T, AVAIL) \
+ _HLSL_ALL_OVERLOADS(NAME, BASE_T, AVAIL, _HLSL_CAT(_HLSL_NUM_ARGS_, NAME))
+
+#define _HLSL_ALL_OVERLOADS(NAME, BASE_T, AVAIL, NUM_ARGS) \
+ _HLSL_CAT(_HLSL_BOTH_OVERLOADS_, NUM_ARGS) \
+ (NAME, BASE_T, _HLSL_CAT(BASE_T, 2), AVAIL) \
+ _HLSL_CAT(_HLSL_BOTH_OVERLOADS_, NUM_ARGS)(NAME, BASE_T, \
+ _HLSL_CAT(BASE_T, 3), AVAIL) \
+ _HLSL_CAT(_HLSL_BOTH_OVERLOADS_, \
+ NUM_ARGS)(NAME, BASE_T, _HLSL_CAT(BASE_T, 4), AVAIL)
+
+#define _HLSL_BOTH_OVERLOADS_2(NAME, BASE_T, VECTOR_T, AVAIL) \
+ _HLSL_CAT(_HLSL_IF_TRUE_, AVAIL) \
+ (_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)) constexpr VECTOR_T NAME( \
+ VECTOR_T p0, BASE_T p1) { \
+ return _HLSL_CAT(__builtin_elementwise_, NAME)(p0, (VECTOR_T)p1); \
} \
- IF_TRUE_##AVAIL( \
- _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)) constexpr VECTOR_TYPE \
- FUNC_NAME(BASE_TYPE p0, VECTOR_TYPE p1) { \
- return __builtin_elementwise_##FUNC_NAME((VECTOR_TYPE)p0, p1); \
+ _HLSL_CAT(_HLSL_IF_TRUE_, AVAIL) \
+ (_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)) constexpr VECTOR_T NAME( \
+ BASE_T p0, VECTOR_T p1) { \
+ return _HLSL_CAT(__builtin_elementwise_, NAME)((VECTOR_T)p0, p1); \
}
-#define IF_TRUE_0(EXPR)
-#define IF_TRUE_1(EXPR) EXPR
+#define _HLSL_BOTH_OVERLOADS_3(NAME, BASE_T, VECTOR_T, AVAIL) \
+ _HLSL_CAT(_HLSL_IF_TRUE_, AVAIL) \
+ (_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)) constexpr VECTOR_T NAME( \
+ VECTOR_T p0, VECTOR_T p1, BASE_T p2) { \
+ return _HLSL_CAT(__builtin_hlsl_elementwise_, NAME)(p0, p1, (VECTOR_T)p2); \
+ } \
+ _HLSL_CAT(_HLSL_IF_TRUE_, AVAIL) \
+ (_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)) constexpr VECTOR_T NAME( \
+ VECTOR_T p0, BASE_T p1, VECTOR_T p2) { \
+ return _HLSL_CAT(__builtin_hlsl_elementwise_, NAME)(p0, (VECTOR_T)p1, p2); \
----------------
bob80905 wrote:
Yes, that's one example of what I meant, or any overload where two of the three parameters are the base type.
https://github.com/llvm/llvm-project/pull/129939
More information about the cfe-commits
mailing list