181ad6265SDimitry Andric //===----- hlsl_intrinsics.h - HLSL definitions for intrinsics ----------===// 281ad6265SDimitry Andric // 381ad6265SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 481ad6265SDimitry Andric // See https://llvm.org/LICENSE.txt for license information. 581ad6265SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 681ad6265SDimitry Andric // 781ad6265SDimitry Andric //===----------------------------------------------------------------------===// 881ad6265SDimitry Andric 981ad6265SDimitry Andric #ifndef _HLSL_HLSL_INTRINSICS_H_ 1081ad6265SDimitry Andric #define _HLSL_HLSL_INTRINSICS_H_ 1181ad6265SDimitry Andric 12bdd1243dSDimitry Andric namespace hlsl { 13bdd1243dSDimitry Andric 145f757f3fSDimitry Andric // Note: Functions in this file are sorted alphabetically, then grouped by base 155f757f3fSDimitry Andric // element type, and the element types are sorted by size, then singed integer, 165f757f3fSDimitry Andric // unsigned integer and floating point. Keeping this ordering consistent will 175f757f3fSDimitry Andric // help keep this file manageable as it grows. 1881ad6265SDimitry Andric 195f757f3fSDimitry Andric #define _HLSL_BUILTIN_ALIAS(builtin) \ 205f757f3fSDimitry Andric __attribute__((clang_builtin_alias(builtin))) 21*0fca6ea1SDimitry Andric #define _HLSL_AVAILABILITY(platform, version) \ 22*0fca6ea1SDimitry Andric __attribute__((availability(platform, introduced = version))) 23*0fca6ea1SDimitry Andric #define _HLSL_AVAILABILITY_STAGE(platform, version, stage) \ 24*0fca6ea1SDimitry Andric __attribute__(( \ 25*0fca6ea1SDimitry Andric availability(platform, introduced = version, environment = stage))) 26*0fca6ea1SDimitry Andric 27*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 28*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY(platform, version) \ 29*0fca6ea1SDimitry Andric __attribute__((availability(platform, introduced = version))) 30*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY_STAGE(platform, version, stage) \ 31*0fca6ea1SDimitry Andric __attribute__(( \ 32*0fca6ea1SDimitry Andric availability(platform, introduced = version, environment = stage))) 33*0fca6ea1SDimitry Andric #else 34*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY(environment, version) 35*0fca6ea1SDimitry Andric #define _HLSL_16BIT_AVAILABILITY_STAGE(environment, version, stage) 36*0fca6ea1SDimitry Andric #endif 375f757f3fSDimitry Andric 385f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 39bdd1243dSDimitry Andric // abs builtins 405f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 41*0fca6ea1SDimitry Andric 42*0fca6ea1SDimitry Andric /// \fn T abs(T Val) 43*0fca6ea1SDimitry Andric /// \brief Returns the absolute value of the input value, \a Val. 44*0fca6ea1SDimitry Andric /// \param Val The input value. 45*0fca6ea1SDimitry Andric 46bdd1243dSDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 47*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 485f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 49bdd1243dSDimitry Andric int16_t abs(int16_t); 50*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 515f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 52bdd1243dSDimitry Andric int16_t2 abs(int16_t2); 53*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 545f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 55bdd1243dSDimitry Andric int16_t3 abs(int16_t3); 56*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 575f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 58bdd1243dSDimitry Andric int16_t4 abs(int16_t4); 59*0fca6ea1SDimitry Andric #endif 605f757f3fSDimitry Andric 61*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 62*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 635f757f3fSDimitry Andric half abs(half); 64*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 66bdd1243dSDimitry Andric half2 abs(half2); 67*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 69bdd1243dSDimitry Andric half3 abs(half3); 70*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 72bdd1243dSDimitry Andric half4 abs(half4); 73bdd1243dSDimitry Andric 745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 755f757f3fSDimitry Andric int abs(int); 765f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 775f757f3fSDimitry Andric int2 abs(int2); 785f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 795f757f3fSDimitry Andric int3 abs(int3); 805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 815f757f3fSDimitry Andric int4 abs(int4); 825f757f3fSDimitry Andric 835f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 845f757f3fSDimitry Andric float abs(float); 855f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 86bdd1243dSDimitry Andric float2 abs(float2); 875f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 88bdd1243dSDimitry Andric float3 abs(float3); 895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 90bdd1243dSDimitry Andric float4 abs(float4); 915f757f3fSDimitry Andric 925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 93bdd1243dSDimitry Andric int64_t abs(int64_t); 945f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 95bdd1243dSDimitry Andric int64_t2 abs(int64_t2); 965f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 97bdd1243dSDimitry Andric int64_t3 abs(int64_t3); 985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 99bdd1243dSDimitry Andric int64_t4 abs(int64_t4); 1005f757f3fSDimitry Andric 1015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 1025f757f3fSDimitry Andric double abs(double); 1035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 104bdd1243dSDimitry Andric double2 abs(double2); 1055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 106bdd1243dSDimitry Andric double3 abs(double3); 1075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_abs) 108bdd1243dSDimitry Andric double4 abs(double4); 109bdd1243dSDimitry Andric 1105f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 111*0fca6ea1SDimitry Andric // acos builtins 112*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 113*0fca6ea1SDimitry Andric 114*0fca6ea1SDimitry Andric /// \fn T acos(T Val) 115*0fca6ea1SDimitry Andric /// \brief Returns the arccosine of the input value, \a Val. 116*0fca6ea1SDimitry Andric /// \param Val The input value. 117*0fca6ea1SDimitry Andric 118*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 119*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 120*0fca6ea1SDimitry Andric half acos(half); 121*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 122*0fca6ea1SDimitry Andric half2 acos(half2); 123*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 124*0fca6ea1SDimitry Andric half3 acos(half3); 125*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 126*0fca6ea1SDimitry Andric half4 acos(half4); 127*0fca6ea1SDimitry Andric #endif 128*0fca6ea1SDimitry Andric 129*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 130*0fca6ea1SDimitry Andric float acos(float); 131*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 132*0fca6ea1SDimitry Andric float2 acos(float2); 133*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 134*0fca6ea1SDimitry Andric float3 acos(float3); 135*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_acos) 136*0fca6ea1SDimitry Andric float4 acos(float4); 137*0fca6ea1SDimitry Andric 138*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 139*0fca6ea1SDimitry Andric // all builtins 140*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 141*0fca6ea1SDimitry Andric 142*0fca6ea1SDimitry Andric /// \fn bool all(T x) 143*0fca6ea1SDimitry Andric /// \brief Returns True if all components of the \a x parameter are non-zero; 144*0fca6ea1SDimitry Andric /// otherwise, false. \param x The input value. 145*0fca6ea1SDimitry Andric 146*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 147*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 148*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 149*0fca6ea1SDimitry Andric bool all(int16_t); 150*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 151*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 152*0fca6ea1SDimitry Andric bool all(int16_t2); 153*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 154*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 155*0fca6ea1SDimitry Andric bool all(int16_t3); 156*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 157*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 158*0fca6ea1SDimitry Andric bool all(int16_t4); 159*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 160*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 161*0fca6ea1SDimitry Andric bool all(uint16_t); 162*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 163*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 164*0fca6ea1SDimitry Andric bool all(uint16_t2); 165*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 166*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 167*0fca6ea1SDimitry Andric bool all(uint16_t3); 168*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 169*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 170*0fca6ea1SDimitry Andric bool all(uint16_t4); 171*0fca6ea1SDimitry Andric #endif 172*0fca6ea1SDimitry Andric 173*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 174*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 175*0fca6ea1SDimitry Andric bool all(half); 176*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 177*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 178*0fca6ea1SDimitry Andric bool all(half2); 179*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 180*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 181*0fca6ea1SDimitry Andric bool all(half3); 182*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 183*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 184*0fca6ea1SDimitry Andric bool all(half4); 185*0fca6ea1SDimitry Andric 186*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 187*0fca6ea1SDimitry Andric bool all(bool); 188*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 189*0fca6ea1SDimitry Andric bool all(bool2); 190*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 191*0fca6ea1SDimitry Andric bool all(bool3); 192*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 193*0fca6ea1SDimitry Andric bool all(bool4); 194*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 195*0fca6ea1SDimitry Andric 196*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 197*0fca6ea1SDimitry Andric bool all(int); 198*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 199*0fca6ea1SDimitry Andric bool all(int2); 200*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 201*0fca6ea1SDimitry Andric bool all(int3); 202*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 203*0fca6ea1SDimitry Andric bool all(int4); 204*0fca6ea1SDimitry Andric 205*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 206*0fca6ea1SDimitry Andric bool all(uint); 207*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 208*0fca6ea1SDimitry Andric bool all(uint2); 209*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 210*0fca6ea1SDimitry Andric bool all(uint3); 211*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 212*0fca6ea1SDimitry Andric bool all(uint4); 213*0fca6ea1SDimitry Andric 214*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 215*0fca6ea1SDimitry Andric bool all(float); 216*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 217*0fca6ea1SDimitry Andric bool all(float2); 218*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 219*0fca6ea1SDimitry Andric bool all(float3); 220*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 221*0fca6ea1SDimitry Andric bool all(float4); 222*0fca6ea1SDimitry Andric 223*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 224*0fca6ea1SDimitry Andric bool all(int64_t); 225*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 226*0fca6ea1SDimitry Andric bool all(int64_t2); 227*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 228*0fca6ea1SDimitry Andric bool all(int64_t3); 229*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 230*0fca6ea1SDimitry Andric bool all(int64_t4); 231*0fca6ea1SDimitry Andric 232*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 233*0fca6ea1SDimitry Andric bool all(uint64_t); 234*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 235*0fca6ea1SDimitry Andric bool all(uint64_t2); 236*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 237*0fca6ea1SDimitry Andric bool all(uint64_t3); 238*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 239*0fca6ea1SDimitry Andric bool all(uint64_t4); 240*0fca6ea1SDimitry Andric 241*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 242*0fca6ea1SDimitry Andric bool all(double); 243*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 244*0fca6ea1SDimitry Andric bool all(double2); 245*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 246*0fca6ea1SDimitry Andric bool all(double3); 247*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_all) 248*0fca6ea1SDimitry Andric bool all(double4); 249*0fca6ea1SDimitry Andric 250*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 251*0fca6ea1SDimitry Andric // any builtins 252*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 253*0fca6ea1SDimitry Andric 254*0fca6ea1SDimitry Andric /// \fn bool any(T x) 255*0fca6ea1SDimitry Andric /// \brief Returns True if any components of the \a x parameter are non-zero; 256*0fca6ea1SDimitry Andric /// otherwise, false. \param x The input value. 257*0fca6ea1SDimitry Andric 258*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 259*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 260*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 261*0fca6ea1SDimitry Andric bool any(int16_t); 262*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 263*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 264*0fca6ea1SDimitry Andric bool any(int16_t2); 265*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 266*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 267*0fca6ea1SDimitry Andric bool any(int16_t3); 268*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 269*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 270*0fca6ea1SDimitry Andric bool any(int16_t4); 271*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 272*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 273*0fca6ea1SDimitry Andric bool any(uint16_t); 274*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 275*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 276*0fca6ea1SDimitry Andric bool any(uint16_t2); 277*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 278*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 279*0fca6ea1SDimitry Andric bool any(uint16_t3); 280*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 281*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 282*0fca6ea1SDimitry Andric bool any(uint16_t4); 283*0fca6ea1SDimitry Andric #endif 284*0fca6ea1SDimitry Andric 285*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 286*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 287*0fca6ea1SDimitry Andric bool any(half); 288*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 289*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 290*0fca6ea1SDimitry Andric bool any(half2); 291*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 292*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 293*0fca6ea1SDimitry Andric bool any(half3); 294*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 295*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 296*0fca6ea1SDimitry Andric bool any(half4); 297*0fca6ea1SDimitry Andric 298*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 299*0fca6ea1SDimitry Andric bool any(bool); 300*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 301*0fca6ea1SDimitry Andric bool any(bool2); 302*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 303*0fca6ea1SDimitry Andric bool any(bool3); 304*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 305*0fca6ea1SDimitry Andric bool any(bool4); 306*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 307*0fca6ea1SDimitry Andric 308*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 309*0fca6ea1SDimitry Andric bool any(int); 310*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 311*0fca6ea1SDimitry Andric bool any(int2); 312*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 313*0fca6ea1SDimitry Andric bool any(int3); 314*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 315*0fca6ea1SDimitry Andric bool any(int4); 316*0fca6ea1SDimitry Andric 317*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 318*0fca6ea1SDimitry Andric bool any(uint); 319*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 320*0fca6ea1SDimitry Andric bool any(uint2); 321*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 322*0fca6ea1SDimitry Andric bool any(uint3); 323*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 324*0fca6ea1SDimitry Andric bool any(uint4); 325*0fca6ea1SDimitry Andric 326*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 327*0fca6ea1SDimitry Andric bool any(float); 328*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 329*0fca6ea1SDimitry Andric bool any(float2); 330*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 331*0fca6ea1SDimitry Andric bool any(float3); 332*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 333*0fca6ea1SDimitry Andric bool any(float4); 334*0fca6ea1SDimitry Andric 335*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 336*0fca6ea1SDimitry Andric bool any(int64_t); 337*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 338*0fca6ea1SDimitry Andric bool any(int64_t2); 339*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 340*0fca6ea1SDimitry Andric bool any(int64_t3); 341*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 342*0fca6ea1SDimitry Andric bool any(int64_t4); 343*0fca6ea1SDimitry Andric 344*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 345*0fca6ea1SDimitry Andric bool any(uint64_t); 346*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 347*0fca6ea1SDimitry Andric bool any(uint64_t2); 348*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 349*0fca6ea1SDimitry Andric bool any(uint64_t3); 350*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 351*0fca6ea1SDimitry Andric bool any(uint64_t4); 352*0fca6ea1SDimitry Andric 353*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 354*0fca6ea1SDimitry Andric bool any(double); 355*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 356*0fca6ea1SDimitry Andric bool any(double2); 357*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 358*0fca6ea1SDimitry Andric bool any(double3); 359*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_any) 360*0fca6ea1SDimitry Andric bool any(double4); 361*0fca6ea1SDimitry Andric 362*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 363*0fca6ea1SDimitry Andric // asin builtins 364*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 365*0fca6ea1SDimitry Andric 366*0fca6ea1SDimitry Andric /// \fn T asin(T Val) 367*0fca6ea1SDimitry Andric /// \brief Returns the arcsine of the input value, \a Val. 368*0fca6ea1SDimitry Andric /// \param Val The input value. 369*0fca6ea1SDimitry Andric 370*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 371*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 372*0fca6ea1SDimitry Andric half asin(half); 373*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 374*0fca6ea1SDimitry Andric half2 asin(half2); 375*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 376*0fca6ea1SDimitry Andric half3 asin(half3); 377*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 378*0fca6ea1SDimitry Andric half4 asin(half4); 379*0fca6ea1SDimitry Andric #endif 380*0fca6ea1SDimitry Andric 381*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 382*0fca6ea1SDimitry Andric float asin(float); 383*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 384*0fca6ea1SDimitry Andric float2 asin(float2); 385*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 386*0fca6ea1SDimitry Andric float3 asin(float3); 387*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_asin) 388*0fca6ea1SDimitry Andric float4 asin(float4); 389*0fca6ea1SDimitry Andric 390*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 391*0fca6ea1SDimitry Andric // atan builtins 392*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 393*0fca6ea1SDimitry Andric 394*0fca6ea1SDimitry Andric /// \fn T atan(T Val) 395*0fca6ea1SDimitry Andric /// \brief Returns the arctangent of the input value, \a Val. 396*0fca6ea1SDimitry Andric /// \param Val The input value. 397*0fca6ea1SDimitry Andric 398*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 399*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 400*0fca6ea1SDimitry Andric half atan(half); 401*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 402*0fca6ea1SDimitry Andric half2 atan(half2); 403*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 404*0fca6ea1SDimitry Andric half3 atan(half3); 405*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 406*0fca6ea1SDimitry Andric half4 atan(half4); 407*0fca6ea1SDimitry Andric #endif 408*0fca6ea1SDimitry Andric 409*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 410*0fca6ea1SDimitry Andric float atan(float); 411*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 412*0fca6ea1SDimitry Andric float2 atan(float2); 413*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 414*0fca6ea1SDimitry Andric float3 atan(float3); 415*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_atan) 416*0fca6ea1SDimitry Andric float4 atan(float4); 417*0fca6ea1SDimitry Andric 418*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 419bdd1243dSDimitry Andric // ceil builtins 4205f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 421*0fca6ea1SDimitry Andric 422*0fca6ea1SDimitry Andric /// \fn T ceil(T Val) 423*0fca6ea1SDimitry Andric /// \brief Returns the smallest integer value that is greater than or equal to 424*0fca6ea1SDimitry Andric /// the input value, \a Val. 425*0fca6ea1SDimitry Andric /// \param Val The input value. 426*0fca6ea1SDimitry Andric 427*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 4285f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 429bdd1243dSDimitry Andric half ceil(half); 430*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 4315f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 432bdd1243dSDimitry Andric half2 ceil(half2); 433*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 4345f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 435bdd1243dSDimitry Andric half3 ceil(half3); 436*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 4375f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 438bdd1243dSDimitry Andric half4 ceil(half4); 439bdd1243dSDimitry Andric 4405f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 4415f757f3fSDimitry Andric float ceil(float); 4425f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 443bdd1243dSDimitry Andric float2 ceil(float2); 4445f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 445bdd1243dSDimitry Andric float3 ceil(float3); 4465f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_ceil) 447bdd1243dSDimitry Andric float4 ceil(float4); 448bdd1243dSDimitry Andric 449*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 450*0fca6ea1SDimitry Andric // clamp builtins 451*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 452*0fca6ea1SDimitry Andric 453*0fca6ea1SDimitry Andric /// \fn T clamp(T X, T Min, T Max) 454*0fca6ea1SDimitry Andric /// \brief Clamps the specified value \a X to the specified 455*0fca6ea1SDimitry Andric /// minimum ( \a Min) and maximum ( \a Max) range. 456*0fca6ea1SDimitry Andric /// \param X A value to clamp. 457*0fca6ea1SDimitry Andric /// \param Min The specified minimum range. 458*0fca6ea1SDimitry Andric /// \param Max The specified maximum range. 459*0fca6ea1SDimitry Andric /// 460*0fca6ea1SDimitry Andric /// Returns The clamped value for the \a X parameter. 461*0fca6ea1SDimitry Andric /// For values of -INF or INF, clamp will behave as expected. 462*0fca6ea1SDimitry Andric /// However for values of NaN, the results are undefined. 463*0fca6ea1SDimitry Andric 464*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 465*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 466*0fca6ea1SDimitry Andric half clamp(half, half, half); 467*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 468*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 469*0fca6ea1SDimitry Andric half2 clamp(half2, half2, half2); 470*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 471*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 472*0fca6ea1SDimitry Andric half3 clamp(half3, half3, half3); 473*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 474*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 475*0fca6ea1SDimitry Andric half4 clamp(half4, half4, half4); 476*0fca6ea1SDimitry Andric 477*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 478*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 479*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 480*0fca6ea1SDimitry Andric int16_t clamp(int16_t, int16_t, int16_t); 481*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 482*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 483*0fca6ea1SDimitry Andric int16_t2 clamp(int16_t2, int16_t2, int16_t2); 484*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 485*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 486*0fca6ea1SDimitry Andric int16_t3 clamp(int16_t3, int16_t3, int16_t3); 487*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 488*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 489*0fca6ea1SDimitry Andric int16_t4 clamp(int16_t4, int16_t4, int16_t4); 490*0fca6ea1SDimitry Andric 491*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 492*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 493*0fca6ea1SDimitry Andric uint16_t clamp(uint16_t, uint16_t, uint16_t); 494*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 495*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 496*0fca6ea1SDimitry Andric uint16_t2 clamp(uint16_t2, uint16_t2, uint16_t2); 497*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 498*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 499*0fca6ea1SDimitry Andric uint16_t3 clamp(uint16_t3, uint16_t3, uint16_t3); 500*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 501*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 502*0fca6ea1SDimitry Andric uint16_t4 clamp(uint16_t4, uint16_t4, uint16_t4); 503*0fca6ea1SDimitry Andric #endif 504*0fca6ea1SDimitry Andric 505*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 506*0fca6ea1SDimitry Andric int clamp(int, int, int); 507*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 508*0fca6ea1SDimitry Andric int2 clamp(int2, int2, int2); 509*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 510*0fca6ea1SDimitry Andric int3 clamp(int3, int3, int3); 511*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 512*0fca6ea1SDimitry Andric int4 clamp(int4, int4, int4); 513*0fca6ea1SDimitry Andric 514*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 515*0fca6ea1SDimitry Andric uint clamp(uint, uint, uint); 516*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 517*0fca6ea1SDimitry Andric uint2 clamp(uint2, uint2, uint2); 518*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 519*0fca6ea1SDimitry Andric uint3 clamp(uint3, uint3, uint3); 520*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 521*0fca6ea1SDimitry Andric uint4 clamp(uint4, uint4, uint4); 522*0fca6ea1SDimitry Andric 523*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 524*0fca6ea1SDimitry Andric int64_t clamp(int64_t, int64_t, int64_t); 525*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 526*0fca6ea1SDimitry Andric int64_t2 clamp(int64_t2, int64_t2, int64_t2); 527*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 528*0fca6ea1SDimitry Andric int64_t3 clamp(int64_t3, int64_t3, int64_t3); 529*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 530*0fca6ea1SDimitry Andric int64_t4 clamp(int64_t4, int64_t4, int64_t4); 531*0fca6ea1SDimitry Andric 532*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 533*0fca6ea1SDimitry Andric uint64_t clamp(uint64_t, uint64_t, uint64_t); 534*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 535*0fca6ea1SDimitry Andric uint64_t2 clamp(uint64_t2, uint64_t2, uint64_t2); 536*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 537*0fca6ea1SDimitry Andric uint64_t3 clamp(uint64_t3, uint64_t3, uint64_t3); 538*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 539*0fca6ea1SDimitry Andric uint64_t4 clamp(uint64_t4, uint64_t4, uint64_t4); 540*0fca6ea1SDimitry Andric 541*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 542*0fca6ea1SDimitry Andric float clamp(float, float, float); 543*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 544*0fca6ea1SDimitry Andric float2 clamp(float2, float2, float2); 545*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 546*0fca6ea1SDimitry Andric float3 clamp(float3, float3, float3); 547*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 548*0fca6ea1SDimitry Andric float4 clamp(float4, float4, float4); 549*0fca6ea1SDimitry Andric 550*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 551*0fca6ea1SDimitry Andric double clamp(double, double, double); 552*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 553*0fca6ea1SDimitry Andric double2 clamp(double2, double2, double2); 554*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 555*0fca6ea1SDimitry Andric double3 clamp(double3, double3, double3); 556*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_clamp) 557*0fca6ea1SDimitry Andric double4 clamp(double4, double4, double4); 558bdd1243dSDimitry Andric 5595f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 560bdd1243dSDimitry Andric // cos builtins 5615f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 562*0fca6ea1SDimitry Andric 563*0fca6ea1SDimitry Andric /// \fn T cos(T Val) 564*0fca6ea1SDimitry Andric /// \brief Returns the cosine of the input value, \a Val. 565*0fca6ea1SDimitry Andric /// \param Val The input value. 566*0fca6ea1SDimitry Andric 567*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 5685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 5695f757f3fSDimitry Andric half cos(half); 570*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 5715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 572bdd1243dSDimitry Andric half2 cos(half2); 573*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 5745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 575bdd1243dSDimitry Andric half3 cos(half3); 576*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 5775f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 578bdd1243dSDimitry Andric half4 cos(half4); 579bdd1243dSDimitry Andric 5805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 5815f757f3fSDimitry Andric float cos(float); 5825f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 583bdd1243dSDimitry Andric float2 cos(float2); 5845f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 585bdd1243dSDimitry Andric float3 cos(float3); 5865f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cos) 587bdd1243dSDimitry Andric float4 cos(float4); 588bdd1243dSDimitry Andric 589*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 590*0fca6ea1SDimitry Andric // cosh builtins 591*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 592*0fca6ea1SDimitry Andric 593*0fca6ea1SDimitry Andric /// \fn T cosh(T Val) 594*0fca6ea1SDimitry Andric /// \brief Returns the hyperbolic cosine of the input value, \a Val. 595*0fca6ea1SDimitry Andric /// \param Val The input value. 596*0fca6ea1SDimitry Andric 597*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 598*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 599*0fca6ea1SDimitry Andric half cosh(half); 600*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 601*0fca6ea1SDimitry Andric half2 cosh(half2); 602*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 603*0fca6ea1SDimitry Andric half3 cosh(half3); 604*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 605*0fca6ea1SDimitry Andric half4 cosh(half4); 606*0fca6ea1SDimitry Andric #endif 607*0fca6ea1SDimitry Andric 608*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 609*0fca6ea1SDimitry Andric float cosh(float); 610*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 611*0fca6ea1SDimitry Andric float2 cosh(float2); 612*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 613*0fca6ea1SDimitry Andric float3 cosh(float3); 614*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_cosh) 615*0fca6ea1SDimitry Andric float4 cosh(float4); 616*0fca6ea1SDimitry Andric 617*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 618*0fca6ea1SDimitry Andric // dot product builtins 619*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 620*0fca6ea1SDimitry Andric 621*0fca6ea1SDimitry Andric /// \fn K dot(T X, T Y) 622*0fca6ea1SDimitry Andric /// \brief Return the dot product (a scalar value) of \a X and \a Y. 623*0fca6ea1SDimitry Andric /// \param X The X input value. 624*0fca6ea1SDimitry Andric /// \param Y The Y input value. 625*0fca6ea1SDimitry Andric 626*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 627*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 628*0fca6ea1SDimitry Andric half dot(half, half); 629*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 630*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 631*0fca6ea1SDimitry Andric half dot(half2, half2); 632*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 633*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 634*0fca6ea1SDimitry Andric half dot(half3, half3); 635*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 636*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 637*0fca6ea1SDimitry Andric half dot(half4, half4); 638*0fca6ea1SDimitry Andric 639*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 640*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 641*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 642*0fca6ea1SDimitry Andric int16_t dot(int16_t, int16_t); 643*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 644*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 645*0fca6ea1SDimitry Andric int16_t dot(int16_t2, int16_t2); 646*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 647*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 648*0fca6ea1SDimitry Andric int16_t dot(int16_t3, int16_t3); 649*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 650*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 651*0fca6ea1SDimitry Andric int16_t dot(int16_t4, int16_t4); 652*0fca6ea1SDimitry Andric 653*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 654*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 655*0fca6ea1SDimitry Andric uint16_t dot(uint16_t, uint16_t); 656*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 657*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 658*0fca6ea1SDimitry Andric uint16_t dot(uint16_t2, uint16_t2); 659*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 660*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 661*0fca6ea1SDimitry Andric uint16_t dot(uint16_t3, uint16_t3); 662*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 663*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 664*0fca6ea1SDimitry Andric uint16_t dot(uint16_t4, uint16_t4); 665*0fca6ea1SDimitry Andric #endif 666*0fca6ea1SDimitry Andric 667*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 668*0fca6ea1SDimitry Andric float dot(float, float); 669*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 670*0fca6ea1SDimitry Andric float dot(float2, float2); 671*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 672*0fca6ea1SDimitry Andric float dot(float3, float3); 673*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 674*0fca6ea1SDimitry Andric float dot(float4, float4); 675*0fca6ea1SDimitry Andric 676*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 677*0fca6ea1SDimitry Andric double dot(double, double); 678*0fca6ea1SDimitry Andric 679*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 680*0fca6ea1SDimitry Andric int dot(int, int); 681*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 682*0fca6ea1SDimitry Andric int dot(int2, int2); 683*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 684*0fca6ea1SDimitry Andric int dot(int3, int3); 685*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 686*0fca6ea1SDimitry Andric int dot(int4, int4); 687*0fca6ea1SDimitry Andric 688*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 689*0fca6ea1SDimitry Andric uint dot(uint, uint); 690*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 691*0fca6ea1SDimitry Andric uint dot(uint2, uint2); 692*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 693*0fca6ea1SDimitry Andric uint dot(uint3, uint3); 694*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 695*0fca6ea1SDimitry Andric uint dot(uint4, uint4); 696*0fca6ea1SDimitry Andric 697*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 698*0fca6ea1SDimitry Andric int64_t dot(int64_t, int64_t); 699*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 700*0fca6ea1SDimitry Andric int64_t dot(int64_t2, int64_t2); 701*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 702*0fca6ea1SDimitry Andric int64_t dot(int64_t3, int64_t3); 703*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 704*0fca6ea1SDimitry Andric int64_t dot(int64_t4, int64_t4); 705*0fca6ea1SDimitry Andric 706*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 707*0fca6ea1SDimitry Andric uint64_t dot(uint64_t, uint64_t); 708*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 709*0fca6ea1SDimitry Andric uint64_t dot(uint64_t2, uint64_t2); 710*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 711*0fca6ea1SDimitry Andric uint64_t dot(uint64_t3, uint64_t3); 712*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_dot) 713*0fca6ea1SDimitry Andric uint64_t dot(uint64_t4, uint64_t4); 714*0fca6ea1SDimitry Andric 715*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 716*0fca6ea1SDimitry Andric // exp builtins 717*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 718*0fca6ea1SDimitry Andric 719*0fca6ea1SDimitry Andric /// \fn T exp(T x) 720*0fca6ea1SDimitry Andric /// \brief Returns the base-e exponential, or \a e**x, of the specified value. 721*0fca6ea1SDimitry Andric /// \param x The specified input value. 722*0fca6ea1SDimitry Andric /// 723*0fca6ea1SDimitry Andric /// The return value is the base-e exponential of the \a x parameter. 724*0fca6ea1SDimitry Andric 725*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 726*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 727*0fca6ea1SDimitry Andric half exp(half); 728*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 729*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 730*0fca6ea1SDimitry Andric half2 exp(half2); 731*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 732*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 733*0fca6ea1SDimitry Andric half3 exp(half3); 734*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 735*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 736*0fca6ea1SDimitry Andric half4 exp(half4); 737*0fca6ea1SDimitry Andric 738*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 739*0fca6ea1SDimitry Andric float exp(float); 740*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 741*0fca6ea1SDimitry Andric float2 exp(float2); 742*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 743*0fca6ea1SDimitry Andric float3 exp(float3); 744*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp) 745*0fca6ea1SDimitry Andric float4 exp(float4); 746*0fca6ea1SDimitry Andric 747*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 748*0fca6ea1SDimitry Andric // exp2 builtins 749*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 750*0fca6ea1SDimitry Andric 751*0fca6ea1SDimitry Andric /// \fn T exp2(T x) 752*0fca6ea1SDimitry Andric /// \brief Returns the base 2 exponential, or \a 2**x, of the specified value. 753*0fca6ea1SDimitry Andric /// \param x The specified input value. 754*0fca6ea1SDimitry Andric /// 755*0fca6ea1SDimitry Andric /// The base 2 exponential of the \a x parameter. 756*0fca6ea1SDimitry Andric 757*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 758*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 759*0fca6ea1SDimitry Andric half exp2(half); 760*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 761*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 762*0fca6ea1SDimitry Andric half2 exp2(half2); 763*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 764*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 765*0fca6ea1SDimitry Andric half3 exp2(half3); 766*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 767*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 768*0fca6ea1SDimitry Andric half4 exp2(half4); 769*0fca6ea1SDimitry Andric 770*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 771*0fca6ea1SDimitry Andric float exp2(float); 772*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 773*0fca6ea1SDimitry Andric float2 exp2(float2); 774*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 775*0fca6ea1SDimitry Andric float3 exp2(float3); 776*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_exp2) 777*0fca6ea1SDimitry Andric float4 exp2(float4); 778bdd1243dSDimitry Andric 7795f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 7805f757f3fSDimitry Andric // floor builtins 7815f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 782*0fca6ea1SDimitry Andric 783*0fca6ea1SDimitry Andric /// \fn T floor(T Val) 784*0fca6ea1SDimitry Andric /// \brief Returns the largest integer that is less than or equal to the input 785*0fca6ea1SDimitry Andric /// value, \a Val. 786*0fca6ea1SDimitry Andric /// \param Val The input value. 787*0fca6ea1SDimitry Andric 788*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 7895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 7905f757f3fSDimitry Andric half floor(half); 791*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 7925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 7935f757f3fSDimitry Andric half2 floor(half2); 794*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 7955f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 7965f757f3fSDimitry Andric half3 floor(half3); 797*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 7985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 7995f757f3fSDimitry Andric half4 floor(half4); 800bdd1243dSDimitry Andric 8015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 8025f757f3fSDimitry Andric float floor(float); 8035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 8045f757f3fSDimitry Andric float2 floor(float2); 8055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 8065f757f3fSDimitry Andric float3 floor(float3); 8075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_floor) 8085f757f3fSDimitry Andric float4 floor(float4); 809bdd1243dSDimitry Andric 810*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 811*0fca6ea1SDimitry Andric // frac builtins 812*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 813*0fca6ea1SDimitry Andric 814*0fca6ea1SDimitry Andric /// \fn T frac(T x) 815*0fca6ea1SDimitry Andric /// \brief Returns the fractional (or decimal) part of x. \a x parameter. 816*0fca6ea1SDimitry Andric /// \param x The specified input value. 817*0fca6ea1SDimitry Andric /// 818*0fca6ea1SDimitry Andric /// If \a the return value is greater than or equal to 0 and less than 1. 819*0fca6ea1SDimitry Andric 820*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 821*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 822*0fca6ea1SDimitry Andric half frac(half); 823*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 824*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 825*0fca6ea1SDimitry Andric half2 frac(half2); 826*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 827*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 828*0fca6ea1SDimitry Andric half3 frac(half3); 829*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 830*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 831*0fca6ea1SDimitry Andric half4 frac(half4); 832*0fca6ea1SDimitry Andric 833*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 834*0fca6ea1SDimitry Andric float frac(float); 835*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 836*0fca6ea1SDimitry Andric float2 frac(float2); 837*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 838*0fca6ea1SDimitry Andric float3 frac(float3); 839*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_frac) 840*0fca6ea1SDimitry Andric float4 frac(float4); 841*0fca6ea1SDimitry Andric 842*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 843*0fca6ea1SDimitry Andric // isinf builtins 844*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 845*0fca6ea1SDimitry Andric 846*0fca6ea1SDimitry Andric /// \fn T isinf(T x) 847*0fca6ea1SDimitry Andric /// \brief Determines if the specified value \a x is infinite. 848*0fca6ea1SDimitry Andric /// \param x The specified input value. 849*0fca6ea1SDimitry Andric /// 850*0fca6ea1SDimitry Andric /// Returns a value of the same size as the input, with a value set 851*0fca6ea1SDimitry Andric /// to True if the x parameter is +INF or -INF. Otherwise, False. 852*0fca6ea1SDimitry Andric 853*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 854*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 855*0fca6ea1SDimitry Andric bool isinf(half); 856*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 857*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 858*0fca6ea1SDimitry Andric bool2 isinf(half2); 859*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 860*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 861*0fca6ea1SDimitry Andric bool3 isinf(half3); 862*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 863*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 864*0fca6ea1SDimitry Andric bool4 isinf(half4); 865*0fca6ea1SDimitry Andric 866*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 867*0fca6ea1SDimitry Andric bool isinf(float); 868*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 869*0fca6ea1SDimitry Andric bool2 isinf(float2); 870*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 871*0fca6ea1SDimitry Andric bool3 isinf(float3); 872*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_isinf) 873*0fca6ea1SDimitry Andric bool4 isinf(float4); 874*0fca6ea1SDimitry Andric 875*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 876*0fca6ea1SDimitry Andric // lerp builtins 877*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 878*0fca6ea1SDimitry Andric 879*0fca6ea1SDimitry Andric /// \fn T lerp(T x, T y, T s) 880*0fca6ea1SDimitry Andric /// \brief Returns the linear interpolation of x to y by s. 881*0fca6ea1SDimitry Andric /// \param x [in] The first-floating point value. 882*0fca6ea1SDimitry Andric /// \param y [in] The second-floating point value. 883*0fca6ea1SDimitry Andric /// \param s [in] A value that linearly interpolates between the x parameter and 884*0fca6ea1SDimitry Andric /// the y parameter. 885*0fca6ea1SDimitry Andric /// 886*0fca6ea1SDimitry Andric /// Linear interpolation is based on the following formula: x*(1-s) + y*s which 887*0fca6ea1SDimitry Andric /// can equivalently be written as x + s(y-x). 888*0fca6ea1SDimitry Andric 889*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 890*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 891*0fca6ea1SDimitry Andric half lerp(half, half, half); 892*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 893*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 894*0fca6ea1SDimitry Andric half2 lerp(half2, half2, half2); 895*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 896*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 897*0fca6ea1SDimitry Andric half3 lerp(half3, half3, half3); 898*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 899*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 900*0fca6ea1SDimitry Andric half4 lerp(half4, half4, half4); 901*0fca6ea1SDimitry Andric 902*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 903*0fca6ea1SDimitry Andric float lerp(float, float, float); 904*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 905*0fca6ea1SDimitry Andric float2 lerp(float2, float2, float2); 906*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 907*0fca6ea1SDimitry Andric float3 lerp(float3, float3, float3); 908*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_lerp) 909*0fca6ea1SDimitry Andric float4 lerp(float4, float4, float4); 910bdd1243dSDimitry Andric 9115f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 91206c3fb27SDimitry Andric // log builtins 9135f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 914*0fca6ea1SDimitry Andric 915*0fca6ea1SDimitry Andric /// \fn T log(T Val) 916*0fca6ea1SDimitry Andric /// \brief The base-e logarithm of the input value, \a Val parameter. 917*0fca6ea1SDimitry Andric /// \param Val The input value. 918*0fca6ea1SDimitry Andric /// 919*0fca6ea1SDimitry Andric /// If \a Val is negative, this result is undefined. If \a Val is 0, this 920*0fca6ea1SDimitry Andric /// function returns negative infinity. 921*0fca6ea1SDimitry Andric 922*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9235f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 9245f757f3fSDimitry Andric half log(half); 925*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9265f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 92706c3fb27SDimitry Andric half2 log(half2); 928*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9295f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 93006c3fb27SDimitry Andric half3 log(half3); 931*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9325f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 93306c3fb27SDimitry Andric half4 log(half4); 93406c3fb27SDimitry Andric 9355f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 9365f757f3fSDimitry Andric float log(float); 9375f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 93806c3fb27SDimitry Andric float2 log(float2); 9395f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 94006c3fb27SDimitry Andric float3 log(float3); 9415f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log) 94206c3fb27SDimitry Andric float4 log(float4); 94306c3fb27SDimitry Andric 9445f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 94506c3fb27SDimitry Andric // log10 builtins 9465f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 947*0fca6ea1SDimitry Andric 948*0fca6ea1SDimitry Andric /// \fn T log10(T Val) 949*0fca6ea1SDimitry Andric /// \brief The base-10 logarithm of the input value, \a Val parameter. 950*0fca6ea1SDimitry Andric /// \param Val The input value. 951*0fca6ea1SDimitry Andric /// 952*0fca6ea1SDimitry Andric /// If \a Val is negative, this result is undefined. If \a Val is 0, this 953*0fca6ea1SDimitry Andric /// function returns negative infinity. 954*0fca6ea1SDimitry Andric 955*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9565f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 95706c3fb27SDimitry Andric half log10(half); 958*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9595f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 96006c3fb27SDimitry Andric half2 log10(half2); 961*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9625f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 96306c3fb27SDimitry Andric half3 log10(half3); 964*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 96606c3fb27SDimitry Andric half4 log10(half4); 96706c3fb27SDimitry Andric 9685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 9695f757f3fSDimitry Andric float log10(float); 9705f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 97106c3fb27SDimitry Andric float2 log10(float2); 9725f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 97306c3fb27SDimitry Andric float3 log10(float3); 9745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log10) 97506c3fb27SDimitry Andric float4 log10(float4); 97606c3fb27SDimitry Andric 9775f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 9785f757f3fSDimitry Andric // log2 builtins 9795f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 980*0fca6ea1SDimitry Andric 981*0fca6ea1SDimitry Andric /// \fn T log2(T Val) 982*0fca6ea1SDimitry Andric /// \brief The base-2 logarithm of the input value, \a Val parameter. 983*0fca6ea1SDimitry Andric /// \param Val The input value. 984*0fca6ea1SDimitry Andric /// 985*0fca6ea1SDimitry Andric /// If \a Val is negative, this result is undefined. If \a Val is 0, this 986*0fca6ea1SDimitry Andric /// function returns negative infinity. 987*0fca6ea1SDimitry Andric 988*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 9905f757f3fSDimitry Andric half log2(half); 991*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 9935f757f3fSDimitry Andric half2 log2(half2); 994*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9955f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 9965f757f3fSDimitry Andric half3 log2(half3); 997*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 9985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 9995f757f3fSDimitry Andric half4 log2(half4); 10005f757f3fSDimitry Andric 10015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 10025f757f3fSDimitry Andric float log2(float); 10035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 10045f757f3fSDimitry Andric float2 log2(float2); 10055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 10065f757f3fSDimitry Andric float3 log2(float3); 10075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_log2) 10085f757f3fSDimitry Andric float4 log2(float4); 10095f757f3fSDimitry Andric 1010*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1011*0fca6ea1SDimitry Andric // mad builtins 1012*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1013*0fca6ea1SDimitry Andric 1014*0fca6ea1SDimitry Andric /// \fn T mad(T M, T A, T B) 1015*0fca6ea1SDimitry Andric /// \brief The result of \a M * \a A + \a B. 1016*0fca6ea1SDimitry Andric /// \param M The multiplication value. 1017*0fca6ea1SDimitry Andric /// \param A The first addition value. 1018*0fca6ea1SDimitry Andric /// \param B The second addition value. 1019*0fca6ea1SDimitry Andric 1020*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1021*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1022*0fca6ea1SDimitry Andric half mad(half, half, half); 1023*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1024*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1025*0fca6ea1SDimitry Andric half2 mad(half2, half2, half2); 1026*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1027*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1028*0fca6ea1SDimitry Andric half3 mad(half3, half3, half3); 1029*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1030*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1031*0fca6ea1SDimitry Andric half4 mad(half4, half4, half4); 1032*0fca6ea1SDimitry Andric 1033*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 1034*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1035*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1036*0fca6ea1SDimitry Andric int16_t mad(int16_t, int16_t, int16_t); 1037*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1038*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1039*0fca6ea1SDimitry Andric int16_t2 mad(int16_t2, int16_t2, int16_t2); 1040*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1041*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1042*0fca6ea1SDimitry Andric int16_t3 mad(int16_t3, int16_t3, int16_t3); 1043*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1044*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1045*0fca6ea1SDimitry Andric int16_t4 mad(int16_t4, int16_t4, int16_t4); 1046*0fca6ea1SDimitry Andric 1047*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1048*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1049*0fca6ea1SDimitry Andric uint16_t mad(uint16_t, uint16_t, uint16_t); 1050*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1051*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1052*0fca6ea1SDimitry Andric uint16_t2 mad(uint16_t2, uint16_t2, uint16_t2); 1053*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1054*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1055*0fca6ea1SDimitry Andric uint16_t3 mad(uint16_t3, uint16_t3, uint16_t3); 1056*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 1057*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1058*0fca6ea1SDimitry Andric uint16_t4 mad(uint16_t4, uint16_t4, uint16_t4); 1059*0fca6ea1SDimitry Andric #endif 1060*0fca6ea1SDimitry Andric 1061*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1062*0fca6ea1SDimitry Andric int mad(int, int, int); 1063*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1064*0fca6ea1SDimitry Andric int2 mad(int2, int2, int2); 1065*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1066*0fca6ea1SDimitry Andric int3 mad(int3, int3, int3); 1067*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1068*0fca6ea1SDimitry Andric int4 mad(int4, int4, int4); 1069*0fca6ea1SDimitry Andric 1070*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1071*0fca6ea1SDimitry Andric uint mad(uint, uint, uint); 1072*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1073*0fca6ea1SDimitry Andric uint2 mad(uint2, uint2, uint2); 1074*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1075*0fca6ea1SDimitry Andric uint3 mad(uint3, uint3, uint3); 1076*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1077*0fca6ea1SDimitry Andric uint4 mad(uint4, uint4, uint4); 1078*0fca6ea1SDimitry Andric 1079*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1080*0fca6ea1SDimitry Andric int64_t mad(int64_t, int64_t, int64_t); 1081*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1082*0fca6ea1SDimitry Andric int64_t2 mad(int64_t2, int64_t2, int64_t2); 1083*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1084*0fca6ea1SDimitry Andric int64_t3 mad(int64_t3, int64_t3, int64_t3); 1085*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1086*0fca6ea1SDimitry Andric int64_t4 mad(int64_t4, int64_t4, int64_t4); 1087*0fca6ea1SDimitry Andric 1088*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1089*0fca6ea1SDimitry Andric uint64_t mad(uint64_t, uint64_t, uint64_t); 1090*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1091*0fca6ea1SDimitry Andric uint64_t2 mad(uint64_t2, uint64_t2, uint64_t2); 1092*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1093*0fca6ea1SDimitry Andric uint64_t3 mad(uint64_t3, uint64_t3, uint64_t3); 1094*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1095*0fca6ea1SDimitry Andric uint64_t4 mad(uint64_t4, uint64_t4, uint64_t4); 1096*0fca6ea1SDimitry Andric 1097*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1098*0fca6ea1SDimitry Andric float mad(float, float, float); 1099*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1100*0fca6ea1SDimitry Andric float2 mad(float2, float2, float2); 1101*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1102*0fca6ea1SDimitry Andric float3 mad(float3, float3, float3); 1103*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1104*0fca6ea1SDimitry Andric float4 mad(float4, float4, float4); 1105*0fca6ea1SDimitry Andric 1106*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1107*0fca6ea1SDimitry Andric double mad(double, double, double); 1108*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1109*0fca6ea1SDimitry Andric double2 mad(double2, double2, double2); 1110*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1111*0fca6ea1SDimitry Andric double3 mad(double3, double3, double3); 1112*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_mad) 1113*0fca6ea1SDimitry Andric double4 mad(double4, double4, double4); 11145f757f3fSDimitry Andric 11155f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 11165f757f3fSDimitry Andric // max builtins 11175f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1118*0fca6ea1SDimitry Andric 1119*0fca6ea1SDimitry Andric /// \fn T max(T X, T Y) 1120*0fca6ea1SDimitry Andric /// \brief Return the greater of \a X and \a Y. 1121*0fca6ea1SDimitry Andric /// \param X The X input value. 1122*0fca6ea1SDimitry Andric /// \param Y The Y input value. 1123*0fca6ea1SDimitry Andric 1124*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 11255f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 112606c3fb27SDimitry Andric half max(half, half); 1127*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 11285f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 112906c3fb27SDimitry Andric half2 max(half2, half2); 1130*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 11315f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 113206c3fb27SDimitry Andric half3 max(half3, half3); 1133*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 11345f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 113506c3fb27SDimitry Andric half4 max(half4, half4); 113606c3fb27SDimitry Andric 1137*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 1138*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11395f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 114006c3fb27SDimitry Andric int16_t max(int16_t, int16_t); 1141*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11425f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 114306c3fb27SDimitry Andric int16_t2 max(int16_t2, int16_t2); 1144*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11455f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 114606c3fb27SDimitry Andric int16_t3 max(int16_t3, int16_t3); 1147*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11485f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 114906c3fb27SDimitry Andric int16_t4 max(int16_t4, int16_t4); 115006c3fb27SDimitry Andric 1151*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11525f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 115306c3fb27SDimitry Andric uint16_t max(uint16_t, uint16_t); 1154*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11555f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 115606c3fb27SDimitry Andric uint16_t2 max(uint16_t2, uint16_t2); 1157*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11585f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 115906c3fb27SDimitry Andric uint16_t3 max(uint16_t3, uint16_t3); 1160*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 11615f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 116206c3fb27SDimitry Andric uint16_t4 max(uint16_t4, uint16_t4); 116306c3fb27SDimitry Andric #endif 116406c3fb27SDimitry Andric 11655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 11665f757f3fSDimitry Andric int max(int, int); 11675f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 116806c3fb27SDimitry Andric int2 max(int2, int2); 11695f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 117006c3fb27SDimitry Andric int3 max(int3, int3); 11715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 117206c3fb27SDimitry Andric int4 max(int4, int4); 117306c3fb27SDimitry Andric 11745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 117506c3fb27SDimitry Andric uint max(uint, uint); 11765f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 117706c3fb27SDimitry Andric uint2 max(uint2, uint2); 11785f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 117906c3fb27SDimitry Andric uint3 max(uint3, uint3); 11805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 118106c3fb27SDimitry Andric uint4 max(uint4, uint4); 118206c3fb27SDimitry Andric 11835f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 118406c3fb27SDimitry Andric int64_t max(int64_t, int64_t); 11855f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 118606c3fb27SDimitry Andric int64_t2 max(int64_t2, int64_t2); 11875f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 118806c3fb27SDimitry Andric int64_t3 max(int64_t3, int64_t3); 11895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 119006c3fb27SDimitry Andric int64_t4 max(int64_t4, int64_t4); 119106c3fb27SDimitry Andric 11925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 119306c3fb27SDimitry Andric uint64_t max(uint64_t, uint64_t); 11945f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 119506c3fb27SDimitry Andric uint64_t2 max(uint64_t2, uint64_t2); 11965f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 119706c3fb27SDimitry Andric uint64_t3 max(uint64_t3, uint64_t3); 11985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 119906c3fb27SDimitry Andric uint64_t4 max(uint64_t4, uint64_t4); 120006c3fb27SDimitry Andric 12015f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 12025f757f3fSDimitry Andric float max(float, float); 12035f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 120406c3fb27SDimitry Andric float2 max(float2, float2); 12055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 120606c3fb27SDimitry Andric float3 max(float3, float3); 12075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 120806c3fb27SDimitry Andric float4 max(float4, float4); 120906c3fb27SDimitry Andric 12105f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 12115f757f3fSDimitry Andric double max(double, double); 12125f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 121306c3fb27SDimitry Andric double2 max(double2, double2); 12145f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 121506c3fb27SDimitry Andric double3 max(double3, double3); 12165f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_max) 121706c3fb27SDimitry Andric double4 max(double4, double4); 121806c3fb27SDimitry Andric 12195f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 122006c3fb27SDimitry Andric // min builtins 12215f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1222*0fca6ea1SDimitry Andric 1223*0fca6ea1SDimitry Andric /// \fn T min(T X, T Y) 1224*0fca6ea1SDimitry Andric /// \brief Return the lesser of \a X and \a Y. 1225*0fca6ea1SDimitry Andric /// \param X The X input value. 1226*0fca6ea1SDimitry Andric /// \param Y The Y input value. 1227*0fca6ea1SDimitry Andric 1228*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 12295f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 123006c3fb27SDimitry Andric half min(half, half); 1231*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 12325f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 123306c3fb27SDimitry Andric half2 min(half2, half2); 1234*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 12355f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 123606c3fb27SDimitry Andric half3 min(half3, half3); 1237*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 12385f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 123906c3fb27SDimitry Andric half4 min(half4, half4); 124006c3fb27SDimitry Andric 1241*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 1242*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12435f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 124406c3fb27SDimitry Andric int16_t min(int16_t, int16_t); 1245*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12465f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 124706c3fb27SDimitry Andric int16_t2 min(int16_t2, int16_t2); 1248*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12495f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 125006c3fb27SDimitry Andric int16_t3 min(int16_t3, int16_t3); 1251*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12525f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 125306c3fb27SDimitry Andric int16_t4 min(int16_t4, int16_t4); 125406c3fb27SDimitry Andric 1255*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12565f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 125706c3fb27SDimitry Andric uint16_t min(uint16_t, uint16_t); 1258*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12595f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 126006c3fb27SDimitry Andric uint16_t2 min(uint16_t2, uint16_t2); 1261*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12625f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 126306c3fb27SDimitry Andric uint16_t3 min(uint16_t3, uint16_t3); 1264*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 12655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 126606c3fb27SDimitry Andric uint16_t4 min(uint16_t4, uint16_t4); 126706c3fb27SDimitry Andric #endif 126806c3fb27SDimitry Andric 12695f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 12705f757f3fSDimitry Andric int min(int, int); 12715f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 127206c3fb27SDimitry Andric int2 min(int2, int2); 12735f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 127406c3fb27SDimitry Andric int3 min(int3, int3); 12755f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 127606c3fb27SDimitry Andric int4 min(int4, int4); 127706c3fb27SDimitry Andric 12785f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 127906c3fb27SDimitry Andric uint min(uint, uint); 12805f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 128106c3fb27SDimitry Andric uint2 min(uint2, uint2); 12825f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 128306c3fb27SDimitry Andric uint3 min(uint3, uint3); 12845f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 128506c3fb27SDimitry Andric uint4 min(uint4, uint4); 128606c3fb27SDimitry Andric 12875f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 12885f757f3fSDimitry Andric float min(float, float); 12895f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 129006c3fb27SDimitry Andric float2 min(float2, float2); 12915f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 129206c3fb27SDimitry Andric float3 min(float3, float3); 12935f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 129406c3fb27SDimitry Andric float4 min(float4, float4); 129506c3fb27SDimitry Andric 12965f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 12975f757f3fSDimitry Andric int64_t min(int64_t, int64_t); 12985f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 12995f757f3fSDimitry Andric int64_t2 min(int64_t2, int64_t2); 13005f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 13015f757f3fSDimitry Andric int64_t3 min(int64_t3, int64_t3); 13025f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 13035f757f3fSDimitry Andric int64_t4 min(int64_t4, int64_t4); 13045f757f3fSDimitry Andric 13055f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 13065f757f3fSDimitry Andric uint64_t min(uint64_t, uint64_t); 13075f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 13085f757f3fSDimitry Andric uint64_t2 min(uint64_t2, uint64_t2); 13095f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 13105f757f3fSDimitry Andric uint64_t3 min(uint64_t3, uint64_t3); 13115f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 13125f757f3fSDimitry Andric uint64_t4 min(uint64_t4, uint64_t4); 13135f757f3fSDimitry Andric 13145f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 13155f757f3fSDimitry Andric double min(double, double); 13165f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 131706c3fb27SDimitry Andric double2 min(double2, double2); 13185f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 131906c3fb27SDimitry Andric double3 min(double3, double3); 13205f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_min) 132106c3fb27SDimitry Andric double4 min(double4, double4); 132206c3fb27SDimitry Andric 13235f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 13245f757f3fSDimitry Andric // pow builtins 13255f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1326*0fca6ea1SDimitry Andric 1327*0fca6ea1SDimitry Andric /// \fn T pow(T Val, T Pow) 1328*0fca6ea1SDimitry Andric /// \brief Return the value \a Val, raised to the power \a Pow. 1329*0fca6ea1SDimitry Andric /// \param Val The input value. 1330*0fca6ea1SDimitry Andric /// \param Pow The specified power. 1331*0fca6ea1SDimitry Andric 1332*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 13335f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13345f757f3fSDimitry Andric half pow(half, half); 1335*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 13365f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13375f757f3fSDimitry Andric half2 pow(half2, half2); 1338*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 13395f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13405f757f3fSDimitry Andric half3 pow(half3, half3); 1341*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 13425f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13435f757f3fSDimitry Andric half4 pow(half4, half4); 13445f757f3fSDimitry Andric 13455f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13465f757f3fSDimitry Andric float pow(float, float); 13475f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13485f757f3fSDimitry Andric float2 pow(float2, float2); 13495f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13505f757f3fSDimitry Andric float3 pow(float3, float3); 13515f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_pow) 13525f757f3fSDimitry Andric float4 pow(float4, float4); 13535f757f3fSDimitry Andric 13545f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 13555f757f3fSDimitry Andric // reversebits builtins 13565f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 13575f757f3fSDimitry Andric 1358*0fca6ea1SDimitry Andric /// \fn T reversebits(T Val) 1359*0fca6ea1SDimitry Andric /// \brief Return the value \a Val with the bit order reversed. 1360*0fca6ea1SDimitry Andric /// \param Val The input value. 1361*0fca6ea1SDimitry Andric 1362*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 1363*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 13645f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13655f757f3fSDimitry Andric uint16_t reversebits(uint16_t); 1366*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 13675f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13685f757f3fSDimitry Andric uint16_t2 reversebits(uint16_t2); 1369*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 13705f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13715f757f3fSDimitry Andric uint16_t3 reversebits(uint16_t3); 1372*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.2) 13735f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13745f757f3fSDimitry Andric uint16_t4 reversebits(uint16_t4); 13755f757f3fSDimitry Andric #endif 13765f757f3fSDimitry Andric 13775f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13785f757f3fSDimitry Andric uint reversebits(uint); 13795f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13805f757f3fSDimitry Andric uint2 reversebits(uint2); 13815f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13825f757f3fSDimitry Andric uint3 reversebits(uint3); 13835f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13845f757f3fSDimitry Andric uint4 reversebits(uint4); 13855f757f3fSDimitry Andric 13865f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13875f757f3fSDimitry Andric uint64_t reversebits(uint64_t); 13885f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13895f757f3fSDimitry Andric uint64_t2 reversebits(uint64_t2); 13905f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13915f757f3fSDimitry Andric uint64_t3 reversebits(uint64_t3); 13925f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_bitreverse) 13935f757f3fSDimitry Andric uint64_t4 reversebits(uint64_t4); 13945f757f3fSDimitry Andric 13955f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1396*0fca6ea1SDimitry Andric // rcp builtins 1397*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1398*0fca6ea1SDimitry Andric 1399*0fca6ea1SDimitry Andric /// \fn T rcp(T x) 1400*0fca6ea1SDimitry Andric /// \brief Calculates a fast, approximate, per-component reciprocal ie 1 / \a x. 1401*0fca6ea1SDimitry Andric /// \param x The specified input value. 1402*0fca6ea1SDimitry Andric /// 1403*0fca6ea1SDimitry Andric /// The return value is the reciprocal of the \a x parameter. 1404*0fca6ea1SDimitry Andric 1405*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1406*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1407*0fca6ea1SDimitry Andric half rcp(half); 1408*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1409*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1410*0fca6ea1SDimitry Andric half2 rcp(half2); 1411*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1412*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1413*0fca6ea1SDimitry Andric half3 rcp(half3); 1414*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1415*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1416*0fca6ea1SDimitry Andric half4 rcp(half4); 1417*0fca6ea1SDimitry Andric 1418*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1419*0fca6ea1SDimitry Andric float rcp(float); 1420*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1421*0fca6ea1SDimitry Andric float2 rcp(float2); 1422*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1423*0fca6ea1SDimitry Andric float3 rcp(float3); 1424*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1425*0fca6ea1SDimitry Andric float4 rcp(float4); 1426*0fca6ea1SDimitry Andric 1427*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1428*0fca6ea1SDimitry Andric double rcp(double); 1429*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1430*0fca6ea1SDimitry Andric double2 rcp(double2); 1431*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1432*0fca6ea1SDimitry Andric double3 rcp(double3); 1433*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rcp) 1434*0fca6ea1SDimitry Andric double4 rcp(double4); 1435*0fca6ea1SDimitry Andric 1436*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1437*0fca6ea1SDimitry Andric // rsqrt builtins 1438*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1439*0fca6ea1SDimitry Andric 1440*0fca6ea1SDimitry Andric /// \fn T rsqrt(T x) 1441*0fca6ea1SDimitry Andric /// \brief Returns the reciprocal of the square root of the specified value. 1442*0fca6ea1SDimitry Andric /// ie 1 / sqrt( \a x). 1443*0fca6ea1SDimitry Andric /// \param x The specified input value. 1444*0fca6ea1SDimitry Andric /// 1445*0fca6ea1SDimitry Andric /// This function uses the following formula: 1 / sqrt(x). 1446*0fca6ea1SDimitry Andric 1447*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1448*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1449*0fca6ea1SDimitry Andric half rsqrt(half); 1450*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1451*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1452*0fca6ea1SDimitry Andric half2 rsqrt(half2); 1453*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1454*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1455*0fca6ea1SDimitry Andric half3 rsqrt(half3); 1456*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1457*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1458*0fca6ea1SDimitry Andric half4 rsqrt(half4); 1459*0fca6ea1SDimitry Andric 1460*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1461*0fca6ea1SDimitry Andric float rsqrt(float); 1462*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1463*0fca6ea1SDimitry Andric float2 rsqrt(float2); 1464*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1465*0fca6ea1SDimitry Andric float3 rsqrt(float3); 1466*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_elementwise_rsqrt) 1467*0fca6ea1SDimitry Andric float4 rsqrt(float4); 1468*0fca6ea1SDimitry Andric 1469*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1470*0fca6ea1SDimitry Andric // round builtins 1471*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1472*0fca6ea1SDimitry Andric 1473*0fca6ea1SDimitry Andric /// \fn T round(T x) 1474*0fca6ea1SDimitry Andric /// \brief Rounds the specified value \a x to the nearest integer. 1475*0fca6ea1SDimitry Andric /// \param x The specified input value. 1476*0fca6ea1SDimitry Andric /// 1477*0fca6ea1SDimitry Andric /// The return value is the \a x parameter, rounded to the nearest integer 1478*0fca6ea1SDimitry Andric /// within a floating-point type. Halfway cases are 1479*0fca6ea1SDimitry Andric /// rounded to the nearest even value. 1480*0fca6ea1SDimitry Andric 1481*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1482*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1483*0fca6ea1SDimitry Andric half round(half); 1484*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1485*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1486*0fca6ea1SDimitry Andric half2 round(half2); 1487*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1488*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1489*0fca6ea1SDimitry Andric half3 round(half3); 1490*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1491*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1492*0fca6ea1SDimitry Andric half4 round(half4); 1493*0fca6ea1SDimitry Andric 1494*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1495*0fca6ea1SDimitry Andric float round(float); 1496*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1497*0fca6ea1SDimitry Andric float2 round(float2); 1498*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1499*0fca6ea1SDimitry Andric float3 round(float3); 1500*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_roundeven) 1501*0fca6ea1SDimitry Andric float4 round(float4); 1502*0fca6ea1SDimitry Andric 1503*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 15045f757f3fSDimitry Andric // sin builtins 15055f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1506*0fca6ea1SDimitry Andric 1507*0fca6ea1SDimitry Andric /// \fn T sin(T Val) 1508*0fca6ea1SDimitry Andric /// \brief Returns the sine of the input value, \a Val. 1509*0fca6ea1SDimitry Andric /// \param Val The input value. 1510*0fca6ea1SDimitry Andric 1511*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 15125f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15135f757f3fSDimitry Andric half sin(half); 1514*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 15155f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15165f757f3fSDimitry Andric half2 sin(half2); 1517*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 15185f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15195f757f3fSDimitry Andric half3 sin(half3); 1520*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 15215f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15225f757f3fSDimitry Andric half4 sin(half4); 15235f757f3fSDimitry Andric 15245f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15255f757f3fSDimitry Andric float sin(float); 15265f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15275f757f3fSDimitry Andric float2 sin(float2); 15285f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15295f757f3fSDimitry Andric float3 sin(float3); 15305f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sin) 15315f757f3fSDimitry Andric float4 sin(float4); 15325f757f3fSDimitry Andric 1533*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1534*0fca6ea1SDimitry Andric // sinh builtins 1535*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1536*0fca6ea1SDimitry Andric 1537*0fca6ea1SDimitry Andric /// \fn T sinh(T Val) 1538*0fca6ea1SDimitry Andric /// \brief Returns the hyperbolic sine of the input value, \a Val. 1539*0fca6ea1SDimitry Andric /// \param Val The input value. 1540*0fca6ea1SDimitry Andric 1541*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 1542*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1543*0fca6ea1SDimitry Andric half sinh(half); 1544*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1545*0fca6ea1SDimitry Andric half2 sinh(half2); 1546*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1547*0fca6ea1SDimitry Andric half3 sinh(half3); 1548*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1549*0fca6ea1SDimitry Andric half4 sinh(half4); 1550*0fca6ea1SDimitry Andric #endif 1551*0fca6ea1SDimitry Andric 1552*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1553*0fca6ea1SDimitry Andric float sinh(float); 1554*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1555*0fca6ea1SDimitry Andric float2 sinh(float2); 1556*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1557*0fca6ea1SDimitry Andric float3 sinh(float3); 1558*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sinh) 1559*0fca6ea1SDimitry Andric float4 sinh(float4); 15605f757f3fSDimitry Andric 15615f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 15625f757f3fSDimitry Andric // sqrt builtins 15635f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1564*0fca6ea1SDimitry Andric 1565*0fca6ea1SDimitry Andric /// \fn T sqrt(T Val) 1566*0fca6ea1SDimitry Andric /// \brief Returns the square root of the input value, \a Val. 1567*0fca6ea1SDimitry Andric /// \param Val The input value. 1568*0fca6ea1SDimitry Andric 1569*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1570*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1571*0fca6ea1SDimitry Andric half sqrt(half); 1572*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1573*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1574*0fca6ea1SDimitry Andric half2 sqrt(half2); 1575*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1576*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1577*0fca6ea1SDimitry Andric half3 sqrt(half3); 1578*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 1579*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1580*0fca6ea1SDimitry Andric half4 sqrt(half4); 1581*0fca6ea1SDimitry Andric 1582*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1583*0fca6ea1SDimitry Andric float sqrt(float); 1584*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1585*0fca6ea1SDimitry Andric float2 sqrt(float2); 1586*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1587*0fca6ea1SDimitry Andric float3 sqrt(float3); 1588*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_sqrt) 1589*0fca6ea1SDimitry Andric float4 sqrt(float4); 1590*0fca6ea1SDimitry Andric 1591*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1592*0fca6ea1SDimitry Andric // tan builtins 1593*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1594*0fca6ea1SDimitry Andric 1595*0fca6ea1SDimitry Andric /// \fn T tan(T Val) 1596*0fca6ea1SDimitry Andric /// \brief Returns the tangent of the input value, \a Val. 1597*0fca6ea1SDimitry Andric /// \param Val The input value. 1598*0fca6ea1SDimitry Andric 15995f757f3fSDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 1600*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1601*0fca6ea1SDimitry Andric half tan(half); 1602*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1603*0fca6ea1SDimitry Andric half2 tan(half2); 1604*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1605*0fca6ea1SDimitry Andric half3 tan(half3); 1606*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1607*0fca6ea1SDimitry Andric half4 tan(half4); 16085f757f3fSDimitry Andric #endif 16095f757f3fSDimitry Andric 1610*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1611*0fca6ea1SDimitry Andric float tan(float); 1612*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1613*0fca6ea1SDimitry Andric float2 tan(float2); 1614*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1615*0fca6ea1SDimitry Andric float3 tan(float3); 1616*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tan) 1617*0fca6ea1SDimitry Andric float4 tan(float4); 16185f757f3fSDimitry Andric 1619*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1620*0fca6ea1SDimitry Andric // tanh builtins 1621*0fca6ea1SDimitry Andric //===----------------------------------------------------------------------===// 1622*0fca6ea1SDimitry Andric 1623*0fca6ea1SDimitry Andric /// \fn T tanh(T Val) 1624*0fca6ea1SDimitry Andric /// \brief Returns the hyperbolic tangent of the input value, \a Val. 1625*0fca6ea1SDimitry Andric /// \param Val The input value. 1626*0fca6ea1SDimitry Andric 1627*0fca6ea1SDimitry Andric #ifdef __HLSL_ENABLE_16_BIT 1628*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1629*0fca6ea1SDimitry Andric half tanh(half); 1630*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1631*0fca6ea1SDimitry Andric half2 tanh(half2); 1632*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1633*0fca6ea1SDimitry Andric half3 tanh(half3); 1634*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1635*0fca6ea1SDimitry Andric half4 tanh(half4); 1636*0fca6ea1SDimitry Andric #endif 1637*0fca6ea1SDimitry Andric 1638*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1639*0fca6ea1SDimitry Andric float tanh(float); 1640*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1641*0fca6ea1SDimitry Andric float2 tanh(float2); 1642*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1643*0fca6ea1SDimitry Andric float3 tanh(float3); 1644*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_tanh) 1645*0fca6ea1SDimitry Andric float4 tanh(float4); 16465f757f3fSDimitry Andric 16475f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 16485f757f3fSDimitry Andric // trunc builtins 16495f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1650*0fca6ea1SDimitry Andric 1651*0fca6ea1SDimitry Andric /// \fn T trunc(T Val) 1652*0fca6ea1SDimitry Andric /// \brief Returns the truncated integer value of the input value, \a Val. 1653*0fca6ea1SDimitry Andric /// \param Val The input value. 1654*0fca6ea1SDimitry Andric 1655*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 16565f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16575f757f3fSDimitry Andric half trunc(half); 1658*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 16595f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16605f757f3fSDimitry Andric half2 trunc(half2); 1661*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 16625f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16635f757f3fSDimitry Andric half3 trunc(half3); 1664*0fca6ea1SDimitry Andric _HLSL_16BIT_AVAILABILITY(shadermodel, 6.2) 16655f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16665f757f3fSDimitry Andric half4 trunc(half4); 16675f757f3fSDimitry Andric 16685f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16695f757f3fSDimitry Andric float trunc(float); 16705f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16715f757f3fSDimitry Andric float2 trunc(float2); 16725f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16735f757f3fSDimitry Andric float3 trunc(float3); 16745f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_elementwise_trunc) 16755f757f3fSDimitry Andric float4 trunc(float4); 16765f757f3fSDimitry Andric 16775f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 16785f757f3fSDimitry Andric // Wave* builtins 16795f757f3fSDimitry Andric //===----------------------------------------------------------------------===// 1680*0fca6ea1SDimitry Andric 1681*0fca6ea1SDimitry Andric /// \brief Counts the number of boolean variables which evaluate to true across 1682*0fca6ea1SDimitry Andric /// all active lanes in the current wave. 1683*0fca6ea1SDimitry Andric /// 1684*0fca6ea1SDimitry Andric /// \param Val The input boolean value. 1685*0fca6ea1SDimitry Andric /// \return The number of lanes for which the boolean variable evaluates to 1686*0fca6ea1SDimitry Andric /// true, across all active lanes in the current wave. 16875f757f3fSDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.0) 16885f757f3fSDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_active_count_bits) 1689*0fca6ea1SDimitry Andric __attribute__((convergent)) uint WaveActiveCountBits(bool Val); 1690*0fca6ea1SDimitry Andric 1691*0fca6ea1SDimitry Andric /// \brief Returns the index of the current lane within the current wave. 1692*0fca6ea1SDimitry Andric _HLSL_AVAILABILITY(shadermodel, 6.0) 1693*0fca6ea1SDimitry Andric _HLSL_BUILTIN_ALIAS(__builtin_hlsl_wave_get_lane_index) 1694*0fca6ea1SDimitry Andric __attribute__((convergent)) uint WaveGetLaneIndex(); 16955f757f3fSDimitry Andric 1696bdd1243dSDimitry Andric } // namespace hlsl 169781ad6265SDimitry Andric #endif //_HLSL_HLSL_INTRINSICS_H_ 1698