clang 23.0.0git
hlsl_alias_intrinsics.h
Go to the documentation of this file.
1//===--- hlsl_alias_intrinsics.h - HLSL alias definitions for intrinsics --===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef _HLSL_HLSL_ALIAS_INTRINSICS_H_
10#define _HLSL_HLSL_ALIAS_INTRINSICS_H_
11
12namespace hlsl {
13
14// Note: Functions in this file are sorted alphabetically, then grouped by base
15// element type, and the element types are sorted by size, then singed integer,
16// unsigned integer and floating point. Keeping this ordering consistent will
17// help keep this file manageable as it grows.
18
19#define _HLSL_BUILTIN_ALIAS(builtin) \
20 __attribute__((clang_builtin_alias(builtin)))
21#define _HLSL_AVAILABILITY(platform, version) \
22 __attribute__((availability(platform, introduced = version)))
23#define _HLSL_AVAILABILITY_STAGE(platform, version, stage) \
24 __attribute__(( \
25 availability(platform, introduced = version, environment = stage)))
26
27#ifdef __HLSL_ENABLE_16_BIT
28#define _HLSL_16BIT_AVAILABILITY(platform, version) \
29 __attribute__((availability(platform, introduced = version)))
30#define _HLSL_16BIT_AVAILABILITY_STAGE(platform, version, stage) \
31 __attribute__(( \
32 availability(platform, introduced = version, environment = stage)))
33#define _HLSL_16BIT_AVAILABILITY_SHADERMODEL_DEFAULT() \
34 _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
35#else
36#define _HLSL_16BIT_AVAILABILITY(environment, version)
37#define _HLSL_16BIT_AVAILABILITY_STAGE(environment, version, stage)
38#define _HLSL_16BIT_AVAILABILITY_SHADERMODEL_DEFAULT()
39#endif
40
41//===----------------------------------------------------------------------===//
42// abs builtins
43//===----------------------------------------------------------------------===//
44
45/// \fn T abs(T Val)
46/// \brief Returns the absolute value of the input value, \a Val.
47/// \param Val The input value.
48
49#ifdef __HLSL_ENABLE_16_BIT
51_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
52int16_t abs(int16_t);
54_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
55int16_t2 abs(int16_t2);
57_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
58int16_t3 abs(int16_t3);
60_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
61int16_t4 abs(int16_t4);
62
64constexpr uint16_t abs(uint16_t V) { return V; }
66constexpr uint16_t2 abs(uint16_t2 V) { return V; }
68constexpr uint16_t3 abs(uint16_t3 V) { return V; }
70constexpr uint16_t4 abs(uint16_t4 V) { return V; }
71#endif
72
74_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
75half abs(half);
77_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
80_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
83_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
85
86_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
87int abs(int);
88_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
90_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
92_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
94
95constexpr uint abs(uint V) { return V; }
96constexpr uint2 abs(uint2 V) { return V; }
97constexpr uint3 abs(uint3 V) { return V; }
98constexpr uint4 abs(uint4 V) { return V; }
99
100_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
101float abs(float);
102_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
104_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
106_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
108
109_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
111_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
113_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
115_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
117
118constexpr uint64_t abs(uint64_t V) { return V; }
119constexpr uint64_t2 abs(uint64_t2 V) { return V; }
120constexpr uint64_t3 abs(uint64_t3 V) { return V; }
121constexpr uint64_t4 abs(uint64_t4 V) { return V; }
122
123_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
124double abs(double);
125_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
127_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
129_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
131
132//===----------------------------------------------------------------------===//
133// acos builtins
134//===----------------------------------------------------------------------===//
135
136/// \fn T acos(T Val)
137/// \brief Returns the arccosine of the input value, \a Val.
138/// \param Val The input value.
139
141_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
142half acos(half);
144_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
147_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
150_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
152
153_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
154float acos(float);
155_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
157_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
159_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
161
162//===----------------------------------------------------------------------===//
163// AddUint64 builtins
164//===----------------------------------------------------------------------===//
165
166/// \fn T AddUint64(T a, T b)
167/// \brief Implements unsigned 64-bit integer addition using pairs of unsigned
168/// 32-bit integers.
169/// \param x [in] The first unsigned 32-bit integer pair(s)
170/// \param y [in] The second unsigned 32-bit integer pair(s)
171///
172/// This function takes one or two pairs (low, high) of unsigned 32-bit integer
173/// values and returns pairs (low, high) of unsigned 32-bit integer
174/// values representing the result of unsigned 64-bit integer addition.
175
176_HLSL_AVAILABILITY(shadermodel, 6.0)
177_HLSL_BUILTIN_ALIAS(__builtin_hlsl_adduint64)
179_HLSL_AVAILABILITY(shadermodel, 6.0)
180_HLSL_BUILTIN_ALIAS(__builtin_hlsl_adduint64)
182
183//===----------------------------------------------------------------------===//
184// all builtins
185//===----------------------------------------------------------------------===//
186
187/// \fn bool all(T x)
188/// \brief Returns True if all components of the \a x parameter are non-zero;
189/// otherwise, false. \param x The input value.
190
191#ifdef __HLSL_ENABLE_16_BIT
193_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
194bool all(int16_t);
196_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
197bool all(int16_t2);
199_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
200bool all(int16_t3);
202_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
203bool all(int16_t4);
205_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
206bool all(uint16_t);
208_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
209bool all(uint16_t2);
211_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
212bool all(uint16_t3);
214_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
215bool all(uint16_t4);
216#endif
217
219_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
220bool all(half);
222_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
223bool all(half2);
225_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
226bool all(half3);
228_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
229bool all(half4);
230
231_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
232bool all(bool);
233_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
234bool all(bool2);
235_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
236bool all(bool3);
237_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
238bool all(bool4);
239_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
240
241_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
242bool all(int);
243_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
244bool all(int2);
245_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
246bool all(int3);
247_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
248bool all(int4);
249
250_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
251bool all(uint);
252_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
253bool all(uint2);
254_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
255bool all(uint3);
256_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
257bool all(uint4);
258
259_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
260bool all(float);
261_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
263_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
265_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
267
268_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
270_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
272_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
274_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
276
277_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
279_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
281_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
283_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
285
286_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
287bool all(double);
288_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
290_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
292_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
294
295//===----------------------------------------------------------------------===//
296// and builtins
297//===----------------------------------------------------------------------===//
298
299/// \fn bool and(bool x, bool y)
300/// \brief Logically ands two boolean vectors or matrices elementwise and
301/// produces a bool vector or matrix output.
302
303// TODO: Clean up clang-format marker once we've resolved
304// https://github.com/llvm/llvm-project/issues/127851
305//
306// clang-format off
307_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
308bool and(bool x, bool y);
309_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
311_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
313_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
315
316
317_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
319_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
321_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
323_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
325_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
327_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
329_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
331_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
333_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
335_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
337_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
339_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
341_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
343_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
345_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
347// clang-format on
348
349//===----------------------------------------------------------------------===//
350// any builtins
351//===----------------------------------------------------------------------===//
352
353/// \fn bool any(T x)
354/// \brief Returns True if any components of the \a x parameter are non-zero;
355/// otherwise, false. \param x The input value.
356
357#ifdef __HLSL_ENABLE_16_BIT
359_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
360bool any(int16_t);
362_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
363bool any(int16_t2);
365_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
366bool any(int16_t3);
368_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
369bool any(int16_t4);
371_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
372bool any(uint16_t);
374_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
375bool any(uint16_t2);
377_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
378bool any(uint16_t3);
380_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
381bool any(uint16_t4);
382#endif
383
385_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
386bool any(half);
388_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
389bool any(half2);
391_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
392bool any(half3);
394_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
395bool any(half4);
396
397_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
398bool any(bool);
399_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
400bool any(bool2);
401_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
402bool any(bool3);
403_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
404bool any(bool4);
405_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
406
407_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
408bool any(int);
409_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
410bool any(int2);
411_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
412bool any(int3);
413_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
414bool any(int4);
415
416_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
417bool any(uint);
418_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
419bool any(uint2);
420_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
421bool any(uint3);
422_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
423bool any(uint4);
424
425_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
426bool any(float);
427_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
429_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
431_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
433
434_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
436_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
438_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
440_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
442
443_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
445_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
447_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
449_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
451
452_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
453bool any(double);
454_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
456_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
458_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
460
461//===----------------------------------------------------------------------===//
462// asdouble builtins
463//===----------------------------------------------------------------------===//
464
465/// \fn double asdouble(uint LowBits, uint HighBits)
466/// \brief Reinterprets a cast value (two 32-bit values) into a double.
467/// \param LowBits The low 32-bit pattern of the input value.
468/// \param HighBits The high 32-bit pattern of the input value.
469
470_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
472_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
474_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
476_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
478
479//===----------------------------------------------------------------------===//
480// asin builtins
481//===----------------------------------------------------------------------===//
482
483/// \fn T asin(T Val)
484/// \brief Returns the arcsine of the input value, \a Val.
485/// \param Val The input value.
486
488_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
489half asin(half);
491_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
494_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
497_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
499
500_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
501float asin(float);
502_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
504_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
506_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
508
509//===----------------------------------------------------------------------===//
510// atan builtins
511//===----------------------------------------------------------------------===//
512
513/// \fn T atan(T Val)
514/// \brief Returns the arctangent of the input value, \a Val.
515/// \param Val The input value.
516
518_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
519half atan(half);
521_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
524_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
527_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
529
530_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
531float atan(float);
532_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
534_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
536_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
538
539//===----------------------------------------------------------------------===//
540// atan2 builtins
541//===----------------------------------------------------------------------===//
542
543/// \fn T atan2(T y, T x)
544/// \brief Returns the arctangent of y/x, using the signs of the arguments to
545/// determine the correct quadrant.
546/// \param y The y-coordinate.
547/// \param x The x-coordinate.
548
550_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
551half atan2(half y, half x);
553_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
556_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
559_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
561
562_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
563float atan2(float y, float x);
564_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
566_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
568_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
570
571//===----------------------------------------------------------------------===//
572// ceil builtins
573//===----------------------------------------------------------------------===//
574
575/// \fn T ceil(T Val)
576/// \brief Returns the smallest integer value that is greater than or equal to
577/// the input value, \a Val.
578/// \param Val The input value.
579
581_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
582half ceil(half);
584_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
587_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
590_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
592
593_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
594float ceil(float);
595_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
597_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
599_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
601
602//===----------------------------------------------------------------------===//
603// clamp builtins
604//===----------------------------------------------------------------------===//
605
606/// \fn T clamp(T X, T Min, T Max)
607/// \brief Clamps the specified value \a X to the specified
608/// minimum ( \a Min) and maximum ( \a Max) range.
609/// \param X A value to clamp.
610/// \param Min The specified minimum range.
611/// \param Max The specified maximum range.
612///
613/// Returns The clamped value for the \a X parameter.
614/// For values of -INF or INF, clamp will behave as expected.
615/// However for values of NaN, the results are undefined.
616
618_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
619half clamp(half, half, half);
621_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
624_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
627_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
629
630#ifdef __HLSL_ENABLE_16_BIT
632_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
633int16_t clamp(int16_t, int16_t, int16_t);
635_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
636int16_t2 clamp(int16_t2, int16_t2, int16_t2);
638_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
639int16_t3 clamp(int16_t3, int16_t3, int16_t3);
641_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
642int16_t4 clamp(int16_t4, int16_t4, int16_t4);
643
645_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
646uint16_t clamp(uint16_t, uint16_t, uint16_t);
648_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
649uint16_t2 clamp(uint16_t2, uint16_t2, uint16_t2);
651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
652uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
654_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
655uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
656#endif
657
658_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
659int clamp(int, int, int);
660_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
662_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
664_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
666
667_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
669_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
671_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
673_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
675
676_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
678_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
680_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
682_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
684
685_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
687_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
689_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
691_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
693
694_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
695float clamp(float, float, float);
696_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
698_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
700_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
702
703_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
704double clamp(double, double, double);
705_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
707_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
709_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
711
712//===----------------------------------------------------------------------===//
713// clip builtins
714//===----------------------------------------------------------------------===//
715
716/// \fn void clip(T Val)
717/// \brief Discards the current pixel if the specified value is less than zero.
718/// \param Val The input value.
719
720_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
721void clip(float);
722_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
724_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
726_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
728
729//===----------------------------------------------------------------------===//
730// cos builtins
731//===----------------------------------------------------------------------===//
732
733/// \fn T cos(T Val)
734/// \brief Returns the cosine of the input value, \a Val.
735/// \param Val The input value.
736
738_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
739half cos(half);
741_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
744_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
747_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
749
750_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
751float cos(float);
752_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
754_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
756_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
758
759//===----------------------------------------------------------------------===//
760// cosh builtins
761//===----------------------------------------------------------------------===//
762
763/// \fn T cosh(T Val)
764/// \brief Returns the hyperbolic cosine of the input value, \a Val.
765/// \param Val The input value.
766
768_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
769half cosh(half);
771_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
774_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
777_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
779
780_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
781float cosh(float);
782_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
784_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
786_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
788
789//===----------------------------------------------------------------------===//
790// count bits builtins
791//===----------------------------------------------------------------------===//
792
793/// \fn T countbits(T Val)
794/// \brief Return the number of bits (per component) set in the input integer.
795/// \param Val The input value.
796
797#ifdef __HLSL_ENABLE_16_BIT
799const inline uint countbits(int16_t x) {
800 return __builtin_elementwise_popcount(x);
801}
803const inline uint2 countbits(int16_t2 x) {
804 return __builtin_elementwise_popcount(x);
805}
807const inline uint3 countbits(int16_t3 x) {
808 return __builtin_elementwise_popcount(x);
809}
811const inline uint4 countbits(int16_t4 x) {
812 return __builtin_elementwise_popcount(x);
813}
815const inline uint countbits(uint16_t x) {
816 return __builtin_elementwise_popcount(x);
817}
819const inline uint2 countbits(uint16_t2 x) {
820 return __builtin_elementwise_popcount(x);
821}
823const inline uint3 countbits(uint16_t3 x) {
824 return __builtin_elementwise_popcount(x);
825}
827const inline uint4 countbits(uint16_t4 x) {
828 return __builtin_elementwise_popcount(x);
829}
830#endif
831
832const inline uint countbits(int x) { return __builtin_elementwise_popcount(x); }
833const inline uint2 countbits(int2 x) {
834 return __builtin_elementwise_popcount(x);
835}
836const inline uint3 countbits(int3 x) {
837 return __builtin_elementwise_popcount(x);
838}
839const inline uint4 countbits(int4 x) {
840 return __builtin_elementwise_popcount(x);
841}
842
843const inline uint countbits(uint x) {
844 return __builtin_elementwise_popcount(x);
845}
846const inline uint2 countbits(uint2 x) {
847 return __builtin_elementwise_popcount(x);
848}
849const inline uint3 countbits(uint3 x) {
850 return __builtin_elementwise_popcount(x);
851}
852const inline uint4 countbits(uint4 x) {
853 return __builtin_elementwise_popcount(x);
854}
855
856const inline uint countbits(int64_t x) {
857 return __builtin_elementwise_popcount(x);
858}
859const inline uint2 countbits(int64_t2 x) {
860 return __builtin_elementwise_popcount(x);
861}
862const inline uint3 countbits(int64_t3 x) {
863 return __builtin_elementwise_popcount(x);
864}
865const inline uint4 countbits(int64_t4 x) {
866 return __builtin_elementwise_popcount(x);
867}
868
869const inline uint countbits(uint64_t x) {
870 return __builtin_elementwise_popcount(x);
871}
872const inline uint2 countbits(uint64_t2 x) {
873 return __builtin_elementwise_popcount(x);
874}
875const inline uint3 countbits(uint64_t3 x) {
876 return __builtin_elementwise_popcount(x);
877}
878const inline uint4 countbits(uint64_t4 x) {
879 return __builtin_elementwise_popcount(x);
880}
881
882//===----------------------------------------------------------------------===//
883// degrees builtins
884//===----------------------------------------------------------------------===//
885
886/// \fn T degrees(T x)
887/// \brief Converts the specified value from radians to degrees.
888/// \param x The specified input value.
889
891_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
892half degrees(half);
894_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
897_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
900_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
902
903_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
904float degrees(float);
905_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
907_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
909_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
911
912//===----------------------------------------------------------------------===//
913// dot product builtins
914//===----------------------------------------------------------------------===//
915
916/// \fn K dot(T X, T Y)
917/// \brief Return the dot product (a scalar value) of \a X and \a Y.
918/// \param X The X input value.
919/// \param Y The Y input value.
920
922_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
923half dot(half, half);
925_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
928_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
931_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
933
934#ifdef __HLSL_ENABLE_16_BIT
936_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
937int16_t dot(int16_t, int16_t);
939_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
940int16_t dot(int16_t2, int16_t2);
942_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
943int16_t dot(int16_t3, int16_t3);
945_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
946int16_t dot(int16_t4, int16_t4);
947
949_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
950uint16_t dot(uint16_t, uint16_t);
952_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
953uint16_t dot(uint16_t2, uint16_t2);
955_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
956uint16_t dot(uint16_t3, uint16_t3);
958_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
959uint16_t dot(uint16_t4, uint16_t4);
960#endif
961
962_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
963float dot(float, float);
964_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
966_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
968_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
970
971_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
972double dot(double, double);
973
974_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
975int dot(int, int);
976_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
978_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
980_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
982
983_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
985_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
987_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
989_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
991
992_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
994_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
996_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
998_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1000
1001_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1003_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1005_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1007_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
1009
1010//===----------------------------------------------------------------------===//
1011// dot4add builtins
1012//===----------------------------------------------------------------------===//
1013
1014/// \fn int dot4add_i8packed(uint A, uint B, int C)
1015
1016_HLSL_AVAILABILITY(shadermodel, 6.4)
1017_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_i8packed)
1019
1020/// \fn uint dot4add_u8packed(uint A, uint B, uint C)
1021
1022_HLSL_AVAILABILITY(shadermodel, 6.4)
1023_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_u8packed)
1025
1026//===----------------------------------------------------------------------===//
1027// exp builtins
1028//===----------------------------------------------------------------------===//
1029
1030/// \fn T exp(T x)
1031/// \brief Returns the base-e exponential, or \a e**x, of the specified value.
1032/// \param x The specified input value.
1033///
1034/// The return value is the base-e exponential of the \a x parameter.
1035
1037_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1038half exp(half);
1040_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1043_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1046_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1048
1049_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1050float exp(float);
1051_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1053_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1055_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1057
1058//===----------------------------------------------------------------------===//
1059// exp2 builtins
1060//===----------------------------------------------------------------------===//
1061
1062/// \fn T exp2(T x)
1063/// \brief Returns the base 2 exponential, or \a 2**x, of the specified value.
1064/// \param x The specified input value.
1065///
1066/// The base 2 exponential of the \a x parameter.
1067
1069_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1070half exp2(half);
1072_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1075_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1078_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1080
1081_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1082float exp2(float);
1083_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1085_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1087_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1089
1090//===----------------------------------------------------------------------===//
1091// f16tof32 builtins
1092//===----------------------------------------------------------------------===//
1093
1094/// \fn float f16tof32(uint x)
1095/// \brief Returns the half value stored in the low 16 bits of the uint arg
1096/// converted to a float.
1097/// \param x The uint containing two half values.
1098///
1099/// The float value of the half value found in the low 16 bits of the \a xi
1100/// parameter.
1101
1102_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1104_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1106_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1108_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1110
1111//===----------------------------------------------------------------------===//
1112// f32tof16 builtins
1113//===----------------------------------------------------------------------===//
1114
1115/// \fn uint f32tof16(float x)
1116/// \brief Returns the float arg value converted to half in the low 16 bits of
1117/// the uint return value
1118/// \param x The float to be converted to half.
1119///
1120/// The return value is a uint containing the converted half value in the low
1121/// 16 bits.
1122
1123_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f32tof16)
1125_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f32tof16)
1127_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f32tof16)
1129_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f32tof16)
1131
1132//===----------------------------------------------------------------------===//
1133// firstbitlow builtins
1134//===----------------------------------------------------------------------===//
1135
1136/// \fn T firstbitlow(T Val)
1137/// \brief Returns the location of the first set bit starting from the lowest
1138/// order bit and working upward, per component.
1139/// \param Val the input value.
1140
1141#ifdef __HLSL_ENABLE_16_BIT
1143_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1144uint firstbitlow(int16_t);
1146_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1147uint2 firstbitlow(int16_t2);
1149_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1150uint3 firstbitlow(int16_t3);
1152_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1153uint4 firstbitlow(int16_t4);
1155_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1156uint firstbitlow(uint16_t);
1158_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1159uint2 firstbitlow(uint16_t2);
1161_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1162uint3 firstbitlow(uint16_t3);
1164_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1165uint4 firstbitlow(uint16_t4);
1166#endif
1167
1168_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1170_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1172_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1174_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1176
1177_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1179_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1181_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1183_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1185
1186_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1188_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1190_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1192_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1194
1195_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1197_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1199_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1201_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1203
1204//===----------------------------------------------------------------------===//
1205// floor builtins
1206//===----------------------------------------------------------------------===//
1207
1208/// \fn T floor(T Val)
1209/// \brief Returns the largest integer that is less than or equal to the input
1210/// value, \a Val.
1211/// \param Val The input value.
1212
1214_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1215half floor(half);
1217_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1220_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1223_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1225
1226_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1227float floor(float);
1228_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1230_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1232_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1234
1235//===----------------------------------------------------------------------===//
1236// frac builtins
1237//===----------------------------------------------------------------------===//
1238
1239/// \fn T frac(T x)
1240/// \brief Returns the fractional (or decimal) part of x. \a x parameter.
1241/// \param x The specified input value.
1242///
1243/// If \a the return value is greater than or equal to 0 and less than 1.
1244
1246_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1247half frac(half);
1249_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1252_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1255_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1257
1258_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1259float frac(float);
1260_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1262_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1264_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1266
1267//===----------------------------------------------------------------------===//
1268// isinf builtins
1269//===----------------------------------------------------------------------===//
1270
1271/// \fn T isinf(T x)
1272/// \brief Determines if the specified value \a x is infinite.
1273/// \param x The specified input value.
1274///
1275/// Returns a value of the same size as the input, with a value set
1276/// to True if the x parameter is +INF or -INF. Otherwise, False.
1277
1279_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1280bool isinf(half);
1282_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1285_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1288_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1290
1291_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1292bool isinf(float);
1293_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1295_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1297_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1299
1300//===----------------------------------------------------------------------===//
1301// isnan builtins
1302//===----------------------------------------------------------------------===//
1303
1304/// \fn T isnan(T x)
1305/// \brief Determines if the specified value \a x is Not a Number.
1306/// \param x The specified input value.
1307///
1308/// Returns a value of the same size as the input, with a value set
1309/// to True if the x parameter is NaN or QNaN. Otherwise, False.
1310
1312_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1313bool isnan(half);
1315_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1318_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1321_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1323
1324_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1325bool isnan(float);
1326_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1328_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1330_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1332
1333//===----------------------------------------------------------------------===//
1334// lerp builtins
1335//===----------------------------------------------------------------------===//
1336
1337/// \fn T lerp(T x, T y, T s)
1338/// \brief Returns the linear interpolation of x to y by s.
1339/// \param x [in] The first-floating point value.
1340/// \param y [in] The second-floating point value.
1341/// \param s [in] A value that linearly interpolates between the x parameter and
1342/// the y parameter.
1343///
1344/// Linear interpolation is based on the following formula: x*(1-s) + y*s which
1345/// can equivalently be written as x + s(y-x).
1346
1348_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1349half lerp(half, half, half);
1351_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1354_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1357_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1359
1360_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1361float lerp(float, float, float);
1362_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1364_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1366_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1368
1369//===----------------------------------------------------------------------===//
1370// log builtins
1371//===----------------------------------------------------------------------===//
1372
1373/// \fn T log(T Val)
1374/// \brief The base-e logarithm of the input value, \a Val parameter.
1375/// \param Val The input value.
1376///
1377/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1378/// function returns negative infinity.
1379
1381_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1382half log(half);
1384_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1387_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1390_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1392
1393_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1394float log(float);
1395_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1397_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1399_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1401
1402//===----------------------------------------------------------------------===//
1403// log10 builtins
1404//===----------------------------------------------------------------------===//
1405
1406/// \fn T log10(T Val)
1407/// \brief The base-10 logarithm of the input value, \a Val parameter.
1408/// \param Val The input value.
1409///
1410/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1411/// function returns negative infinity.
1412
1414_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1415half log10(half);
1417_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1420_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1423_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1425
1426_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1427float log10(float);
1428_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1430_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1432_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1434
1435//===----------------------------------------------------------------------===//
1436// log2 builtins
1437//===----------------------------------------------------------------------===//
1438
1439/// \fn T log2(T Val)
1440/// \brief The base-2 logarithm of the input value, \a Val parameter.
1441/// \param Val The input value.
1442///
1443/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1444/// function returns negative infinity.
1445
1447_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1448half log2(half);
1450_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1453_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1456_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1458
1459_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1460float log2(float);
1461_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1463_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1465_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1467
1468//===----------------------------------------------------------------------===//
1469// mad builtins
1470//===----------------------------------------------------------------------===//
1471
1472/// \fn T mad(T M, T A, T B)
1473/// \brief The result of \a M * \a A + \a B.
1474/// \param M The multiplication value.
1475/// \param A The first addition value.
1476/// \param B The second addition value.
1477
1479_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1480half mad(half, half, half);
1482_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1485_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1488_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1490
1491#ifdef __HLSL_ENABLE_16_BIT
1493_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1494int16_t mad(int16_t, int16_t, int16_t);
1496_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1497int16_t2 mad(int16_t2, int16_t2, int16_t2);
1499_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1500int16_t3 mad(int16_t3, int16_t3, int16_t3);
1502_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1503int16_t4 mad(int16_t4, int16_t4, int16_t4);
1504
1506_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1507uint16_t mad(uint16_t, uint16_t, uint16_t);
1509_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1510uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2);
1512_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1513uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3);
1515_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1516uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4);
1517#endif
1518
1519_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1520int mad(int, int, int);
1521_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1523_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1525_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1527
1528_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1530_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1532_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1534_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1536
1537_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1539_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1541_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1543_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1545
1546_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1548_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1550_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1552_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1554
1555_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1556float mad(float, float, float);
1557_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1559_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1561_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1563
1564_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1565double mad(double, double, double);
1566_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1568_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1570_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1572
1573//===----------------------------------------------------------------------===//
1574// max builtins
1575//===----------------------------------------------------------------------===//
1576
1577/// \fn T max(T X, T Y)
1578/// \brief Return the greater of \a X and \a Y.
1579/// \param X The X input value.
1580/// \param Y The Y input value.
1581
1583_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1584half max(half, half);
1586_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1589_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1592_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1594
1595#ifdef __HLSL_ENABLE_16_BIT
1597_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1598int16_t max(int16_t, int16_t);
1600_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1601int16_t2 max(int16_t2, int16_t2);
1603_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1604int16_t3 max(int16_t3, int16_t3);
1606_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1607int16_t4 max(int16_t4, int16_t4);
1608
1610_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1611uint16_t max(uint16_t, uint16_t);
1613_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1614uint16_t2 max(uint16_t2, uint16_t2);
1616_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1617uint16_t3 max(uint16_t3, uint16_t3);
1619_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1620uint16_t4 max(uint16_t4, uint16_t4);
1621#endif
1622
1623_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1624int max(int, int);
1625_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1627_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1629_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1631
1632_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1634_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1636_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1638_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1640
1641_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1643_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1645_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1647_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1649
1650_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1652_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1654_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1656_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1658
1659_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1660float max(float, float);
1661_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1663_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1665_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1667
1668_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1669double max(double, double);
1670_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1672_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1674_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1676
1677//===----------------------------------------------------------------------===//
1678// min builtins
1679//===----------------------------------------------------------------------===//
1680
1681/// \fn T min(T X, T Y)
1682/// \brief Return the lesser of \a X and \a Y.
1683/// \param X The X input value.
1684/// \param Y The Y input value.
1685
1687_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1688half min(half, half);
1690_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1693_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1696_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1698
1699#ifdef __HLSL_ENABLE_16_BIT
1701_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1702int16_t min(int16_t, int16_t);
1704_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1705int16_t2 min(int16_t2, int16_t2);
1707_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1708int16_t3 min(int16_t3, int16_t3);
1710_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1711int16_t4 min(int16_t4, int16_t4);
1712
1714_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1715uint16_t min(uint16_t, uint16_t);
1717_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1718uint16_t2 min(uint16_t2, uint16_t2);
1720_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1721uint16_t3 min(uint16_t3, uint16_t3);
1723_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1724uint16_t4 min(uint16_t4, uint16_t4);
1725#endif
1726
1727_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1728int min(int, int);
1729_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1731_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1733_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1735
1736_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1738_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1740_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1742_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1744
1745_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1746float min(float, float);
1747_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1749_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1751_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1753
1754_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1756_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1758_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1760_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1762
1763_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1765_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1767_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1769_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1771
1772_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1773double min(double, double);
1774_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1776_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1778_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1780
1781//===----------------------------------------------------------------------===//
1782// mul builtins
1783//===----------------------------------------------------------------------===//
1784
1785/// \fn R mul(X x, Y y)
1786/// \brief Multiplies x and y using matrix math.
1787/// \param x [in] The first input value. If x is a vector, it is treated as a
1788/// row vector.
1789/// \param y [in] The second input value. If y is a vector, it is treated as a
1790/// column vector.
1791///
1792/// The inner dimension x-columns and y-rows must be equal. The result has the
1793/// dimension x-rows x y-columns. When both x and y are vectors, the result is
1794/// a dot product (scalar). Scalar operands are multiplied element-wise.
1795///
1796/// This function supports 9 overloaded forms:
1797/// 1. scalar * scalar -> scalar
1798/// 2. scalar * vector -> vector
1799/// 3. scalar * matrix -> matrix
1800/// 4. vector * scalar -> vector
1801/// 5. vector * vector -> scalar (dot product)
1802/// 6. vector * matrix -> vector
1803/// 7. matrix * scalar -> matrix
1804/// 8. matrix * vector -> vector
1805/// 9. matrix * matrix -> matrix
1806
1807// Cases 1, 2, 3, 4, 5, and 7 of mul are defined in hlsl_intrinsics.h as
1808// header-only implementations because they are elementwise operations and dot
1809// products easily expressed in HLSL.
1810
1811// Cases 6, 8, and 9 are defined below to alias the mul builtin so that they can
1812// be lowered to the llvm.matrix.multiply intrinsic which is not exposed
1813// directly to HLSL.
1814
1815// Case 6: vector * matrix -> vector
1816template <int R, int C>
1818_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mul) vector<half, C> mul(vector<half, R>,
1819 matrix<half, R, C>);
1820
1821template <typename T, int R, int C>
1822_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mul)
1823vector<T, C> mul(vector<T, R>, matrix<T, R, C>);
1824
1825// Case 8: matrix * vector -> vector
1826template <int R, int C>
1828_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mul) vector<half, R> mul(matrix<half, R, C>,
1829 vector<half, C>);
1830
1831template <typename T, int R, int C>
1832_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mul)
1833vector<T, R> mul(matrix<T, R, C>, vector<T, C>);
1834
1835// Case 9: matrix * matrix -> matrix
1836template <int R, int K, int C>
1838_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mul) matrix<half, R, C> mul(
1839 matrix<half, R, K>, matrix<half, K, C>);
1840
1841template <typename T, int R, int K, int C>
1842_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mul)
1843matrix<T, R, C> mul(matrix<T, R, K>, matrix<T, K, C>);
1844
1845//===----------------------------------------------------------------------===//
1846// transpose builtins
1847//===----------------------------------------------------------------------===//
1848
1849/// \fn matrix<T, C, R> transpose(matrix<T, R, C> x)
1850/// \brief Returns the transpose of the input matrix.
1851/// \param x [in] The input matrix.
1852
1853template <int R, int C>
1854_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1855_HLSL_BUILTIN_ALIAS(__builtin_hlsl_transpose) matrix<half, C, R> transpose(
1856 matrix<half, R, C>);
1857
1858template <typename T, int R, int C>
1859_HLSL_BUILTIN_ALIAS(__builtin_hlsl_transpose)
1860matrix<T, C, R> transpose(matrix<T, R, C>);
1861
1862//===----------------------------------------------------------------------===//
1863// normalize builtins
1864//===----------------------------------------------------------------------===//
1865
1866/// \fn T normalize(T x)
1867/// \brief Returns the normalized unit vector of the specified floating-point
1868/// vector. \param x [in] The vector of floats.
1869///
1870/// Normalize is based on the following formula: x / length(x).
1871
1873_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1874half normalize(half);
1876_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1879_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1882_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1884
1885_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1886float normalize(float);
1887_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1889_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1891_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1893
1894//===----------------------------------------------------------------------===//
1895// or builtins
1896//===----------------------------------------------------------------------===//
1897
1898/// \fn bool or(bool x, bool y)
1899/// \brief Logically ors two boolean vectors or matrices elementwise and
1900/// produces a bool vector or matrix output.
1901
1902// TODO: Clean up clang-format marker once we've resolved
1903// https://github.com/llvm/llvm-project/issues/127851
1904//
1905// clang-format off
1906_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1907bool or(bool, bool);
1908_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1910_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1912_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1914
1915_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1917_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1919_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1921_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1923_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1925_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1927_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1929_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1931_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1933_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1935_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1937_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1939_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1941_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1943_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1945// clang-format on
1946
1947//===----------------------------------------------------------------------===//
1948// pow builtins
1949//===----------------------------------------------------------------------===//
1950
1951/// \fn T pow(T Val, T Pow)
1952/// \brief Return the value \a Val, raised to the power \a Pow.
1953/// \param Val The input value.
1954/// \param Pow The specified power.
1955
1957_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1958half pow(half, half);
1960_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1963_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1966_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1968
1969_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1970float pow(float, float);
1971_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1973_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1975_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1977
1978//===----------------------------------------------------------------------===//
1979// reversebits builtins
1980//===----------------------------------------------------------------------===//
1981
1982/// \fn T reversebits(T Val)
1983/// \brief Return the value \a Val with the bit order reversed.
1984/// \param Val The input value.
1985
1986#ifdef __HLSL_ENABLE_16_BIT
1988_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1989uint16_t reversebits(uint16_t);
1991_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1992uint16_t2 reversebits(uint16_t2);
1994_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1995uint16_t3 reversebits(uint16_t3);
1997_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1998uint16_t4 reversebits(uint16_t4);
1999#endif
2000
2001_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2003_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2005_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2007_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2009
2010_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2012_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2014_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2016_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
2018
2019//===----------------------------------------------------------------------===//
2020// cross builtins
2021//===----------------------------------------------------------------------===//
2022
2023/// \fn T cross(T x, T y)
2024/// \brief Returns the cross product of two floating-point, 3D vectors.
2025/// \param x [in] The first floating-point, 3D vector.
2026/// \param y [in] The second floating-point, 3D vector.
2027///
2028/// Result is the cross product of x and y, i.e., the resulting
2029/// components are, in order :
2030/// x[1] * y[2] - y[1] * x[2]
2031/// x[2] * y[0] - y[2] * x[0]
2032/// x[0] * y[1] - y[0] * x[1]
2033
2035_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf16)
2037
2038_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf32)
2040
2041//===----------------------------------------------------------------------===//
2042// rcp builtins
2043//===----------------------------------------------------------------------===//
2044
2045/// \fn T rcp(T x)
2046/// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x.
2047/// \param x The specified input value.
2048///
2049/// The return value is the reciprocal of the \a x parameter.
2050
2052_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2053half rcp(half);
2055_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2058_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2061_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2063
2064_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2065float rcp(float);
2066_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2068_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2070_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2072
2073_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2074double rcp(double);
2075_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2077_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2079_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
2081
2082//===----------------------------------------------------------------------===//
2083// rsqrt builtins
2084//===----------------------------------------------------------------------===//
2085
2086/// \fn T rsqrt(T x)
2087/// \brief Returns the reciprocal of the square root of the specified value.
2088/// ie 1 / sqrt( \a x).
2089/// \param x The specified input value.
2090///
2091/// This function uses the following formula: 1 / sqrt(x).
2092
2094_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2095half rsqrt(half);
2097_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2100_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2103_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2105
2106_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2107float rsqrt(float);
2108_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2110_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2112_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
2114
2115//===----------------------------------------------------------------------===//
2116// round builtins
2117//===----------------------------------------------------------------------===//
2118
2119/// \fn T round(T x)
2120/// \brief Rounds the specified value \a x to the nearest integer.
2121/// \param x The specified input value.
2122///
2123/// The return value is the \a x parameter, rounded to the nearest integer
2124/// within a floating-point type. Halfway cases are
2125/// rounded to the nearest even value.
2126
2128_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2129half round(half);
2131_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2134_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2137_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2139
2140_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2141float round(float);
2142_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2144_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2146_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2148
2149//===----------------------------------------------------------------------===//
2150// saturate builtins
2151//===----------------------------------------------------------------------===//
2152
2153/// \fn T saturate(T Val)
2154/// \brief Returns input value, \a Val, clamped within the range of 0.0f
2155/// to 1.0f. \param Val The input value.
2156
2158_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2159half saturate(half);
2161_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2164_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2167_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2169
2170_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2171float saturate(float);
2172_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2174_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2176_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2178
2179_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2180double saturate(double);
2181_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2183_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2185_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2187
2188//===----------------------------------------------------------------------===//
2189// select builtins
2190//===----------------------------------------------------------------------===//
2191
2192/// \fn T select(bool Cond, T TrueVal, T FalseVal)
2193/// \brief ternary operator.
2194/// \param Cond The Condition input value.
2195/// \param TrueVal The Value returned if Cond is true.
2196/// \param FalseVal The Value returned if Cond is false.
2197
2198template <typename T>
2199_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2200T select(bool, T, T);
2201
2202/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2203/// vector<T,Sz> FalseVals)
2204/// \brief ternary operator for vectors. All vectors must be the same size.
2205/// \param Conds The Condition input values.
2206/// \param TrueVals The vector values are chosen from when conditions are true.
2207/// \param FalseVals The vector values are chosen from when conditions are
2208/// false.
2209
2210template <typename T>
2211_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2212vector<T, 2> select(vector<bool, 2>, vector<T, 2>, vector<T, 2>);
2213
2214template <typename T>
2215_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2216vector<T, 3> select(vector<bool, 3>, vector<T, 3>, vector<T, 3>);
2217
2218template <typename T>
2219_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2220vector<T, 4> select(vector<bool, 4>, vector<T, 4>, vector<T, 4>);
2221
2222/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, T TrueVal,
2223/// vector<T,Sz> FalseVals)
2224/// \brief ternary operator for vectors. All vectors must be the same size.
2225/// \param Conds The Condition input values.
2226/// \param TrueVal The scalar value to splat from when conditions are true.
2227/// \param FalseVals The vector values are chosen from when conditions are
2228/// false.
2229
2230template <typename T>
2231_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2232vector<T, 2> select(vector<bool, 2>, T, vector<T, 2>);
2233
2234template <typename T>
2235_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2236vector<T, 3> select(vector<bool, 3>, T, vector<T, 3>);
2237
2238template <typename T>
2239_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2240vector<T, 4> select(vector<bool, 4>, T, vector<T, 4>);
2241
2242/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2243/// T FalseVal)
2244/// \brief ternary operator for vectors. All vectors must be the same size.
2245/// \param Conds The Condition input values.
2246/// \param TrueVals The vector values are chosen from when conditions are true.
2247/// \param FalseVal The scalar value to splat from when conditions are false.
2248
2249template <typename T>
2250_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2251vector<T, 2> select(vector<bool, 2>, vector<T, 2>, T);
2252
2253template <typename T>
2254_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2255vector<T, 3> select(vector<bool, 3>, vector<T, 3>, T);
2256
2257template <typename T>
2258_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2259vector<T, 4> select(vector<bool, 4>, vector<T, 4>, T);
2260
2261/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2262/// T FalseVal)
2263/// \brief ternary operator for vectors. All vectors must be the same size.
2264/// \param Conds The Condition input values.
2265/// \param TrueVal The scalar value to splat from when conditions are true.
2266/// \param FalseVal The scalar value to splat from when conditions are false.
2267
2268template <typename T>
2269_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2270__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 2>> select(
2271 vector<bool, 2>, T, T);
2272
2273template <typename T>
2274_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2275__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 3>> select(
2276 vector<bool, 3>, T, T);
2277
2278template <typename T>
2279_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2280__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 4>> select(
2281 vector<bool, 4>, T, T);
2282
2283//===----------------------------------------------------------------------===//
2284// sin builtins
2285//===----------------------------------------------------------------------===//
2286
2287/// \fn T sin(T Val)
2288/// \brief Returns the sine of the input value, \a Val.
2289/// \param Val The input value.
2290
2292_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2293half sin(half);
2295_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2298_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2301_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2303
2304_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2305float sin(float);
2306_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2308_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2310_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2312
2313//===----------------------------------------------------------------------===//
2314// sinh builtins
2315//===----------------------------------------------------------------------===//
2316
2317/// \fn T sinh(T Val)
2318/// \brief Returns the hyperbolic sine of the input value, \a Val.
2319/// \param Val The input value.
2320
2322_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2323half sinh(half);
2325_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2328_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2331_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2333
2334_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2335float sinh(float);
2336_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2338_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2340_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2342
2343//===----------------------------------------------------------------------===//
2344// sqrt builtins
2345//===----------------------------------------------------------------------===//
2346
2347/// \fn T sqrt(T Val)
2348/// \brief Returns the square root of the input value, \a Val.
2349/// \param Val The input value.
2350
2352_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2353half sqrt(half);
2355_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2358_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2361_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2363
2364_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2365float sqrt(float);
2366_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2368_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2370_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2372
2373//===----------------------------------------------------------------------===//
2374// step builtins
2375//===----------------------------------------------------------------------===//
2376
2377/// \fn T step(T y, T x)
2378/// \brief Returns 1 if the x parameter is greater than or equal to the y
2379/// parameter; otherwise, 0. vector. \param y [in] The first floating-point
2380/// value to compare. \param x [in] The second floating-point value to compare.
2381///
2382/// Step is based on the following formula: (x >= y) ? 1 : 0
2383
2385_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2386half step(half, half);
2388_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2391_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2394_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2396
2397_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2398float step(float, float);
2399_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2401_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2403_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2405
2406//===----------------------------------------------------------------------===//
2407// tan builtins
2408//===----------------------------------------------------------------------===//
2409
2410/// \fn T tan(T Val)
2411/// \brief Returns the tangent of the input value, \a Val.
2412/// \param Val The input value.
2413
2415_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2416half tan(half);
2418_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2421_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2424_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2426
2427_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2428float tan(float);
2429_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2431_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2433_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2435
2436//===----------------------------------------------------------------------===//
2437// tanh builtins
2438//===----------------------------------------------------------------------===//
2439
2440/// \fn T tanh(T Val)
2441/// \brief Returns the hyperbolic tangent of the input value, \a Val.
2442/// \param Val The input value.
2443
2445_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2446half tanh(half);
2448_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2451_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2454_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2456
2457_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2458float tanh(float);
2459_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2461_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2463_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2465
2466//===----------------------------------------------------------------------===//
2467// trunc builtins
2468//===----------------------------------------------------------------------===//
2469
2470/// \fn T trunc(T Val)
2471/// \brief Returns the truncated integer value of the input value, \a Val.
2472/// \param Val The input value.
2473
2475_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2476half trunc(half);
2478_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2481_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2484_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2486
2487_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2488float trunc(float);
2489_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2491_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2493_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2495
2496//===----------------------------------------------------------------------===//
2497// Wave* builtins
2498//===----------------------------------------------------------------------===//
2499
2500/// \brief Evaluates a value for all active invocations in the group. The
2501/// result is true if Value is equal for all active invocations in the
2502/// group. Otherwise, the result is false.
2503/// \param Value The value to compare with
2504/// \return True if all values across all lanes are equal, false otherwise
2506_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2507__attribute__((convergent)) bool WaveActiveAllEqual(half);
2509_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2510__attribute__((convergent)) bool2 WaveActiveAllEqual(half2);
2512_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2513__attribute__((convergent)) bool3 WaveActiveAllEqual(half3);
2515_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2516__attribute__((convergent)) bool4 WaveActiveAllEqual(half4);
2517
2518#ifdef __HLSL_ENABLE_16_BIT
2520_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2521__attribute__((convergent)) bool WaveActiveAllEqual(int16_t);
2523_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2524__attribute__((convergent)) bool2 WaveActiveAllEqual(int16_t2);
2526_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2527__attribute__((convergent)) bool3 WaveActiveAllEqual(int16_t3);
2529_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2530__attribute__((convergent)) bool4 WaveActiveAllEqual(int16_t4);
2531
2533_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2534__attribute__((convergent)) bool WaveActiveAllEqual(uint16_t);
2536_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2537__attribute__((convergent)) bool2 WaveActiveAllEqual(uint16_t2);
2539_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2540__attribute__((convergent)) bool3 WaveActiveAllEqual(uint16_t3);
2542_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2543__attribute__((convergent)) bool4 WaveActiveAllEqual(uint16_t4);
2544#endif
2545
2546_HLSL_AVAILABILITY(shadermodel, 6.0)
2547_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2548__attribute__((convergent)) bool WaveActiveAllEqual(int);
2549_HLSL_AVAILABILITY(shadermodel, 6.0)
2550_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2551__attribute__((convergent)) bool2 WaveActiveAllEqual(int2);
2552_HLSL_AVAILABILITY(shadermodel, 6.0)
2553_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2554__attribute__((convergent)) bool3 WaveActiveAllEqual(int3);
2555_HLSL_AVAILABILITY(shadermodel, 6.0)
2556_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2557__attribute__((convergent)) bool4 WaveActiveAllEqual(int4);
2558
2559_HLSL_AVAILABILITY(shadermodel, 6.0)
2560_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2561__attribute__((convergent)) bool WaveActiveAllEqual(uint);
2562_HLSL_AVAILABILITY(shadermodel, 6.0)
2563_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2564__attribute__((convergent)) bool2 WaveActiveAllEqual(uint2);
2565_HLSL_AVAILABILITY(shadermodel, 6.0)
2566_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2567__attribute__((convergent)) bool3 WaveActiveAllEqual(uint3);
2568_HLSL_AVAILABILITY(shadermodel, 6.0)
2569_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2570__attribute__((convergent)) bool4 WaveActiveAllEqual(uint4);
2571
2572_HLSL_AVAILABILITY(shadermodel, 6.0)
2573_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2574__attribute__((convergent)) bool WaveActiveAllEqual(int64_t);
2575_HLSL_AVAILABILITY(shadermodel, 6.0)
2576_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2577__attribute__((convergent)) bool2 WaveActiveAllEqual(int64_t2);
2578_HLSL_AVAILABILITY(shadermodel, 6.0)
2579_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2580__attribute__((convergent)) bool3 WaveActiveAllEqual(int64_t3);
2581_HLSL_AVAILABILITY(shadermodel, 6.0)
2582_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2583__attribute__((convergent)) bool4 WaveActiveAllEqual(int64_t4);
2584
2585_HLSL_AVAILABILITY(shadermodel, 6.0)
2586_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2587__attribute__((convergent)) bool WaveActiveAllEqual(uint64_t);
2588_HLSL_AVAILABILITY(shadermodel, 6.0)
2589_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2590__attribute__((convergent)) bool2 WaveActiveAllEqual(uint64_t2);
2591_HLSL_AVAILABILITY(shadermodel, 6.0)
2592_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2593__attribute__((convergent)) bool3 WaveActiveAllEqual(uint64_t3);
2594_HLSL_AVAILABILITY(shadermodel, 6.0)
2595_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2596__attribute__((convergent)) bool4 WaveActiveAllEqual(uint64_t4);
2597
2598_HLSL_AVAILABILITY(shadermodel, 6.0)
2599_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2600__attribute__((convergent)) bool WaveActiveAllEqual(float);
2601_HLSL_AVAILABILITY(shadermodel, 6.0)
2602_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2603__attribute__((convergent)) bool2 WaveActiveAllEqual(float2);
2604_HLSL_AVAILABILITY(shadermodel, 6.0)
2605_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2606__attribute__((convergent)) bool3 WaveActiveAllEqual(float3);
2607_HLSL_AVAILABILITY(shadermodel, 6.0)
2608_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2609__attribute__((convergent)) bool4 WaveActiveAllEqual(float4);
2610
2611_HLSL_AVAILABILITY(shadermodel, 6.0)
2612_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2613__attribute__((convergent)) bool WaveActiveAllEqual(double);
2614_HLSL_AVAILABILITY(shadermodel, 6.0)
2615_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2616__attribute__((convergent)) bool2 WaveActiveAllEqual(double2);
2617_HLSL_AVAILABILITY(shadermodel, 6.0)
2618_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2619__attribute__((convergent)) bool3 WaveActiveAllEqual(double3);
2620_HLSL_AVAILABILITY(shadermodel, 6.0)
2621_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_equal)
2622__attribute__((convergent)) bool4 WaveActiveAllEqual(double4);
2623
2624/// \brief Returns true if the expression is true in all active lanes in the
2625/// current wave.
2626///
2627/// \param Val The boolean expression to evaluate.
2628/// \return True if the expression is true in all lanes.
2629_HLSL_AVAILABILITY(shadermodel, 6.0)
2630_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_true)
2631__attribute__((convergent)) bool WaveActiveAllTrue(bool Val);
2632
2633/// \brief Returns true if the expression is true in any active lane in the
2634/// current wave.
2635///
2636/// \param Val The boolean expression to evaluate.
2637/// \return True if the expression is true in any lane.
2638_HLSL_AVAILABILITY(shadermodel, 6.0)
2639_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_any_true)
2640__attribute__((convergent)) bool WaveActiveAnyTrue(bool Val);
2641
2642/// \brief Returns a uint4 containing a bitmask of the evaluation of the
2643/// boolean expression for all active lanes in the current wave.
2644/// The least-significant bit corresponds to the lane with index zero.
2645/// The bits corresponding to inactive lanes will be zero. The bits that
2646/// are greater than or equal to WaveGetLaneCount will be zero.
2647///
2648/// \param Val The boolean expression to evaluate.
2649/// \return uint4 bitmask
2650_HLSL_AVAILABILITY(shadermodel, 6.0)
2651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_ballot)
2652__attribute__((convergent)) uint4 WaveActiveBallot(bool Val);
2653
2654/// \brief Counts the number of boolean variables which evaluate to true across
2655/// all active lanes in the current wave.
2656///
2657/// \param Val The input boolean value.
2658/// \return The number of lanes for which the boolean variable evaluates to
2659/// true, across all active lanes in the current wave.
2660_HLSL_AVAILABILITY(shadermodel, 6.0)
2661_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
2662__attribute__((convergent)) uint WaveActiveCountBits(bool Val);
2663
2664/// \brief Returns the index of the current lane within the current wave.
2665_HLSL_AVAILABILITY(shadermodel, 6.0)
2666_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
2667__attribute__((convergent)) uint WaveGetLaneIndex();
2668
2669_HLSL_AVAILABILITY(shadermodel, 6.0)
2670_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_is_first_lane)
2671__attribute__((convergent)) bool WaveIsFirstLane();
2672
2673_HLSL_AVAILABILITY(shadermodel, 6.0)
2674_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_count)
2675__attribute__((convergent)) uint WaveGetLaneCount();
2676
2677//===----------------------------------------------------------------------===//
2678// WavePrefixOp builtins
2679//===----------------------------------------------------------------------===//
2680/// \brief Returns the count of bits of Expr set to 1 on prior lanes.
2681/// \param Expr The boolean expression to evaluate.
2682/// \return the count of bits set to 1 on prior lanes.
2683_HLSL_AVAILABILITY(shadermodel, 6.0)
2684_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_count_bits)
2685__attribute__((convergent)) uint WavePrefixCountBits(bool Expr);
2686
2687//===----------------------------------------------------------------------===//
2688// WaveReadLaneAt builtins
2689//===----------------------------------------------------------------------===//
2690
2691// \brief Returns the value of the expression for the given lane index within
2692// the specified wave.
2693
2694_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2695__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t);
2696_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2697__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t);
2698_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2699__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t);
2700_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2701__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t);
2702
2703#ifdef __HLSL_ENABLE_16_BIT
2705_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2706__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t);
2708_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2709__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t);
2711_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2712__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t);
2714_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2715__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t);
2716
2718_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2719__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t);
2721_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2722__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t);
2724_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2725__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t);
2727_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2728__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t);
2729#endif
2730
2732_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2733__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t);
2735_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2736__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t);
2738_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2739__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t);
2741_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2742__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t);
2743
2744_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2745__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t);
2746_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2747__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t);
2748_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2749__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t);
2750_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2751__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t);
2752
2753_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2754__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t);
2755_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2756__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t);
2757_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2758__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t);
2759_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2760__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t);
2761
2762_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2763__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t);
2764_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2765__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t);
2766_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2767__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t);
2768_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2769__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t);
2770
2771_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2772__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t);
2773_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2774__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t);
2775_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2776__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t);
2777_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2778__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t);
2779
2780_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2781__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t);
2782_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2783__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t);
2784_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2785__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t);
2786_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2787__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t);
2788
2789_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2790__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t);
2791_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2792__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t);
2793_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2794__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t);
2795_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2796__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t);
2797
2798//===----------------------------------------------------------------------===//
2799// WaveActiveBitOr builtins
2800//===----------------------------------------------------------------------===//
2801
2802// \brief Returns the bitwise OR of all the values of <expr> across all active
2803// non-helper lanes in the current wave, and replicates it back to
2804// all active non-helper lanes.
2805
2806_HLSL_AVAILABILITY(shadermodel, 6.0)
2807_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2808__attribute__((convergent)) uint WaveActiveBitOr(uint);
2809_HLSL_AVAILABILITY(shadermodel, 6.0)
2810_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2811__attribute__((convergent)) uint2 WaveActiveBitOr(uint2);
2812_HLSL_AVAILABILITY(shadermodel, 6.0)
2813_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2814__attribute__((convergent)) uint3 WaveActiveBitOr(uint3);
2815_HLSL_AVAILABILITY(shadermodel, 6.0)
2816_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2817__attribute__((convergent)) uint4 WaveActiveBitOr(uint4);
2818
2819_HLSL_AVAILABILITY(shadermodel, 6.0)
2820_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2821__attribute__((convergent)) uint64_t WaveActiveBitOr(uint64_t);
2822_HLSL_AVAILABILITY(shadermodel, 6.0)
2823_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2824__attribute__((convergent)) uint64_t2 WaveActiveBitOr(uint64_t2);
2825_HLSL_AVAILABILITY(shadermodel, 6.0)
2826_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2827__attribute__((convergent)) uint64_t3 WaveActiveBitOr(uint64_t3);
2828_HLSL_AVAILABILITY(shadermodel, 6.0)
2829_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_or)
2830__attribute__((convergent)) uint64_t4 WaveActiveBitOr(uint64_t4);
2831
2832//===----------------------------------------------------------------------===//
2833// WaveActiveBitXor builtins
2834//===----------------------------------------------------------------------===//
2835
2836// \brief Returns the bitwise XOR of all the values of <expr> across all active
2837// non-helper lanes in the current wave, and replicates it back to
2838// all active non-helper lanes.
2839
2840_HLSL_AVAILABILITY(shadermodel, 6.0)
2841_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2842__attribute__((convergent)) uint WaveActiveBitXor(uint);
2843_HLSL_AVAILABILITY(shadermodel, 6.0)
2844_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2845__attribute__((convergent)) uint2 WaveActiveBitXor(uint2);
2846_HLSL_AVAILABILITY(shadermodel, 6.0)
2847_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2848__attribute__((convergent)) uint3 WaveActiveBitXor(uint3);
2849_HLSL_AVAILABILITY(shadermodel, 6.0)
2850_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2851__attribute__((convergent)) uint4 WaveActiveBitXor(uint4);
2852
2853_HLSL_AVAILABILITY(shadermodel, 6.0)
2854_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2855__attribute__((convergent)) uint64_t WaveActiveBitXor(uint64_t);
2856_HLSL_AVAILABILITY(shadermodel, 6.0)
2857_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2858__attribute__((convergent)) uint64_t2 WaveActiveBitXor(uint64_t2);
2859_HLSL_AVAILABILITY(shadermodel, 6.0)
2860_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2861__attribute__((convergent)) uint64_t3 WaveActiveBitXor(uint64_t3);
2862_HLSL_AVAILABILITY(shadermodel, 6.0)
2863_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_bit_xor)
2864__attribute__((convergent)) uint64_t4 WaveActiveBitXor(uint64_t4);
2865
2866//===----------------------------------------------------------------------===//
2867// WaveActiveMax builtins
2868//===----------------------------------------------------------------------===//
2869
2871_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2872__attribute__((convergent)) half WaveActiveMax(half);
2874_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2875__attribute__((convergent)) half2 WaveActiveMax(half2);
2877_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2878__attribute__((convergent)) half3 WaveActiveMax(half3);
2880_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2881__attribute__((convergent)) half4 WaveActiveMax(half4);
2882
2883#ifdef __HLSL_ENABLE_16_BIT
2885_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2886__attribute__((convergent)) int16_t WaveActiveMax(int16_t);
2888_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2889__attribute__((convergent)) int16_t2 WaveActiveMax(int16_t2);
2891_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2892__attribute__((convergent)) int16_t3 WaveActiveMax(int16_t3);
2894_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2895__attribute__((convergent)) int16_t4 WaveActiveMax(int16_t4);
2896
2898_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2899__attribute__((convergent)) uint16_t WaveActiveMax(uint16_t);
2901_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2902__attribute__((convergent)) uint16_t2 WaveActiveMax(uint16_t2);
2904_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2905__attribute__((convergent)) uint16_t3 WaveActiveMax(uint16_t3);
2907_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2908__attribute__((convergent)) uint16_t4 WaveActiveMax(uint16_t4);
2909#endif
2910
2911_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2912__attribute__((convergent)) int WaveActiveMax(int);
2913_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2914__attribute__((convergent)) int2 WaveActiveMax(int2);
2915_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2916__attribute__((convergent)) int3 WaveActiveMax(int3);
2917_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2918__attribute__((convergent)) int4 WaveActiveMax(int4);
2919
2920_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2921__attribute__((convergent)) uint WaveActiveMax(uint);
2922_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2923__attribute__((convergent)) uint2 WaveActiveMax(uint2);
2924_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2925__attribute__((convergent)) uint3 WaveActiveMax(uint3);
2926_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2927__attribute__((convergent)) uint4 WaveActiveMax(uint4);
2928
2929_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2930__attribute__((convergent)) int64_t WaveActiveMax(int64_t);
2931_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2932__attribute__((convergent)) int64_t2 WaveActiveMax(int64_t2);
2933_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2934__attribute__((convergent)) int64_t3 WaveActiveMax(int64_t3);
2935_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2936__attribute__((convergent)) int64_t4 WaveActiveMax(int64_t4);
2937
2938_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2939__attribute__((convergent)) uint64_t WaveActiveMax(uint64_t);
2940_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2941__attribute__((convergent)) uint64_t2 WaveActiveMax(uint64_t2);
2942_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2943__attribute__((convergent)) uint64_t3 WaveActiveMax(uint64_t3);
2944_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2945__attribute__((convergent)) uint64_t4 WaveActiveMax(uint64_t4);
2946
2947_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2948__attribute__((convergent)) float WaveActiveMax(float);
2949_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2950__attribute__((convergent)) float2 WaveActiveMax(float2);
2951_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2952__attribute__((convergent)) float3 WaveActiveMax(float3);
2953_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2954__attribute__((convergent)) float4 WaveActiveMax(float4);
2955
2956_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2957__attribute__((convergent)) double WaveActiveMax(double);
2958_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2959__attribute__((convergent)) double2 WaveActiveMax(double2);
2960_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2961__attribute__((convergent)) double3 WaveActiveMax(double3);
2962_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2963__attribute__((convergent)) double4 WaveActiveMax(double4);
2964
2965//===----------------------------------------------------------------------===//
2966// WaveActiveMin builtins
2967//===----------------------------------------------------------------------===//
2968
2970_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2971__attribute__((convergent)) half WaveActiveMin(half);
2973_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2974__attribute__((convergent)) half2 WaveActiveMin(half2);
2976_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2977__attribute__((convergent)) half3 WaveActiveMin(half3);
2979_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2980__attribute__((convergent)) half4 WaveActiveMin(half4);
2981
2982#ifdef __HLSL_ENABLE_16_BIT
2984_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2985__attribute__((convergent)) int16_t WaveActiveMin(int16_t);
2987_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2988__attribute__((convergent)) int16_t2 WaveActiveMin(int16_t2);
2990_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2991__attribute__((convergent)) int16_t3 WaveActiveMin(int16_t3);
2993_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2994__attribute__((convergent)) int16_t4 WaveActiveMin(int16_t4);
2995
2997_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2998__attribute__((convergent)) uint16_t WaveActiveMin(uint16_t);
3000_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3001__attribute__((convergent)) uint16_t2 WaveActiveMin(uint16_t2);
3003_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3004__attribute__((convergent)) uint16_t3 WaveActiveMin(uint16_t3);
3006_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3007__attribute__((convergent)) uint16_t4 WaveActiveMin(uint16_t4);
3008#endif
3009
3010_HLSL_AVAILABILITY(shadermodel, 6.0)
3011_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3012__attribute__((convergent)) int WaveActiveMin(int);
3013_HLSL_AVAILABILITY(shadermodel, 6.0)
3014_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3015__attribute__((convergent)) int2 WaveActiveMin(int2);
3016_HLSL_AVAILABILITY(shadermodel, 6.0)
3017_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3018__attribute__((convergent)) int3 WaveActiveMin(int3);
3019_HLSL_AVAILABILITY(shadermodel, 6.0)
3020_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3021__attribute__((convergent)) int4 WaveActiveMin(int4);
3022
3023_HLSL_AVAILABILITY(shadermodel, 6.0)
3024_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3025__attribute__((convergent)) uint WaveActiveMin(uint);
3026_HLSL_AVAILABILITY(shadermodel, 6.0)
3027_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3028__attribute__((convergent)) uint2 WaveActiveMin(uint2);
3029_HLSL_AVAILABILITY(shadermodel, 6.0)
3030_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3031__attribute__((convergent)) uint3 WaveActiveMin(uint3);
3032_HLSL_AVAILABILITY(shadermodel, 6.0)
3033_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3034__attribute__((convergent)) uint4 WaveActiveMin(uint4);
3035
3036_HLSL_AVAILABILITY(shadermodel, 6.0)
3037_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3038__attribute__((convergent)) int64_t WaveActiveMin(int64_t);
3039_HLSL_AVAILABILITY(shadermodel, 6.0)
3040_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3041__attribute__((convergent)) int64_t2 WaveActiveMin(int64_t2);
3042_HLSL_AVAILABILITY(shadermodel, 6.0)
3043_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3044__attribute__((convergent)) int64_t3 WaveActiveMin(int64_t3);
3045_HLSL_AVAILABILITY(shadermodel, 6.0)
3046_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3047__attribute__((convergent)) int64_t4 WaveActiveMin(int64_t4);
3048
3049_HLSL_AVAILABILITY(shadermodel, 6.0)
3050_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3051__attribute__((convergent)) uint64_t WaveActiveMin(uint64_t);
3052_HLSL_AVAILABILITY(shadermodel, 6.0)
3053_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3054__attribute__((convergent)) uint64_t2 WaveActiveMin(uint64_t2);
3055_HLSL_AVAILABILITY(shadermodel, 6.0)
3056_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3057__attribute__((convergent)) uint64_t3 WaveActiveMin(uint64_t3);
3058_HLSL_AVAILABILITY(shadermodel, 6.0)
3059_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3060__attribute__((convergent)) uint64_t4 WaveActiveMin(uint64_t4);
3061
3062_HLSL_AVAILABILITY(shadermodel, 6.0)
3063_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3064__attribute__((convergent)) float WaveActiveMin(float);
3065_HLSL_AVAILABILITY(shadermodel, 6.0)
3066_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3067__attribute__((convergent)) float2 WaveActiveMin(float2);
3068_HLSL_AVAILABILITY(shadermodel, 6.0)
3069_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3070__attribute__((convergent)) float3 WaveActiveMin(float3);
3071_HLSL_AVAILABILITY(shadermodel, 6.0)
3072_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3073__attribute__((convergent)) float4 WaveActiveMin(float4);
3074
3075_HLSL_AVAILABILITY(shadermodel, 6.0)
3076_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3077__attribute__((convergent)) double WaveActiveMin(double);
3078_HLSL_AVAILABILITY(shadermodel, 6.0)
3079_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3080__attribute__((convergent)) double2 WaveActiveMin(double2);
3081_HLSL_AVAILABILITY(shadermodel, 6.0)
3082_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3083__attribute__((convergent)) double3 WaveActiveMin(double3);
3084_HLSL_AVAILABILITY(shadermodel, 6.0)
3085_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
3086__attribute__((convergent)) double4 WaveActiveMin(double4);
3087
3088//===----------------------------------------------------------------------===//
3089// WaveActiveSum builtins
3090//===----------------------------------------------------------------------===//
3091
3093_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3094__attribute__((convergent)) half WaveActiveSum(half);
3096_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3097__attribute__((convergent)) half2 WaveActiveSum(half2);
3099_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3100__attribute__((convergent)) half3 WaveActiveSum(half3);
3102_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3103__attribute__((convergent)) half4 WaveActiveSum(half4);
3104
3105#ifdef __HLSL_ENABLE_16_BIT
3107_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3108__attribute__((convergent)) int16_t WaveActiveSum(int16_t);
3110_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3111__attribute__((convergent)) int16_t2 WaveActiveSum(int16_t2);
3113_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3114__attribute__((convergent)) int16_t3 WaveActiveSum(int16_t3);
3116_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3117__attribute__((convergent)) int16_t4 WaveActiveSum(int16_t4);
3118
3120_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3121__attribute__((convergent)) uint16_t WaveActiveSum(uint16_t);
3123_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3124__attribute__((convergent)) uint16_t2 WaveActiveSum(uint16_t2);
3126_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3127__attribute__((convergent)) uint16_t3 WaveActiveSum(uint16_t3);
3129_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3130__attribute__((convergent)) uint16_t4 WaveActiveSum(uint16_t4);
3131#endif
3132
3133_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3134__attribute__((convergent)) int WaveActiveSum(int);
3135_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3136__attribute__((convergent)) int2 WaveActiveSum(int2);
3137_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3138__attribute__((convergent)) int3 WaveActiveSum(int3);
3139_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3140__attribute__((convergent)) int4 WaveActiveSum(int4);
3141
3142_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3143__attribute__((convergent)) uint WaveActiveSum(uint);
3144_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3145__attribute__((convergent)) uint2 WaveActiveSum(uint2);
3146_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3147__attribute__((convergent)) uint3 WaveActiveSum(uint3);
3148_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3149__attribute__((convergent)) uint4 WaveActiveSum(uint4);
3150
3151_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3152__attribute__((convergent)) int64_t WaveActiveSum(int64_t);
3153_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3154__attribute__((convergent)) int64_t2 WaveActiveSum(int64_t2);
3155_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3156__attribute__((convergent)) int64_t3 WaveActiveSum(int64_t3);
3157_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3158__attribute__((convergent)) int64_t4 WaveActiveSum(int64_t4);
3159
3160_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3161__attribute__((convergent)) uint64_t WaveActiveSum(uint64_t);
3162_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3163__attribute__((convergent)) uint64_t2 WaveActiveSum(uint64_t2);
3164_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3165__attribute__((convergent)) uint64_t3 WaveActiveSum(uint64_t3);
3166_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3167__attribute__((convergent)) uint64_t4 WaveActiveSum(uint64_t4);
3168
3169_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3170__attribute__((convergent)) float WaveActiveSum(float);
3171_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3172__attribute__((convergent)) float2 WaveActiveSum(float2);
3173_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3174__attribute__((convergent)) float3 WaveActiveSum(float3);
3175_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3176__attribute__((convergent)) float4 WaveActiveSum(float4);
3177
3178_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3179__attribute__((convergent)) double WaveActiveSum(double);
3180_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3181__attribute__((convergent)) double2 WaveActiveSum(double2);
3182_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3183__attribute__((convergent)) double3 WaveActiveSum(double3);
3184_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
3185__attribute__((convergent)) double4 WaveActiveSum(double4);
3186
3187//===----------------------------------------------------------------------===//
3188// WaveActiveProduct builtins
3189//===----------------------------------------------------------------------===//
3190
3192_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3193__attribute__((convergent)) half WaveActiveProduct(half);
3195_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3196__attribute__((convergent)) half2 WaveActiveProduct(half2);
3198_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3199__attribute__((convergent)) half3 WaveActiveProduct(half3);
3201_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3202__attribute__((convergent)) half4 WaveActiveProduct(half4);
3203
3204#ifdef __HLSL_ENABLE_16_BIT
3206_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3207__attribute__((convergent)) int16_t WaveActiveProduct(int16_t);
3209_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3210__attribute__((convergent)) int16_t2 WaveActiveProduct(int16_t2);
3212_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3213__attribute__((convergent)) int16_t3 WaveActiveProduct(int16_t3);
3215_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3216__attribute__((convergent)) int16_t4 WaveActiveProduct(int16_t4);
3217
3219_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3220__attribute__((convergent)) uint16_t WaveActiveProduct(uint16_t);
3222_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3223__attribute__((convergent)) uint16_t2 WaveActiveProduct(uint16_t2);
3225_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3226__attribute__((convergent)) uint16_t3 WaveActiveProduct(uint16_t3);
3228_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3229__attribute__((convergent)) uint16_t4 WaveActiveProduct(uint16_t4);
3230#endif
3231
3232_HLSL_AVAILABILITY(shadermodel, 6.0)
3233_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3234__attribute__((convergent)) int WaveActiveProduct(int);
3235_HLSL_AVAILABILITY(shadermodel, 6.0)
3236_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3237__attribute__((convergent)) int2 WaveActiveProduct(int2);
3238_HLSL_AVAILABILITY(shadermodel, 6.0)
3239_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3240__attribute__((convergent)) int3 WaveActiveProduct(int3);
3241_HLSL_AVAILABILITY(shadermodel, 6.0)
3242_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3243__attribute__((convergent)) int4 WaveActiveProduct(int4);
3244
3245_HLSL_AVAILABILITY(shadermodel, 6.0)
3246_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3247__attribute__((convergent)) uint WaveActiveProduct(uint);
3248_HLSL_AVAILABILITY(shadermodel, 6.0)
3249_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3250__attribute__((convergent)) uint2 WaveActiveProduct(uint2);
3251_HLSL_AVAILABILITY(shadermodel, 6.0)
3252_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3253__attribute__((convergent)) uint3 WaveActiveProduct(uint3);
3254_HLSL_AVAILABILITY(shadermodel, 6.0)
3255_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3256__attribute__((convergent)) uint4 WaveActiveProduct(uint4);
3257
3258_HLSL_AVAILABILITY(shadermodel, 6.0)
3259_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3260__attribute__((convergent)) int64_t WaveActiveProduct(int64_t);
3261_HLSL_AVAILABILITY(shadermodel, 6.0)
3262_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3263__attribute__((convergent)) int64_t2 WaveActiveProduct(int64_t2);
3264_HLSL_AVAILABILITY(shadermodel, 6.0)
3265_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3266__attribute__((convergent)) int64_t3 WaveActiveProduct(int64_t3);
3267_HLSL_AVAILABILITY(shadermodel, 6.0)
3268_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3269__attribute__((convergent)) int64_t4 WaveActiveProduct(int64_t4);
3270
3271_HLSL_AVAILABILITY(shadermodel, 6.0)
3272_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3273__attribute__((convergent)) uint64_t WaveActiveProduct(uint64_t);
3274_HLSL_AVAILABILITY(shadermodel, 6.0)
3275_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3276__attribute__((convergent)) uint64_t2 WaveActiveProduct(uint64_t2);
3277_HLSL_AVAILABILITY(shadermodel, 6.0)
3278_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3279__attribute__((convergent)) uint64_t3 WaveActiveProduct(uint64_t3);
3280_HLSL_AVAILABILITY(shadermodel, 6.0)
3281_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3282__attribute__((convergent)) uint64_t4 WaveActiveProduct(uint64_t4);
3283
3284_HLSL_AVAILABILITY(shadermodel, 6.0)
3285_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3286__attribute__((convergent)) float WaveActiveProduct(float);
3287_HLSL_AVAILABILITY(shadermodel, 6.0)
3288_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3289__attribute__((convergent)) float2 WaveActiveProduct(float2);
3290_HLSL_AVAILABILITY(shadermodel, 6.0)
3291_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3292__attribute__((convergent)) float3 WaveActiveProduct(float3);
3293_HLSL_AVAILABILITY(shadermodel, 6.0)
3294_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3295__attribute__((convergent)) float4 WaveActiveProduct(float4);
3296
3297_HLSL_AVAILABILITY(shadermodel, 6.0)
3298_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3299__attribute__((convergent)) double WaveActiveProduct(double);
3300_HLSL_AVAILABILITY(shadermodel, 6.0)
3301_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3302__attribute__((convergent)) double2 WaveActiveProduct(double2);
3303_HLSL_AVAILABILITY(shadermodel, 6.0)
3304_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3305__attribute__((convergent)) double3 WaveActiveProduct(double3);
3306_HLSL_AVAILABILITY(shadermodel, 6.0)
3307_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_product)
3308__attribute__((convergent)) double4 WaveActiveProduct(double4);
3309
3310//===----------------------------------------------------------------------===//
3311// WavePrefixSum builtins
3312//===----------------------------------------------------------------------===//
3313
3315_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3316__attribute__((convergent)) half WavePrefixSum(half);
3318_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3319__attribute__((convergent)) half2 WavePrefixSum(half2);
3321_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3322__attribute__((convergent)) half3 WavePrefixSum(half3);
3324_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3325__attribute__((convergent)) half4 WavePrefixSum(half4);
3326
3327#ifdef __HLSL_ENABLE_16_BIT
3329_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3330__attribute__((convergent)) int16_t WavePrefixSum(int16_t);
3332_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3333__attribute__((convergent)) int16_t2 WavePrefixSum(int16_t2);
3335_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3336__attribute__((convergent)) int16_t3 WavePrefixSum(int16_t3);
3338_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3339__attribute__((convergent)) int16_t4 WavePrefixSum(int16_t4);
3340
3342_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3343__attribute__((convergent)) uint16_t WavePrefixSum(uint16_t);
3345_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3346__attribute__((convergent)) uint16_t2 WavePrefixSum(uint16_t2);
3348_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3349__attribute__((convergent)) uint16_t3 WavePrefixSum(uint16_t3);
3351_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3352__attribute__((convergent)) uint16_t4 WavePrefixSum(uint16_t4);
3353#endif
3354
3355_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3356__attribute__((convergent)) int WavePrefixSum(int);
3357_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3358__attribute__((convergent)) int2 WavePrefixSum(int2);
3359_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3360__attribute__((convergent)) int3 WavePrefixSum(int3);
3361_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3362__attribute__((convergent)) int4 WavePrefixSum(int4);
3363
3364_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3365__attribute__((convergent)) uint WavePrefixSum(uint);
3366_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3367__attribute__((convergent)) uint2 WavePrefixSum(uint2);
3368_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3369__attribute__((convergent)) uint3 WavePrefixSum(uint3);
3370_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3371__attribute__((convergent)) uint4 WavePrefixSum(uint4);
3372
3373_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3374__attribute__((convergent)) int64_t WavePrefixSum(int64_t);
3375_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3376__attribute__((convergent)) int64_t2 WavePrefixSum(int64_t2);
3377_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3378__attribute__((convergent)) int64_t3 WavePrefixSum(int64_t3);
3379_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3380__attribute__((convergent)) int64_t4 WavePrefixSum(int64_t4);
3381
3382_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3383__attribute__((convergent)) uint64_t WavePrefixSum(uint64_t);
3384_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3385__attribute__((convergent)) uint64_t2 WavePrefixSum(uint64_t2);
3386_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3387__attribute__((convergent)) uint64_t3 WavePrefixSum(uint64_t3);
3388_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3389__attribute__((convergent)) uint64_t4 WavePrefixSum(uint64_t4);
3390
3391_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3392__attribute__((convergent)) float WavePrefixSum(float);
3393_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3394__attribute__((convergent)) float2 WavePrefixSum(float2);
3395_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3396__attribute__((convergent)) float3 WavePrefixSum(float3);
3397_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3398__attribute__((convergent)) float4 WavePrefixSum(float4);
3399
3400_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3401__attribute__((convergent)) double WavePrefixSum(double);
3402_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3403__attribute__((convergent)) double2 WavePrefixSum(double2);
3404_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3405__attribute__((convergent)) double3 WavePrefixSum(double3);
3406_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_sum)
3407__attribute__((convergent)) double4 WavePrefixSum(double4);
3408
3409//===----------------------------------------------------------------------===//
3410// WavePrefixProduct builtins
3411//===----------------------------------------------------------------------===//
3412
3414_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3415__attribute__((convergent)) half WavePrefixProduct(half);
3417_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3418__attribute__((convergent)) half2 WavePrefixProduct(half2);
3420_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3421__attribute__((convergent)) half3 WavePrefixProduct(half3);
3423_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3424__attribute__((convergent)) half4 WavePrefixProduct(half4);
3425
3426#ifdef __HLSL_ENABLE_16_BIT
3428_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3429__attribute__((convergent)) int16_t WavePrefixProduct(int16_t);
3431_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3432__attribute__((convergent)) int16_t2 WavePrefixProduct(int16_t2);
3434_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3435__attribute__((convergent)) int16_t3 WavePrefixProduct(int16_t3);
3437_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3438__attribute__((convergent)) int16_t4 WavePrefixProduct(int16_t4);
3439
3441_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3442__attribute__((convergent)) uint16_t WavePrefixProduct(uint16_t);
3444_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3445__attribute__((convergent)) uint16_t2 WavePrefixProduct(uint16_t2);
3447_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3448__attribute__((convergent)) uint16_t3 WavePrefixProduct(uint16_t3);
3450_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3451__attribute__((convergent)) uint16_t4 WavePrefixProduct(uint16_t4);
3452#endif
3453
3454_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3455__attribute__((convergent)) int WavePrefixProduct(int);
3456_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3457__attribute__((convergent)) int2 WavePrefixProduct(int2);
3458_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3459__attribute__((convergent)) int3 WavePrefixProduct(int3);
3460_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3461__attribute__((convergent)) int4 WavePrefixProduct(int4);
3462
3463_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3464__attribute__((convergent)) uint WavePrefixProduct(uint);
3465_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3466__attribute__((convergent)) uint2 WavePrefixProduct(uint2);
3467_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3468__attribute__((convergent)) uint3 WavePrefixProduct(uint3);
3469_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3470__attribute__((convergent)) uint4 WavePrefixProduct(uint4);
3471
3472_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3473__attribute__((convergent)) int64_t WavePrefixProduct(int64_t);
3474_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3475__attribute__((convergent)) int64_t2 WavePrefixProduct(int64_t2);
3476_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3477__attribute__((convergent)) int64_t3 WavePrefixProduct(int64_t3);
3478_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3479__attribute__((convergent)) int64_t4 WavePrefixProduct(int64_t4);
3480
3481_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3482__attribute__((convergent)) uint64_t WavePrefixProduct(uint64_t);
3483_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3484__attribute__((convergent)) uint64_t2 WavePrefixProduct(uint64_t2);
3485_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3486__attribute__((convergent)) uint64_t3 WavePrefixProduct(uint64_t3);
3487_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3488__attribute__((convergent)) uint64_t4 WavePrefixProduct(uint64_t4);
3489
3490_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3491__attribute__((convergent)) float WavePrefixProduct(float);
3492_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3493__attribute__((convergent)) float2 WavePrefixProduct(float2);
3494_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3495__attribute__((convergent)) float3 WavePrefixProduct(float3);
3496_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3497__attribute__((convergent)) float4 WavePrefixProduct(float4);
3498
3499_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3500__attribute__((convergent)) double WavePrefixProduct(double);
3501_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3502__attribute__((convergent)) double2 WavePrefixProduct(double2);
3503_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3504__attribute__((convergent)) double3 WavePrefixProduct(double3);
3505_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_prefix_product)
3506__attribute__((convergent)) double4 WavePrefixProduct(double4);
3507
3508//===----------------------------------------------------------------------===//
3509// QuadReadAcrossX builtins
3510//===----------------------------------------------------------------------===//
3511
3513_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3514__attribute__((convergent)) half QuadReadAcrossX(half);
3516_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3517__attribute__((convergent)) half2 QuadReadAcrossX(half2);
3519_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3520__attribute__((convergent)) half3 QuadReadAcrossX(half3);
3522_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3523__attribute__((convergent)) half4 QuadReadAcrossX(half4);
3524
3525#ifdef __HLSL_ENABLE_16_BIT
3527_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3528__attribute__((convergent)) int16_t QuadReadAcrossX(int16_t);
3530_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3531__attribute__((convergent)) int16_t2 QuadReadAcrossX(int16_t2);
3533_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3534__attribute__((convergent)) int16_t3 QuadReadAcrossX(int16_t3);
3536_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3537__attribute__((convergent)) int16_t4 QuadReadAcrossX(int16_t4);
3538
3540_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3541__attribute__((convergent)) uint16_t QuadReadAcrossX(uint16_t);
3543_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3544__attribute__((convergent)) uint16_t2 QuadReadAcrossX(uint16_t2);
3546_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3547__attribute__((convergent)) uint16_t3 QuadReadAcrossX(uint16_t3);
3549_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3550__attribute__((convergent)) uint16_t4 QuadReadAcrossX(uint16_t4);
3551#endif
3552
3553_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3554__attribute__((convergent)) int QuadReadAcrossX(int);
3555_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3556__attribute__((convergent)) int2 QuadReadAcrossX(int2);
3557_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3558__attribute__((convergent)) int3 QuadReadAcrossX(int3);
3559_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3560__attribute__((convergent)) int4 QuadReadAcrossX(int4);
3561
3562_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3563__attribute__((convergent)) uint QuadReadAcrossX(uint);
3564_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3565__attribute__((convergent)) uint2 QuadReadAcrossX(uint2);
3566_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3567__attribute__((convergent)) uint3 QuadReadAcrossX(uint3);
3568_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3569__attribute__((convergent)) uint4 QuadReadAcrossX(uint4);
3570
3571_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3572__attribute__((convergent)) int64_t QuadReadAcrossX(int64_t);
3573_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3574__attribute__((convergent)) int64_t2 QuadReadAcrossX(int64_t2);
3575_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3576__attribute__((convergent)) int64_t3 QuadReadAcrossX(int64_t3);
3577_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3578__attribute__((convergent)) int64_t4 QuadReadAcrossX(int64_t4);
3579
3580_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3581__attribute__((convergent)) uint64_t QuadReadAcrossX(uint64_t);
3582_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3583__attribute__((convergent)) uint64_t2 QuadReadAcrossX(uint64_t2);
3584_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3585__attribute__((convergent)) uint64_t3 QuadReadAcrossX(uint64_t3);
3586_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3587__attribute__((convergent)) uint64_t4 QuadReadAcrossX(uint64_t4);
3588
3589_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3590__attribute__((convergent)) float QuadReadAcrossX(float);
3591_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3592__attribute__((convergent)) float2 QuadReadAcrossX(float2);
3593_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3594__attribute__((convergent)) float3 QuadReadAcrossX(float3);
3595_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3596__attribute__((convergent)) float4 QuadReadAcrossX(float4);
3597
3598_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3599__attribute__((convergent)) double QuadReadAcrossX(double);
3600_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3601__attribute__((convergent)) double2 QuadReadAcrossX(double2);
3602_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3603__attribute__((convergent)) double3 QuadReadAcrossX(double3);
3604_HLSL_BUILTIN_ALIAS(__builtin_hlsl_quad_read_across_x)
3605__attribute__((convergent)) double4 QuadReadAcrossX(double4);
3606
3607//===----------------------------------------------------------------------===//
3608// sign builtins
3609//===----------------------------------------------------------------------===//
3610
3611/// \fn T sign(T Val)
3612/// \brief Returns -1 if \a Val is less than zero; 0 if \a Val equals zero; and
3613/// 1 if \a Val is greater than zero. \param Val The input value.
3614
3615#ifdef __HLSL_ENABLE_16_BIT
3617_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3618int sign(int16_t);
3620_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3621int2 sign(int16_t2);
3623_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3624int3 sign(int16_t3);
3626_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3627int4 sign(int16_t4);
3628
3630_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3631int sign(uint16_t);
3633_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3634int2 sign(uint16_t2);
3636_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3637int3 sign(uint16_t3);
3639_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3640int4 sign(uint16_t4);
3641#endif
3642
3644_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3645int sign(half);
3647_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3650_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3653_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3655
3656_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3657int sign(int);
3658_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3660_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3662_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3664
3665_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3667_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3669_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3671_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3673
3674_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3675int sign(float);
3676_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3678_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3680_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3682
3683_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3685_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3687_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3689_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3691
3692_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3694_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3696_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3698_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3700
3701_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3702int sign(double);
3703_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3705_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3707_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
3709
3710//===----------------------------------------------------------------------===//
3711// radians builtins
3712//===----------------------------------------------------------------------===//
3713
3714/// \fn T radians(T Val)
3715/// \brief Converts the specified value from degrees to radians.
3716
3718_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3719half radians(half);
3721_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3724_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3727_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3729
3730_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3731float radians(float);
3732_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3734_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3736_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
3738
3739//===----------------------------------------------------------------------===//
3740// GroupMemoryBarrierWithGroupSync builtins
3741//===----------------------------------------------------------------------===//
3742
3743/// \fn void GroupMemoryBarrierWithGroupSync(void)
3744/// \brief Blocks execution of all threads in a group until all group shared
3745/// accesses have been completed and all threads in the group have reached this
3746/// call.
3747
3748_HLSL_BUILTIN_ALIAS(__builtin_hlsl_group_memory_barrier_with_group_sync)
3749__attribute__((convergent)) void GroupMemoryBarrierWithGroupSync(void);
3750
3751//===----------------------------------------------------------------------===//
3752// ddx_coarse builtin
3753//===----------------------------------------------------------------------===//
3754
3755/// \fn T ddx_coarse(T value)
3756/// \brief Computes a low precision partial derivative with respect to the
3757/// screen-space x-coordinate.
3758/// \param value The input value.
3759///
3760/// The return value is a floating point scalar or vector containing the low
3761/// prevision partial derivative of the input value.
3762
3764_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3765half ddx_coarse(half);
3767_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3770_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3773_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3775
3776_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3777float ddx_coarse(float);
3778_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3780_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3782_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_coarse)
3784
3785//===----------------------------------------------------------------------===//
3786// ddy_coarse builtin
3787//===----------------------------------------------------------------------===//
3788
3789/// \fn T ddy_coarse(T value)
3790/// \brief Computes a low precision partial derivative with respect to the
3791/// screen-space y-coordinate.
3792/// \param value The input value.
3793///
3794/// The return value is a floating point scalar or vector containing the low
3795/// prevision partial derivative of the input value.
3796
3798_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3799half ddy_coarse(half);
3801_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3804_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3807_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3809
3810_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3811float ddy_coarse(float);
3812_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3814_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3816_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_coarse)
3818
3819//===----------------------------------------------------------------------===//
3820// ddx_fine builtin
3821//===----------------------------------------------------------------------===//
3822
3823/// \fn T ddx_fine(T value)
3824/// \brief Computes a high precision partial derivative with respect to the
3825/// screen-space x-coordinate.
3826/// \param value The input value.
3827///
3828/// The return value is a floating point scalar or vector containing the high
3829/// prevision partial derivative of the input value.
3830
3832_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3833half ddx_fine(half);
3835_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3838_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3841_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3843
3844_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3845float ddx_fine(float);
3846_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3848_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3850_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddx_fine)
3852
3853//===----------------------------------------------------------------------===//
3854// ddy_fine builtin
3855//===----------------------------------------------------------------------===//
3856
3857/// \fn T ddy_fine(T value)
3858/// \brief Computes a high precision partial derivative with respect to the
3859/// screen-space y-coordinate.
3860/// \param value The input value.
3861///
3862/// The return value is a floating point scalar or vector containing the high
3863/// prevision partial derivative of the input value.
3864
3866_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3867half ddy_fine(half);
3869_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3872_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3875_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3877
3878_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3879float ddy_fine(float);
3880_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3882_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3884_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_ddy_fine)
3886
3887} // namespace hlsl
3888#endif //_HLSL_HLSL_ALIAS_INTRINSICS_H_
#define V(N, I)
__DEVICE__ long long abs(long long __n)
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
__device__ double
__device__ float
#define _HLSL_BUILTIN_ALIAS(builtin)
#define _HLSL_AVAILABILITY(platform, version)
#define _HLSL_16BIT_AVAILABILITY(environment, version)
#define _HLSL_16BIT_AVAILABILITY_SHADERMODEL_DEFAULT()
half ddx_coarse(half)
_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mul) vector< half
half sinh(half)
int sign(half)
unsigned int uint
An unsigned 32-bit integer.
half radians(half)
double asdouble(uint, uint)
Reinterprets a cast value (two 32-bit values) into a double.
half normalize(half)
vector< half, 4 > half4
half mad(half, half, half)
bool and(bool x, bool y)
Logically ands two boolean vectors or matrices elementwise and produces a bool vector or matrix outpu...
matrix< bool, 2, 1 > bool2x1
bool any(half)
T select(bool, T, T)
ternary operator.
half acos(half)
const uint countbits(int x)
vector< half, 2 > half2
vector< uint, 2 > uint2
vector< int, 3 > int3
vector< uint64_t, 2 > uint64_t2
half rsqrt(half)
half max(half, half)
half saturate(half)
matrix< bool, 1, 4 > bool1x4
half ddy_coarse(half)
matrix< bool, 4, 1 > bool4x1
half3 cross(half3, half3)
half abs(half)
half cosh(half)
vector< float, 4 > float4
matrix< bool, 2, 3 > bool2x3
matrix< bool, 2, 2 > bool2x2
half dot(half, half)
half sin(half)
vector< int64_t, 4 > int64_t4
unsigned long uint64_t
matrix< bool, 2, 4 > bool2x4
matrix< bool, 3, 1 > bool3x1
matrix< bool, 3, 4 > bool3x4
int dot4add_i8packed(uint, uint, int)
half ddy_fine(half)
vector< uint64_t, 3 > uint64_t3
uint f32tof16(float)
Returns the float arg value converted to half in the low 16 bits of the uint return value.
matrix< bool, 3, 2 > bool3x2
half lerp(half, half, half)
half atan2(half y, half x)
half pow(half, half)
bool or(bool, bool)
Logically ors two boolean vectors or matrices elementwise and produces a bool vector or matrix output...
vector< bool, 4 > bool4
long int64_t
C mul(vector< half, R >, matrix< half, R, C >)
vector< int64_t, 3 > int64_t3
vector< int, 4 > int4
half ceil(half)
half atan(half)
void clip(float)
vector< bool, 3 > bool3
half clamp(half, half, half)
vector< uint64_t, 4 > uint64_t4
matrix< bool, 1, 2 > bool1x2
half sqrt(half)
half ddx_fine(half)
__attribute__((convergent)) bool WaveActiveAllEqual(half)
Evaluates a value for all active invocations in the group.
half step(half, half)
half cos(half)
vector< double, 3 > double3
vector< float, 2 > float2
float f16tof32(uint)
Returns the half value stored in the low 16 bits of the uint arg converted to a float.
vector< float, 3 > float3
half log(half)
vector< int64_t, 2 > int64_t2
matrix< bool, 1, 3 > bool1x3
vector< uint, 3 > uint3
half degrees(half)
half trunc(half)
vector< uint32_t, 2 > uint32_t2
half rcp(half)
half round(half)
vector< double, 4 > double4
vector< double, 2 > double2
half log10(half)
half exp2(half)
vector< bool, 2 > bool2
vector< int, 2 > int2
unsigned int uint32_t
matrix< bool, 3, 3 > bool3x3
half min(half, half)
half log2(half)
uint dot4add_u8packed(uint, uint, uint)
vector< uint, 4 > uint4
vector< half, 3 > half3
matrix< bool, 4, 2 > bool4x2
half asin(half)
vector< uint32_t, 4 > uint32_t4
half frac(half)
uint firstbitlow(int)
matrix< bool, 4, 4 > bool4x4
matrix< bool, 4, 3 > bool4x3
half tan(half)
bool isnan(half)
bool all(half)
half tanh(half)
half exp(half)
half floor(half)
bool isinf(half)
uint reversebits(uint)
uint32_t2 AddUint64(uint32_t2, uint32_t2)
R transpose(matrix< half, R, C >)