@@ -204,33 +204,59 @@ UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendKernelLaunchExp(
204204}
205205
206206UR_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;
219231}
220232
221233UR_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;
234260}
235261
236262UR_APIEXPORT ur_result_t UR_APICALL urCommandBufferAppendMemBufferCopyExp (
0 commit comments