@@ -1120,6 +1120,28 @@ __urdlllocal ur_result_t UR_APICALL urKernelCreate(
1120
1120
return UR_RESULT_SUCCESS;
1121
1121
}
1122
1122
1123
+ // /////////////////////////////////////////////////////////////////////////////
1124
+ // / @brief Intercept function for urKernelRetain
1125
+ __urdlllocal ur_result_t UR_APICALL urKernelRetain (
1126
+ ur_kernel_handle_t hKernel // /< [in] handle for the Kernel to retain
1127
+ ) {
1128
+ auto pfnRetain = context.urDdiTable .Kernel .pfnRetain ;
1129
+
1130
+ if (nullptr == pfnRetain) {
1131
+ return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
1132
+ }
1133
+
1134
+ context.logger .debug (" ==== urKernelRetain" );
1135
+
1136
+ UR_CALL (pfnRetain (hKernel));
1137
+
1138
+ if (auto KernelInfo = context.interceptor ->getKernelInfo (hKernel)) {
1139
+ KernelInfo->RefCount ++;
1140
+ }
1141
+
1142
+ return UR_RESULT_SUCCESS;
1143
+ }
1144
+
1123
1145
// /////////////////////////////////////////////////////////////////////////////
1124
1146
// / @brief Intercept function for urKernelRelease
1125
1147
__urdlllocal ur_result_t urKernelRelease (
@@ -1135,13 +1157,10 @@ __urdlllocal ur_result_t urKernelRelease(
1135
1157
UR_CALL (pfnRelease (hKernel));
1136
1158
1137
1159
if (auto KernelInfo = context.interceptor ->getKernelInfo (hKernel)) {
1138
- uint32_t RefCount;
1139
- UR_CALL (context.urDdiTable .Kernel .pfnGetInfo (
1140
- hKernel, UR_KERNEL_INFO_REFERENCE_COUNT, sizeof (RefCount),
1141
- &RefCount, nullptr ));
1142
- if (RefCount == 1 ) {
1143
- UR_CALL (context.interceptor ->eraseKernel (hKernel));
1160
+ if (--KernelInfo->RefCount != 0 ) {
1161
+ return UR_RESULT_SUCCESS;
1144
1162
}
1163
+ UR_CALL (context.interceptor ->eraseKernel (hKernel));
1145
1164
}
1146
1165
1147
1166
return UR_RESULT_SUCCESS;
@@ -1300,6 +1319,7 @@ __urdlllocal ur_result_t UR_APICALL urGetKernelProcAddrTable(
1300
1319
ur_result_t result = UR_RESULT_SUCCESS;
1301
1320
1302
1321
pDdiTable->pfnCreate = ur_sanitizer_layer::urKernelCreate;
1322
+ pDdiTable->pfnRetain = ur_sanitizer_layer::urKernelRetain;
1303
1323
pDdiTable->pfnRelease = ur_sanitizer_layer::urKernelRelease;
1304
1324
pDdiTable->pfnSetArgValue = ur_sanitizer_layer::urKernelSetArgValue;
1305
1325
pDdiTable->pfnSetArgMemObj = ur_sanitizer_layer::urKernelSetArgMemObj;
0 commit comments