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// firstbithigh builtins
1057//===----------------------------------------------------------------------===//
1058
1059/// \fn T firstbithigh(T Val)
1060/// \brief Returns the location of the first set bit starting from the highest
1061/// order bit and working downward, per component.
1062/// \param Val the input value.
1063
1064#ifdef __HLSL_ENABLE_16_BIT
1065_HLSL_AVAILABILITY(shadermodel, 6.2)
1066_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1067uint firstbithigh(int16_t);
1068_HLSL_AVAILABILITY(shadermodel, 6.2)
1069_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1070uint2 firstbithigh(int16_t2);
1071_HLSL_AVAILABILITY(shadermodel, 6.2)
1072_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1073uint3 firstbithigh(int16_t3);
1074_HLSL_AVAILABILITY(shadermodel, 6.2)
1075_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1076uint4 firstbithigh(int16_t4);
1077_HLSL_AVAILABILITY(shadermodel, 6.2)
1078_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1079uint firstbithigh(uint16_t);
1080_HLSL_AVAILABILITY(shadermodel, 6.2)
1081_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1082uint2 firstbithigh(uint16_t2);
1083_HLSL_AVAILABILITY(shadermodel, 6.2)
1084_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1085uint3 firstbithigh(uint16_t3);
1086_HLSL_AVAILABILITY(shadermodel, 6.2)
1087_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1088uint4 firstbithigh(uint16_t4);
1089#endif
1090
1091_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1093_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1095_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1097_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1099
1100_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1102_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1104_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1106_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1108
1109_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1111_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1113_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1115_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1117
1118_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1120_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1122_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1124_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbithigh)
1126
1127//===----------------------------------------------------------------------===//
1128// firstbitlow builtins
1129//===----------------------------------------------------------------------===//
1130
1131/// \fn T firstbitlow(T Val)
1132/// \brief Returns the location of the first set bit starting from the lowest
1133/// order bit and working upward, per component.
1134/// \param Val the input value.
1135
1136#ifdef __HLSL_ENABLE_16_BIT
1137_HLSL_AVAILABILITY(shadermodel, 6.2)
1138_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1139uint firstbitlow(int16_t);
1140_HLSL_AVAILABILITY(shadermodel, 6.2)
1141_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1142uint2 firstbitlow(int16_t2);
1143_HLSL_AVAILABILITY(shadermodel, 6.2)
1144_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1145uint3 firstbitlow(int16_t3);
1146_HLSL_AVAILABILITY(shadermodel, 6.2)
1147_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1148uint4 firstbitlow(int16_t4);
1149_HLSL_AVAILABILITY(shadermodel, 6.2)
1150_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1151uint firstbitlow(uint16_t);
1152_HLSL_AVAILABILITY(shadermodel, 6.2)
1153_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1154uint2 firstbitlow(uint16_t2);
1155_HLSL_AVAILABILITY(shadermodel, 6.2)
1156_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1157uint3 firstbitlow(uint16_t3);
1158_HLSL_AVAILABILITY(shadermodel, 6.2)
1159_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1160uint4 firstbitlow(uint16_t4);
1161#endif
1162
1163_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1165_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1167_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1169_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1171
1172_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1174_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1176_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1178_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1180
1181_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1183_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1185_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1187_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1189
1190_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1192_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1194_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1196_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_firstbitlow)
1198
1199//===----------------------------------------------------------------------===//
1200// floor builtins
1201//===----------------------------------------------------------------------===//
1202
1203/// \fn T floor(T Val)
1204/// \brief Returns the largest integer that is less than or equal to the input
1205/// value, \a Val.
1206/// \param Val The input value.
1207
1208_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1209_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1210half floor(half);
1211_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1212_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1214_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1215_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1217_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1218_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1220
1221_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1222float floor(float);
1223_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1225_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1227_HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor)
1229
1230//===----------------------------------------------------------------------===//
1231// frac builtins
1232//===----------------------------------------------------------------------===//
1233
1234/// \fn T frac(T x)
1235/// \brief Returns the fractional (or decimal) part of x. \a x parameter.
1236/// \param x The specified input value.
1237///
1238/// If \a the return value is greater than or equal to 0 and less than 1.
1239
1240_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1241_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1242half frac(half);
1243_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1244_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1246_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1247_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1249_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1250_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1252
1253_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1254float frac(float);
1255_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1257_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1259_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac)
1261
1262//===----------------------------------------------------------------------===//
1263// isinf builtins
1264//===----------------------------------------------------------------------===//
1265
1266/// \fn T isinf(T x)
1267/// \brief Determines if the specified value \a x is infinite.
1268/// \param x The specified input value.
1269///
1270/// Returns a value of the same size as the input, with a value set
1271/// to True if the x parameter is +INF or -INF. Otherwise, False.
1272
1273_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1274_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1275bool isinf(half);
1276_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1277_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1279_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1280_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1282_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1283_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1285
1286_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1287bool isinf(float);
1288_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1290_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1292_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf)
1294
1295//===----------------------------------------------------------------------===//
1296// isnan builtins
1297//===----------------------------------------------------------------------===//
1298
1299/// \fn T isnan(T x)
1300/// \brief Determines if the specified value \a x is Not a Number.
1301/// \param x The specified input value.
1302///
1303/// Returns a value of the same size as the input, with a value set
1304/// to True if the x parameter is NaN or QNaN. Otherwise, False.
1305
1306_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1307_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1308bool isnan(half);
1309_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1310_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1312_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1313_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1315_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1316_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1318
1319_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1320bool isnan(float);
1321_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1323_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1325_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isnan)
1327
1328//===----------------------------------------------------------------------===//
1329// lerp builtins
1330//===----------------------------------------------------------------------===//
1331
1332/// \fn T lerp(T x, T y, T s)
1333/// \brief Returns the linear interpolation of x to y by s.
1334/// \param x [in] The first-floating point value.
1335/// \param y [in] The second-floating point value.
1336/// \param s [in] A value that linearly interpolates between the x parameter and
1337/// the y parameter.
1338///
1339/// Linear interpolation is based on the following formula: x*(1-s) + y*s which
1340/// can equivalently be written as x + s(y-x).
1341
1342_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1343_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1344half lerp(half, half, half);
1345_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1346_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1348_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1349_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1351_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1352_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1354
1355_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1356float lerp(float, float, float);
1357_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1359_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1361_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1363
1364//===----------------------------------------------------------------------===//
1365// log builtins
1366//===----------------------------------------------------------------------===//
1367
1368/// \fn T log(T Val)
1369/// \brief The base-e logarithm of the input value, \a Val parameter.
1370/// \param Val The input value.
1371///
1372/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1373/// function returns negative infinity.
1374
1375_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1376_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1377half log(half);
1378_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1379_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1381_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1382_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1384_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1385_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1387
1388_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1389float log(float);
1390_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1392_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1394_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1396
1397//===----------------------------------------------------------------------===//
1398// log10 builtins
1399//===----------------------------------------------------------------------===//
1400
1401/// \fn T log10(T Val)
1402/// \brief The base-10 logarithm of the input value, \a Val parameter.
1403/// \param Val The input value.
1404///
1405/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1406/// function returns negative infinity.
1407
1408_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1409_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1410half log10(half);
1411_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1412_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1414_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1415_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1417_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1418_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1420
1421_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1422float log10(float);
1423_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1425_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1427_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1429
1430//===----------------------------------------------------------------------===//
1431// log2 builtins
1432//===----------------------------------------------------------------------===//
1433
1434/// \fn T log2(T Val)
1435/// \brief The base-2 logarithm of the input value, \a Val parameter.
1436/// \param Val The input value.
1437///
1438/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1439/// function returns negative infinity.
1440
1441_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1442_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1443half log2(half);
1444_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1445_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1447_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1448_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1450_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1451_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1453
1454_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1455float log2(float);
1456_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1458_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1460_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1462
1463//===----------------------------------------------------------------------===//
1464// mad builtins
1465//===----------------------------------------------------------------------===//
1466
1467/// \fn T mad(T M, T A, T B)
1468/// \brief The result of \a M * \a A + \a B.
1469/// \param M The multiplication value.
1470/// \param A The first addition value.
1471/// \param B The second addition value.
1472
1473_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1474_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1475half mad(half, half, half);
1476_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1477_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1479_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1480_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1482_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1483_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1485
1486#ifdef __HLSL_ENABLE_16_BIT
1487_HLSL_AVAILABILITY(shadermodel, 6.2)
1488_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1489int16_t mad(int16_t, int16_t, int16_t);
1490_HLSL_AVAILABILITY(shadermodel, 6.2)
1491_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1492int16_t2 mad(int16_t2, int16_t2, int16_t2);
1493_HLSL_AVAILABILITY(shadermodel, 6.2)
1494_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1495int16_t3 mad(int16_t3, int16_t3, int16_t3);
1496_HLSL_AVAILABILITY(shadermodel, 6.2)
1497_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1498int16_t4 mad(int16_t4, int16_t4, int16_t4);
1499
1500_HLSL_AVAILABILITY(shadermodel, 6.2)
1501_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1502uint16_t mad(uint16_t, uint16_t, uint16_t);
1503_HLSL_AVAILABILITY(shadermodel, 6.2)
1504_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1505uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2);
1506_HLSL_AVAILABILITY(shadermodel, 6.2)
1507_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1508uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3);
1509_HLSL_AVAILABILITY(shadermodel, 6.2)
1510_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1511uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4);
1512#endif
1513
1514_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1515int mad(int, int, int);
1516_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1518_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1520_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1522
1523_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1525_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1527_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1529_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1531
1532_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1534_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1536_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1538_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1540
1541_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1543_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1545_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1547_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1549
1550_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1551float mad(float, float, float);
1552_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1554_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1556_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1558
1559_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1560double mad(double, double, double);
1561_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1563_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1565_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1567
1568//===----------------------------------------------------------------------===//
1569// max builtins
1570//===----------------------------------------------------------------------===//
1571
1572/// \fn T max(T X, T Y)
1573/// \brief Return the greater of \a X and \a Y.
1574/// \param X The X input value.
1575/// \param Y The Y input value.
1576
1577_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1578_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1579half max(half, half);
1580_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1581_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1583_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1584_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1586_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1587_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1589
1590#ifdef __HLSL_ENABLE_16_BIT
1591_HLSL_AVAILABILITY(shadermodel, 6.2)
1592_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1593int16_t max(int16_t, int16_t);
1594_HLSL_AVAILABILITY(shadermodel, 6.2)
1595_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1596int16_t2 max(int16_t2, int16_t2);
1597_HLSL_AVAILABILITY(shadermodel, 6.2)
1598_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1599int16_t3 max(int16_t3, int16_t3);
1600_HLSL_AVAILABILITY(shadermodel, 6.2)
1601_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1602int16_t4 max(int16_t4, int16_t4);
1603
1604_HLSL_AVAILABILITY(shadermodel, 6.2)
1605_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1606uint16_t max(uint16_t, uint16_t);
1607_HLSL_AVAILABILITY(shadermodel, 6.2)
1608_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1609uint16_t2 max(uint16_t2, uint16_t2);
1610_HLSL_AVAILABILITY(shadermodel, 6.2)
1611_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1612uint16_t3 max(uint16_t3, uint16_t3);
1613_HLSL_AVAILABILITY(shadermodel, 6.2)
1614_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1615uint16_t4 max(uint16_t4, uint16_t4);
1616#endif
1617
1618_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1619int max(int, int);
1620_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1622_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1624_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1626
1627_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1629_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1631_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1633_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1635
1636_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1638_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1640_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1642_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1644
1645_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1647_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1649_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1651_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1653
1654_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1655float max(float, float);
1656_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1658_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1660_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1662
1663_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1664double max(double, double);
1665_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1667_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1669_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1671
1672//===----------------------------------------------------------------------===//
1673// min builtins
1674//===----------------------------------------------------------------------===//
1675
1676/// \fn T min(T X, T Y)
1677/// \brief Return the lesser of \a X and \a Y.
1678/// \param X The X input value.
1679/// \param Y The Y input value.
1680
1681_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1682_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1683half min(half, half);
1684_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1685_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1687_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1688_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1690_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1691_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1693
1694#ifdef __HLSL_ENABLE_16_BIT
1695_HLSL_AVAILABILITY(shadermodel, 6.2)
1696_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1697int16_t min(int16_t, int16_t);
1698_HLSL_AVAILABILITY(shadermodel, 6.2)
1699_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1700int16_t2 min(int16_t2, int16_t2);
1701_HLSL_AVAILABILITY(shadermodel, 6.2)
1702_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1703int16_t3 min(int16_t3, int16_t3);
1704_HLSL_AVAILABILITY(shadermodel, 6.2)
1705_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1706int16_t4 min(int16_t4, int16_t4);
1707
1708_HLSL_AVAILABILITY(shadermodel, 6.2)
1709_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1710uint16_t min(uint16_t, uint16_t);
1711_HLSL_AVAILABILITY(shadermodel, 6.2)
1712_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1713uint16_t2 min(uint16_t2, uint16_t2);
1714_HLSL_AVAILABILITY(shadermodel, 6.2)
1715_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1716uint16_t3 min(uint16_t3, uint16_t3);
1717_HLSL_AVAILABILITY(shadermodel, 6.2)
1718_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1719uint16_t4 min(uint16_t4, uint16_t4);
1720#endif
1721
1722_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1723int min(int, int);
1724_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1726_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1728_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1730
1731_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1733_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1735_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1737_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1739
1740_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1741float min(float, float);
1742_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1744_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1746_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1748
1749_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1751_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1753_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1755_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1757
1758_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1760_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1762_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1764_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1766
1767_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1768double min(double, double);
1769_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1771_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1773_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1775
1776//===----------------------------------------------------------------------===//
1777// normalize builtins
1778//===----------------------------------------------------------------------===//
1779
1780/// \fn T normalize(T x)
1781/// \brief Returns the normalized unit vector of the specified floating-point
1782/// vector. \param x [in] The vector of floats.
1783///
1784/// Normalize is based on the following formula: x / length(x).
1785
1786_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1787_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1788half normalize(half);
1789_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1790_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1792_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1793_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1795_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1796_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1798
1799_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1800float normalize(float);
1801_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1803_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1805_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1807
1808//===----------------------------------------------------------------------===//
1809// or builtins
1810//===----------------------------------------------------------------------===//
1811
1812/// \fn bool or(bool x, bool y)
1813/// \brief Logically ors two boolean vectors elementwise and produces a bool
1814/// vector output.
1815
1816// TODO: Clean up clang-format marker once we've resolved
1817// https://github.com/llvm/llvm-project/issues/127851
1818//
1819// clang-format off
1820_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1821bool or(bool, bool);
1822_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1824_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1826_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1828// clang-format on
1829
1830//===----------------------------------------------------------------------===//
1831// pow builtins
1832//===----------------------------------------------------------------------===//
1833
1834/// \fn T pow(T Val, T Pow)
1835/// \brief Return the value \a Val, raised to the power \a Pow.
1836/// \param Val The input value.
1837/// \param Pow The specified power.
1838
1839_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1840_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1841half pow(half, half);
1842_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1843_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1845_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1846_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1848_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1849_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1851
1852_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1853float pow(float, float);
1854_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1856_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1858_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1860
1861//===----------------------------------------------------------------------===//
1862// reversebits builtins
1863//===----------------------------------------------------------------------===//
1864
1865/// \fn T reversebits(T Val)
1866/// \brief Return the value \a Val with the bit order reversed.
1867/// \param Val The input value.
1868
1869#ifdef __HLSL_ENABLE_16_BIT
1870_HLSL_AVAILABILITY(shadermodel, 6.2)
1871_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1872uint16_t reversebits(uint16_t);
1873_HLSL_AVAILABILITY(shadermodel, 6.2)
1874_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1875uint16_t2 reversebits(uint16_t2);
1876_HLSL_AVAILABILITY(shadermodel, 6.2)
1877_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1878uint16_t3 reversebits(uint16_t3);
1879_HLSL_AVAILABILITY(shadermodel, 6.2)
1880_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1881uint16_t4 reversebits(uint16_t4);
1882#endif
1883
1884_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1886_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1888_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1890_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1892
1893_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1895_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1897_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1899_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1901
1902//===----------------------------------------------------------------------===//
1903// cross builtins
1904//===----------------------------------------------------------------------===//
1905
1906/// \fn T cross(T x, T y)
1907/// \brief Returns the cross product of two floating-point, 3D vectors.
1908/// \param x [in] The first floating-point, 3D vector.
1909/// \param y [in] The second floating-point, 3D vector.
1910///
1911/// Result is the cross product of x and y, i.e., the resulting
1912/// components are, in order :
1913/// x[1] * y[2] - y[1] * x[2]
1914/// x[2] * y[0] - y[2] * x[0]
1915/// x[0] * y[1] - y[0] * x[1]
1916
1917_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1918_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf16)
1920
1921_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf32)
1923
1924//===----------------------------------------------------------------------===//
1925// rcp builtins
1926//===----------------------------------------------------------------------===//
1927
1928/// \fn T rcp(T x)
1929/// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x.
1930/// \param x The specified input value.
1931///
1932/// The return value is the reciprocal of the \a x parameter.
1933
1934_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1935_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1936half rcp(half);
1937_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1938_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1940_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1941_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1943_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1944_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1946
1947_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1948float rcp(float);
1949_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1951_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1953_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1955
1956_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1957double rcp(double);
1958_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1960_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1962_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1964
1965//===----------------------------------------------------------------------===//
1966// rsqrt builtins
1967//===----------------------------------------------------------------------===//
1968
1969/// \fn T rsqrt(T x)
1970/// \brief Returns the reciprocal of the square root of the specified value.
1971/// ie 1 / sqrt( \a x).
1972/// \param x The specified input value.
1973///
1974/// This function uses the following formula: 1 / sqrt(x).
1975
1976_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1977_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1978half rsqrt(half);
1979_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1980_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1982_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1983_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1985_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1986_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1988
1989_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1990float rsqrt(float);
1991_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1993_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1995_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1997
1998//===----------------------------------------------------------------------===//
1999// round builtins
2000//===----------------------------------------------------------------------===//
2001
2002/// \fn T round(T x)
2003/// \brief Rounds the specified value \a x to the nearest integer.
2004/// \param x The specified input value.
2005///
2006/// The return value is the \a x parameter, rounded to the nearest integer
2007/// within a floating-point type. Halfway cases are
2008/// rounded to the nearest even value.
2009
2010_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2011_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2012half round(half);
2013_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2014_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2016_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2017_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2019_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2020_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2022
2023_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2024float round(float);
2025_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2027_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2029_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
2031
2032//===----------------------------------------------------------------------===//
2033// saturate builtins
2034//===----------------------------------------------------------------------===//
2035
2036/// \fn T saturate(T Val)
2037/// \brief Returns input value, \a Val, clamped within the range of 0.0f
2038/// to 1.0f. \param Val The input value.
2039
2040_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2041_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2042half saturate(half);
2043_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2044_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2046_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2047_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2049_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2050_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2052
2053_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2054float saturate(float);
2055_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2057_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2059_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2061
2062_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2063double saturate(double);
2064_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2066_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2068_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2070
2071//===----------------------------------------------------------------------===//
2072// select builtins
2073//===----------------------------------------------------------------------===//
2074
2075/// \fn T select(bool Cond, T TrueVal, T FalseVal)
2076/// \brief ternary operator.
2077/// \param Cond The Condition input value.
2078/// \param TrueVal The Value returned if Cond is true.
2079/// \param FalseVal The Value returned if Cond is false.
2080
2081template <typename T>
2082_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2083T select(bool, T, T);
2084
2085/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2086/// vector<T,Sz> FalseVals)
2087/// \brief ternary operator for vectors. All vectors must be the same size.
2088/// \param Conds The Condition input values.
2089/// \param TrueVals The vector values are chosen from when conditions are true.
2090/// \param FalseVals The vector values are chosen from when conditions are
2091/// false.
2092
2093template <typename T, int Sz>
2094_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2095vector<T, Sz> select(vector<bool, Sz>, vector<T, Sz>, vector<T, Sz>);
2096
2097/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, T TrueVal,
2098/// vector<T,Sz> FalseVals)
2099/// \brief ternary operator for vectors. All vectors must be the same size.
2100/// \param Conds The Condition input values.
2101/// \param TrueVal The scalar value to splat from when conditions are true.
2102/// \param FalseVals The vector values are chosen from when conditions are
2103/// false.
2104
2105template <typename T, int Sz>
2106_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2107vector<T, Sz> select(vector<bool, Sz>, T, vector<T, Sz>);
2108
2109/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2110/// T FalseVal)
2111/// \brief ternary operator for vectors. All vectors must be the same size.
2112/// \param Conds The Condition input values.
2113/// \param TrueVals The vector values are chosen from when conditions are true.
2114/// \param FalseVal The scalar value to splat from when conditions are false.
2115
2116template <typename T, int Sz>
2117_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2118vector<T, Sz> select(vector<bool, Sz>, vector<T, Sz>, T);
2119
2120/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2121/// T FalseVal)
2122/// \brief ternary operator for vectors. All vectors must be the same size.
2123/// \param Conds The Condition input values.
2124/// \param TrueVal The scalar value to splat from when conditions are true.
2125/// \param FalseVal The scalar value to splat from when conditions are false.
2126
2127template <typename T, int Sz>
2128_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2129__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, Sz>> select(
2130 vector<bool, Sz>, T, T);
2131
2132//===----------------------------------------------------------------------===//
2133// sin builtins
2134//===----------------------------------------------------------------------===//
2135
2136/// \fn T sin(T Val)
2137/// \brief Returns the sine of the input value, \a Val.
2138/// \param Val The input value.
2139
2140_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2141_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2142half sin(half);
2143_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2144_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2146_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2147_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2149_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2150_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2152
2153_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2154float sin(float);
2155_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2157_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2159_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2161
2162//===----------------------------------------------------------------------===//
2163// sinh builtins
2164//===----------------------------------------------------------------------===//
2165
2166/// \fn T sinh(T Val)
2167/// \brief Returns the hyperbolic sine of the input value, \a Val.
2168/// \param Val The input value.
2169
2170_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2171_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2172half sinh(half);
2173_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2174_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2176_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2177_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2179_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2180_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2182
2183_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2184float sinh(float);
2185_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2187_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2189_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2191
2192//===----------------------------------------------------------------------===//
2193// sqrt builtins
2194//===----------------------------------------------------------------------===//
2195
2196/// \fn T sqrt(T Val)
2197/// \brief Returns the square root of the input value, \a Val.
2198/// \param Val The input value.
2199
2200_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2201_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2202half sqrt(half);
2203_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2204_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2206_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2207_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2209_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2210_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2212
2213_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2214float sqrt(float);
2215_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2217_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2219_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2221
2222//===----------------------------------------------------------------------===//
2223// step builtins
2224//===----------------------------------------------------------------------===//
2225
2226/// \fn T step(T y, T x)
2227/// \brief Returns 1 if the x parameter is greater than or equal to the y
2228/// parameter; otherwise, 0. vector. \param y [in] The first floating-point
2229/// value to compare. \param x [in] The second floating-point value to compare.
2230///
2231/// Step is based on the following formula: (x >= y) ? 1 : 0
2232
2233_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2234_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2235half step(half, half);
2236_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2237_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2239_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2240_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2242_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2243_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2245
2246_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2247float step(float, float);
2248_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2250_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2252_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2254
2255//===----------------------------------------------------------------------===//
2256// tan builtins
2257//===----------------------------------------------------------------------===//
2258
2259/// \fn T tan(T Val)
2260/// \brief Returns the tangent of the input value, \a Val.
2261/// \param Val The input value.
2262
2263_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2264_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2265half tan(half);
2266_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2267_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2269_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2270_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2272_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2273_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2275
2276_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2277float tan(float);
2278_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2280_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2282_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2284
2285//===----------------------------------------------------------------------===//
2286// tanh builtins
2287//===----------------------------------------------------------------------===//
2288
2289/// \fn T tanh(T Val)
2290/// \brief Returns the hyperbolic tangent of the input value, \a Val.
2291/// \param Val The input value.
2292
2293_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2294_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2295half tanh(half);
2296_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2297_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2299_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2300_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2302_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2303_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2305
2306_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2307float tanh(float);
2308_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2310_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2312_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2314
2315//===----------------------------------------------------------------------===//
2316// trunc builtins
2317//===----------------------------------------------------------------------===//
2318
2319/// \fn T trunc(T Val)
2320/// \brief Returns the truncated integer value of the input value, \a Val.
2321/// \param Val The input value.
2322
2323_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2324_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2325half trunc(half);
2326_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2327_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2329_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2330_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2332_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2333_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2335
2336_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2337float trunc(float);
2338_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2340_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2342_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2344
2345//===----------------------------------------------------------------------===//
2346// Wave* builtins
2347//===----------------------------------------------------------------------===//
2348
2349/// \brief Returns true if the expression is true in all active lanes in the
2350/// current wave.
2351///
2352/// \param Val The boolean expression to evaluate.
2353/// \return True if the expression is true in all lanes.
2354_HLSL_AVAILABILITY(shadermodel, 6.0)
2355_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_true)
2356__attribute__((convergent)) bool WaveActiveAllTrue(bool Val);
2357
2358/// \brief Returns true if the expression is true in any active lane in the
2359/// current wave.
2360///
2361/// \param Val The boolean expression to evaluate.
2362/// \return True if the expression is true in any lane.
2363_HLSL_AVAILABILITY(shadermodel, 6.0)
2364_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_any_true)
2365__attribute__((convergent)) bool WaveActiveAnyTrue(bool Val);
2366
2367/// \brief Counts the number of boolean variables which evaluate to true across
2368/// all active lanes in the current wave.
2369///
2370/// \param Val The input boolean value.
2371/// \return The number of lanes for which the boolean variable evaluates to
2372/// true, across all active lanes in the current wave.
2373_HLSL_AVAILABILITY(shadermodel, 6.0)
2374_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
2375__attribute__((convergent)) uint WaveActiveCountBits(bool Val);
2376
2377/// \brief Returns the index of the current lane within the current wave.
2378_HLSL_AVAILABILITY(shadermodel, 6.0)
2379_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
2380__attribute__((convergent)) uint WaveGetLaneIndex();
2381
2382_HLSL_AVAILABILITY(shadermodel, 6.0)
2383_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_is_first_lane)
2384__attribute__((convergent)) bool WaveIsFirstLane();
2385
2386_HLSL_AVAILABILITY(shadermodel, 6.0)
2387_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_count)
2388__attribute__((convergent)) uint WaveGetLaneCount();
2389
2390//===----------------------------------------------------------------------===//
2391// WaveReadLaneAt builtins
2392//===----------------------------------------------------------------------===//
2393
2394// \brief Returns the value of the expression for the given lane index within
2395// the specified wave.
2396
2397_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2398__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t);
2399_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2400__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t);
2401_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2402__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t);
2403_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2404__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t);
2405
2406#ifdef __HLSL_ENABLE_16_BIT
2407_HLSL_AVAILABILITY(shadermodel, 6.0)
2408_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2409__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t);
2410_HLSL_AVAILABILITY(shadermodel, 6.0)
2411_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2412__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t);
2413_HLSL_AVAILABILITY(shadermodel, 6.0)
2414_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2415__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t);
2416_HLSL_AVAILABILITY(shadermodel, 6.0)
2417_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2418__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t);
2419
2420_HLSL_AVAILABILITY(shadermodel, 6.0)
2421_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2422__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t);
2423_HLSL_AVAILABILITY(shadermodel, 6.0)
2424_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2425__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t);
2426_HLSL_AVAILABILITY(shadermodel, 6.0)
2427_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2428__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t);
2429_HLSL_AVAILABILITY(shadermodel, 6.0)
2430_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2431__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t);
2432#endif
2433
2434_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2435_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2436__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t);
2437_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2438_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2439__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t);
2440_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2441_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2442__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t);
2443_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2444_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2445__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t);
2446
2447_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2448__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t);
2449_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2450__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t);
2451_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2452__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t);
2453_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2454__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t);
2455
2456_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2457__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t);
2458_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2459__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t);
2460_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2461__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t);
2462_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2463__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t);
2464
2465_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2466__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t);
2467_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2468__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t);
2469_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2470__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t);
2471_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2472__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t);
2473
2474_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2475__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t);
2476_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2477__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t);
2478_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2479__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t);
2480_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2481__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t);
2482
2483_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2484__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t);
2485_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2486__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t);
2487_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2488__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t);
2489_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2490__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t);
2491
2492_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2493__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t);
2494_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2495__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t);
2496_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2497__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t);
2498_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2499__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t);
2500
2501//===----------------------------------------------------------------------===//
2502// WaveActiveMax builtins
2503//===----------------------------------------------------------------------===//
2504
2505_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2506_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2507__attribute__((convergent)) half WaveActiveMax(half);
2508_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2509_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2510__attribute__((convergent)) half2 WaveActiveMax(half2);
2511_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2512_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2513__attribute__((convergent)) half3 WaveActiveMax(half3);
2514_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2515_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2516__attribute__((convergent)) half4 WaveActiveMax(half4);
2517
2518#ifdef __HLSL_ENABLE_16_BIT
2519_HLSL_AVAILABILITY(shadermodel, 6.0)
2520_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2521__attribute__((convergent)) int16_t WaveActiveMax(int16_t);
2522_HLSL_AVAILABILITY(shadermodel, 6.0)
2523_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2524__attribute__((convergent)) int16_t2 WaveActiveMax(int16_t2);
2525_HLSL_AVAILABILITY(shadermodel, 6.0)
2526_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2527__attribute__((convergent)) int16_t3 WaveActiveMax(int16_t3);
2528_HLSL_AVAILABILITY(shadermodel, 6.0)
2529_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2530__attribute__((convergent)) int16_t4 WaveActiveMax(int16_t4);
2531
2532_HLSL_AVAILABILITY(shadermodel, 6.0)
2533_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2534__attribute__((convergent)) uint16_t WaveActiveMax(uint16_t);
2535_HLSL_AVAILABILITY(shadermodel, 6.0)
2536_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2537__attribute__((convergent)) uint16_t2 WaveActiveMax(uint16_t2);
2538_HLSL_AVAILABILITY(shadermodel, 6.0)
2539_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2540__attribute__((convergent)) uint16_t3 WaveActiveMax(uint16_t3);
2541_HLSL_AVAILABILITY(shadermodel, 6.0)
2542_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2543__attribute__((convergent)) uint16_t4 WaveActiveMax(uint16_t4);
2544#endif
2545
2546_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2547__attribute__((convergent)) int WaveActiveMax(int);
2548_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2549__attribute__((convergent)) int2 WaveActiveMax(int2);
2550_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2551__attribute__((convergent)) int3 WaveActiveMax(int3);
2552_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2553__attribute__((convergent)) int4 WaveActiveMax(int4);
2554
2555_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2556__attribute__((convergent)) uint WaveActiveMax(uint);
2557_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2558__attribute__((convergent)) uint2 WaveActiveMax(uint2);
2559_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2560__attribute__((convergent)) uint3 WaveActiveMax(uint3);
2561_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2562__attribute__((convergent)) uint4 WaveActiveMax(uint4);
2563
2564_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2565__attribute__((convergent)) int64_t WaveActiveMax(int64_t);
2566_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2567__attribute__((convergent)) int64_t2 WaveActiveMax(int64_t2);
2568_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2569__attribute__((convergent)) int64_t3 WaveActiveMax(int64_t3);
2570_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2571__attribute__((convergent)) int64_t4 WaveActiveMax(int64_t4);
2572
2573_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2574__attribute__((convergent)) uint64_t WaveActiveMax(uint64_t);
2575_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2576__attribute__((convergent)) uint64_t2 WaveActiveMax(uint64_t2);
2577_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2578__attribute__((convergent)) uint64_t3 WaveActiveMax(uint64_t3);
2579_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2580__attribute__((convergent)) uint64_t4 WaveActiveMax(uint64_t4);
2581
2582_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2583__attribute__((convergent)) float WaveActiveMax(float);
2584_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2585__attribute__((convergent)) float2 WaveActiveMax(float2);
2586_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2587__attribute__((convergent)) float3 WaveActiveMax(float3);
2588_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2589__attribute__((convergent)) float4 WaveActiveMax(float4);
2590
2591_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2592__attribute__((convergent)) double WaveActiveMax(double);
2593_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2594__attribute__((convergent)) double2 WaveActiveMax(double2);
2595_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2596__attribute__((convergent)) double3 WaveActiveMax(double3);
2597_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2598__attribute__((convergent)) double4 WaveActiveMax(double4);
2599
2600//===----------------------------------------------------------------------===//
2601// WaveActiveSum builtins
2602//===----------------------------------------------------------------------===//
2603
2604_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2605_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2606__attribute__((convergent)) half WaveActiveSum(half);
2607_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2608_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2609__attribute__((convergent)) half2 WaveActiveSum(half2);
2610_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2611_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2612__attribute__((convergent)) half3 WaveActiveSum(half3);
2613_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2614_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2615__attribute__((convergent)) half4 WaveActiveSum(half4);
2616
2617#ifdef __HLSL_ENABLE_16_BIT
2618_HLSL_AVAILABILITY(shadermodel, 6.0)
2619_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2620__attribute__((convergent)) int16_t WaveActiveSum(int16_t);
2621_HLSL_AVAILABILITY(shadermodel, 6.0)
2622_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2623__attribute__((convergent)) int16_t2 WaveActiveSum(int16_t2);
2624_HLSL_AVAILABILITY(shadermodel, 6.0)
2625_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2626__attribute__((convergent)) int16_t3 WaveActiveSum(int16_t3);
2627_HLSL_AVAILABILITY(shadermodel, 6.0)
2628_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2629__attribute__((convergent)) int16_t4 WaveActiveSum(int16_t4);
2630
2631_HLSL_AVAILABILITY(shadermodel, 6.0)
2632_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2633__attribute__((convergent)) uint16_t WaveActiveSum(uint16_t);
2634_HLSL_AVAILABILITY(shadermodel, 6.0)
2635_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2636__attribute__((convergent)) uint16_t2 WaveActiveSum(uint16_t2);
2637_HLSL_AVAILABILITY(shadermodel, 6.0)
2638_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2639__attribute__((convergent)) uint16_t3 WaveActiveSum(uint16_t3);
2640_HLSL_AVAILABILITY(shadermodel, 6.0)
2641_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2642__attribute__((convergent)) uint16_t4 WaveActiveSum(uint16_t4);
2643#endif
2644
2645_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2646__attribute__((convergent)) int WaveActiveSum(int);
2647_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2648__attribute__((convergent)) int2 WaveActiveSum(int2);
2649_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2650__attribute__((convergent)) int3 WaveActiveSum(int3);
2651_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2652__attribute__((convergent)) int4 WaveActiveSum(int4);
2653
2654_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2655__attribute__((convergent)) uint WaveActiveSum(uint);
2656_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2657__attribute__((convergent)) uint2 WaveActiveSum(uint2);
2658_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2659__attribute__((convergent)) uint3 WaveActiveSum(uint3);
2660_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2661__attribute__((convergent)) uint4 WaveActiveSum(uint4);
2662
2663_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2664__attribute__((convergent)) int64_t WaveActiveSum(int64_t);
2665_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2666__attribute__((convergent)) int64_t2 WaveActiveSum(int64_t2);
2667_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2668__attribute__((convergent)) int64_t3 WaveActiveSum(int64_t3);
2669_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2670__attribute__((convergent)) int64_t4 WaveActiveSum(int64_t4);
2671
2672_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2673__attribute__((convergent)) uint64_t WaveActiveSum(uint64_t);
2674_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2675__attribute__((convergent)) uint64_t2 WaveActiveSum(uint64_t2);
2676_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2677__attribute__((convergent)) uint64_t3 WaveActiveSum(uint64_t3);
2678_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2679__attribute__((convergent)) uint64_t4 WaveActiveSum(uint64_t4);
2680
2681_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2682__attribute__((convergent)) float WaveActiveSum(float);
2683_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2684__attribute__((convergent)) float2 WaveActiveSum(float2);
2685_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2686__attribute__((convergent)) float3 WaveActiveSum(float3);
2687_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2688__attribute__((convergent)) float4 WaveActiveSum(float4);
2689
2690_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2691__attribute__((convergent)) double WaveActiveSum(double);
2692_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2693__attribute__((convergent)) double2 WaveActiveSum(double2);
2694_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2695__attribute__((convergent)) double3 WaveActiveSum(double3);
2696_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2697__attribute__((convergent)) double4 WaveActiveSum(double4);
2698
2699//===----------------------------------------------------------------------===//
2700// sign builtins
2701//===----------------------------------------------------------------------===//
2702
2703/// \fn T sign(T Val)
2704/// \brief Returns -1 if \a Val is less than zero; 0 if \a Val equals zero; and
2705/// 1 if \a Val is greater than zero. \param Val The input value.
2706
2707#ifdef __HLSL_ENABLE_16_BIT
2708_HLSL_AVAILABILITY(shadermodel, 6.2)
2709_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2710int sign(int16_t);
2711_HLSL_AVAILABILITY(shadermodel, 6.2)
2712_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2713int2 sign(int16_t2);
2714_HLSL_AVAILABILITY(shadermodel, 6.2)
2715_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2716int3 sign(int16_t3);
2717_HLSL_AVAILABILITY(shadermodel, 6.2)
2718_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2719int4 sign(int16_t4);
2720
2721_HLSL_AVAILABILITY(shadermodel, 6.2)
2722_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2723int sign(uint16_t);
2724_HLSL_AVAILABILITY(shadermodel, 6.2)
2725_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2726int2 sign(uint16_t2);
2727_HLSL_AVAILABILITY(shadermodel, 6.2)
2728_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2729int3 sign(uint16_t3);
2730_HLSL_AVAILABILITY(shadermodel, 6.2)
2731_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2732int4 sign(uint16_t4);
2733#endif
2734
2735_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2736_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2737int sign(half);
2738_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2739_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2741_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2742_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2744_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2745_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2747
2748_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2749int sign(int);
2750_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2752_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2754_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2756
2757_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2759_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2761_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2763_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2765
2766_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2767int sign(float);
2768_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2770_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2772_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2774
2775_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2777_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2779_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2781_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2783
2784_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2786_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2788_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2790_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2792
2793_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2794int sign(double);
2795_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2797_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2799_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2801
2802//===----------------------------------------------------------------------===//
2803// radians builtins
2804//===----------------------------------------------------------------------===//
2805
2806/// \fn T radians(T Val)
2807/// \brief Converts the specified value from degrees to radians.
2808
2809_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2810_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2811half radians(half);
2812_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2813_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2815_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2816_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2818_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2819_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2821
2822_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2823float radians(float);
2824_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2826_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2828_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2830
2831//===----------------------------------------------------------------------===//
2832// GroupMemoryBarrierWithGroupSync builtins
2833//===----------------------------------------------------------------------===//
2834
2835/// \fn void GroupMemoryBarrierWithGroupSync(void)
2836/// \brief Blocks execution of all threads in a group until all group shared
2837/// accesses have been completed and all threads in the group have reached this
2838/// call.
2839
2840_HLSL_BUILTIN_ALIAS(__builtin_hlsl_group_memory_barrier_with_group_sync)
2841__attribute__((convergent)) void GroupMemoryBarrierWithGroupSync(void);
2842
2843} // namespace hlsl
2844#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
uint firstbithigh(int)
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
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)