1616#include " ../common.hpp"
1717#include " logger/ur_logger.hpp"
1818namespace {
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
2333
2434namespace v2 {
2535
2636namespace raii {
2737
28- template <typename ZeHandleT, ze_result_t (*destroy)(ZeHandleT), size_t nameId >
38+ template <typename ZeHandleT, ze_result_t (*destroy)(ZeHandleT)>
2939struct ze_handle_wrapper {
3040 ze_handle_wrapper (bool ownZeHandle = true )
3141 : handle(nullptr ), ownZeHandle(ownZeHandle) {}
@@ -70,8 +80,7 @@ struct ze_handle_wrapper {
7080 }
7181
7282 if (ownZeHandle) {
73- auto zeResult =
74- ZE_CALL_NOCHECK_NAME (destroy, (handle), desturctorNames[nameId]);
83+ auto zeResult = destroy (handle);
7584 // Gracefully handle the case that L0 was already unloaded.
7685 if (zeResult && zeResult != ZE_RESULT_ERROR_UNINITIALIZED)
7786 throw ze2urResult (zeResult);
@@ -95,20 +104,20 @@ struct ze_handle_wrapper {
95104 bool ownZeHandle;
96105};
97106
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) ;
100109
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) ;
103112
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) ;
106115
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) ;
109118
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) ;
112121
113122} // namespace raii
114123} // namespace v2
0 commit comments