@@ -1172,25 +1172,42 @@ cl_int CL_API_CALL clSetKernelExecInfo_override(
1172
1172
param_value_size,
1173
1173
param_value);
1174
1174
ret = (check == CL_SUCCESS) ? CL_SUCCESS : ret;
1175
- return check ;
1175
+ return ret ;
1176
1176
}
1177
1177
case CL_KERNEL_EXEC_INFO_SVM_PTRS:
1178
1178
{
1179
1179
const void * const * svmPtrs = (const void * const *)param_value;
1180
1180
const size_t numPtrs = param_value_size / sizeof (void *);
1181
1181
1182
- std::vector<const void *> nonNullPtrs;
1182
+ cl_context context = getContext (kernel);
1183
+
1184
+ std::vector<const void *> nonNullUSMPtrs;
1185
+ std::vector<const void *> nonNullSVMPtrs;
1183
1186
for (size_t i = 0 ; i < numPtrs; ++i) {
1184
1187
if (svmPtrs[i] != nullptr ) {
1185
- nonNullPtrs.push_back (svmPtrs[i]);
1188
+ if (isUSMPtr (context, svmPtrs[i])) {
1189
+ nonNullUSMPtrs.push_back (svmPtrs[i]);
1190
+ } else {
1191
+ nonNullSVMPtrs.push_back (svmPtrs[i]);
1192
+ }
1186
1193
}
1187
1194
}
1188
1195
1189
- return g_pNextDispatch->clSetKernelExecInfo (
1196
+ cl_int ret = CL_INVALID_OPERATION;
1197
+ cl_int check = CL_INVALID_OPERATION;
1198
+ check = g_pNextDispatch->clSetKernelExecInfo (
1199
+ kernel,
1200
+ CL_KERNEL_EXEC_INFO_USM_PTRS_INTEL,
1201
+ nonNullUSMPtrs.size () * sizeof (void *),
1202
+ nonNullUSMPtrs.empty () ? nullptr : nonNullUSMPtrs.data ());
1203
+ ret = (check == CL_SUCCESS) ? CL_SUCCESS : ret;
1204
+ check = g_pNextDispatch->clSetKernelExecInfo (
1190
1205
kernel,
1191
1206
CL_KERNEL_EXEC_INFO_SVM_PTRS,
1192
- nonNullPtrs.size () * sizeof (void *),
1193
- nonNullPtrs.empty () ? nullptr : nonNullPtrs.data ());
1207
+ nonNullSVMPtrs.size () * sizeof (void *),
1208
+ nonNullSVMPtrs.empty () ? nullptr : nonNullSVMPtrs.data ());
1209
+ ret = (check == CL_SUCCESS) ? CL_SUCCESS : ret;
1210
+ return ret;
1194
1211
}
1195
1212
default : break ;
1196
1213
}
0 commit comments