15
15
16
16
#include " ../common.hpp"
17
17
#include " logger/ur_logger.hpp"
18
+ namespace {
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
+ } // namespace
18
27
19
28
namespace v2 {
20
29
30
+ DECLARE_DESTROY_FUNCTION (zeKernelDestroy);
31
+ DECLARE_DESTROY_FUNCTION (zeEventDestroy);
32
+ DECLARE_DESTROY_FUNCTION (zeEventPoolDestroy);
33
+ DECLARE_DESTROY_FUNCTION (zeContextDestroy);
34
+ DECLARE_DESTROY_FUNCTION (zeCommandListDestroy);
21
35
namespace raii {
22
36
23
37
template <typename ZeHandleT, ze_result_t (*destroy)(ZeHandleT)>
@@ -65,7 +79,7 @@ struct ze_handle_wrapper {
65
79
}
66
80
67
81
if (ownZeHandle) {
68
- auto zeResult = ZE_CALL_NOCHECK ( destroy, (handle) );
82
+ auto zeResult = destroy (handle);
69
83
// Gracefully handle the case that L0 was already unloaded.
70
84
if (zeResult && zeResult != ZE_RESULT_ERROR_UNINITIALIZED)
71
85
throw ze2urResult (zeResult);
@@ -89,20 +103,20 @@ struct ze_handle_wrapper {
89
103
bool ownZeHandle;
90
104
};
91
105
92
- using ze_kernel_handle_t =
93
- ze_handle_wrapper<:: ze_kernel_handle_t , zeKernelDestroy> ;
106
+ using ze_kernel_handle_t = HANDLE_WRAPPER_TYPE(:: ze_kernel_handle_t ,
107
+ zeKernelDestroy) ;
94
108
95
- using ze_event_handle_t =
96
- ze_handle_wrapper<:: ze_event_handle_t , zeEventDestroy> ;
109
+ using ze_event_handle_t = HANDLE_WRAPPER_TYPE(:: ze_event_handle_t ,
110
+ zeEventDestroy) ;
97
111
98
- using ze_event_pool_handle_t =
99
- ze_handle_wrapper<:: ze_event_pool_handle_t , zeEventPoolDestroy> ;
112
+ using ze_event_pool_handle_t = HANDLE_WRAPPER_TYPE(:: ze_event_pool_handle_t ,
113
+ zeEventPoolDestroy) ;
100
114
101
- using ze_context_handle_t =
102
- ze_handle_wrapper<:: ze_context_handle_t , zeContextDestroy> ;
115
+ using ze_context_handle_t = HANDLE_WRAPPER_TYPE(:: ze_context_handle_t ,
116
+ zeContextDestroy) ;
103
117
104
- using ze_command_list_handle_t =
105
- ze_handle_wrapper<:: ze_command_list_handle_t , zeCommandListDestroy> ;
118
+ using ze_command_list_handle_t = HANDLE_WRAPPER_TYPE(:: ze_command_list_handle_t ,
119
+ zeCommandListDestroy) ;
106
120
107
121
} // namespace raii
108
122
} // namespace v2
0 commit comments