diff --git a/opencl/source/command_queue/enqueue_copy_buffer.h b/opencl/source/command_queue/enqueue_copy_buffer.h index e4863a434c..43fb19eabb 100644 --- a/opencl/source/command_queue/enqueue_copy_buffer.h +++ b/opencl/source/command_queue/enqueue_copy_buffer.h @@ -54,13 +54,17 @@ cl_int CommandQueueHw::enqueueCopyBuffer( MemObjSurface s2(dstBuffer); Surface *surfaces[] = {&s1, &s2}; - enqueueHandler( - surfaces, - false, - dispatchInfo, - numEventsInWaitList, - eventWaitList, - event); + if (blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER)) { + enqueueBlit(dispatchInfo, numEventsInWaitList, eventWaitList, event, false); + } else { + enqueueHandler( + surfaces, + false, + dispatchInfo, + numEventsInWaitList, + eventWaitList, + event); + } return CL_SUCCESS; } diff --git a/opencl/source/command_queue/enqueue_copy_buffer_rect.h b/opencl/source/command_queue/enqueue_copy_buffer_rect.h index c7a89a2b44..bf16b5fc91 100644 --- a/opencl/source/command_queue/enqueue_copy_buffer_rect.h +++ b/opencl/source/command_queue/enqueue_copy_buffer_rect.h @@ -60,13 +60,17 @@ cl_int CommandQueueHw::enqueueCopyBufferRect( MultiDispatchInfo dispatchInfo; builder.buildDispatchInfos(dispatchInfo, dc); - enqueueHandler( - surfaces, - false, - dispatchInfo, - numEventsInWaitList, - eventWaitList, - event); + if (blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER_RECT)) { + enqueueBlit(dispatchInfo, numEventsInWaitList, eventWaitList, event, false); + } else { + enqueueHandler( + surfaces, + false, + dispatchInfo, + numEventsInWaitList, + eventWaitList, + event); + } return CL_SUCCESS; } diff --git a/opencl/source/command_queue/enqueue_write_buffer.h b/opencl/source/command_queue/enqueue_write_buffer.h index 77775dd8ff..769b6ebaa9 100644 --- a/opencl/source/command_queue/enqueue_write_buffer.h +++ b/opencl/source/command_queue/enqueue_write_buffer.h @@ -116,13 +116,17 @@ cl_int CommandQueueHw::enqueueWriteBuffer( MultiDispatchInfo dispatchInfo; builder.buildDispatchInfos(dispatchInfo, dc); - enqueueHandler( - surfaces, - blockingWrite == CL_TRUE, - dispatchInfo, - numEventsInWaitList, - eventWaitList, - event); + if (blitEnqueueAllowed(cmdType)) { + enqueueBlit(dispatchInfo, numEventsInWaitList, eventWaitList, event, blockingWrite); + } else { + enqueueHandler( + surfaces, + blockingWrite == CL_TRUE, + dispatchInfo, + numEventsInWaitList, + eventWaitList, + event); + } if (context->isProvidingPerformanceHints()) { context->providePerformanceHint(CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL, CL_ENQUEUE_WRITE_BUFFER_REQUIRES_COPY_DATA, static_cast(buffer));