@@ -204,33 +204,59 @@ 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, uint32_t ,
210
+ const ur_event_handle_t *, ur_exp_command_buffer_sync_point_t *pSyncPoint,
211
+ ur_event_handle_t *, ur_exp_command_buffer_command_handle_t *) {
212
+ // No extension entry-point exists for USM memcpy, use SVM memcpy in
213
+ // preparation for USVM.
214
+ cl_context CLContext = hCommandBuffer->hContext ->CLContext ;
215
+ cl_ext::clCommandSVMMemcpyKHR_fn clCommandSVMMemcpyKHR = nullptr ;
216
+ UR_RETURN_ON_FAILURE (
217
+ cl_ext::getExtFuncFromContext<decltype (clCommandSVMMemcpyKHR)>(
218
+ CLContext, ur::cl::getAdapter ()->fnCache .clCommandSVMMemcpyKHRCache ,
219
+ cl_ext::CommandSVMMemcpyName, &clCommandSVMMemcpyKHR));
220
+
221
+ const bool IsInOrder = hCommandBuffer->IsInOrder ;
222
+ cl_sync_point_khr *RetSyncPoint = IsInOrder ? nullptr : pSyncPoint;
223
+ const cl_sync_point_khr *SyncPointWaitList =
224
+ IsInOrder ? nullptr : pSyncPointWaitList;
225
+ uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
226
+ CL_RETURN_ON_FAILURE (clCommandSVMMemcpyKHR (
227
+ hCommandBuffer->CLCommandBuffer , nullptr , nullptr , pDst, pSrc, size,
228
+ WaitListSize, SyncPointWaitList, RetSyncPoint, nullptr ));
229
+
230
+ return UR_RESULT_SUCCESS;
219
231
}
220
232
221
233
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;
234
+ ur_exp_command_buffer_handle_t hCommandBuffer, void *pMemory,
235
+ const void *pPattern, size_t patternSize, size_t size,
236
+ uint32_t numSyncPointsInWaitList,
237
+ const ur_exp_command_buffer_sync_point_t *pSyncPointWaitList, uint32_t ,
238
+ const ur_event_handle_t *, ur_exp_command_buffer_sync_point_t *pSyncPoint,
239
+ ur_event_handle_t *, ur_exp_command_buffer_command_handle_t *) {
240
+ // No extension entry-point exists for USM fill, use SVM fill in preparation
241
+ // for USVM.
242
+ cl_context CLContext = hCommandBuffer->hContext ->CLContext ;
243
+ cl_ext::clCommandSVMMemFillKHR_fn clCommandSVMMemFillKHR = nullptr ;
244
+ UR_RETURN_ON_FAILURE (
245
+ cl_ext::getExtFuncFromContext<decltype (clCommandSVMMemFillKHR)>(
246
+ CLContext, ur::cl::getAdapter ()->fnCache .clCommandSVMMemFillKHRCache ,
247
+ cl_ext::CommandSVMMemFillName, &clCommandSVMMemFillKHR));
248
+
249
+ const bool IsInOrder = hCommandBuffer->IsInOrder ;
250
+ cl_sync_point_khr *RetSyncPoint = IsInOrder ? nullptr : pSyncPoint;
251
+ const cl_sync_point_khr *SyncPointWaitList =
252
+ IsInOrder ? nullptr : pSyncPointWaitList;
253
+ uint32_t WaitListSize = IsInOrder ? 0 : numSyncPointsInWaitList;
254
+ CL_RETURN_ON_FAILURE (
255
+ clCommandSVMMemFillKHR (hCommandBuffer->CLCommandBuffer , nullptr , nullptr ,
256
+ pMemory, pPattern, patternSize, size, WaitListSize,
257
+ SyncPointWaitList, RetSyncPoint, nullptr ));
258
+
259
+ return UR_RESULT_SUCCESS;
234
260
}
235
261
236
262
UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyExp (
0 commit comments