clang 22.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#else
34#define _HLSL_16BIT_AVAILABILITY(environment, version)
35#define _HLSL_16BIT_AVAILABILITY_STAGE(environment, version, stage)
36#endif
37
38//===----------------------------------------------------------------------===//
39// abs builtins
40//===----------------------------------------------------------------------===//
41
42/// \fn T abs(T Val)
43/// \brief Returns the absolute value of the input value, \a Val.
44/// \param Val The input value.
45
46#ifdef __HLSL_ENABLE_16_BIT
47_HLSL_AVAILABILITY(shadermodel, 6.2)
48_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
49int16_t abs(int16_t);
50_HLSL_AVAILABILITY(shadermodel, 6.2)
51_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
52int16_t2 abs(int16_t2);
53_HLSL_AVAILABILITY(shadermodel, 6.2)
54_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
55int16_t3 abs(int16_t3);
56_HLSL_AVAILABILITY(shadermodel, 6.2)
57_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
58int16_t4 abs(int16_t4);
59
60_HLSL_AVAILABILITY(shadermodel, 6.2)
61constexpr uint16_t abs(uint16_t V) { return V; }
62_HLSL_AVAILABILITY(shadermodel, 6.2)
63constexpr uint16_t2 abs(uint16_t2 V) { return V; }
64_HLSL_AVAILABILITY(shadermodel, 6.2)
65constexpr uint16_t3 abs(uint16_t3 V) { return V; }
66_HLSL_AVAILABILITY(shadermodel, 6.2)
67constexpr uint16_t4 abs(uint16_t4 V) { return V; }
68#endif
69
70_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
71_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
72half abs(half);
73_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
74_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
76_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
77_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
79_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
80_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
82
83_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
84int abs(int);
85_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
87_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
89_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
91
92constexpr uint abs(uint V) { return V; }
93constexpr uint2 abs(uint2 V) { return V; }
94constexpr uint3 abs(uint3 V) { return V; }
95constexpr uint4 abs(uint4 V) { return V; }
96
97_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
98float abs(float);
99_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
101_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
103_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
105
106_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
108_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
110_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
112_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
114
115constexpr uint64_t abs(uint64_t V) { return V; }
116constexpr uint64_t2 abs(uint64_t2 V) { return V; }
117constexpr uint64_t3 abs(uint64_t3 V) { return V; }
118constexpr uint64_t4 abs(uint64_t4 V) { return V; }
119
120_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
121double abs(double);
122_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
124_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
126_HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs)
128
129//===----------------------------------------------------------------------===//
130// acos builtins
131//===----------------------------------------------------------------------===//
132
133/// \fn T acos(T Val)
134/// \brief Returns the arccosine of the input value, \a Val.
135/// \param Val The input value.
136
137_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
138_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
139half acos(half);
140_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
141_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
143_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
144_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
146_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
147_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
149
150_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
151float acos(float);
152_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
154_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
156_HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos)
158
159//===----------------------------------------------------------------------===//
160// AddUint64 builtins
161//===----------------------------------------------------------------------===//
162
163/// \fn T AddUint64(T a, T b)
164/// \brief Implements unsigned 64-bit integer addition using pairs of unsigned
165/// 32-bit integers.
166/// \param x [in] The first unsigned 32-bit integer pair(s)
167/// \param y [in] The second unsigned 32-bit integer pair(s)
168///
169/// This function takes one or two pairs (low, high) of unsigned 32-bit integer
170/// values and returns pairs (low, high) of unsigned 32-bit integer
171/// values representing the result of unsigned 64-bit integer addition.
172
173_HLSL_AVAILABILITY(shadermodel, 6.0)
174_HLSL_BUILTIN_ALIAS(__builtin_hlsl_adduint64)
176_HLSL_AVAILABILITY(shadermodel, 6.0)
177_HLSL_BUILTIN_ALIAS(__builtin_hlsl_adduint64)
179
180//===----------------------------------------------------------------------===//
181// all builtins
182//===----------------------------------------------------------------------===//
183
184/// \fn bool all(T x)
185/// \brief Returns True if all components of the \a x parameter are non-zero;
186/// otherwise, false. \param x The input value.
187
188#ifdef __HLSL_ENABLE_16_BIT
189_HLSL_AVAILABILITY(shadermodel, 6.2)
190_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
191bool all(int16_t);
192_HLSL_AVAILABILITY(shadermodel, 6.2)
193_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
194bool all(int16_t2);
195_HLSL_AVAILABILITY(shadermodel, 6.2)
196_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
197bool all(int16_t3);
198_HLSL_AVAILABILITY(shadermodel, 6.2)
199_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
200bool all(int16_t4);
201_HLSL_AVAILABILITY(shadermodel, 6.2)
202_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
203bool all(uint16_t);
204_HLSL_AVAILABILITY(shadermodel, 6.2)
205_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
206bool all(uint16_t2);
207_HLSL_AVAILABILITY(shadermodel, 6.2)
208_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
209bool all(uint16_t3);
210_HLSL_AVAILABILITY(shadermodel, 6.2)
211_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
212bool all(uint16_t4);
213#endif
214
215_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
216_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
217bool all(half);
218_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
219_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
220bool all(half2);
221_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
222_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
223bool all(half3);
224_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
225_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
226bool all(half4);
227
228_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
229bool all(bool);
230_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
231bool all(bool2);
232_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
233bool all(bool3);
234_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
235bool all(bool4);
236_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
237
238_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
239bool all(int);
240_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
241bool all(int2);
242_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
243bool all(int3);
244_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
245bool all(int4);
246
247_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
248bool all(uint);
249_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
250bool all(uint2);
251_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
252bool all(uint3);
253_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
254bool all(uint4);
255
256_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
257bool all(float);
258_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
260_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
262_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
264
265_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
267_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
269_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
271_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
273
274_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
276_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
278_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
280_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
282
283_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
284bool all(double);
285_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
287_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
289_HLSL_BUILTIN_ALIAS(__builtin_hlsl_all)
291
292//===----------------------------------------------------------------------===//
293// and builtins
294//===----------------------------------------------------------------------===//
295
296/// \fn bool and(bool x, bool y)
297/// \brief Logically ands two boolean vectors elementwise and produces a bool
298/// vector output.
299
300// TODO: Clean up clang-format marker once we've resolved
301// https://github.com/llvm/llvm-project/issues/127851
302//
303// clang-format off
304_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
305bool and(bool x, bool y);
306_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
308_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
310_HLSL_BUILTIN_ALIAS(__builtin_hlsl_and)
312// clang-format on
313
314//===----------------------------------------------------------------------===//
315// any builtins
316//===----------------------------------------------------------------------===//
317
318/// \fn bool any(T x)
319/// \brief Returns True if any components of the \a x parameter are non-zero;
320/// otherwise, false. \param x The input value.
321
322#ifdef __HLSL_ENABLE_16_BIT
323_HLSL_AVAILABILITY(shadermodel, 6.2)
324_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
325bool any(int16_t);
326_HLSL_AVAILABILITY(shadermodel, 6.2)
327_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
328bool any(int16_t2);
329_HLSL_AVAILABILITY(shadermodel, 6.2)
330_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
331bool any(int16_t3);
332_HLSL_AVAILABILITY(shadermodel, 6.2)
333_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
334bool any(int16_t4);
335_HLSL_AVAILABILITY(shadermodel, 6.2)
336_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
337bool any(uint16_t);
338_HLSL_AVAILABILITY(shadermodel, 6.2)
339_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
340bool any(uint16_t2);
341_HLSL_AVAILABILITY(shadermodel, 6.2)
342_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
343bool any(uint16_t3);
344_HLSL_AVAILABILITY(shadermodel, 6.2)
345_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
346bool any(uint16_t4);
347#endif
348
349_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
350_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
351bool any(half);
352_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
353_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
354bool any(half2);
355_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
356_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
357bool any(half3);
358_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
359_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
360bool any(half4);
361
362_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
363bool any(bool);
364_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
365bool any(bool2);
366_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
367bool any(bool3);
368_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
369bool any(bool4);
370_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
371
372_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
373bool any(int);
374_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
375bool any(int2);
376_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
377bool any(int3);
378_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
379bool any(int4);
380
381_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
382bool any(uint);
383_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
384bool any(uint2);
385_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
386bool any(uint3);
387_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
388bool any(uint4);
389
390_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
391bool any(float);
392_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
394_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
396_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
398
399_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
401_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
403_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
405_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
407
408_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
410_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
412_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
414_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
416
417_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
418bool any(double);
419_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
421_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
423_HLSL_BUILTIN_ALIAS(__builtin_hlsl_any)
425
426//===----------------------------------------------------------------------===//
427// asdouble builtins
428//===----------------------------------------------------------------------===//
429
430/// \fn double asdouble(uint LowBits, uint HighBits)
431/// \brief Reinterprets a cast value (two 32-bit values) into a double.
432/// \param LowBits The low 32-bit pattern of the input value.
433/// \param HighBits The high 32-bit pattern of the input value.
434
435_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
437_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
439_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
441_HLSL_BUILTIN_ALIAS(__builtin_hlsl_asdouble)
443
444//===----------------------------------------------------------------------===//
445// asin builtins
446//===----------------------------------------------------------------------===//
447
448/// \fn T asin(T Val)
449/// \brief Returns the arcsine of the input value, \a Val.
450/// \param Val The input value.
451
452_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
453_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
454half asin(half);
455_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
456_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
458_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
459_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
461_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
462_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
464
465_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
466float asin(float);
467_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
469_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
471_HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin)
473
474//===----------------------------------------------------------------------===//
475// atan builtins
476//===----------------------------------------------------------------------===//
477
478/// \fn T atan(T Val)
479/// \brief Returns the arctangent of the input value, \a Val.
480/// \param Val The input value.
481
482_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
483_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
484half atan(half);
485_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
486_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
488_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
489_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
491_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
492_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
494
495_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
496float atan(float);
497_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
499_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
501_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan)
503
504//===----------------------------------------------------------------------===//
505// atan2 builtins
506//===----------------------------------------------------------------------===//
507
508/// \fn T atan2(T y, T x)
509/// \brief Returns the arctangent of y/x, using the signs of the arguments to
510/// determine the correct quadrant.
511/// \param y The y-coordinate.
512/// \param x The x-coordinate.
513
514_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
515_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
516half atan2(half y, half x);
517_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
518_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
520_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
521_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
523_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
524_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
526
527_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
528float atan2(float y, float x);
529_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
531_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
533_HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan2)
535
536//===----------------------------------------------------------------------===//
537// ceil builtins
538//===----------------------------------------------------------------------===//
539
540/// \fn T ceil(T Val)
541/// \brief Returns the smallest integer value that is greater than or equal to
542/// the input value, \a Val.
543/// \param Val The input value.
544
545_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
546_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
547half ceil(half);
548_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
549_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
551_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
552_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
554_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
555_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
557
558_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
559float ceil(float);
560_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
562_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
564_HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil)
566
567//===----------------------------------------------------------------------===//
568// clamp builtins
569//===----------------------------------------------------------------------===//
570
571/// \fn T clamp(T X, T Min, T Max)
572/// \brief Clamps the specified value \a X to the specified
573/// minimum ( \a Min) and maximum ( \a Max) range.
574/// \param X A value to clamp.
575/// \param Min The specified minimum range.
576/// \param Max The specified maximum range.
577///
578/// Returns The clamped value for the \a X parameter.
579/// For values of -INF or INF, clamp will behave as expected.
580/// However for values of NaN, the results are undefined.
581
582_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
583_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
584half clamp(half, half, half);
585_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
586_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
588_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
589_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
591_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
592_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
594
595#ifdef __HLSL_ENABLE_16_BIT
596_HLSL_AVAILABILITY(shadermodel, 6.2)
597_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
598int16_t clamp(int16_t, int16_t, int16_t);
599_HLSL_AVAILABILITY(shadermodel, 6.2)
600_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
601int16_t2 clamp(int16_t2, int16_t2, int16_t2);
602_HLSL_AVAILABILITY(shadermodel, 6.2)
603_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
604int16_t3 clamp(int16_t3, int16_t3, int16_t3);
605_HLSL_AVAILABILITY(shadermodel, 6.2)
606_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
607int16_t4 clamp(int16_t4, int16_t4, int16_t4);
608
609_HLSL_AVAILABILITY(shadermodel, 6.2)
610_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
611uint16_t clamp(uint16_t, uint16_t, uint16_t);
612_HLSL_AVAILABILITY(shadermodel, 6.2)
613_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
614uint16_t2 clamp(uint16_t2, uint16_t2, uint16_t2);
615_HLSL_AVAILABILITY(shadermodel, 6.2)
616_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
617uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3);
618_HLSL_AVAILABILITY(shadermodel, 6.2)
619_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
620uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4);
621#endif
622
623_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
624int clamp(int, int, int);
625_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
627_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
629_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
631
632_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
634_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
636_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
638_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
640
641_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
643_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
645_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
647_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
649
650_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
652_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
654_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
656_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
658
659_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
660float clamp(float, float, float);
661_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
663_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
665_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
667
668_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
669double clamp(double, double, double);
670_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
672_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
674_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp)
676
677//===----------------------------------------------------------------------===//
678// clip builtins
679//===----------------------------------------------------------------------===//
680
681/// \fn void clip(T Val)
682/// \brief Discards the current pixel if the specified value is less than zero.
683/// \param Val The input value.
684
685_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
686void clip(float);
687_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
689_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
691_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clip)
693
694//===----------------------------------------------------------------------===//
695// cos builtins
696//===----------------------------------------------------------------------===//
697
698/// \fn T cos(T Val)
699/// \brief Returns the cosine of the input value, \a Val.
700/// \param Val The input value.
701
702_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
703_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
704half cos(half);
705_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
706_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
708_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
709_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
711_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
712_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
714
715_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
716float cos(float);
717_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
719_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
721_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos)
723
724//===----------------------------------------------------------------------===//
725// cosh builtins
726//===----------------------------------------------------------------------===//
727
728/// \fn T cosh(T Val)
729/// \brief Returns the hyperbolic cosine of the input value, \a Val.
730/// \param Val The input value.
731
732_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
733_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
734half cosh(half);
735_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
736_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
738_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
739_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
741_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
742_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
744
745_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
746float cosh(float);
747_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
749_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
751_HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh)
753
754//===----------------------------------------------------------------------===//
755// count bits builtins
756//===----------------------------------------------------------------------===//
757
758/// \fn T countbits(T Val)
759/// \brief Return the number of bits (per component) set in the input integer.
760/// \param Val The input value.
761
762#ifdef __HLSL_ENABLE_16_BIT
763_HLSL_AVAILABILITY(shadermodel, 6.2)
764const inline uint countbits(int16_t x) {
765 return __builtin_elementwise_popcount(x);
766}
767_HLSL_AVAILABILITY(shadermodel, 6.2)
768const inline uint2 countbits(int16_t2 x) {
769 return __builtin_elementwise_popcount(x);
770}
771_HLSL_AVAILABILITY(shadermodel, 6.2)
772const inline uint3 countbits(int16_t3 x) {
773 return __builtin_elementwise_popcount(x);
774}
775_HLSL_AVAILABILITY(shadermodel, 6.2)
776const inline uint4 countbits(int16_t4 x) {
777 return __builtin_elementwise_popcount(x);
778}
779_HLSL_AVAILABILITY(shadermodel, 6.2)
780const inline uint countbits(uint16_t x) {
781 return __builtin_elementwise_popcount(x);
782}
783_HLSL_AVAILABILITY(shadermodel, 6.2)
784const inline uint2 countbits(uint16_t2 x) {
785 return __builtin_elementwise_popcount(x);
786}
787_HLSL_AVAILABILITY(shadermodel, 6.2)
788const inline uint3 countbits(uint16_t3 x) {
789 return __builtin_elementwise_popcount(x);
790}
791_HLSL_AVAILABILITY(shadermodel, 6.2)
792const inline uint4 countbits(uint16_t4 x) {
793 return __builtin_elementwise_popcount(x);
794}
795#endif
796
797const inline uint countbits(int x) { return __builtin_elementwise_popcount(x); }
798const inline uint2 countbits(int2 x) {
799 return __builtin_elementwise_popcount(x);
800}
801const inline uint3 countbits(int3 x) {
802 return __builtin_elementwise_popcount(x);
803}
804const inline uint4 countbits(int4 x) {
805 return __builtin_elementwise_popcount(x);
806}
807
808const inline uint countbits(uint x) {
809 return __builtin_elementwise_popcount(x);
810}
811const inline uint2 countbits(uint2 x) {
812 return __builtin_elementwise_popcount(x);
813}
814const inline uint3 countbits(uint3 x) {
815 return __builtin_elementwise_popcount(x);
816}
817const inline uint4 countbits(uint4 x) {
818 return __builtin_elementwise_popcount(x);
819}
820
821const inline uint countbits(int64_t x) {
822 return __builtin_elementwise_popcount(x);
823}
824const inline uint2 countbits(int64_t2 x) {
825 return __builtin_elementwise_popcount(x);
826}
827const inline uint3 countbits(int64_t3 x) {
828 return __builtin_elementwise_popcount(x);
829}
830const inline uint4 countbits(int64_t4 x) {
831 return __builtin_elementwise_popcount(x);
832}
833
834const inline uint countbits(uint64_t x) {
835 return __builtin_elementwise_popcount(x);
836}
837const inline uint2 countbits(uint64_t2 x) {
838 return __builtin_elementwise_popcount(x);
839}
840const inline uint3 countbits(uint64_t3 x) {
841 return __builtin_elementwise_popcount(x);
842}
843const inline uint4 countbits(uint64_t4 x) {
844 return __builtin_elementwise_popcount(x);
845}
846
847//===----------------------------------------------------------------------===//
848// degrees builtins
849//===----------------------------------------------------------------------===//
850
851/// \fn T degrees(T x)
852/// \brief Converts the specified value from radians to degrees.
853/// \param x The specified input value.
854
855_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
856_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
857half degrees(half);
858_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
859_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
861_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
862_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
864_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
865_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
867
868_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
869float degrees(float);
870_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
872_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
874_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_degrees)
876
877//===----------------------------------------------------------------------===//
878// dot product builtins
879//===----------------------------------------------------------------------===//
880
881/// \fn K dot(T X, T Y)
882/// \brief Return the dot product (a scalar value) of \a X and \a Y.
883/// \param X The X input value.
884/// \param Y The Y input value.
885
886_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
887_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
888half dot(half, half);
889_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
890_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
892_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
893_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
895_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
896_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
898
899#ifdef __HLSL_ENABLE_16_BIT
900_HLSL_AVAILABILITY(shadermodel, 6.2)
901_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
902int16_t dot(int16_t, int16_t);
903_HLSL_AVAILABILITY(shadermodel, 6.2)
904_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
905int16_t dot(int16_t2, int16_t2);
906_HLSL_AVAILABILITY(shadermodel, 6.2)
907_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
908int16_t dot(int16_t3, int16_t3);
909_HLSL_AVAILABILITY(shadermodel, 6.2)
910_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
911int16_t dot(int16_t4, int16_t4);
912
913_HLSL_AVAILABILITY(shadermodel, 6.2)
914_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
915uint16_t dot(uint16_t, uint16_t);
916_HLSL_AVAILABILITY(shadermodel, 6.2)
917_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
918uint16_t dot(uint16_t2, uint16_t2);
919_HLSL_AVAILABILITY(shadermodel, 6.2)
920_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
921uint16_t dot(uint16_t3, uint16_t3);
922_HLSL_AVAILABILITY(shadermodel, 6.2)
923_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
924uint16_t dot(uint16_t4, uint16_t4);
925#endif
926
927_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
928float dot(float, float);
929_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
931_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
933_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
935
936_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
937double dot(double, double);
938
939_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
940int dot(int, int);
941_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
943_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
945_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
947
948_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
950_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
952_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
954_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
956
957_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
959_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
961_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
963_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
965
966_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
968_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
970_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
972_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot)
974
975//===----------------------------------------------------------------------===//
976// dot4add builtins
977//===----------------------------------------------------------------------===//
978
979/// \fn int dot4add_i8packed(uint A, uint B, int C)
980
981_HLSL_AVAILABILITY(shadermodel, 6.4)
982_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_i8packed)
984
985/// \fn uint dot4add_u8packed(uint A, uint B, uint C)
986
987_HLSL_AVAILABILITY(shadermodel, 6.4)
988_HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot4add_u8packed)
990
991//===----------------------------------------------------------------------===//
992// exp builtins
993//===----------------------------------------------------------------------===//
994
995/// \fn T exp(T x)
996/// \brief Returns the base-e exponential, or \a e**x, of the specified value.
997/// \param x The specified input value.
998///
999/// The return value is the base-e exponential of the \a x parameter.
1000
1001_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1002_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1003half exp(half);
1004_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1005_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1007_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1008_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1010_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1011_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1013
1014_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1015float exp(float);
1016_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1018_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1020_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp)
1022
1023//===----------------------------------------------------------------------===//
1024// exp2 builtins
1025//===----------------------------------------------------------------------===//
1026
1027/// \fn T exp2(T x)
1028/// \brief Returns the base 2 exponential, or \a 2**x, of the specified value.
1029/// \param x The specified input value.
1030///
1031/// The base 2 exponential of the \a x parameter.
1032
1033_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1034_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1035half exp2(half);
1036_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1037_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1039_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1040_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1042_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1043_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1045
1046_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1047float exp2(float);
1048_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1050_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1052_HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2)
1054
1055//===----------------------------------------------------------------------===//
1056// f16tof32 builtins
1057//===----------------------------------------------------------------------===//
1058
1059/// \fn float f16tof32(uint x)
1060/// \brief Returns the half value stored in the low 16 bits of the uint arg
1061/// converted to a float.
1062/// \param x The uint containing two half values.
1063///
1064/// The float value of the half value found in the low 16 bits of the \a xi
1065/// parameter.
1066
1067_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1069_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1071_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1073_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_f16tof32)
1075
1076//===----------------------------------------------------------------------===//
1077// firstbitlow builtins
1078//===----------------------------------------------------------------------===//
1079
1080/// \fn T firstbitlow(T Val)
1081/// \brief Returns the location of the first set bit starting from the lowest
1082/// order bit and working upward, per component.
1083/// \param Val the input value.
1084
1085#ifdef __HLSL_ENABLE_16_BIT
1086_HLSL_AVAILABILITY(shadermodel, 6.2)
1087_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1088uint firstbitlow(int16_t);
1089_HLSL_AVAILABILITY(shadermodel, 6.2)
1090_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1091uint2 firstbitlow(int16_t2);
1092_HLSL_AVAILABILITY(shadermodel, 6.2)
1093_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1094uint3 firstbitlow(int16_t3);
1095_HLSL_AVAILABILITY(shadermodel, 6.2)
1096_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1097uint4 firstbitlow(int16_t4);
1098_HLSL_AVAILABILITY(shadermodel, 6.2)
1099_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1100uint firstbitlow(uint16_t);
1101_HLSL_AVAILABILITY(shadermodel, 6.2)
1102_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1103uint2 firstbitlow(uint16_t2);
1104_HLSL_AVAILABILITY(shadermodel, 6.2)
1105_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1106uint3 firstbitlow(uint16_t3);
1107_HLSL_AVAILABILITY(shadermodel, 6.2)
1108_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1109uint4 firstbitlow(uint16_t4);
1110#endif
1111
1112_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1114_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1116_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1118_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1120
1121_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1123_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1125_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1127_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1129
1130_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1132_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1134_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1136_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1138
1139_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1141_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1143_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1145_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1147
1148//===----------------------------------------------------------------------===//
1149// floor builtins
1150//===----------------------------------------------------------------------===//
1151
1152/// \fn T floor(T Val)
1153/// \brief Returns the largest integer that is less than or equal to the input
1154/// value, \a Val.
1155/// \param Val The input value.
1156
1157_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1158_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1159half floor(half);
1160_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1161_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1163_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1164_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1166_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1167_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1169
1170_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1171float floor(float);
1172_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1174_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1176_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1178
1179//===----------------------------------------------------------------------===//
1180// frac builtins
1181//===----------------------------------------------------------------------===//
1182
1183/// \fn T frac(T x)
1184/// \brief Returns the fractional (or decimal) part of x. \a x parameter.
1185/// \param x The specified input value.
1186///
1187/// If \a the return value is greater than or equal to 0 and less than 1.
1188
1189_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1190_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1191half frac(half);
1192_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1193_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1195_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1196_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1198_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1199_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1201
1202_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1203float frac(float);
1204_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1206_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1208_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1210
1211//===----------------------------------------------------------------------===//
1212// isinf builtins
1213//===----------------------------------------------------------------------===//
1214
1215/// \fn T isinf(T x)
1216/// \brief Determines if the specified value \a x is infinite.
1217/// \param x The specified input value.
1218///
1219/// Returns a value of the same size as the input, with a value set
1220/// to True if the x parameter is +INF or -INF. Otherwise, False.
1221
1222_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1223_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1224bool isinf(half);
1225_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1226_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1228_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1229_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1231_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1232_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1234
1235_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1236bool isinf(float);
1237_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1239_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1241_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1243
1244//===----------------------------------------------------------------------===//
1245// isnan builtins
1246//===----------------------------------------------------------------------===//
1247
1248/// \fn T isnan(T x)
1249/// \brief Determines if the specified value \a x is Not a Number.
1250/// \param x The specified input value.
1251///
1252/// Returns a value of the same size as the input, with a value set
1253/// to True if the x parameter is NaN or QNaN. Otherwise, False.
1254
1255_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1256_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1257bool isnan(half);
1258_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1259_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1261_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1262_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1264_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1265_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1267
1268_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1269bool isnan(float);
1270_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1272_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1274_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1276
1277//===----------------------------------------------------------------------===//
1278// lerp builtins
1279//===----------------------------------------------------------------------===//
1280
1281/// \fn T lerp(T x, T y, T s)
1282/// \brief Returns the linear interpolation of x to y by s.
1283/// \param x [in] The first-floating point value.
1284/// \param y [in] The second-floating point value.
1285/// \param s [in] A value that linearly interpolates between the x parameter and
1286/// the y parameter.
1287///
1288/// Linear interpolation is based on the following formula: x*(1-s) + y*s which
1289/// can equivalently be written as x + s(y-x).
1290
1291_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1292_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1293half lerp(half, half, half);
1294_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1295_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1297_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1298_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1300_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1301_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1303
1304_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1305float lerp(float, float, float);
1306_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1308_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1310_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1312
1313//===----------------------------------------------------------------------===//
1314// log builtins
1315//===----------------------------------------------------------------------===//
1316
1317/// \fn T log(T Val)
1318/// \brief The base-e logarithm of the input value, \a Val parameter.
1319/// \param Val The input value.
1320///
1321/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1322/// function returns negative infinity.
1323
1324_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1325_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1326half log(half);
1327_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1328_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1330_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1331_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1333_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1334_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1336
1337_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1338float log(float);
1339_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1341_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1343_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1345
1346//===----------------------------------------------------------------------===//
1347// log10 builtins
1348//===----------------------------------------------------------------------===//
1349
1350/// \fn T log10(T Val)
1351/// \brief The base-10 logarithm of the input value, \a Val parameter.
1352/// \param Val The input value.
1353///
1354/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1355/// function returns negative infinity.
1356
1357_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1358_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1359half log10(half);
1360_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1361_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1363_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1364_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1366_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1367_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1369
1370_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1371float log10(float);
1372_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1374_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1376_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1378
1379//===----------------------------------------------------------------------===//
1380// log2 builtins
1381//===----------------------------------------------------------------------===//
1382
1383/// \fn T log2(T Val)
1384/// \brief The base-2 logarithm of the input value, \a Val parameter.
1385/// \param Val The input value.
1386///
1387/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1388/// function returns negative infinity.
1389
1390_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1391_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1392half log2(half);
1393_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1394_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1396_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1397_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1399_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1400_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1402
1403_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1404float log2(float);
1405_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1407_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1409_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1411
1412//===----------------------------------------------------------------------===//
1413// mad builtins
1414//===----------------------------------------------------------------------===//
1415
1416/// \fn T mad(T M, T A, T B)
1417/// \brief The result of \a M * \a A + \a B.
1418/// \param M The multiplication value.
1419/// \param A The first addition value.
1420/// \param B The second addition value.
1421
1422_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1423_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1424half mad(half, half, half);
1425_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1426_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1428_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1429_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1431_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1432_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1434
1435#ifdef __HLSL_ENABLE_16_BIT
1436_HLSL_AVAILABILITY(shadermodel, 6.2)
1437_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1438int16_t mad(int16_t, int16_t, int16_t);
1439_HLSL_AVAILABILITY(shadermodel, 6.2)
1440_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1441int16_t2 mad(int16_t2, int16_t2, int16_t2);
1442_HLSL_AVAILABILITY(shadermodel, 6.2)
1443_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1444int16_t3 mad(int16_t3, int16_t3, int16_t3);
1445_HLSL_AVAILABILITY(shadermodel, 6.2)
1446_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1447int16_t4 mad(int16_t4, int16_t4, int16_t4);
1448
1449_HLSL_AVAILABILITY(shadermodel, 6.2)
1450_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1451uint16_t mad(uint16_t, uint16_t, uint16_t);
1452_HLSL_AVAILABILITY(shadermodel, 6.2)
1453_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1454uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2);
1455_HLSL_AVAILABILITY(shadermodel, 6.2)
1456_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1457uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3);
1458_HLSL_AVAILABILITY(shadermodel, 6.2)
1459_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1460uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4);
1461#endif
1462
1463_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1464int mad(int, int, int);
1465_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1467_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1469_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1471
1472_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1474_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1476_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1478_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1480
1481_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1483_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1485_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1487_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1489
1490_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1492_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1494_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1496_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1498
1499_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1500float mad(float, float, float);
1501_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1503_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1505_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1507
1508_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1509double mad(double, double, double);
1510_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1512_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1514_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1516
1517//===----------------------------------------------------------------------===//
1518// max builtins
1519//===----------------------------------------------------------------------===//
1520
1521/// \fn T max(T X, T Y)
1522/// \brief Return the greater of \a X and \a Y.
1523/// \param X The X input value.
1524/// \param Y The Y input value.
1525
1526_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1527_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1528half max(half, half);
1529_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1530_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1532_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1533_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1535_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1536_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1538
1539#ifdef __HLSL_ENABLE_16_BIT
1540_HLSL_AVAILABILITY(shadermodel, 6.2)
1541_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1542int16_t max(int16_t, int16_t);
1543_HLSL_AVAILABILITY(shadermodel, 6.2)
1544_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1545int16_t2 max(int16_t2, int16_t2);
1546_HLSL_AVAILABILITY(shadermodel, 6.2)
1547_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1548int16_t3 max(int16_t3, int16_t3);
1549_HLSL_AVAILABILITY(shadermodel, 6.2)
1550_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1551int16_t4 max(int16_t4, int16_t4);
1552
1553_HLSL_AVAILABILITY(shadermodel, 6.2)
1554_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1555uint16_t max(uint16_t, uint16_t);
1556_HLSL_AVAILABILITY(shadermodel, 6.2)
1557_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1558uint16_t2 max(uint16_t2, uint16_t2);
1559_HLSL_AVAILABILITY(shadermodel, 6.2)
1560_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1561uint16_t3 max(uint16_t3, uint16_t3);
1562_HLSL_AVAILABILITY(shadermodel, 6.2)
1563_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1564uint16_t4 max(uint16_t4, uint16_t4);
1565#endif
1566
1567_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1568int max(int, int);
1569_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1571_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1573_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1575
1576_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1578_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1580_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1582_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1584
1585_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1587_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1589_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1591_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1593
1594_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1596_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1598_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1600_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1602
1603_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1604float max(float, float);
1605_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1607_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1609_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1611
1612_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1613double max(double, double);
1614_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1616_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1618_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1620
1621//===----------------------------------------------------------------------===//
1622// min builtins
1623//===----------------------------------------------------------------------===//
1624
1625/// \fn T min(T X, T Y)
1626/// \brief Return the lesser of \a X and \a Y.
1627/// \param X The X input value.
1628/// \param Y The Y input value.
1629
1630_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1631_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1632half min(half, half);
1633_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1634_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1636_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1637_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1639_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1640_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1642
1643#ifdef __HLSL_ENABLE_16_BIT
1644_HLSL_AVAILABILITY(shadermodel, 6.2)
1645_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1646int16_t min(int16_t, int16_t);
1647_HLSL_AVAILABILITY(shadermodel, 6.2)
1648_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1649int16_t2 min(int16_t2, int16_t2);
1650_HLSL_AVAILABILITY(shadermodel, 6.2)
1651_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1652int16_t3 min(int16_t3, int16_t3);
1653_HLSL_AVAILABILITY(shadermodel, 6.2)
1654_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1655int16_t4 min(int16_t4, int16_t4);
1656
1657_HLSL_AVAILABILITY(shadermodel, 6.2)
1658_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1659uint16_t min(uint16_t, uint16_t);
1660_HLSL_AVAILABILITY(shadermodel, 6.2)
1661_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1662uint16_t2 min(uint16_t2, uint16_t2);
1663_HLSL_AVAILABILITY(shadermodel, 6.2)
1664_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1665uint16_t3 min(uint16_t3, uint16_t3);
1666_HLSL_AVAILABILITY(shadermodel, 6.2)
1667_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1668uint16_t4 min(uint16_t4, uint16_t4);
1669#endif
1670
1671_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1672int min(int, int);
1673_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1675_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1677_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1679
1680_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1682_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1684_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1686_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1688
1689_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1690float min(float, float);
1691_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1693_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1695_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1697
1698_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1700_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1702_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1704_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1706
1707_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1709_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1711_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1713_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1715
1716_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1717double min(double, double);
1718_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1720_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1722_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1724
1725//===----------------------------------------------------------------------===//
1726// normalize builtins
1727//===----------------------------------------------------------------------===//
1728
1729/// \fn T normalize(T x)
1730/// \brief Returns the normalized unit vector of the specified floating-point
1731/// vector. \param x [in] The vector of floats.
1732///
1733/// Normalize is based on the following formula: x / length(x).
1734
1735_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1736_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1737half normalize(half);
1738_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1739_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1741_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1742_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1744_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1745_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1747
1748_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1749float normalize(float);
1750_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1752_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1754_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1756
1757//===----------------------------------------------------------------------===//
1758// or builtins
1759//===----------------------------------------------------------------------===//
1760
1761/// \fn bool or(bool x, bool y)
1762/// \brief Logically ors two boolean vectors elementwise and produces a bool
1763/// vector output.
1764
1765// TODO: Clean up clang-format marker once we've resolved
1766// https://github.com/llvm/llvm-project/issues/127851
1767//
1768// clang-format off
1769_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1770bool or(bool, bool);
1771_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1773_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1775_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1777// clang-format on
1778
1779//===----------------------------------------------------------------------===//
1780// pow builtins
1781//===----------------------------------------------------------------------===//
1782
1783/// \fn T pow(T Val, T Pow)
1784/// \brief Return the value \a Val, raised to the power \a Pow.
1785/// \param Val The input value.
1786/// \param Pow The specified power.
1787
1788_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1789_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1790half pow(half, half);
1791_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1792_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1794_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1795_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1797_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1798_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1800
1801_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1802float pow(float, float);
1803_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1805_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1807_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1809
1810//===----------------------------------------------------------------------===//
1811// reversebits builtins
1812//===----------------------------------------------------------------------===//
1813
1814/// \fn T reversebits(T Val)
1815/// \brief Return the value \a Val with the bit order reversed.
1816/// \param Val The input value.
1817
1818#ifdef __HLSL_ENABLE_16_BIT
1819_HLSL_AVAILABILITY(shadermodel, 6.2)
1820_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1821uint16_t reversebits(uint16_t);
1822_HLSL_AVAILABILITY(shadermodel, 6.2)
1823_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1824uint16_t2 reversebits(uint16_t2);
1825_HLSL_AVAILABILITY(shadermodel, 6.2)
1826_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1827uint16_t3 reversebits(uint16_t3);
1828_HLSL_AVAILABILITY(shadermodel, 6.2)
1829_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1830uint16_t4 reversebits(uint16_t4);
1831#endif
1832
1833_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1835_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1837_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1839_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1841
1842_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1844_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1846_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1848_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1850
1851//===----------------------------------------------------------------------===//
1852// cross builtins
1853//===----------------------------------------------------------------------===//
1854
1855/// \fn T cross(T x, T y)
1856/// \brief Returns the cross product of two floating-point, 3D vectors.
1857/// \param x [in] The first floating-point, 3D vector.
1858/// \param y [in] The second floating-point, 3D vector.
1859///
1860/// Result is the cross product of x and y, i.e., the resulting
1861/// components are, in order :
1862/// x[1] * y[2] - y[1] * x[2]
1863/// x[2] * y[0] - y[2] * x[0]
1864/// x[0] * y[1] - y[0] * x[1]
1865
1866_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1867_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf16)
1869
1870_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf32)
1872
1873//===----------------------------------------------------------------------===//
1874// rcp builtins
1875//===----------------------------------------------------------------------===//
1876
1877/// \fn T rcp(T x)
1878/// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x.
1879/// \param x The specified input value.
1880///
1881/// The return value is the reciprocal of the \a x parameter.
1882
1883_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1884_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1885half rcp(half);
1886_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1887_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1889_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1890_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1892_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1893_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1895
1896_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1897float rcp(float);
1898_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1900_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1902_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1904
1905_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1906double rcp(double);
1907_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1909_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1911_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1913
1914//===----------------------------------------------------------------------===//
1915// rsqrt builtins
1916//===----------------------------------------------------------------------===//
1917
1918/// \fn T rsqrt(T x)
1919/// \brief Returns the reciprocal of the square root of the specified value.
1920/// ie 1 / sqrt( \a x).
1921/// \param x The specified input value.
1922///
1923/// This function uses the following formula: 1 / sqrt(x).
1924
1925_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1926_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1927half rsqrt(half);
1928_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1929_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1931_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1932_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1934_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1935_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1937
1938_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1939float rsqrt(float);
1940_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1942_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1944_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1946
1947//===----------------------------------------------------------------------===//
1948// round builtins
1949//===----------------------------------------------------------------------===//
1950
1951/// \fn T round(T x)
1952/// \brief Rounds the specified value \a x to the nearest integer.
1953/// \param x The specified input value.
1954///
1955/// The return value is the \a x parameter, rounded to the nearest integer
1956/// within a floating-point type. Halfway cases are
1957/// rounded to the nearest even value.
1958
1959_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1960_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1961half round(half);
1962_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1963_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1965_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1966_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1968_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1969_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1971
1972_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1973float round(float);
1974_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1976_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1978_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1980
1981//===----------------------------------------------------------------------===//
1982// saturate builtins
1983//===----------------------------------------------------------------------===//
1984
1985/// \fn T saturate(T Val)
1986/// \brief Returns input value, \a Val, clamped within the range of 0.0f
1987/// to 1.0f. \param Val The input value.
1988
1989_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1990_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
1991half saturate(half);
1992_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1993_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
1995_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1996_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
1998_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1999_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2001
2002_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2003float saturate(float);
2004_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2006_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2008_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2010
2011_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2012double saturate(double);
2013_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2015_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2017_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2019
2020//===----------------------------------------------------------------------===//
2021// select builtins
2022//===----------------------------------------------------------------------===//
2023
2024/// \fn T select(bool Cond, T TrueVal, T FalseVal)
2025/// \brief ternary operator.
2026/// \param Cond The Condition input value.
2027/// \param TrueVal The Value returned if Cond is true.
2028/// \param FalseVal The Value returned if Cond is false.
2029
2030template <typename T>
2031_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2032T select(bool, T, T);
2033
2034/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2035/// vector<T,Sz> FalseVals)
2036/// \brief ternary operator for vectors. All vectors must be the same size.
2037/// \param Conds The Condition input values.
2038/// \param TrueVals The vector values are chosen from when conditions are true.
2039/// \param FalseVals The vector values are chosen from when conditions are
2040/// false.
2041
2042template <typename T>
2043_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2044vector<T, 2> select(vector<bool, 2>, vector<T, 2>, vector<T, 2>);
2045
2046template <typename T>
2047_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2048vector<T, 3> select(vector<bool, 3>, vector<T, 3>, vector<T, 3>);
2049
2050template <typename T>
2051_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2052vector<T, 4> select(vector<bool, 4>, vector<T, 4>, vector<T, 4>);
2053
2054/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, T TrueVal,
2055/// vector<T,Sz> FalseVals)
2056/// \brief ternary operator for vectors. All vectors must be the same size.
2057/// \param Conds The Condition input values.
2058/// \param TrueVal The scalar value to splat from when conditions are true.
2059/// \param FalseVals The vector values are chosen from when conditions are
2060/// false.
2061
2062template <typename T>
2063_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2064vector<T, 2> select(vector<bool, 2>, T, vector<T, 2>);
2065
2066template <typename T>
2067_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2068vector<T, 3> select(vector<bool, 3>, T, vector<T, 3>);
2069
2070template <typename T>
2071_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2072vector<T, 4> select(vector<bool, 4>, T, vector<T, 4>);
2073
2074/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2075/// T FalseVal)
2076/// \brief ternary operator for vectors. All vectors must be the same size.
2077/// \param Conds The Condition input values.
2078/// \param TrueVals The vector values are chosen from when conditions are true.
2079/// \param FalseVal The scalar value to splat from when conditions are false.
2080
2081template <typename T>
2082_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2083vector<T, 2> select(vector<bool, 2>, vector<T, 2>, T);
2084
2085template <typename T>
2086_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2087vector<T, 3> select(vector<bool, 3>, vector<T, 3>, T);
2088
2089template <typename T>
2090_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2091vector<T, 4> select(vector<bool, 4>, vector<T, 4>, T);
2092
2093/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2094/// T FalseVal)
2095/// \brief ternary operator for vectors. All vectors must be the same size.
2096/// \param Conds The Condition input values.
2097/// \param TrueVal The scalar value to splat from when conditions are true.
2098/// \param FalseVal The scalar value to splat from when conditions are false.
2099
2100template <typename T>
2101_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2102__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 2>> select(
2103 vector<bool, 2>, T, T);
2104
2105template <typename T>
2106_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2107__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 3>> select(
2108 vector<bool, 3>, T, T);
2109
2110template <typename T>
2111_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2112__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, 4>> select(
2113 vector<bool, 4>, T, T);
2114
2115//===----------------------------------------------------------------------===//
2116// sin builtins
2117//===----------------------------------------------------------------------===//
2118
2119/// \fn T sin(T Val)
2120/// \brief Returns the sine of the input value, \a Val.
2121/// \param Val The input value.
2122
2123_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2124_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2125half sin(half);
2126_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2127_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2129_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2130_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2132_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2133_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2135
2136_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2137float sin(float);
2138_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2140_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2142_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2144
2145//===----------------------------------------------------------------------===//
2146// sinh builtins
2147//===----------------------------------------------------------------------===//
2148
2149/// \fn T sinh(T Val)
2150/// \brief Returns the hyperbolic sine of the input value, \a Val.
2151/// \param Val The input value.
2152
2153_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2154_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2155half sinh(half);
2156_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2157_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2159_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2160_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2162_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2163_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2165
2166_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2167float sinh(float);
2168_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2170_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2172_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2174
2175//===----------------------------------------------------------------------===//
2176// sqrt builtins
2177//===----------------------------------------------------------------------===//
2178
2179/// \fn T sqrt(T Val)
2180/// \brief Returns the square root of the input value, \a Val.
2181/// \param Val The input value.
2182
2183_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2184_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2185half sqrt(half);
2186_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2187_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2189_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2190_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2192_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2193_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2195
2196_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2197float sqrt(float);
2198_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2200_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2202_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2204
2205//===----------------------------------------------------------------------===//
2206// step builtins
2207//===----------------------------------------------------------------------===//
2208
2209/// \fn T step(T y, T x)
2210/// \brief Returns 1 if the x parameter is greater than or equal to the y
2211/// parameter; otherwise, 0. vector. \param y [in] The first floating-point
2212/// value to compare. \param x [in] The second floating-point value to compare.
2213///
2214/// Step is based on the following formula: (x >= y) ? 1 : 0
2215
2216_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2217_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2218half step(half, half);
2219_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2220_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2222_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2223_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2225_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2226_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2228
2229_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2230float step(float, float);
2231_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2233_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2235_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2237
2238//===----------------------------------------------------------------------===//
2239// tan builtins
2240//===----------------------------------------------------------------------===//
2241
2242/// \fn T tan(T Val)
2243/// \brief Returns the tangent of the input value, \a Val.
2244/// \param Val The input value.
2245
2246_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2247_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2248half tan(half);
2249_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2250_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2252_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2253_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2255_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2256_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2258
2259_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2260float tan(float);
2261_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2263_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2265_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2267
2268//===----------------------------------------------------------------------===//
2269// tanh builtins
2270//===----------------------------------------------------------------------===//
2271
2272/// \fn T tanh(T Val)
2273/// \brief Returns the hyperbolic tangent of the input value, \a Val.
2274/// \param Val The input value.
2275
2276_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2277_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2278half tanh(half);
2279_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2280_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2282_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2283_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2285_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2286_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2288
2289_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2290float tanh(float);
2291_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2293_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2295_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2297
2298//===----------------------------------------------------------------------===//
2299// trunc builtins
2300//===----------------------------------------------------------------------===//
2301
2302/// \fn T trunc(T Val)
2303/// \brief Returns the truncated integer value of the input value, \a Val.
2304/// \param Val The input value.
2305
2306_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2307_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2308half trunc(half);
2309_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2310_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2312_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2313_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2315_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2316_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2318
2319_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2320float trunc(float);
2321_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2323_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2325_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2327
2328//===----------------------------------------------------------------------===//
2329// Wave* builtins
2330//===----------------------------------------------------------------------===//
2331
2332/// \brief Returns true if the expression is true in all active lanes in the
2333/// current wave.
2334///
2335/// \param Val The boolean expression to evaluate.
2336/// \return True if the expression is true in all lanes.
2337_HLSL_AVAILABILITY(shadermodel, 6.0)
2338_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_true)
2339__attribute__((convergent)) bool WaveActiveAllTrue(bool Val);
2340
2341/// \brief Returns true if the expression is true in any active lane in the
2342/// current wave.
2343///
2344/// \param Val The boolean expression to evaluate.
2345/// \return True if the expression is true in any lane.
2346_HLSL_AVAILABILITY(shadermodel, 6.0)
2347_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_any_true)
2348__attribute__((convergent)) bool WaveActiveAnyTrue(bool Val);
2349
2350/// \brief Counts the number of boolean variables which evaluate to true across
2351/// all active lanes in the current wave.
2352///
2353/// \param Val The input boolean value.
2354/// \return The number of lanes for which the boolean variable evaluates to
2355/// true, across all active lanes in the current wave.
2356_HLSL_AVAILABILITY(shadermodel, 6.0)
2357_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
2358__attribute__((convergent)) uint WaveActiveCountBits(bool Val);
2359
2360/// \brief Returns the index of the current lane within the current wave.
2361_HLSL_AVAILABILITY(shadermodel, 6.0)
2362_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
2363__attribute__((convergent)) uint WaveGetLaneIndex();
2364
2365_HLSL_AVAILABILITY(shadermodel, 6.0)
2366_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_is_first_lane)
2367__attribute__((convergent)) bool WaveIsFirstLane();
2368
2369_HLSL_AVAILABILITY(shadermodel, 6.0)
2370_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_count)
2371__attribute__((convergent)) uint WaveGetLaneCount();
2372
2373//===----------------------------------------------------------------------===//
2374// WaveReadLaneAt builtins
2375//===----------------------------------------------------------------------===//
2376
2377// \brief Returns the value of the expression for the given lane index within
2378// the specified wave.
2379
2380_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2381__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t);
2382_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2383__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t);
2384_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2385__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t);
2386_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2387__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t);
2388
2389#ifdef __HLSL_ENABLE_16_BIT
2390_HLSL_AVAILABILITY(shadermodel, 6.0)
2391_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2392__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t);
2393_HLSL_AVAILABILITY(shadermodel, 6.0)
2394_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2395__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t);
2396_HLSL_AVAILABILITY(shadermodel, 6.0)
2397_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2398__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t);
2399_HLSL_AVAILABILITY(shadermodel, 6.0)
2400_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2401__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t);
2402
2403_HLSL_AVAILABILITY(shadermodel, 6.0)
2404_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2405__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t);
2406_HLSL_AVAILABILITY(shadermodel, 6.0)
2407_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2408__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t);
2409_HLSL_AVAILABILITY(shadermodel, 6.0)
2410_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2411__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t);
2412_HLSL_AVAILABILITY(shadermodel, 6.0)
2413_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2414__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t);
2415#endif
2416
2417_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2418_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2419__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t);
2420_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2421_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2422__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t);
2423_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2424_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2425__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t);
2426_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2427_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2428__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t);
2429
2430_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2431__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t);
2432_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2433__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t);
2434_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2435__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t);
2436_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2437__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t);
2438
2439_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2440__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t);
2441_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2442__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t);
2443_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2444__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t);
2445_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2446__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t);
2447
2448_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2449__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t);
2450_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2451__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t);
2452_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2453__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t);
2454_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2455__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t);
2456
2457_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2458__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t);
2459_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2460__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t);
2461_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2462__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t);
2463_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2464__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t);
2465
2466_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2467__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t);
2468_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2469__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t);
2470_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2471__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t);
2472_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2473__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t);
2474
2475_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2476__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t);
2477_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2478__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t);
2479_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2480__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t);
2481_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2482__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t);
2483
2484//===----------------------------------------------------------------------===//
2485// WaveActiveMax builtins
2486//===----------------------------------------------------------------------===//
2487
2488_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2489_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2490__attribute__((convergent)) half WaveActiveMax(half);
2491_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2492_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2493__attribute__((convergent)) half2 WaveActiveMax(half2);
2494_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2495_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2496__attribute__((convergent)) half3 WaveActiveMax(half3);
2497_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2498_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2499__attribute__((convergent)) half4 WaveActiveMax(half4);
2500
2501#ifdef __HLSL_ENABLE_16_BIT
2502_HLSL_AVAILABILITY(shadermodel, 6.0)
2503_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2504__attribute__((convergent)) int16_t WaveActiveMax(int16_t);
2505_HLSL_AVAILABILITY(shadermodel, 6.0)
2506_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2507__attribute__((convergent)) int16_t2 WaveActiveMax(int16_t2);
2508_HLSL_AVAILABILITY(shadermodel, 6.0)
2509_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2510__attribute__((convergent)) int16_t3 WaveActiveMax(int16_t3);
2511_HLSL_AVAILABILITY(shadermodel, 6.0)
2512_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2513__attribute__((convergent)) int16_t4 WaveActiveMax(int16_t4);
2514
2515_HLSL_AVAILABILITY(shadermodel, 6.0)
2516_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2517__attribute__((convergent)) uint16_t WaveActiveMax(uint16_t);
2518_HLSL_AVAILABILITY(shadermodel, 6.0)
2519_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2520__attribute__((convergent)) uint16_t2 WaveActiveMax(uint16_t2);
2521_HLSL_AVAILABILITY(shadermodel, 6.0)
2522_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2523__attribute__((convergent)) uint16_t3 WaveActiveMax(uint16_t3);
2524_HLSL_AVAILABILITY(shadermodel, 6.0)
2525_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2526__attribute__((convergent)) uint16_t4 WaveActiveMax(uint16_t4);
2527#endif
2528
2529_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2530__attribute__((convergent)) int WaveActiveMax(int);
2531_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2532__attribute__((convergent)) int2 WaveActiveMax(int2);
2533_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2534__attribute__((convergent)) int3 WaveActiveMax(int3);
2535_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2536__attribute__((convergent)) int4 WaveActiveMax(int4);
2537
2538_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2539__attribute__((convergent)) uint WaveActiveMax(uint);
2540_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2541__attribute__((convergent)) uint2 WaveActiveMax(uint2);
2542_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2543__attribute__((convergent)) uint3 WaveActiveMax(uint3);
2544_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2545__attribute__((convergent)) uint4 WaveActiveMax(uint4);
2546
2547_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2548__attribute__((convergent)) int64_t WaveActiveMax(int64_t);
2549_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2550__attribute__((convergent)) int64_t2 WaveActiveMax(int64_t2);
2551_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2552__attribute__((convergent)) int64_t3 WaveActiveMax(int64_t3);
2553_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2554__attribute__((convergent)) int64_t4 WaveActiveMax(int64_t4);
2555
2556_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2557__attribute__((convergent)) uint64_t WaveActiveMax(uint64_t);
2558_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2559__attribute__((convergent)) uint64_t2 WaveActiveMax(uint64_t2);
2560_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2561__attribute__((convergent)) uint64_t3 WaveActiveMax(uint64_t3);
2562_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2563__attribute__((convergent)) uint64_t4 WaveActiveMax(uint64_t4);
2564
2565_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2566__attribute__((convergent)) float WaveActiveMax(float);
2567_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2568__attribute__((convergent)) float2 WaveActiveMax(float2);
2569_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2570__attribute__((convergent)) float3 WaveActiveMax(float3);
2571_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2572__attribute__((convergent)) float4 WaveActiveMax(float4);
2573
2574_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2575__attribute__((convergent)) double WaveActiveMax(double);
2576_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2577__attribute__((convergent)) double2 WaveActiveMax(double2);
2578_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2579__attribute__((convergent)) double3 WaveActiveMax(double3);
2580_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2581__attribute__((convergent)) double4 WaveActiveMax(double4);
2582
2583//===----------------------------------------------------------------------===//
2584// WaveActiveMin builtins
2585//===----------------------------------------------------------------------===//
2586
2587_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2588_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2589__attribute__((convergent)) half WaveActiveMin(half);
2590_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2591_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2592__attribute__((convergent)) half2 WaveActiveMin(half2);
2593_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2594_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2595__attribute__((convergent)) half3 WaveActiveMin(half3);
2596_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2597_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2598__attribute__((convergent)) half4 WaveActiveMin(half4);
2599
2600#ifdef __HLSL_ENABLE_16_BIT
2601_HLSL_AVAILABILITY(shadermodel, 6.0)
2602_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2603__attribute__((convergent)) int16_t WaveActiveMin(int16_t);
2604_HLSL_AVAILABILITY(shadermodel, 6.0)
2605_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2606__attribute__((convergent)) int16_t2 WaveActiveMin(int16_t2);
2607_HLSL_AVAILABILITY(shadermodel, 6.0)
2608_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2609__attribute__((convergent)) int16_t3 WaveActiveMin(int16_t3);
2610_HLSL_AVAILABILITY(shadermodel, 6.0)
2611_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2612__attribute__((convergent)) int16_t4 WaveActiveMin(int16_t4);
2613
2614_HLSL_AVAILABILITY(shadermodel, 6.0)
2615_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2616__attribute__((convergent)) uint16_t WaveActiveMin(uint16_t);
2617_HLSL_AVAILABILITY(shadermodel, 6.0)
2618_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2619__attribute__((convergent)) uint16_t2 WaveActiveMin(uint16_t2);
2620_HLSL_AVAILABILITY(shadermodel, 6.0)
2621_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2622__attribute__((convergent)) uint16_t3 WaveActiveMin(uint16_t3);
2623_HLSL_AVAILABILITY(shadermodel, 6.0)
2624_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2625__attribute__((convergent)) uint16_t4 WaveActiveMin(uint16_t4);
2626#endif
2627
2628_HLSL_AVAILABILITY(shadermodel, 6.0)
2629_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2630__attribute__((convergent)) int WaveActiveMin(int);
2631_HLSL_AVAILABILITY(shadermodel, 6.0)
2632_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2633__attribute__((convergent)) int2 WaveActiveMin(int2);
2634_HLSL_AVAILABILITY(shadermodel, 6.0)
2635_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2636__attribute__((convergent)) int3 WaveActiveMin(int3);
2637_HLSL_AVAILABILITY(shadermodel, 6.0)
2638_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2639__attribute__((convergent)) int4 WaveActiveMin(int4);
2640
2641_HLSL_AVAILABILITY(shadermodel, 6.0)
2642_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2643__attribute__((convergent)) uint WaveActiveMin(uint);
2644_HLSL_AVAILABILITY(shadermodel, 6.0)
2645_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2646__attribute__((convergent)) uint2 WaveActiveMin(uint2);
2647_HLSL_AVAILABILITY(shadermodel, 6.0)
2648_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2649__attribute__((convergent)) uint3 WaveActiveMin(uint3);
2650_HLSL_AVAILABILITY(shadermodel, 6.0)
2651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2652__attribute__((convergent)) uint4 WaveActiveMin(uint4);
2653
2654_HLSL_AVAILABILITY(shadermodel, 6.0)
2655_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2656__attribute__((convergent)) int64_t WaveActiveMin(int64_t);
2657_HLSL_AVAILABILITY(shadermodel, 6.0)
2658_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2659__attribute__((convergent)) int64_t2 WaveActiveMin(int64_t2);
2660_HLSL_AVAILABILITY(shadermodel, 6.0)
2661_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2662__attribute__((convergent)) int64_t3 WaveActiveMin(int64_t3);
2663_HLSL_AVAILABILITY(shadermodel, 6.0)
2664_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2665__attribute__((convergent)) int64_t4 WaveActiveMin(int64_t4);
2666
2667_HLSL_AVAILABILITY(shadermodel, 6.0)
2668_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2669__attribute__((convergent)) uint64_t WaveActiveMin(uint64_t);
2670_HLSL_AVAILABILITY(shadermodel, 6.0)
2671_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2672__attribute__((convergent)) uint64_t2 WaveActiveMin(uint64_t2);
2673_HLSL_AVAILABILITY(shadermodel, 6.0)
2674_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2675__attribute__((convergent)) uint64_t3 WaveActiveMin(uint64_t3);
2676_HLSL_AVAILABILITY(shadermodel, 6.0)
2677_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2678__attribute__((convergent)) uint64_t4 WaveActiveMin(uint64_t4);
2679
2680_HLSL_AVAILABILITY(shadermodel, 6.0)
2681_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2682__attribute__((convergent)) float WaveActiveMin(float);
2683_HLSL_AVAILABILITY(shadermodel, 6.0)
2684_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2685__attribute__((convergent)) float2 WaveActiveMin(float2);
2686_HLSL_AVAILABILITY(shadermodel, 6.0)
2687_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2688__attribute__((convergent)) float3 WaveActiveMin(float3);
2689_HLSL_AVAILABILITY(shadermodel, 6.0)
2690_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2691__attribute__((convergent)) float4 WaveActiveMin(float4);
2692
2693_HLSL_AVAILABILITY(shadermodel, 6.0)
2694_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2695__attribute__((convergent)) double WaveActiveMin(double);
2696_HLSL_AVAILABILITY(shadermodel, 6.0)
2697_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2698__attribute__((convergent)) double2 WaveActiveMin(double2);
2699_HLSL_AVAILABILITY(shadermodel, 6.0)
2700_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2701__attribute__((convergent)) double3 WaveActiveMin(double3);
2702_HLSL_AVAILABILITY(shadermodel, 6.0)
2703_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_min)
2704__attribute__((convergent)) double4 WaveActiveMin(double4);
2705
2706//===----------------------------------------------------------------------===//
2707// WaveActiveSum builtins
2708//===----------------------------------------------------------------------===//
2709
2710_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2711_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2712__attribute__((convergent)) half WaveActiveSum(half);
2713_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2714_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2715__attribute__((convergent)) half2 WaveActiveSum(half2);
2716_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2717_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2718__attribute__((convergent)) half3 WaveActiveSum(half3);
2719_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2720_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2721__attribute__((convergent)) half4 WaveActiveSum(half4);
2722
2723#ifdef __HLSL_ENABLE_16_BIT
2724_HLSL_AVAILABILITY(shadermodel, 6.0)
2725_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2726__attribute__((convergent)) int16_t WaveActiveSum(int16_t);
2727_HLSL_AVAILABILITY(shadermodel, 6.0)
2728_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2729__attribute__((convergent)) int16_t2 WaveActiveSum(int16_t2);
2730_HLSL_AVAILABILITY(shadermodel, 6.0)
2731_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2732__attribute__((convergent)) int16_t3 WaveActiveSum(int16_t3);
2733_HLSL_AVAILABILITY(shadermodel, 6.0)
2734_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2735__attribute__((convergent)) int16_t4 WaveActiveSum(int16_t4);
2736
2737_HLSL_AVAILABILITY(shadermodel, 6.0)
2738_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2739__attribute__((convergent)) uint16_t WaveActiveSum(uint16_t);
2740_HLSL_AVAILABILITY(shadermodel, 6.0)
2741_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2742__attribute__((convergent)) uint16_t2 WaveActiveSum(uint16_t2);
2743_HLSL_AVAILABILITY(shadermodel, 6.0)
2744_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2745__attribute__((convergent)) uint16_t3 WaveActiveSum(uint16_t3);
2746_HLSL_AVAILABILITY(shadermodel, 6.0)
2747_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2748__attribute__((convergent)) uint16_t4 WaveActiveSum(uint16_t4);
2749#endif
2750
2751_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2752__attribute__((convergent)) int WaveActiveSum(int);
2753_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2754__attribute__((convergent)) int2 WaveActiveSum(int2);
2755_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2756__attribute__((convergent)) int3 WaveActiveSum(int3);
2757_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2758__attribute__((convergent)) int4 WaveActiveSum(int4);
2759
2760_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2761__attribute__((convergent)) uint WaveActiveSum(uint);
2762_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2763__attribute__((convergent)) uint2 WaveActiveSum(uint2);
2764_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2765__attribute__((convergent)) uint3 WaveActiveSum(uint3);
2766_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2767__attribute__((convergent)) uint4 WaveActiveSum(uint4);
2768
2769_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2770__attribute__((convergent)) int64_t WaveActiveSum(int64_t);
2771_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2772__attribute__((convergent)) int64_t2 WaveActiveSum(int64_t2);
2773_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2774__attribute__((convergent)) int64_t3 WaveActiveSum(int64_t3);
2775_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2776__attribute__((convergent)) int64_t4 WaveActiveSum(int64_t4);
2777
2778_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2779__attribute__((convergent)) uint64_t WaveActiveSum(uint64_t);
2780_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2781__attribute__((convergent)) uint64_t2 WaveActiveSum(uint64_t2);
2782_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2783__attribute__((convergent)) uint64_t3 WaveActiveSum(uint64_t3);
2784_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2785__attribute__((convergent)) uint64_t4 WaveActiveSum(uint64_t4);
2786
2787_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2788__attribute__((convergent)) float WaveActiveSum(float);
2789_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2790__attribute__((convergent)) float2 WaveActiveSum(float2);
2791_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2792__attribute__((convergent)) float3 WaveActiveSum(float3);
2793_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2794__attribute__((convergent)) float4 WaveActiveSum(float4);
2795
2796_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2797__attribute__((convergent)) double WaveActiveSum(double);
2798_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2799__attribute__((convergent)) double2 WaveActiveSum(double2);
2800_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2801__attribute__((convergent)) double3 WaveActiveSum(double3);
2802_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2803__attribute__((convergent)) double4 WaveActiveSum(double4);
2804
2805//===----------------------------------------------------------------------===//
2806// sign builtins
2807//===----------------------------------------------------------------------===//
2808
2809/// \fn T sign(T Val)
2810/// \brief Returns -1 if \a Val is less than zero; 0 if \a Val equals zero; and
2811/// 1 if \a Val is greater than zero. \param Val The input value.
2812
2813#ifdef __HLSL_ENABLE_16_BIT
2814_HLSL_AVAILABILITY(shadermodel, 6.2)
2815_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2816int sign(int16_t);
2817_HLSL_AVAILABILITY(shadermodel, 6.2)
2818_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2819int2 sign(int16_t2);
2820_HLSL_AVAILABILITY(shadermodel, 6.2)
2821_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2822int3 sign(int16_t3);
2823_HLSL_AVAILABILITY(shadermodel, 6.2)
2824_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2825int4 sign(int16_t4);
2826
2827_HLSL_AVAILABILITY(shadermodel, 6.2)
2828_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2829int sign(uint16_t);
2830_HLSL_AVAILABILITY(shadermodel, 6.2)
2831_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2832int2 sign(uint16_t2);
2833_HLSL_AVAILABILITY(shadermodel, 6.2)
2834_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2835int3 sign(uint16_t3);
2836_HLSL_AVAILABILITY(shadermodel, 6.2)
2837_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2838int4 sign(uint16_t4);
2839#endif
2840
2841_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2842_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2843int sign(half);
2844_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2845_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2847_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2848_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2850_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2851_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2853
2854_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2855int sign(int);
2856_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2858_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2860_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2862
2863_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2865_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2867_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2869_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2871
2872_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2873int sign(float);
2874_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2876_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2878_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2880
2881_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2883_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2885_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2887_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2889
2890_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2892_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2894_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2896_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2898
2899_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2900int sign(double);
2901_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2903_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2905_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2907
2908//===----------------------------------------------------------------------===//
2909// radians builtins
2910//===----------------------------------------------------------------------===//
2911
2912/// \fn T radians(T Val)
2913/// \brief Converts the specified value from degrees to radians.
2914
2915_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2916_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2917half radians(half);
2918_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2919_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2921_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2922_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2924_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2925_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2927
2928_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2929float radians(float);
2930_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2932_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2934_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2936
2937//===----------------------------------------------------------------------===//
2938// GroupMemoryBarrierWithGroupSync builtins
2939//===----------------------------------------------------------------------===//
2940
2941/// \fn void GroupMemoryBarrierWithGroupSync(void)
2942/// \brief Blocks execution of all threads in a group until all group shared
2943/// accesses have been completed and all threads in the group have reached this
2944/// call.
2945
2946_HLSL_BUILTIN_ALIAS(__builtin_hlsl_group_memory_barrier_with_group_sync)
2947__attribute__((convergent)) void GroupMemoryBarrierWithGroupSync(void);
2948
2949} // namespace hlsl
2950#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)
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 elementwise and produces a bool vector output.
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)
half3 cross(half3, half3)
half abs(half)
half cosh(half)
vector< float, 4 > float4
half dot(half, half)
half sin(half)
vector< int64_t, 4 > int64_t4
unsigned long uint64_t
int dot4add_i8packed(uint, uint, int)
vector< uint64_t, 3 > uint64_t3
half lerp(half, half, half)
half atan2(half y, half x)
half pow(half, half)
bool or(bool, bool)
Logically ors two boolean vectors elementwise and produces a bool vector output.
vector< bool, 4 > bool4
long int64_t
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
half sqrt(half)
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
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
half min(half, half)
half log2(half)
uint dot4add_u8packed(uint, uint, uint)
vector< uint, 4 > uint4
vector< half, 3 > half3
half asin(half)
vector< uint32_t, 4 > uint32_t4
half frac(half)
uint firstbitlow(int)
__attribute__((convergent)) bool WaveActiveAllTrue(bool Val)
Returns true if the expression is true in all active lanes in the current wave.
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)