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)
__DEVICE__ long long abs(long long __n)
_Float16 __2f16 __attribute__((ext_vector_type(2)))
Zeroes the upper 128 bits (bits 255:128) of all YMM registers.
__device__ double
__device__ float
#define _HLSL_BUILTIN_ALIAS(builtin)
#define _HLSL_AVAILABILITY(platform, version)
#define _HLSL_16BIT_AVAILABILITY(environment, version)
half sinh(half)
int sign(half)
unsigned int uint
An unsigned 32-bit integer.
half radians(half)
double asdouble(uint, uint)
Reinterprets a cast value (two 32-bit values) into a double.
half normalize(half)
vector< half, 4 > half4
half mad(half, half, half)
bool and(bool x, bool y)
Logically ands two boolean vectors elementwise and produces a bool vector output.
bool any(half)
T select(bool, T, T)
ternary operator.
half acos(half)
const uint countbits(int x)
vector< half, 2 > half2
vector< uint, 2 > uint2
vector< int, 3 > int3
vector< uint64_t, 2 > uint64_t2
half rsqrt(half)
half max(half, half)
half saturate(half)
half3 cross(half3, half3)
half abs(half)
half cosh(half)
vector< float, 4 > float4
half dot(half, half)
half sin(half)
vector< int64_t, 4 > int64_t4
unsigned long uint64_t
int dot4add_i8packed(uint, uint, int)
vector< uint64_t, 3 > uint64_t3
half lerp(half, half, half)
half atan2(half y, half x)
half pow(half, half)
bool or(bool, bool)
Logically ors two boolean vectors elementwise and produces a bool vector output.
vector< bool, 4 > bool4
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
half ceil(half)
half atan(half)
void clip(float)
vector< bool, 3 > bool3
half clamp(half, half, half)
vector< uint64_t, 4 > uint64_t4
half sqrt(half)
half step(half, half)
half cos(half)
vector< double, 3 > double3
vector< float, 2 > float2
vector< float, 3 > float3
half log(half)
vector< int64_t, 2 > int64_t2
vector< uint, 3 > uint3
half degrees(half)
half trunc(half)
vector< uint32_t, 2 > uint32_t2
half rcp(half)
half round(half)
vector< double, 4 > double4
vector< double, 2 > double2
half log10(half)
half exp2(half)
vector< bool, 2 > bool2
vector< int, 2 > int2
unsigned int uint32_t
half min(half, half)
half log2(half)
uint dot4add_u8packed(uint, uint, uint)
vector< uint, 4 > uint4
vector< half, 3 > half3
half asin(half)
vector< uint32_t, 4 > uint32_t4
half frac(half)
uint firstbitlow(int)
__attribute__((convergent)) bool WaveActiveAllTrue(bool Val)
Returns true if the expression is true in all active lanes in the current wave.
half tan(half)
bool all(half)
half tanh(half)
half exp(half)
half floor(half)
bool isinf(half)
uint reversebits(uint)
uint32_t2 AddUint64(uint32_t2, uint32_t2)