1 //===----- hlsl_basic_types.h - HLSL definitions for basic types ----------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #ifndef _HLSL_HLSL_BASIC_TYPES_H_ 10 #define _HLSL_HLSL_BASIC_TYPES_H_ 11 12 namespace hlsl { 13 // built-in scalar data types: 14 15 /// \typedef template<typename Ty, int Size> using vector = Ty 16 /// __attribute__((ext_vector_type(Size))) 17 /// 18 /// \tparam Ty The base type of the vector may be any builtin integral or 19 /// floating point type. 20 /// \tparam Size The size of the vector may be any value between 1 and 4. 21 22 #ifdef __HLSL_ENABLE_16_BIT 23 // 16-bit integer. 24 typedef unsigned short uint16_t; 25 typedef short int16_t; 26 #endif 27 28 // unsigned 32-bit integer. 29 typedef unsigned int uint; 30 31 // 64-bit integer. 32 typedef unsigned long uint64_t; 33 typedef long int64_t; 34 35 // built-in vector data types: 36 37 #ifdef __HLSL_ENABLE_16_BIT 38 typedef vector<int16_t, 2> int16_t2; 39 typedef vector<int16_t, 3> int16_t3; 40 typedef vector<int16_t, 4> int16_t4; 41 typedef vector<uint16_t, 2> uint16_t2; 42 typedef vector<uint16_t, 3> uint16_t3; 43 typedef vector<uint16_t, 4> uint16_t4; 44 #endif 45 typedef vector<bool, 2> bool2; 46 typedef vector<bool, 3> bool3; 47 typedef vector<bool, 4> bool4; 48 typedef vector<int, 2> int2; 49 typedef vector<int, 3> int3; 50 typedef vector<int, 4> int4; 51 typedef vector<uint, 2> uint2; 52 typedef vector<uint, 3> uint3; 53 typedef vector<uint, 4> uint4; 54 typedef vector<int64_t, 2> int64_t2; 55 typedef vector<int64_t, 3> int64_t3; 56 typedef vector<int64_t, 4> int64_t4; 57 typedef vector<uint64_t, 2> uint64_t2; 58 typedef vector<uint64_t, 3> uint64_t3; 59 typedef vector<uint64_t, 4> uint64_t4; 60 61 typedef vector<half, 2> half2; 62 typedef vector<half, 3> half3; 63 typedef vector<half, 4> half4; 64 65 typedef vector<float, 2> float2; 66 typedef vector<float, 3> float3; 67 typedef vector<float, 4> float4; 68 typedef vector<double, 2> double2; 69 typedef vector<double, 3> double3; 70 typedef vector<double, 4> double4; 71 72 } // namespace hlsl 73 74 #endif //_HLSL_HLSL_BASIC_TYPES_H_ 75