@@ -204,33 +204,71 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
204
204
}
205
205
206
206
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendUSMMemcpyExp (
207
- [[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer,
208
- [[maybe_unused]] void *pDst, [[maybe_unused]] const void *pSrc,
209
- [[maybe_unused]] size_t size,
210
- [[maybe_unused]] uint32_t numSyncPointsInWaitList,
211
- [[maybe_unused]] const ur_exp_command_buffer_sync_point_t
212
- *pSyncPointWaitList,
213
- [[maybe_unused]] uint32_t numEventsInWaitList,
214
- [[maybe_unused]] const ur_event_handle_t *phEventWaitList,
215
- [[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint,
216
- [[maybe_unused]] ur_event_handle_t *phEvent,
217
- [[maybe_unused]] ur_exp_command_buffer_command_handle_t *phCommand) {
218
- return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
207
+ ur_exp_command_buffer_handle_t hCommandBuffer, void *pDst, const void *pSrc,
208
+ size_t size, uint32_t numSyncPointsInWaitList,
209
+ const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
210
+ uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
211
+ ur_exp_command_buffer_sync_point_t *pSyncPoint, ur_event_handle_t *phEvent,
212
+ ur_exp_command_buffer_command_handle_t *phCommand) {
213
+ (void )numEventsInWaitList;
214
+ (void )phEventWaitList;
215
+ (void )phEvent;
216
+ (void )phCommand;
217
+
218
+ // No extension entry-point exists for USM memcpy, use SVM memcpy in
219
+ // preparation for USVM.
220
+ cl_context CLContext = hCommandBuffer->hContext ->CLContext ;
221
+ cl_ext::clCommandSVMMemcpyKHR_fn clCommandSVMMemcpyKHR = nullptr ;
222
+ UR_RETURN_ON_FAILURE (
223
+ cl_ext::getExtFuncFromContext<decltype (clCommandSVMMemcpyKHR)>(
224
+ CLContext, ur::cl::getAdapter ()->fnCache .clCommandSVMMemcpyKHRCache ,
225
+ cl_ext::CommandSVMMemcpyName, &clCommandSVMMemcpyKHR));
226
+
227
+ const bool IsInOrder = hCommandBuffer->IsInOrder ;
228
+ cl_sync_point_khr *RetSyncPoint = IsInOrder ? nullptr : pSyncPoint;
229
+ const cl_sync_point_khr *SyncPointWaitList =
230
+ IsInOrder ? nullptr : pSyncPointWaitList;
231
+ uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
232
+ CL_RETURN_ON_FAILURE (clCommandSVMMemcpyKHR (
233
+ hCommandBuffer->CLCommandBuffer , nullptr , nullptr , pDst, pSrc, size,
234
+ WaitListSize, SyncPointWaitList, RetSyncPoint, nullptr ));
235
+
236
+ return UR_RESULT_SUCCESS;
219
237
}
220
238
221
239
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendUSMFillExp (
222
- [[maybe_unused]] ur_exp_command_buffer_handle_t hCommandBuffer,
223
- [[maybe_unused]] void *pMemory, [[maybe_unused]] const void *pPattern,
224
- [[maybe_unused]] size_t patternSize, [[maybe_unused]] size_t size,
225
- [[maybe_unused]] uint32_t numSyncPointsInWaitList,
226
- [[maybe_unused]] const ur_exp_command_buffer_sync_point_t
227
- *pSyncPointWaitList,
228
- [[maybe_unused]] uint32_t numEventsInWaitList,
229
- [[maybe_unused]] const ur_event_handle_t *phEventWaitList,
230
- [[maybe_unused]] ur_exp_command_buffer_sync_point_t *pSyncPoint,
231
- [[maybe_unused]] ur_event_handle_t *phEvent,
232
- [[maybe_unused]] ur_exp_command_buffer_command_handle_t *phCommand) {
233
- return UR_RESULT_ERROR_UNSUPPORTED_FEATURE;
240
+ ur_exp_command_buffer_handle_t hCommandBuffer, void *pMemory,
241
+ const void *pPattern, size_t patternSize, size_t size,
242
+ uint32_t numSyncPointsInWaitList,
243
+ const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList,
244
+ uint32_t numEventsInWaitList, const ur_event_handle_t *phEventWaitList,
245
+ ur_exp_command_buffer_sync_point_t *pSyncPoint, ur_event_handle_t *phEvent,
246
+ ur_exp_command_buffer_command_handle_t *phCommand) {
247
+ (void )numEventsInWaitList;
248
+ (void )phEventWaitList;
249
+ (void )phEvent;
250
+ (void )phCommand;
251
+
252
+ // No extension entry-point exists for USM memcpy, use SVM memcpy in
253
+ // preparation for USVM.
254
+ cl_context CLContext = hCommandBuffer->hContext ->CLContext ;
255
+ cl_ext::clCommandSVMMemFillKHR_fn clCommandSVMMemFillKHR = nullptr ;
256
+ UR_RETURN_ON_FAILURE (
257
+ cl_ext::getExtFuncFromContext<decltype (clCommandSVMMemFillKHR)>(
258
+ CLContext, ur::cl::getAdapter ()->fnCache .clCommandSVMMemFillKHRCache ,
259
+ cl_ext::CommandSVMMemFillName, &clCommandSVMMemFillKHR));
260
+
261
+ const bool IsInOrder = hCommandBuffer->IsInOrder ;
262
+ cl_sync_point_khr *RetSyncPoint = IsInOrder ? nullptr : pSyncPoint;
263
+ const cl_sync_point_khr *SyncPointWaitList =
264
+ IsInOrder ? nullptr : pSyncPointWaitList;
265
+ uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
266
+ CL_RETURN_ON_FAILURE (
267
+ clCommandSVMMemFillKHR (hCommandBuffer->CLCommandBuffer , nullptr , nullptr ,
268
+ pMemory, pPattern, patternSize, size, WaitListSize,
269
+ SyncPointWaitList, RetSyncPoint, nullptr ));
270
+
271
+ return UR_RESULT_SUCCESS;
234
272
}
235
273
236
274
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyExp (
0 commit comments