@@ -24,13 +24,17 @@ extern "C" const __constant size_t_vec __spirv_BuiltInGlobalOffset;
24
24
template <> size_t get##POSTFIX<1 >() { return __spirv_BuiltIn##POSTFIX.y ; } \
25
25
template <> size_t get##POSTFIX<2 >() { return __spirv_BuiltIn##POSTFIX.z ; }
26
26
27
+ namespace __spirv {
28
+
27
29
DEFINE_INT_ID_TO_XYZ_CONVERTER (GlobalSize);
28
30
DEFINE_INT_ID_TO_XYZ_CONVERTER (GlobalInvocationId)
29
31
DEFINE_INT_ID_TO_XYZ_CONVERTER (WorkgroupSize)
30
32
DEFINE_INT_ID_TO_XYZ_CONVERTER (LocalInvocationId)
31
33
DEFINE_INT_ID_TO_XYZ_CONVERTER (WorkgroupId)
32
34
DEFINE_INT_ID_TO_XYZ_CONVERTER (GlobalOffset)
33
35
36
+ } // namespace __spirv
37
+
34
38
#undef DEFINE_INT_ID_TO_XYZ_CONVERTER
35
39
36
40
extern " C" const __constant uint32_t __spirv_BuiltInSubgroupSize;
@@ -40,4 +44,45 @@ extern "C" const __constant uint32_t __spirv_BuiltInNumEnqueuedSubgroups;
40
44
extern " C" const __constant uint32_t __spirv_BuiltInSubgroupId;
41
45
extern " C" const __constant uint32_t __spirv_BuiltInSubgroupLocalInvocationId;
42
46
47
+ #define DEFINE_INIT_SIZES (POSTFIX ) \
48
+ \
49
+ template <int Dim, class DstT > struct InitSizesST ##POSTFIX; \
50
+ \
51
+ template <class DstT > struct InitSizesST ##POSTFIX<1 , DstT> { \
52
+ static void initSize (DstT &Dst) { \
53
+ Dst[0 ] = get##POSTFIX<0 >(); \
54
+ } \
55
+ }; \
56
+ \
57
+ template <class DstT > struct InitSizesST ##POSTFIX<2 , DstT> { \
58
+ static void initSize (DstT &Dst) { \
59
+ Dst[1 ] = get##POSTFIX<1 >(); \
60
+ InitSizesST##POSTFIX<1 , DstT>::initSize (Dst); \
61
+ } \
62
+ }; \
63
+ \
64
+ template <class DstT > struct InitSizesST ##POSTFIX<3 , DstT> { \
65
+ static void initSize (DstT &Dst) { \
66
+ Dst[2 ] = get##POSTFIX<2 >(); \
67
+ InitSizesST##POSTFIX<2 , DstT>::initSize (Dst); \
68
+ } \
69
+ }; \
70
+ \
71
+ template <int Dims, class DstT > static void init##POSTFIX(DstT &Dst) { \
72
+ InitSizesST##POSTFIX<Dims, DstT>::initSize (Dst); \
73
+ }
74
+
75
+ namespace __spirv {
76
+
77
+ DEFINE_INIT_SIZES (GlobalSize);
78
+ DEFINE_INIT_SIZES (GlobalInvocationId)
79
+ DEFINE_INIT_SIZES (WorkgroupSize)
80
+ DEFINE_INIT_SIZES (LocalInvocationId)
81
+ DEFINE_INIT_SIZES (WorkgroupId)
82
+ DEFINE_INIT_SIZES (GlobalOffset)
83
+
84
+ } // namespace __spirv
85
+
86
+ #undef DEFINE_INIT_SIZES
87
+
43
88
#endif // __SYCL_DEVICE_ONLY__
0 commit comments