16
16
#include " ../common.hpp"
17
17
#include " logger/ur_logger.hpp"
18
18
namespace {
19
- const char *desturctorNames[] = {" zeKernelDestroy" , " zeEventDestroy" ,
20
- " zeEventPoolDestroy" , " zeContextDestroy" ,
21
- " zeCommandListDestroy" };
22
- }
19
+ #define DECLARE_DESTROY_FUNCTION (name ) \
20
+ template <typename ZeHandleT> ze_result_t name##_wrapped(ZeHandleT handle) { \
21
+ return ZE_CALL_NOCHECK_NAME (name, (handle), #name); \
22
+ }
23
+
24
+ #define HANDLE_WRAPPER_TYPE (handle, destroy ) \
25
+ ze_handle_wrapper<handle, destroy##_wrapped<handle>>
26
+
27
+ DECLARE_DESTROY_FUNCTION (zeKernelDestroy);
28
+ DECLARE_DESTROY_FUNCTION (zeEventDestroy);
29
+ DECLARE_DESTROY_FUNCTION (zeEventPoolDestroy);
30
+ DECLARE_DESTROY_FUNCTION (zeContextDestroy);
31
+ DECLARE_DESTROY_FUNCTION (zeCommandListDestroy);
32
+ } // namespace
23
33
24
34
namespace v2 {
25
35
26
36
namespace raii {
27
37
28
- template <typename ZeHandleT, ze_result_t (*destroy)(ZeHandleT), size_t nameId >
38
+ template <typename ZeHandleT, ze_result_t (*destroy)(ZeHandleT)>
29
39
struct ze_handle_wrapper {
30
40
ze_handle_wrapper (bool ownZeHandle = true )
31
41
: handle(nullptr ), ownZeHandle(ownZeHandle) {}
@@ -70,8 +80,7 @@ struct ze_handle_wrapper {
70
80
}
71
81
72
82
if (ownZeHandle) {
73
- auto zeResult =
74
- ZE_CALL_NOCHECK_NAME (destroy, (handle), desturctorNames[nameId]);
83
+ auto zeResult = destroy (handle);
75
84
// Gracefully handle the case that L0 was already unloaded.
76
85
if (zeResult && zeResult != ZE_RESULT_ERROR_UNINITIALIZED)
77
86
throw ze2urResult (zeResult);
@@ -95,20 +104,20 @@ struct ze_handle_wrapper {
95
104
bool ownZeHandle;
96
105
};
97
106
98
- using ze_kernel_handle_t =
99
- ze_handle_wrapper<:: ze_kernel_handle_t , zeKernelDestroy, 0 > ;
107
+ using ze_kernel_handle_t = HANDLE_WRAPPER_TYPE(:: ze_kernel_handle_t ,
108
+ zeKernelDestroy) ;
100
109
101
- using ze_event_handle_t =
102
- ze_handle_wrapper<:: ze_event_handle_t , zeEventDestroy, 1 > ;
110
+ using ze_event_handle_t = HANDLE_WRAPPER_TYPE(:: ze_event_handle_t ,
111
+ zeEventDestroy) ;
103
112
104
- using ze_event_pool_handle_t =
105
- ze_handle_wrapper<:: ze_event_pool_handle_t , zeEventPoolDestroy, 2 > ;
113
+ using ze_event_pool_handle_t = HANDLE_WRAPPER_TYPE(:: ze_event_pool_handle_t ,
114
+ zeEventPoolDestroy) ;
106
115
107
- using ze_context_handle_t =
108
- ze_handle_wrapper<:: ze_context_handle_t , zeContextDestroy, 3 > ;
116
+ using ze_context_handle_t = HANDLE_WRAPPER_TYPE(:: ze_context_handle_t ,
117
+ zeContextDestroy) ;
109
118
110
- using ze_command_list_handle_t =
111
- ze_handle_wrapper<:: ze_command_list_handle_t , zeCommandListDestroy, 4 > ;
119
+ using ze_command_list_handle_t = HANDLE_WRAPPER_TYPE(:: ze_command_list_handle_t ,
120
+ zeCommandListDestroy) ;
112
121
113
122
} // namespace raii
114
123
} // namespace v2
0 commit comments