Skip to content

Commit 57e287f

Browse files
committed
use template magic instead of changing pi.def
1 parent b236f2c commit 57e287f

File tree

10 files changed

+139
-196
lines changed

10 files changed

+139
-196
lines changed

sycl/include/CL/sycl/detail/pi.def

Lines changed: 105 additions & 181 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
#error Undefined _PI_API macro expansion
1111
#endif
1212

13-
// The list of all PI interfaces and their arguments wrapped with _PI_API macro.
13+
// The list of all PI interfaces wrapped with _PI_API macro.
1414
// This is for convinience of doing same thing for all interfaces, e.g.
1515
// declare, define, initialize.
1616
//
@@ -19,198 +19,122 @@
1919
// list.
2020
//
2121
// Platform
22-
_PI_API(piPlatformsGet, pi_uint32, pi_platform *, pi_uint32 *)
23-
_PI_API(piPlatformGetInfo, pi_platform, pi_platform_info, size_t, void *,
24-
size_t *)
25-
_PI_API(piextPlatformGetNativeHandle, pi_platform, pi_native_handle *)
26-
_PI_API(piextPlatformCreateWithNativeHandle, pi_native_handle, pi_platform *)
22+
_PI_API(piPlatformsGet)
23+
_PI_API(piPlatformGetInfo)
24+
_PI_API(piextPlatformGetNativeHandle)
25+
_PI_API(piextPlatformCreateWithNativeHandle)
2726
// Device
28-
_PI_API(piDevicesGet, pi_platform, pi_device_type, pi_uint32, pi_device *,
29-
pi_uint32 *)
30-
_PI_API(piDeviceGetInfo, pi_device, pi_device_info, size_t, void *, size_t *)
31-
_PI_API(piDevicePartition, pi_device, const pi_device_partition_property *,
32-
pi_uint32, pi_device *, pi_uint32 *)
33-
_PI_API(piDeviceRetain, pi_device)
34-
_PI_API(piDeviceRelease, pi_device)
35-
_PI_API(piextDeviceSelectBinary, pi_device, pi_device_binary *, pi_uint32,
36-
pi_uint32 *)
37-
_PI_API(piextGetDeviceFunctionPointer, pi_device, pi_program, const char *,
38-
pi_uint64 *)
39-
_PI_API(piextDeviceGetNativeHandle, pi_device, pi_native_handle *)
40-
_PI_API(piextDeviceCreateWithNativeHandle, pi_native_handle, pi_platform,
41-
pi_device *)
27+
_PI_API(piDevicesGet)
28+
_PI_API(piDeviceGetInfo)
29+
_PI_API(piDevicePartition)
30+
_PI_API(piDeviceRetain)
31+
_PI_API(piDeviceRelease)
32+
_PI_API(piextDeviceSelectBinary)
33+
_PI_API(piextGetDeviceFunctionPointer)
34+
_PI_API(piextDeviceGetNativeHandle)
35+
_PI_API(piextDeviceCreateWithNativeHandle)
4236
// Context
43-
_PI_API(piContextCreate, const pi_context_properties *, pi_uint32,
44-
const pi_device *,
45-
void (*)(const char *, const void *, size_t, void *),
46-
void *, pi_context *)
47-
_PI_API(piContextGetInfo, pi_context, pi_context_info, size_t, void *, size_t *)
48-
_PI_API(piContextRetain, pi_context)
49-
_PI_API(piContextRelease, pi_context)
50-
_PI_API(piextContextSetExtendedDeleter, pi_context, pi_context_extended_deleter,
51-
void *)
52-
_PI_API(piextContextGetNativeHandle, pi_context, pi_native_handle *)
53-
_PI_API(piextContextCreateWithNativeHandle, pi_native_handle, pi_uint32,
54-
const pi_device *, bool,
55-
pi_context *)
37+
_PI_API(piContextCreate)
38+
_PI_API(piContextGetInfo)
39+
_PI_API(piContextRetain)
40+
_PI_API(piContextRelease)
41+
_PI_API(piextContextSetExtendedDeleter)
42+
_PI_API(piextContextGetNativeHandle)
43+
_PI_API(piextContextCreateWithNativeHandle)
5644
// Queue
57-
_PI_API(piQueueCreate, pi_context, pi_device, pi_queue_properties, pi_queue *)
58-
_PI_API(piQueueGetInfo, pi_queue, pi_queue_info, size_t, void *, size_t *)
59-
_PI_API(piQueueFinish, pi_queue)
60-
_PI_API(piQueueRetain, pi_queue)
61-
_PI_API(piQueueRelease, pi_queue)
62-
_PI_API(piextQueueGetNativeHandle, pi_queue, pi_native_handle *)
63-
_PI_API(piextQueueCreateWithNativeHandle, pi_native_handle, pi_context,
64-
pi_queue *)
45+
_PI_API(piQueueCreate)
46+
_PI_API(piQueueGetInfo)
47+
_PI_API(piQueueFinish)
48+
_PI_API(piQueueRetain)
49+
_PI_API(piQueueRelease)
50+
_PI_API(piextQueueGetNativeHandle)
51+
_PI_API(piextQueueCreateWithNativeHandle)
6552
// Memory
66-
_PI_API(piMemBufferCreate, pi_context, pi_mem_flags, size_t, void *, pi_mem *,
67-
const pi_mem_properties *)
68-
_PI_API(piMemImageCreate, pi_context, pi_mem_flags, const pi_image_format *,
69-
const pi_image_desc *, void *, pi_mem *)
70-
_PI_API(piMemGetInfo, pi_mem, cl_mem_info, size_t, void *, size_t *)
71-
_PI_API(piMemImageGetInfo, pi_mem, pi_image_info, size_t, void *, size_t *)
72-
_PI_API(piMemRetain, pi_mem)
73-
_PI_API(piMemRelease, pi_mem)
74-
_PI_API(piMemBufferPartition, pi_mem, pi_mem_flags, pi_buffer_create_type,
75-
void *, pi_mem *)
76-
_PI_API(piextMemGetNativeHandle, pi_mem, pi_native_handle *)
77-
_PI_API(piextMemCreateWithNativeHandle, pi_native_handle, pi_mem *)
53+
_PI_API(piMemBufferCreate)
54+
_PI_API(piMemImageCreate)
55+
_PI_API(piMemGetInfo)
56+
_PI_API(piMemImageGetInfo)
57+
_PI_API(piMemRetain)
58+
_PI_API(piMemRelease)
59+
_PI_API(piMemBufferPartition)
60+
_PI_API(piextMemGetNativeHandle)
61+
_PI_API(piextMemCreateWithNativeHandle)
7862
// Program
79-
_PI_API(piProgramCreate, pi_context, const void *, size_t, pi_program *)
80-
_PI_API(piclProgramCreateWithSource, pi_context, pi_uint32, const char **,
81-
const size_t, pi_program *)
82-
_PI_API(piProgramCreateWithBinary, pi_context, pi_uint32, const pi_device *,
83-
const size_t *, const unsigned char **,
84-
pi_uint32 *, pi_program *)
85-
_PI_API(piProgramGetInfo, pi_program, pi_program_info, size_t, void *, size_t *)
86-
_PI_API(piProgramCompile, pi_program, pi_uint32, const pi_device *,
87-
const char *, pi_uint32, const pi_program *,
88-
const char **, void (*)(pi_program, void *), void *)
89-
_PI_API(piProgramBuild, pi_program, pi_uint32, const pi_device *,
90-
const char *, void (*)(pi_program, void *), void *)
91-
_PI_API(piProgramLink, pi_context, pi_uint32, const pi_device *,
92-
const char *, pi_uint32, const pi_program *,
93-
void (*)(pi_program, void *), void *, pi_program *)
94-
_PI_API(piProgramGetBuildInfo, pi_program, pi_device, cl_program_build_info,
95-
size_t, void *, size_t *)
96-
_PI_API(piProgramRetain, pi_program)
97-
_PI_API(piProgramRelease, pi_program)
98-
_PI_API(piextProgramSetSpecializationConstant, pi_program, pi_uint32, size_t,
99-
const void *)
100-
_PI_API(piextProgramGetNativeHandle, pi_program, pi_native_handle *)
101-
_PI_API(piextProgramCreateWithNativeHandle, pi_native_handle, pi_context,
102-
pi_program *)
63+
_PI_API(piProgramCreate)
64+
_PI_API(piclProgramCreateWithSource)
65+
_PI_API(piProgramCreateWithBinary)
66+
_PI_API(piProgramGetInfo)
67+
_PI_API(piProgramCompile)
68+
_PI_API(piProgramBuild)
69+
_PI_API(piProgramLink)
70+
_PI_API(piProgramGetBuildInfo)
71+
_PI_API(piProgramRetain)
72+
_PI_API(piProgramRelease)
73+
_PI_API(piextProgramSetSpecializationConstant)
74+
_PI_API(piextProgramGetNativeHandle)
75+
_PI_API(piextProgramCreateWithNativeHandle)
10376
// Kernel
104-
_PI_API(piKernelCreate, pi_program, const char *, pi_kernel *)
105-
_PI_API(piKernelSetArg, pi_kernel, pi_uint32, size_t, const void *)
106-
_PI_API(piKernelGetInfo, pi_kernel, pi_kernel_info, size_t, void *, size_t *)
107-
_PI_API(piKernelGetGroupInfo, pi_kernel, pi_device, pi_kernel_group_info, size_t,
108-
void *, size_t *)
109-
_PI_API(piKernelGetSubGroupInfo, pi_kernel, pi_device, pi_kernel_sub_group_info,
110-
size_t, const void *, size_t, void *, size_t *)
111-
_PI_API(piKernelRetain, pi_kernel)
112-
_PI_API(piKernelRelease, pi_kernel)
113-
_PI_API(piextKernelSetArgPointer, pi_kernel, pi_uint32, size_t, const void *)
114-
_PI_API(piKernelSetExecInfo, pi_kernel, pi_kernel_exec_info, size_t,
115-
const void *)
116-
_PI_API(piextKernelCreateWithNativeHandle, pi_native_handle, pi_context, bool,
117-
pi_kernel *)
118-
_PI_API(piextKernelGetNativeHandle, pi_kernel, pi_native_handle *)
77+
_PI_API(piKernelCreate)
78+
_PI_API(piKernelSetArg)
79+
_PI_API(piKernelGetInfo)
80+
_PI_API(piKernelGetGroupInfo)
81+
_PI_API(piKernelGetSubGroupInfo)
82+
_PI_API(piKernelRetain)
83+
_PI_API(piKernelRelease)
84+
_PI_API(piextKernelSetArgPointer)
85+
_PI_API(piKernelSetExecInfo)
86+
_PI_API(piextKernelCreateWithNativeHandle)
87+
_PI_API(piextKernelGetNativeHandle)
11988
// Event
120-
_PI_API(piEventCreate, pi_context, pi_event *)
121-
_PI_API(piEventGetInfo, pi_event, pi_event_info, size_t, void *, size_t *)
122-
_PI_API(piEventGetProfilingInfo, pi_event, pi_profiling_info, size_t, void *,
123-
size_t *)
124-
_PI_API(piEventsWait, pi_uint32, const pi_event *)
125-
_PI_API(piEventSetCallback, pi_event, pi_int32,
126-
void (*)(pi_event, pi_int32, void *), void *)
127-
_PI_API(piEventSetStatus, pi_event, pi_int32)
128-
_PI_API(piEventRetain, pi_event)
129-
_PI_API(piEventRelease, pi_event)
130-
_PI_API(piextEventGetNativeHandle, pi_event, pi_native_handle *)
131-
_PI_API(piextEventCreateWithNativeHandle, pi_native_handle, pi_event *)
89+
_PI_API(piEventCreate)
90+
_PI_API(piEventGetInfo)
91+
_PI_API(piEventGetProfilingInfo)
92+
_PI_API(piEventsWait)
93+
_PI_API(piEventSetCallback)
94+
_PI_API(piEventSetStatus)
95+
_PI_API(piEventRetain)
96+
_PI_API(piEventRelease)
97+
_PI_API(piextEventGetNativeHandle)
98+
_PI_API(piextEventCreateWithNativeHandle)
13299
// Sampler
133-
_PI_API(piSamplerCreate, pi_context, const pi_sampler_properties *,
134-
pi_sampler *)
135-
_PI_API(piSamplerGetInfo, pi_sampler, pi_sampler_info, size_t, void *, size_t *)
136-
_PI_API(piSamplerRetain, pi_sampler)
137-
_PI_API(piSamplerRelease, pi_sampler)
100+
_PI_API(piSamplerCreate)
101+
_PI_API(piSamplerGetInfo)
102+
_PI_API(piSamplerRetain)
103+
_PI_API(piSamplerRelease)
138104
// Queue commands
139-
_PI_API(piEnqueueKernelLaunch, pi_queue, pi_kernel, pi_uint32, const size_t *,
140-
const size_t *, const size_t *, pi_uint32,
141-
const pi_event *, pi_event *)
142-
_PI_API(piEnqueueNativeKernel, pi_queue, void (*)(void *), void *, size_t,
143-
pi_uint32, const pi_mem *, const void **,
144-
pi_uint32, const pi_event *, pi_event *)
145-
_PI_API(piEnqueueEventsWait, pi_queue, pi_uint32, const pi_event *, pi_event *)
146-
_PI_API(piEnqueueEventsWaitWithBarrier, pi_queue, pi_uint32, const pi_event *,
147-
pi_event *)
148-
_PI_API(piEnqueueMemBufferRead, pi_queue, pi_mem, pi_bool, size_t, size_t,
149-
void *, pi_uint32, const pi_event *, pi_event *)
150-
_PI_API(piEnqueueMemBufferReadRect, pi_queue, pi_mem, pi_bool,
151-
pi_buff_rect_offset, pi_buff_rect_offset,
152-
pi_buff_rect_region, size_t, size_t, size_t,
153-
size_t, void *, pi_uint32, const pi_event *,
154-
pi_event *)
155-
_PI_API(piEnqueueMemBufferWrite, pi_queue, pi_mem, pi_bool, size_t, size_t,
156-
const void *, pi_uint32, const pi_event *,
157-
pi_event *)
158-
_PI_API(piEnqueueMemBufferWriteRect, pi_queue, pi_mem, pi_bool,
159-
pi_buff_rect_offset, pi_buff_rect_offset,
160-
pi_buff_rect_region, size_t, size_t,
161-
size_t, size_t, const void *, pi_uint32,
162-
const pi_event *, pi_event *)
163-
_PI_API(piEnqueueMemBufferCopy, pi_queue, pi_mem, pi_mem, size_t, size_t,
164-
size_t, pi_uint32, const pi_event *, pi_event *)
165-
_PI_API(piEnqueueMemBufferCopyRect, pi_queue, pi_mem, pi_mem,
166-
pi_buff_rect_offset, pi_buff_rect_offset,
167-
pi_buff_rect_region, size_t, size_t,
168-
size_t, size_t, pi_uint32, const pi_event *,
169-
pi_event *)
170-
_PI_API(piEnqueueMemBufferFill, pi_queue, pi_mem, const void *, size_t, size_t,
171-
size_t, pi_uint32, const pi_event *, pi_event *)
172-
_PI_API(piEnqueueMemImageRead, pi_queue, pi_mem, pi_bool, pi_image_offset,
173-
pi_image_region, size_t, size_t, void *,
174-
pi_uint32, const pi_event *, pi_event *)
175-
_PI_API(piEnqueueMemImageWrite, pi_queue, pi_mem, pi_bool, pi_image_offset,
176-
pi_image_region, size_t, size_t, const void *,
177-
pi_uint32, const pi_event *, pi_event *)
178-
_PI_API(piEnqueueMemImageCopy, pi_queue, pi_mem, pi_mem, pi_image_offset,
179-
pi_image_offset, pi_image_region, pi_uint32,
180-
const pi_event *, pi_event *)
181-
_PI_API(piEnqueueMemImageFill, pi_queue, pi_mem, const void *, const size_t *,
182-
const size_t *, pi_uint32, const pi_event *,
183-
pi_event *)
184-
_PI_API(piEnqueueMemBufferMap, pi_queue, pi_mem, pi_bool, pi_map_flags, size_t,
185-
size_t, pi_uint32, const pi_event *, pi_event *,
186-
void **)
187-
_PI_API(piEnqueueMemUnmap, pi_queue, pi_mem, void *, pi_uint32, const pi_event *,
188-
pi_event *)
105+
_PI_API(piEnqueueKernelLaunch)
106+
_PI_API(piEnqueueNativeKernel)
107+
_PI_API(piEnqueueEventsWait)
108+
_PI_API(piEnqueueEventsWaitWithBarrier)
109+
_PI_API(piEnqueueMemBufferRead)
110+
_PI_API(piEnqueueMemBufferReadRect)
111+
_PI_API(piEnqueueMemBufferWrite)
112+
_PI_API(piEnqueueMemBufferWriteRect)
113+
_PI_API(piEnqueueMemBufferCopy)
114+
_PI_API(piEnqueueMemBufferCopyRect)
115+
_PI_API(piEnqueueMemBufferFill)
116+
_PI_API(piEnqueueMemImageRead)
117+
_PI_API(piEnqueueMemImageWrite)
118+
_PI_API(piEnqueueMemImageCopy)
119+
_PI_API(piEnqueueMemImageFill)
120+
_PI_API(piEnqueueMemBufferMap)
121+
_PI_API(piEnqueueMemUnmap)
189122
// USM
190-
_PI_API(piextUSMHostAlloc, void **, pi_context, pi_usm_mem_properties *, size_t,
191-
pi_uint32)
192-
_PI_API(piextUSMDeviceAlloc, void **, pi_context, pi_device,
193-
pi_usm_mem_properties *, size_t, pi_uint32)
194-
_PI_API(piextUSMSharedAlloc, void **, pi_context, pi_device,
195-
pi_usm_mem_properties *, size_t, pi_uint32)
196-
_PI_API(piextUSMFree, pi_context, void *)
197-
_PI_API(piextUSMEnqueueMemset, pi_queue, void *, pi_int32, size_t, pi_uint32,
198-
const pi_event *, pi_event *)
199-
_PI_API(piextUSMEnqueueMemcpy, pi_queue, pi_bool, void *, const void *, size_t,
200-
pi_uint32, const pi_event *, pi_event *)
201-
_PI_API(piextUSMEnqueuePrefetch, pi_queue, const void *, size_t,
202-
pi_usm_migration_flags, pi_uint32,
203-
const pi_event *, pi_event *)
204-
_PI_API(piextUSMEnqueueMemAdvise, pi_queue, const void *, size_t, pi_mem_advice,
205-
pi_event *)
206-
_PI_API(piextUSMGetMemAllocInfo, pi_context, const void *, pi_mem_info, size_t,
207-
void *, size_t *)
123+
_PI_API(piextUSMHostAlloc)
124+
_PI_API(piextUSMDeviceAlloc)
125+
_PI_API(piextUSMSharedAlloc)
126+
_PI_API(piextUSMFree)
127+
_PI_API(piextUSMEnqueueMemset)
128+
_PI_API(piextUSMEnqueueMemcpy)
129+
_PI_API(piextUSMEnqueuePrefetch)
130+
_PI_API(piextUSMEnqueueMemAdvise)
131+
_PI_API(piextUSMGetMemAllocInfo)
208132

209-
_PI_API(piextKernelSetArgMemObj, pi_kernel, pi_uint32, const pi_mem *)
210-
_PI_API(piextKernelSetArgSampler, pi_kernel, pi_uint32, const pi_sampler *)
133+
_PI_API(piextKernelSetArgMemObj)
134+
_PI_API(piextKernelSetArgSampler)
211135

212-
_PI_API(piextPluginGetOpaqueData, void *, void **)
136+
_PI_API(piextPluginGetOpaqueData)
213137

214-
_PI_API(piTearDown, void *)
138+
_PI_API(piTearDown)
215139

216140
#undef _PI_API

sycl/include/CL/sycl/detail/pi.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1666,7 +1666,7 @@ struct _pi_plugin {
16661666
char PluginVersion[4];
16671667
char *Targets;
16681668
struct FunctionPointers {
1669-
#define _PI_API(api, ...) decltype(::api) *api;
1669+
#define _PI_API(api) decltype(::api) *api;
16701670
#include <CL/sycl/detail/pi.def>
16711671
} PiFunctionTable;
16721672
};

sycl/include/CL/sycl/detail/pi.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ class context;
4040
namespace detail {
4141

4242
enum class PiApiKind {
43-
#define _PI_API(api, ...) api,
43+
#define _PI_API(api) api,
4444
#include <CL/sycl/detail/pi.def>
4545
};
4646
class plugin;
@@ -162,7 +162,7 @@ template <backend BE> __SYCL_EXPORT const plugin &getPlugin();
162162
// Utility Functions to get Function Name for a PI Api.
163163
template <PiApiKind PiApiOffset> struct PiFuncInfo {};
164164

165-
#define _PI_API(api, ...) \
165+
#define _PI_API(api) \
166166
template <> struct PiFuncInfo<PiApiKind::api> { \
167167
using FuncPtrT = decltype(&::api); \
168168
inline const char *getFuncName() { return #api; } \

sycl/include/CL/sycl/detail/type_traits.hpp

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
#include <CL/sycl/detail/type_list.hpp>
1515

1616
#include <array>
17+
#include <tuple>
1718
#include <type_traits>
1819

1920
__SYCL_INLINE_NAMESPACE(cl) {
@@ -344,6 +345,12 @@ template <access::address_space AS, class DataT>
344345
using const_if_const_AS = DataT;
345346
#endif
346347

348+
template <typename T> struct function_traits {};
349+
350+
template <typename Ret, typename... Args> struct function_traits<Ret(Args...)> {
351+
using ret_type = Ret;
352+
using args_type = std::tuple<Args...>;
353+
};
347354

348355
} // namespace detail
349356
} // namespace sycl

sycl/plugins/esimd_cpu/pi_esimd_cpu.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1245,7 +1245,7 @@ pi_result piPluginInit(pi_plugin *PluginInit) {
12451245
PiESimdDeviceAccess->data =
12461246
reinterpret_cast<void *>(new sycl::detail::ESIMDDeviceInterface());
12471247

1248-
#define _PI_API(api, ...) \
1248+
#define _PI_API(api) \
12491249
(PluginInit->PiFunctionTable).api = (decltype(&::api))(&api);
12501250
#include <CL/sycl/detail/pi.def>
12511251

sycl/plugins/level_zero/pi_level_zero.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6452,7 +6452,7 @@ pi_result piPluginInit(pi_plugin *PluginInit) {
64526452

64536453
strncpy(PluginInit->PluginVersion, _PI_H_VERSION_STRING, PluginVersionSize);
64546454

6455-
#define _PI_API(api, ...) \
6455+
#define _PI_API(api) \
64566456
(PluginInit->PiFunctionTable).api = (decltype(&::api))(&api);
64576457
#include <CL/sycl/detail/pi.def>
64586458

sycl/source/detail/plugin.hpp

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include <CL/sycl/backend_types.hpp>
1111
#include <CL/sycl/detail/common.hpp>
1212
#include <CL/sycl/detail/pi.hpp>
13+
#include <CL/sycl/detail/type_traits.hpp>
1314
#include <CL/sycl/stl.hpp>
1415
#include <detail/plugin_printers.hpp>
1516
#include <memory>
@@ -33,9 +34,9 @@ struct array_fill_helper;
3334

3435
template <PiApiKind Kind> struct PiApiArgTuple;
3536

36-
#define _PI_API(api, ...) \
37+
#define _PI_API(api) \
3738
template <> struct PiApiArgTuple<PiApiKind::api> { \
38-
using type = std::tuple<__VA_ARGS__>; \
39+
using type = typename function_traits<decltype(api)>::args_type; \
3940
};
4041

4142
#include <CL/sycl/detail/pi.def>

0 commit comments

Comments
 (0)