14 #ifdef __SYCL_DEVICE_ONLY__
16 #define __SPIRV_VAR_QUALIFIERS extern "C" const
18 #if defined(__NVPTX__) || defined(__AMDGCN__)
54 #else // defined(__NVPTX__) || defined(__AMDGCN__)
56 typedef size_t size_t_vec
__attribute__((ext_vector_type(3)));
57 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalSize;
58 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalInvocationId;
59 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInWorkgroupSize;
60 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInNumWorkgroups;
61 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInLocalInvocationId;
62 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInWorkgroupId;
63 __SPIRV_VAR_QUALIFIERS size_t_vec __spirv_BuiltInGlobalOffset;
65 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupSize;
66 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupMaxSize;
67 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInNumSubgroups;
68 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupId;
69 __SPIRV_VAR_QUALIFIERS uint32_t __spirv_BuiltInSubgroupLocalInvocationId;
71 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupEqMask;
72 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupGeMask;
73 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupGtMask;
74 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupLeMask;
75 __SPIRV_VAR_QUALIFIERS __ocl_vec_t<uint32_t, 4> __spirv_BuiltInSubgroupLtMask;
78 return __spirv_BuiltInGlobalInvocationId.x;
81 return __spirv_BuiltInGlobalInvocationId.y;
84 return __spirv_BuiltInGlobalInvocationId.z;
88 return __spirv_BuiltInGlobalSize.x;
91 return __spirv_BuiltInGlobalSize.y;
94 return __spirv_BuiltInGlobalSize.z;
98 return __spirv_BuiltInGlobalOffset.x;
101 return __spirv_BuiltInGlobalOffset.y;
104 return __spirv_BuiltInGlobalOffset.z;
108 return __spirv_BuiltInNumWorkgroups.x;
111 return __spirv_BuiltInNumWorkgroups.y;
114 return __spirv_BuiltInNumWorkgroups.z;
118 return __spirv_BuiltInWorkgroupSize.x;
121 return __spirv_BuiltInWorkgroupSize.y;
124 return __spirv_BuiltInWorkgroupSize.z;
128 return __spirv_BuiltInWorkgroupId.x;
131 return __spirv_BuiltInWorkgroupId.y;
134 return __spirv_BuiltInWorkgroupId.z;
138 return __spirv_BuiltInLocalInvocationId.x;
141 return __spirv_BuiltInLocalInvocationId.y;
144 return __spirv_BuiltInLocalInvocationId.z;
148 return __spirv_BuiltInSubgroupSize;
151 return __spirv_BuiltInSubgroupMaxSize;
154 return __spirv_BuiltInNumSubgroups;
157 return __spirv_BuiltInSubgroupId;
160 return __spirv_BuiltInSubgroupLocalInvocationId;
163 #endif // defined(__NVPTX__) || defined(__AMDGCN__)
165 #undef __SPIRV_VAR_QUALIFIERS
171 #define __SPIRV_DEFINE_INIT_AND_GET_HELPERS(POSTFIX) \
172 template <int ID> static size_t get##POSTFIX(); \
173 template <> size_t get##POSTFIX<0>() { return __spirv_##POSTFIX##_x(); } \
174 template <> size_t get##POSTFIX<1>() { return __spirv_##POSTFIX##_y(); } \
175 template <> size_t get##POSTFIX<2>() { return __spirv_##POSTFIX##_z(); } \
177 template <int Dim, class DstT> struct InitSizesST##POSTFIX; \
179 template <class DstT> struct InitSizesST##POSTFIX<1, DstT> { \
180 static DstT initSize() { return {get##POSTFIX<0>()}; } \
183 template <class DstT> struct InitSizesST##POSTFIX<2, DstT> { \
184 static DstT initSize() { return {get##POSTFIX<1>(), get##POSTFIX<0>()}; } \
187 template <class DstT> struct InitSizesST##POSTFIX<3, DstT> { \
188 static DstT initSize() { \
189 return {get##POSTFIX<2>(), get##POSTFIX<1>(), get##POSTFIX<0>()}; \
193 template <int Dims, class DstT> static DstT init##POSTFIX() { \
194 return InitSizesST##POSTFIX<Dims, DstT>::initSize(); \
197 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalSize);
198 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalInvocationId)
199 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(WorkgroupSize)
200 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(NumWorkgroups)
201 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(LocalInvocationId)
202 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(WorkgroupId)
203 __SPIRV_DEFINE_INIT_AND_GET_HELPERS(GlobalOffset)
205 #undef __SPIRV_DEFINE_INIT_AND_GET_HELPERS
209 #endif // __SYCL_DEVICE_ONLY__