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// lerp builtins
1297//===----------------------------------------------------------------------===//
1298
1299/// \fn T lerp(T x, T y, T s)
1300/// \brief Returns the linear interpolation of x to y by s.
1301/// \param x [in] The first-floating point value.
1302/// \param y [in] The second-floating point value.
1303/// \param s [in] A value that linearly interpolates between the x parameter and
1304/// the y parameter.
1305///
1306/// Linear interpolation is based on the following formula: x*(1-s) + y*s which
1307/// can equivalently be written as x + s(y-x).
1308
1309_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1310_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1311half lerp(half, half, half);
1312_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1313_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1315_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1316_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1318_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1319_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1321
1322_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1323float lerp(float, float, float);
1324_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1326_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1328_HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp)
1330
1331//===----------------------------------------------------------------------===//
1332// log builtins
1333//===----------------------------------------------------------------------===//
1334
1335/// \fn T log(T Val)
1336/// \brief The base-e logarithm of the input value, \a Val parameter.
1337/// \param Val The input value.
1338///
1339/// If \a Val is negative, this result is undefined. If \a Val is 0, this
1340/// function returns negative infinity.
1341
1342_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1343_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1344half log(half);
1345_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1346_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1348_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1349_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1351_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1352_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1354
1355_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1356float log(float);
1357_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1359_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1361_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log)
1363
1364//===----------------------------------------------------------------------===//
1365// log10 builtins
1366//===----------------------------------------------------------------------===//
1367
1368/// \fn T log10(T Val)
1369/// \brief The base-10 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_log10)
1377half log10(half);
1378_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1379_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1381_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1382_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1384_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1385_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1387
1388_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1389float log10(float);
1390_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1392_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1394_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10)
1396
1397//===----------------------------------------------------------------------===//
1398// log2 builtins
1399//===----------------------------------------------------------------------===//
1400
1401/// \fn T log2(T Val)
1402/// \brief The base-2 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_log2)
1410half log2(half);
1411_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1412_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1414_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1415_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1417_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1418_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1420
1421_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1422float log2(float);
1423_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1425_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1427_HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2)
1429
1430//===----------------------------------------------------------------------===//
1431// mad builtins
1432//===----------------------------------------------------------------------===//
1433
1434/// \fn T mad(T M, T A, T B)
1435/// \brief The result of \a M * \a A + \a B.
1436/// \param M The multiplication value.
1437/// \param A The first addition value.
1438/// \param B The second addition value.
1439
1440_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1441_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1442half mad(half, half, half);
1443_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1444_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1446_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1447_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1449_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1450_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1452
1453#ifdef __HLSL_ENABLE_16_BIT
1454_HLSL_AVAILABILITY(shadermodel, 6.2)
1455_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1456int16_t mad(int16_t, int16_t, int16_t);
1457_HLSL_AVAILABILITY(shadermodel, 6.2)
1458_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1459int16_t2 mad(int16_t2, int16_t2, int16_t2);
1460_HLSL_AVAILABILITY(shadermodel, 6.2)
1461_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1462int16_t3 mad(int16_t3, int16_t3, int16_t3);
1463_HLSL_AVAILABILITY(shadermodel, 6.2)
1464_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1465int16_t4 mad(int16_t4, int16_t4, int16_t4);
1466
1467_HLSL_AVAILABILITY(shadermodel, 6.2)
1468_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1469uint16_t mad(uint16_t, uint16_t, uint16_t);
1470_HLSL_AVAILABILITY(shadermodel, 6.2)
1471_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1472uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2);
1473_HLSL_AVAILABILITY(shadermodel, 6.2)
1474_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1475uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3);
1476_HLSL_AVAILABILITY(shadermodel, 6.2)
1477_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1478uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4);
1479#endif
1480
1481_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1482int mad(int, int, int);
1483_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1485_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1487_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1489
1490_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1492_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1494_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1496_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1498
1499_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1501_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1503_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1505_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1507
1508_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1510_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1512_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1514_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1516
1517_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1518float mad(float, float, float);
1519_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1521_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1523_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1525
1526_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1527double mad(double, double, double);
1528_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1530_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1532_HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad)
1534
1535//===----------------------------------------------------------------------===//
1536// max builtins
1537//===----------------------------------------------------------------------===//
1538
1539/// \fn T max(T X, T Y)
1540/// \brief Return the greater of \a X and \a Y.
1541/// \param X The X input value.
1542/// \param Y The Y input value.
1543
1544_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1545_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1546half max(half, half);
1547_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1548_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1550_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1551_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1553_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1554_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1556
1557#ifdef __HLSL_ENABLE_16_BIT
1558_HLSL_AVAILABILITY(shadermodel, 6.2)
1559_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1560int16_t max(int16_t, int16_t);
1561_HLSL_AVAILABILITY(shadermodel, 6.2)
1562_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1563int16_t2 max(int16_t2, int16_t2);
1564_HLSL_AVAILABILITY(shadermodel, 6.2)
1565_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1566int16_t3 max(int16_t3, int16_t3);
1567_HLSL_AVAILABILITY(shadermodel, 6.2)
1568_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1569int16_t4 max(int16_t4, int16_t4);
1570
1571_HLSL_AVAILABILITY(shadermodel, 6.2)
1572_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1573uint16_t max(uint16_t, uint16_t);
1574_HLSL_AVAILABILITY(shadermodel, 6.2)
1575_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1576uint16_t2 max(uint16_t2, uint16_t2);
1577_HLSL_AVAILABILITY(shadermodel, 6.2)
1578_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1579uint16_t3 max(uint16_t3, uint16_t3);
1580_HLSL_AVAILABILITY(shadermodel, 6.2)
1581_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1582uint16_t4 max(uint16_t4, uint16_t4);
1583#endif
1584
1585_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1586int max(int, int);
1587_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1589_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1591_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1593
1594_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1596_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1598_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1600_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1602
1603_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1605_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1607_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1609_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1611
1612_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1614_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1616_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1618_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1620
1621_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1622float max(float, float);
1623_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1625_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1627_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1629
1630_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1631double max(double, double);
1632_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1634_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1636_HLSL_BUILTIN_ALIAS(__builtin_elementwise_max)
1638
1639//===----------------------------------------------------------------------===//
1640// min builtins
1641//===----------------------------------------------------------------------===//
1642
1643/// \fn T min(T X, T Y)
1644/// \brief Return the lesser of \a X and \a Y.
1645/// \param X The X input value.
1646/// \param Y The Y input value.
1647
1648_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1649_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1650half min(half, half);
1651_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1652_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1654_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1655_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1657_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1658_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1660
1661#ifdef __HLSL_ENABLE_16_BIT
1662_HLSL_AVAILABILITY(shadermodel, 6.2)
1663_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1664int16_t min(int16_t, int16_t);
1665_HLSL_AVAILABILITY(shadermodel, 6.2)
1666_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1667int16_t2 min(int16_t2, int16_t2);
1668_HLSL_AVAILABILITY(shadermodel, 6.2)
1669_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1670int16_t3 min(int16_t3, int16_t3);
1671_HLSL_AVAILABILITY(shadermodel, 6.2)
1672_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1673int16_t4 min(int16_t4, int16_t4);
1674
1675_HLSL_AVAILABILITY(shadermodel, 6.2)
1676_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1677uint16_t min(uint16_t, uint16_t);
1678_HLSL_AVAILABILITY(shadermodel, 6.2)
1679_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1680uint16_t2 min(uint16_t2, uint16_t2);
1681_HLSL_AVAILABILITY(shadermodel, 6.2)
1682_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1683uint16_t3 min(uint16_t3, uint16_t3);
1684_HLSL_AVAILABILITY(shadermodel, 6.2)
1685_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1686uint16_t4 min(uint16_t4, uint16_t4);
1687#endif
1688
1689_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1690int min(int, int);
1691_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1693_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1695_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1697
1698_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1700_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1702_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1704_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1706
1707_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1708float min(float, float);
1709_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1711_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1713_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1715
1716_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1718_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1720_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1722_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1724
1725_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1727_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1729_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1731_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1733
1734_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1735double min(double, double);
1736_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1738_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1740_HLSL_BUILTIN_ALIAS(__builtin_elementwise_min)
1742
1743//===----------------------------------------------------------------------===//
1744// normalize builtins
1745//===----------------------------------------------------------------------===//
1746
1747/// \fn T normalize(T x)
1748/// \brief Returns the normalized unit vector of the specified floating-point
1749/// vector. \param x [in] The vector of floats.
1750///
1751/// Normalize is based on the following formula: x / length(x).
1752
1753_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1754_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1755half normalize(half);
1756_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1757_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1759_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1760_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1762_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1763_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1765
1766_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1767float normalize(float);
1768_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1770_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1772_HLSL_BUILTIN_ALIAS(__builtin_hlsl_normalize)
1774
1775//===----------------------------------------------------------------------===//
1776// or builtins
1777//===----------------------------------------------------------------------===//
1778
1779/// \fn bool or(bool x, bool y)
1780/// \brief Logically ors two boolean vectors elementwise and produces a bool
1781/// vector output.
1782
1783// TODO: Clean up clang-format marker once we've resolved
1784// https://github.com/llvm/llvm-project/issues/127851
1785//
1786// clang-format off
1787_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1788bool or(bool, bool);
1789_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1791_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1793_HLSL_BUILTIN_ALIAS(__builtin_hlsl_or)
1795// clang-format on
1796
1797//===----------------------------------------------------------------------===//
1798// pow builtins
1799//===----------------------------------------------------------------------===//
1800
1801/// \fn T pow(T Val, T Pow)
1802/// \brief Return the value \a Val, raised to the power \a Pow.
1803/// \param Val The input value.
1804/// \param Pow The specified power.
1805
1806_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1807_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1808half pow(half, half);
1809_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1810_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1812_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1813_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1815_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1816_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1818
1819_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1820float pow(float, float);
1821_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1823_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1825_HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow)
1827
1828//===----------------------------------------------------------------------===//
1829// reversebits builtins
1830//===----------------------------------------------------------------------===//
1831
1832/// \fn T reversebits(T Val)
1833/// \brief Return the value \a Val with the bit order reversed.
1834/// \param Val The input value.
1835
1836#ifdef __HLSL_ENABLE_16_BIT
1837_HLSL_AVAILABILITY(shadermodel, 6.2)
1838_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1839uint16_t reversebits(uint16_t);
1840_HLSL_AVAILABILITY(shadermodel, 6.2)
1841_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1842uint16_t2 reversebits(uint16_t2);
1843_HLSL_AVAILABILITY(shadermodel, 6.2)
1844_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1845uint16_t3 reversebits(uint16_t3);
1846_HLSL_AVAILABILITY(shadermodel, 6.2)
1847_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1848uint16_t4 reversebits(uint16_t4);
1849#endif
1850
1851_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1853_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1855_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1857_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1859
1860_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1862_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1864_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1866_HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse)
1868
1869//===----------------------------------------------------------------------===//
1870// cross builtins
1871//===----------------------------------------------------------------------===//
1872
1873/// \fn T cross(T x, T y)
1874/// \brief Returns the cross product of two floating-point, 3D vectors.
1875/// \param x [in] The first floating-point, 3D vector.
1876/// \param y [in] The second floating-point, 3D vector.
1877///
1878/// Result is the cross product of x and y, i.e., the resulting
1879/// components are, in order :
1880/// x[1] * y[2] - y[1] * x[2]
1881/// x[2] * y[0] - y[2] * x[0]
1882/// x[0] * y[1] - y[0] * x[1]
1883
1884_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1885_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf16)
1887
1888_HLSL_BUILTIN_ALIAS(__builtin_hlsl_crossf32)
1890
1891//===----------------------------------------------------------------------===//
1892// rcp builtins
1893//===----------------------------------------------------------------------===//
1894
1895/// \fn T rcp(T x)
1896/// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x.
1897/// \param x The specified input value.
1898///
1899/// The return value is the reciprocal of the \a x parameter.
1900
1901_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1902_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1903half rcp(half);
1904_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1905_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1907_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1908_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1910_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1911_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1913
1914_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1915float rcp(float);
1916_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1918_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1920_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1922
1923_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1924double rcp(double);
1925_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1927_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1929_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp)
1931
1932//===----------------------------------------------------------------------===//
1933// rsqrt builtins
1934//===----------------------------------------------------------------------===//
1935
1936/// \fn T rsqrt(T x)
1937/// \brief Returns the reciprocal of the square root of the specified value.
1938/// ie 1 / sqrt( \a x).
1939/// \param x The specified input value.
1940///
1941/// This function uses the following formula: 1 / sqrt(x).
1942
1943_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1944_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1945half rsqrt(half);
1946_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1947_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1949_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1950_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1952_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1953_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1955
1956_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1957float rsqrt(float);
1958_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1960_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1962_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt)
1964
1965//===----------------------------------------------------------------------===//
1966// round builtins
1967//===----------------------------------------------------------------------===//
1968
1969/// \fn T round(T x)
1970/// \brief Rounds the specified value \a x to the nearest integer.
1971/// \param x The specified input value.
1972///
1973/// The return value is the \a x parameter, rounded to the nearest integer
1974/// within a floating-point type. Halfway cases are
1975/// rounded to the nearest even value.
1976
1977_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1978_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1979half round(half);
1980_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1981_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1983_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1984_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1986_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
1987_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1989
1990_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1991float round(float);
1992_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1994_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1996_HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven)
1998
1999//===----------------------------------------------------------------------===//
2000// saturate builtins
2001//===----------------------------------------------------------------------===//
2002
2003/// \fn T saturate(T Val)
2004/// \brief Returns input value, \a Val, clamped within the range of 0.0f
2005/// to 1.0f. \param Val The input value.
2006
2007_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2008_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2009half saturate(half);
2010_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2011_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2013_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2014_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2016_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2017_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2019
2020_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2021float saturate(float);
2022_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2024_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2026_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2028
2029_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2030double saturate(double);
2031_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2033_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2035_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_saturate)
2037
2038//===----------------------------------------------------------------------===//
2039// select builtins
2040//===----------------------------------------------------------------------===//
2041
2042/// \fn T select(bool Cond, T TrueVal, T FalseVal)
2043/// \brief ternary operator.
2044/// \param Cond The Condition input value.
2045/// \param TrueVal The Value returned if Cond is true.
2046/// \param FalseVal The Value returned if Cond is false.
2047
2048template <typename T>
2049_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2050T select(bool, T, T);
2051
2052/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2053/// vector<T,Sz> FalseVals)
2054/// \brief ternary operator for vectors. All vectors must be the same size.
2055/// \param Conds The Condition input values.
2056/// \param TrueVals The vector values are chosen from when conditions are true.
2057/// \param FalseVals The vector values are chosen from when conditions are
2058/// false.
2059
2060template <typename T, int Sz>
2061_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2062vector<T, Sz> select(vector<bool, Sz>, vector<T, Sz>, vector<T, Sz>);
2063
2064/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, T TrueVal,
2065/// vector<T,Sz> FalseVals)
2066/// \brief ternary operator for vectors. All vectors must be the same size.
2067/// \param Conds The Condition input values.
2068/// \param TrueVal The scalar value to splat from when conditions are true.
2069/// \param FalseVals The vector values are chosen from when conditions are
2070/// false.
2071
2072template <typename T, int Sz>
2073_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2074vector<T, Sz> select(vector<bool, Sz>, T, vector<T, Sz>);
2075
2076/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2077/// T FalseVal)
2078/// \brief ternary operator for vectors. All vectors must be the same size.
2079/// \param Conds The Condition input values.
2080/// \param TrueVals The vector values are chosen from when conditions are true.
2081/// \param FalseVal The scalar value to splat from when conditions are false.
2082
2083template <typename T, int Sz>
2084_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2085vector<T, Sz> select(vector<bool, Sz>, vector<T, Sz>, T);
2086
2087/// \fn vector<T,Sz> select(vector<bool,Sz> Conds, vector<T,Sz> TrueVals,
2088/// T FalseVal)
2089/// \brief ternary operator for vectors. All vectors must be the same size.
2090/// \param Conds The Condition input values.
2091/// \param TrueVal The scalar value to splat from when conditions are true.
2092/// \param FalseVal The scalar value to splat from when conditions are false.
2093
2094template <typename T, int Sz>
2095_HLSL_BUILTIN_ALIAS(__builtin_hlsl_select)
2096__detail::enable_if_t<__detail::is_arithmetic<T>::Value, vector<T, Sz>> select(
2097 vector<bool, Sz>, T, T);
2098
2099//===----------------------------------------------------------------------===//
2100// sin builtins
2101//===----------------------------------------------------------------------===//
2102
2103/// \fn T sin(T Val)
2104/// \brief Returns the sine of the input value, \a Val.
2105/// \param Val The input value.
2106
2107_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2108_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2109half sin(half);
2110_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2111_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2113_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2114_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2116_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2117_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2119
2120_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2121float sin(float);
2122_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2124_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2126_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin)
2128
2129//===----------------------------------------------------------------------===//
2130// sinh builtins
2131//===----------------------------------------------------------------------===//
2132
2133/// \fn T sinh(T Val)
2134/// \brief Returns the hyperbolic sine of the input value, \a Val.
2135/// \param Val The input value.
2136
2137_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2138_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2139half sinh(half);
2140_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2141_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2143_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2144_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2146_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2147_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2149
2150_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2151float sinh(float);
2152_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2154_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2156_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh)
2158
2159//===----------------------------------------------------------------------===//
2160// sqrt builtins
2161//===----------------------------------------------------------------------===//
2162
2163/// \fn T sqrt(T Val)
2164/// \brief Returns the square root of the input value, \a Val.
2165/// \param Val The input value.
2166
2167_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2168_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2169half sqrt(half);
2170_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2171_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2173_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2174_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2176_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2177_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2179
2180_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2181float sqrt(float);
2182_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2184_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2186_HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt)
2188
2189//===----------------------------------------------------------------------===//
2190// step builtins
2191//===----------------------------------------------------------------------===//
2192
2193/// \fn T step(T y, T x)
2194/// \brief Returns 1 if the x parameter is greater than or equal to the y
2195/// parameter; otherwise, 0. vector. \param y [in] The first floating-point
2196/// value to compare. \param x [in] The second floating-point value to compare.
2197///
2198/// Step is based on the following formula: (x >= y) ? 1 : 0
2199
2200_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2201_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2202half step(half, half);
2203_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2204_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2206_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2207_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2209_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2210_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2212
2213_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2214float step(float, float);
2215_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2217_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2219_HLSL_BUILTIN_ALIAS(__builtin_hlsl_step)
2221
2222//===----------------------------------------------------------------------===//
2223// tan builtins
2224//===----------------------------------------------------------------------===//
2225
2226/// \fn T tan(T Val)
2227/// \brief Returns the tangent of the input value, \a Val.
2228/// \param Val The input value.
2229
2230_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2231_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2232half tan(half);
2233_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2234_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2236_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2237_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2239_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2240_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2242
2243_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2244float tan(float);
2245_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2247_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2249_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan)
2251
2252//===----------------------------------------------------------------------===//
2253// tanh builtins
2254//===----------------------------------------------------------------------===//
2255
2256/// \fn T tanh(T Val)
2257/// \brief Returns the hyperbolic tangent of the input value, \a Val.
2258/// \param Val The input value.
2259
2260_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2261_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2262half tanh(half);
2263_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2264_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2266_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2267_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2269_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2270_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2272
2273_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2274float tanh(float);
2275_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2277_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2279_HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh)
2281
2282//===----------------------------------------------------------------------===//
2283// trunc builtins
2284//===----------------------------------------------------------------------===//
2285
2286/// \fn T trunc(T Val)
2287/// \brief Returns the truncated integer value of the input value, \a Val.
2288/// \param Val The input value.
2289
2290_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2291_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2292half trunc(half);
2293_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2294_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2296_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2297_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2299_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2300_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2302
2303_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2304float trunc(float);
2305_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2307_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2309_HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc)
2311
2312//===----------------------------------------------------------------------===//
2313// Wave* builtins
2314//===----------------------------------------------------------------------===//
2315
2316/// \brief Returns true if the expression is true in all active lanes in the
2317/// current wave.
2318///
2319/// \param Val The boolean expression to evaluate.
2320/// \return True if the expression is true in all lanes.
2321_HLSL_AVAILABILITY(shadermodel, 6.0)
2322_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_all_true)
2323__attribute__((convergent)) bool WaveActiveAllTrue(bool Val);
2324
2325/// \brief Returns true if the expression is true in any active lane in the
2326/// current wave.
2327///
2328/// \param Val The boolean expression to evaluate.
2329/// \return True if the expression is true in any lane.
2330_HLSL_AVAILABILITY(shadermodel, 6.0)
2331_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_any_true)
2332__attribute__((convergent)) bool WaveActiveAnyTrue(bool Val);
2333
2334/// \brief Counts the number of boolean variables which evaluate to true across
2335/// all active lanes in the current wave.
2336///
2337/// \param Val The input boolean value.
2338/// \return The number of lanes for which the boolean variable evaluates to
2339/// true, across all active lanes in the current wave.
2340_HLSL_AVAILABILITY(shadermodel, 6.0)
2341_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits)
2342__attribute__((convergent)) uint WaveActiveCountBits(bool Val);
2343
2344/// \brief Returns the index of the current lane within the current wave.
2345_HLSL_AVAILABILITY(shadermodel, 6.0)
2346_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index)
2347__attribute__((convergent)) uint WaveGetLaneIndex();
2348
2349_HLSL_AVAILABILITY(shadermodel, 6.0)
2350_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_is_first_lane)
2351__attribute__((convergent)) bool WaveIsFirstLane();
2352
2353_HLSL_AVAILABILITY(shadermodel, 6.0)
2354_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_count)
2355__attribute__((convergent)) uint WaveGetLaneCount();
2356
2357//===----------------------------------------------------------------------===//
2358// WaveReadLaneAt builtins
2359//===----------------------------------------------------------------------===//
2360
2361// \brief Returns the value of the expression for the given lane index within
2362// the specified wave.
2363
2364_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2365__attribute__((convergent)) bool WaveReadLaneAt(bool, uint32_t);
2366_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2367__attribute__((convergent)) bool2 WaveReadLaneAt(bool2, uint32_t);
2368_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2369__attribute__((convergent)) bool3 WaveReadLaneAt(bool3, uint32_t);
2370_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2371__attribute__((convergent)) bool4 WaveReadLaneAt(bool4, uint32_t);
2372
2373#ifdef __HLSL_ENABLE_16_BIT
2374_HLSL_AVAILABILITY(shadermodel, 6.0)
2375_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2376__attribute__((convergent)) int16_t WaveReadLaneAt(int16_t, uint32_t);
2377_HLSL_AVAILABILITY(shadermodel, 6.0)
2378_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2379__attribute__((convergent)) int16_t2 WaveReadLaneAt(int16_t2, uint32_t);
2380_HLSL_AVAILABILITY(shadermodel, 6.0)
2381_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2382__attribute__((convergent)) int16_t3 WaveReadLaneAt(int16_t3, uint32_t);
2383_HLSL_AVAILABILITY(shadermodel, 6.0)
2384_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2385__attribute__((convergent)) int16_t4 WaveReadLaneAt(int16_t4, uint32_t);
2386
2387_HLSL_AVAILABILITY(shadermodel, 6.0)
2388_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2389__attribute__((convergent)) uint16_t WaveReadLaneAt(uint16_t, uint32_t);
2390_HLSL_AVAILABILITY(shadermodel, 6.0)
2391_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2392__attribute__((convergent)) uint16_t2 WaveReadLaneAt(uint16_t2, uint32_t);
2393_HLSL_AVAILABILITY(shadermodel, 6.0)
2394_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2395__attribute__((convergent)) uint16_t3 WaveReadLaneAt(uint16_t3, uint32_t);
2396_HLSL_AVAILABILITY(shadermodel, 6.0)
2397_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2398__attribute__((convergent)) uint16_t4 WaveReadLaneAt(uint16_t4, uint32_t);
2399#endif
2400
2401_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2402_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2403__attribute__((convergent)) half WaveReadLaneAt(half, uint32_t);
2404_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2405_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2406__attribute__((convergent)) half2 WaveReadLaneAt(half2, uint32_t);
2407_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2408_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2409__attribute__((convergent)) half3 WaveReadLaneAt(half3, uint32_t);
2410_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2411_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2412__attribute__((convergent)) half4 WaveReadLaneAt(half4, uint32_t);
2413
2414_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2415__attribute__((convergent)) int WaveReadLaneAt(int, uint32_t);
2416_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2417__attribute__((convergent)) int2 WaveReadLaneAt(int2, uint32_t);
2418_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2419__attribute__((convergent)) int3 WaveReadLaneAt(int3, uint32_t);
2420_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2421__attribute__((convergent)) int4 WaveReadLaneAt(int4, uint32_t);
2422
2423_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2424__attribute__((convergent)) uint WaveReadLaneAt(uint, uint32_t);
2425_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2426__attribute__((convergent)) uint2 WaveReadLaneAt(uint2, uint32_t);
2427_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2428__attribute__((convergent)) uint3 WaveReadLaneAt(uint3, uint32_t);
2429_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2430__attribute__((convergent)) uint4 WaveReadLaneAt(uint4, uint32_t);
2431
2432_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2433__attribute__((convergent)) float WaveReadLaneAt(float, uint32_t);
2434_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2435__attribute__((convergent)) float2 WaveReadLaneAt(float2, uint32_t);
2436_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2437__attribute__((convergent)) float3 WaveReadLaneAt(float3, uint32_t);
2438_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2439__attribute__((convergent)) float4 WaveReadLaneAt(float4, uint32_t);
2440
2441_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2442__attribute__((convergent)) int64_t WaveReadLaneAt(int64_t, uint32_t);
2443_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2444__attribute__((convergent)) int64_t2 WaveReadLaneAt(int64_t2, uint32_t);
2445_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2446__attribute__((convergent)) int64_t3 WaveReadLaneAt(int64_t3, uint32_t);
2447_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2448__attribute__((convergent)) int64_t4 WaveReadLaneAt(int64_t4, uint32_t);
2449
2450_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2451__attribute__((convergent)) uint64_t WaveReadLaneAt(uint64_t, uint32_t);
2452_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2453__attribute__((convergent)) uint64_t2 WaveReadLaneAt(uint64_t2, uint32_t);
2454_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2455__attribute__((convergent)) uint64_t3 WaveReadLaneAt(uint64_t3, uint32_t);
2456_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2457__attribute__((convergent)) uint64_t4 WaveReadLaneAt(uint64_t4, uint32_t);
2458
2459_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2460__attribute__((convergent)) double WaveReadLaneAt(double, uint32_t);
2461_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2462__attribute__((convergent)) double2 WaveReadLaneAt(double2, uint32_t);
2463_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2464__attribute__((convergent)) double3 WaveReadLaneAt(double3, uint32_t);
2465_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_read_lane_at)
2466__attribute__((convergent)) double4 WaveReadLaneAt(double4, uint32_t);
2467
2468//===----------------------------------------------------------------------===//
2469// WaveActiveMax builtins
2470//===----------------------------------------------------------------------===//
2471
2472_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2473_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2474__attribute__((convergent)) half WaveActiveMax(half);
2475_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2476_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2477__attribute__((convergent)) half2 WaveActiveMax(half2);
2478_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2479_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2480__attribute__((convergent)) half3 WaveActiveMax(half3);
2481_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2482_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2483__attribute__((convergent)) half4 WaveActiveMax(half4);
2484
2485#ifdef __HLSL_ENABLE_16_BIT
2486_HLSL_AVAILABILITY(shadermodel, 6.0)
2487_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2488__attribute__((convergent)) int16_t WaveActiveMax(int16_t);
2489_HLSL_AVAILABILITY(shadermodel, 6.0)
2490_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2491__attribute__((convergent)) int16_t2 WaveActiveMax(int16_t2);
2492_HLSL_AVAILABILITY(shadermodel, 6.0)
2493_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2494__attribute__((convergent)) int16_t3 WaveActiveMax(int16_t3);
2495_HLSL_AVAILABILITY(shadermodel, 6.0)
2496_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2497__attribute__((convergent)) int16_t4 WaveActiveMax(int16_t4);
2498
2499_HLSL_AVAILABILITY(shadermodel, 6.0)
2500_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2501__attribute__((convergent)) uint16_t WaveActiveMax(uint16_t);
2502_HLSL_AVAILABILITY(shadermodel, 6.0)
2503_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2504__attribute__((convergent)) uint16_t2 WaveActiveMax(uint16_t2);
2505_HLSL_AVAILABILITY(shadermodel, 6.0)
2506_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2507__attribute__((convergent)) uint16_t3 WaveActiveMax(uint16_t3);
2508_HLSL_AVAILABILITY(shadermodel, 6.0)
2509_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2510__attribute__((convergent)) uint16_t4 WaveActiveMax(uint16_t4);
2511#endif
2512
2513_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2514__attribute__((convergent)) int WaveActiveMax(int);
2515_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2516__attribute__((convergent)) int2 WaveActiveMax(int2);
2517_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2518__attribute__((convergent)) int3 WaveActiveMax(int3);
2519_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2520__attribute__((convergent)) int4 WaveActiveMax(int4);
2521
2522_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2523__attribute__((convergent)) uint WaveActiveMax(uint);
2524_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2525__attribute__((convergent)) uint2 WaveActiveMax(uint2);
2526_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2527__attribute__((convergent)) uint3 WaveActiveMax(uint3);
2528_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2529__attribute__((convergent)) uint4 WaveActiveMax(uint4);
2530
2531_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2532__attribute__((convergent)) int64_t WaveActiveMax(int64_t);
2533_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2534__attribute__((convergent)) int64_t2 WaveActiveMax(int64_t2);
2535_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2536__attribute__((convergent)) int64_t3 WaveActiveMax(int64_t3);
2537_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2538__attribute__((convergent)) int64_t4 WaveActiveMax(int64_t4);
2539
2540_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2541__attribute__((convergent)) uint64_t WaveActiveMax(uint64_t);
2542_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2543__attribute__((convergent)) uint64_t2 WaveActiveMax(uint64_t2);
2544_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2545__attribute__((convergent)) uint64_t3 WaveActiveMax(uint64_t3);
2546_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2547__attribute__((convergent)) uint64_t4 WaveActiveMax(uint64_t4);
2548
2549_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2550__attribute__((convergent)) float WaveActiveMax(float);
2551_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2552__attribute__((convergent)) float2 WaveActiveMax(float2);
2553_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2554__attribute__((convergent)) float3 WaveActiveMax(float3);
2555_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2556__attribute__((convergent)) float4 WaveActiveMax(float4);
2557
2558_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2559__attribute__((convergent)) double WaveActiveMax(double);
2560_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2561__attribute__((convergent)) double2 WaveActiveMax(double2);
2562_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2563__attribute__((convergent)) double3 WaveActiveMax(double3);
2564_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_max)
2565__attribute__((convergent)) double4 WaveActiveMax(double4);
2566
2567//===----------------------------------------------------------------------===//
2568// WaveActiveSum builtins
2569//===----------------------------------------------------------------------===//
2570
2571_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2572_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2573__attribute__((convergent)) half WaveActiveSum(half);
2574_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2575_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2576__attribute__((convergent)) half2 WaveActiveSum(half2);
2577_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2578_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2579__attribute__((convergent)) half3 WaveActiveSum(half3);
2580_HLSL_16BIT_AVAILABILITY(shadermodel, 6.0)
2581_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2582__attribute__((convergent)) half4 WaveActiveSum(half4);
2583
2584#ifdef __HLSL_ENABLE_16_BIT
2585_HLSL_AVAILABILITY(shadermodel, 6.0)
2586_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2587__attribute__((convergent)) int16_t WaveActiveSum(int16_t);
2588_HLSL_AVAILABILITY(shadermodel, 6.0)
2589_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2590__attribute__((convergent)) int16_t2 WaveActiveSum(int16_t2);
2591_HLSL_AVAILABILITY(shadermodel, 6.0)
2592_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2593__attribute__((convergent)) int16_t3 WaveActiveSum(int16_t3);
2594_HLSL_AVAILABILITY(shadermodel, 6.0)
2595_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2596__attribute__((convergent)) int16_t4 WaveActiveSum(int16_t4);
2597
2598_HLSL_AVAILABILITY(shadermodel, 6.0)
2599_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2600__attribute__((convergent)) uint16_t WaveActiveSum(uint16_t);
2601_HLSL_AVAILABILITY(shadermodel, 6.0)
2602_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2603__attribute__((convergent)) uint16_t2 WaveActiveSum(uint16_t2);
2604_HLSL_AVAILABILITY(shadermodel, 6.0)
2605_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2606__attribute__((convergent)) uint16_t3 WaveActiveSum(uint16_t3);
2607_HLSL_AVAILABILITY(shadermodel, 6.0)
2608_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2609__attribute__((convergent)) uint16_t4 WaveActiveSum(uint16_t4);
2610#endif
2611
2612_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2613__attribute__((convergent)) int WaveActiveSum(int);
2614_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2615__attribute__((convergent)) int2 WaveActiveSum(int2);
2616_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2617__attribute__((convergent)) int3 WaveActiveSum(int3);
2618_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2619__attribute__((convergent)) int4 WaveActiveSum(int4);
2620
2621_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2622__attribute__((convergent)) uint WaveActiveSum(uint);
2623_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2624__attribute__((convergent)) uint2 WaveActiveSum(uint2);
2625_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2626__attribute__((convergent)) uint3 WaveActiveSum(uint3);
2627_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2628__attribute__((convergent)) uint4 WaveActiveSum(uint4);
2629
2630_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2631__attribute__((convergent)) int64_t WaveActiveSum(int64_t);
2632_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2633__attribute__((convergent)) int64_t2 WaveActiveSum(int64_t2);
2634_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2635__attribute__((convergent)) int64_t3 WaveActiveSum(int64_t3);
2636_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2637__attribute__((convergent)) int64_t4 WaveActiveSum(int64_t4);
2638
2639_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2640__attribute__((convergent)) uint64_t WaveActiveSum(uint64_t);
2641_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2642__attribute__((convergent)) uint64_t2 WaveActiveSum(uint64_t2);
2643_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2644__attribute__((convergent)) uint64_t3 WaveActiveSum(uint64_t3);
2645_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2646__attribute__((convergent)) uint64_t4 WaveActiveSum(uint64_t4);
2647
2648_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2649__attribute__((convergent)) float WaveActiveSum(float);
2650_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2651__attribute__((convergent)) float2 WaveActiveSum(float2);
2652_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2653__attribute__((convergent)) float3 WaveActiveSum(float3);
2654_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2655__attribute__((convergent)) float4 WaveActiveSum(float4);
2656
2657_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2658__attribute__((convergent)) double WaveActiveSum(double);
2659_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2660__attribute__((convergent)) double2 WaveActiveSum(double2);
2661_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2662__attribute__((convergent)) double3 WaveActiveSum(double3);
2663_HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_sum)
2664__attribute__((convergent)) double4 WaveActiveSum(double4);
2665
2666//===----------------------------------------------------------------------===//
2667// sign builtins
2668//===----------------------------------------------------------------------===//
2669
2670/// \fn T sign(T Val)
2671/// \brief Returns -1 if \a Val is less than zero; 0 if \a Val equals zero; and
2672/// 1 if \a Val is greater than zero. \param Val The input value.
2673
2674#ifdef __HLSL_ENABLE_16_BIT
2675_HLSL_AVAILABILITY(shadermodel, 6.2)
2676_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2677int sign(int16_t);
2678_HLSL_AVAILABILITY(shadermodel, 6.2)
2679_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2680int2 sign(int16_t2);
2681_HLSL_AVAILABILITY(shadermodel, 6.2)
2682_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2683int3 sign(int16_t3);
2684_HLSL_AVAILABILITY(shadermodel, 6.2)
2685_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2686int4 sign(int16_t4);
2687
2688_HLSL_AVAILABILITY(shadermodel, 6.2)
2689_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2690int sign(uint16_t);
2691_HLSL_AVAILABILITY(shadermodel, 6.2)
2692_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2693int2 sign(uint16_t2);
2694_HLSL_AVAILABILITY(shadermodel, 6.2)
2695_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2696int3 sign(uint16_t3);
2697_HLSL_AVAILABILITY(shadermodel, 6.2)
2698_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2699int4 sign(uint16_t4);
2700#endif
2701
2702_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2703_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2704int sign(half);
2705_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2706_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2708_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2709_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2711_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2712_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2714
2715_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2716int sign(int);
2717_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2719_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2721_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2723
2724_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2726_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2728_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2730_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2732
2733_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2734int sign(float);
2735_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2737_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2739_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2741
2742_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2744_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2746_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2748_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2750
2751_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2753_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2755_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2757_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2759
2760_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2761int sign(double);
2762_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2764_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2766_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_sign)
2768
2769//===----------------------------------------------------------------------===//
2770// radians builtins
2771//===----------------------------------------------------------------------===//
2772
2773/// \fn T radians(T Val)
2774/// \brief Converts the specified value from degrees to radians.
2775
2776_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2777_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2778half radians(half);
2779_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2780_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2782_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2783_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2785_HLSL_16BIT_AVAILABILITY(shadermodel, 6.2)
2786_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2788
2789_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2790float radians(float);
2791_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2793_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2795_HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_radians)
2797
2798//===----------------------------------------------------------------------===//
2799// GroupMemoryBarrierWithGroupSync builtins
2800//===----------------------------------------------------------------------===//
2801
2802/// \fn void GroupMemoryBarrierWithGroupSync(void)
2803/// \brief Blocks execution of all threads in a group until all group shared
2804/// accesses have been completed and all threads in the group have reached this
2805/// call.
2806
2807_HLSL_BUILTIN_ALIAS(__builtin_hlsl_group_memory_barrier_with_group_sync)
2809
2810} // namespace hlsl
2811#endif //_HLSL_HLSL_ALIAS_INTRINSICS_H_
#define V(N, I)
Definition: ASTContext.h:3597
__device__ double
__device__ int
__device__ float
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
#define _HLSL_BUILTIN_ALIAS(builtin)
#define _HLSL_AVAILABILITY(platform, version)
#define _HLSL_16BIT_AVAILABILITY(environment, version)
#define or
Definition: iso646.h:24
#define and
Definition: iso646.h:17
int sign(half)
unsigned int uint
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 any(half)
T select(bool, T, T)
ternary operator.
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)
vector< float, 4 > float4
half dot(half, 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)
vector< bool, 4 > bool4
void GroupMemoryBarrierWithGroupSync(void)
Blocks execution of all threads in a group until all group shared accesses have been completed and al...
uint firstbithigh(int)
long int64_t
vector< int64_t, 3 > int64_t3
vector< int, 4 > int4
void clip(float)
vector< bool, 3 > bool3
half clamp(half, half, half)
vector< uint64_t, 4 > uint64_t4
half step(half, half)
vector< double, 3 > double3
vector< float, 2 > float2
vector< float, 3 > float3
vector< int64_t, 2 > int64_t2
vector< uint, 3 > uint3
half degrees(half)
vector< uint32_t, 2 > uint32_t2
half rcp(half)
vector< double, 4 > double4
vector< double, 2 > double2
vector< bool, 2 > bool2
vector< int, 2 > int2
unsigned int uint32_t
half min(half, half)
uint dot4add_u8packed(uint, uint, uint)
vector< uint, 4 > uint4
vector< half, 3 > half3
vector< uint32_t, 4 > uint32_t4
half frac(half)
uint firstbitlow(int)
bool all(half)
bool isinf(half)
uint reversebits(uint)
uint32_t2 AddUint64(uint32_t2, uint32_t2)
unsigned int uint
An unsigned 32-bit integer.
#define sinh(__x)
Definition: tgmath.h:373
#define asin(__x)
Definition: tgmath.h:112
#define sqrt(__x)
Definition: tgmath.h:520
#define acos(__x)
Definition: tgmath.h:83
#define exp(__x)
Definition: tgmath.h:431
#define atan2(__x, __y)
Definition: tgmath.h:566
#define exp2(__x)
Definition: tgmath.h:670
#define sin(__x)
Definition: tgmath.h:286
#define log2(__x)
Definition: tgmath.h:970
#define cosh(__x)
Definition: tgmath.h:344
#define trunc(__x)
Definition: tgmath.h:1216
#define round(__x)
Definition: tgmath.h:1148
#define tan(__x)
Definition: tgmath.h:315
#define cos(__x)
Definition: tgmath.h:257
#define log10(__x)
Definition: tgmath.h:936
#define pow(__x, __y)
Definition: tgmath.h:490
#define tanh(__x)
Definition: tgmath.h:402
#define atan(__x)
Definition: tgmath.h:141
#define floor(__x)
Definition: tgmath.h:722
#define ceil(__x)
Definition: tgmath.h:601
#define log(__x)
Definition: tgmath.h:460