Move blit enqueue out of enqueueCommon [4/n].

Change-Id: Ib185a6f7a94f3c3e14f108ebadd82335a72cde49
Signed-off-by: Bartosz Dunajski <bartosz.dunajski@intel.com>
This commit is contained in:
Bartosz Dunajski
2020-08-28 12:46:32 +02:00
committed by sys_ocldev
parent 9a582a7368
commit e499f3130e
9 changed files with 40 additions and 100 deletions

View File

@ -347,6 +347,9 @@ class CommandQueueHw : public CommandQueue {
const cl_event *eventWaitList,
cl_event *event);
template <uint32_t cmdType, size_t surfaceCount>
void dispatchBcsOrGpgpuEnqueue(MultiDispatchInfo &dispatchInfo, Surface *(&surfaces)[surfaceCount], cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking);
template <uint32_t cmdType>
void enqueueBlit(const MultiDispatchInfo &multiDispatchInfo, cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking);

View File

@ -1106,4 +1106,20 @@ void CommandQueueHw<GfxFamily>::enqueueBlit(const MultiDispatchInfo &multiDispat
waitUntilComplete(blockQueue, nullptr);
}
}
template <typename GfxFamily>
template <uint32_t cmdType, size_t surfaceCount>
void CommandQueueHw<GfxFamily>::dispatchBcsOrGpgpuEnqueue(MultiDispatchInfo &dispatchInfo, Surface *(&surfaces)[surfaceCount], cl_uint numEventsInWaitList, const cl_event *eventWaitList, cl_event *event, bool blocking) {
if (blitEnqueueAllowed(cmdType)) {
enqueueBlit<cmdType>(dispatchInfo, numEventsInWaitList, eventWaitList, event, blocking);
} else {
enqueueHandler<cmdType>(
surfaces,
blocking,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
}
}
} // namespace NEO

View File

@ -54,17 +54,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyBuffer(
MemObjSurface s2(dstBuffer);
Surface *surfaces[] = {&s1, &s2};
if (blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER)) {
enqueueBlit<CL_COMMAND_COPY_BUFFER>(dispatchInfo, numEventsInWaitList, eventWaitList, event, false);
} else {
enqueueHandler<CL_COMMAND_COPY_BUFFER>(
surfaces,
false,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
}
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, false);
return CL_SUCCESS;
}

View File

@ -60,17 +60,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueCopyBufferRect(
MultiDispatchInfo dispatchInfo;
builder.buildDispatchInfos(dispatchInfo, dc);
if (blitEnqueueAllowed(CL_COMMAND_COPY_BUFFER_RECT)) {
enqueueBlit<CL_COMMAND_COPY_BUFFER_RECT>(dispatchInfo, numEventsInWaitList, eventWaitList, event, false);
} else {
enqueueHandler<CL_COMMAND_COPY_BUFFER_RECT>(
surfaces,
false,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
}
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_COPY_BUFFER_RECT>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, false);
return CL_SUCCESS;
}

View File

@ -129,17 +129,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueReadBuffer(
}
}
if (blitEnqueueAllowed(cmdType)) {
enqueueBlit<CL_COMMAND_READ_BUFFER>(dispatchInfo, numEventsInWaitList, eventWaitList, event, blockingRead);
} else {
enqueueHandler<CL_COMMAND_READ_BUFFER>(
surfaces,
blockingRead == CL_TRUE,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
}
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_READ_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingRead);
return CL_SUCCESS;
}

View File

@ -93,13 +93,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueReadBufferRect(
MultiDispatchInfo dispatchInfo;
builder.buildDispatchInfos(dispatchInfo, dc);
enqueueHandler<CL_COMMAND_READ_BUFFER_RECT>(
surfaces,
blockingRead == CL_TRUE,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_READ_BUFFER_RECT>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingRead);
if (context->isProvidingPerformanceHints()) {
context->providePerformanceHintForMemoryTransfer(CL_COMMAND_READ_BUFFER_RECT, true, static_cast<cl_mem>(buffer), ptr);

View File

@ -131,13 +131,8 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMap(cl_bool blockingMap,
dc.unifiedMemoryArgsRequireMemSync = externalAppCall;
builder.buildDispatchInfos(dispatchInfo, dc);
enqueueHandler<CL_COMMAND_READ_BUFFER>(
surfaces,
blocking,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_READ_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blocking);
if (event) {
castToObjectOrAbort<Event>(*event)->setCmdType(CL_COMMAND_SVM_MAP);
}
@ -224,13 +219,8 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMUnmap(void *svmPtr,
dc.unifiedMemoryArgsRequireMemSync = externalAppCall;
builder.buildDispatchInfos(dispatchInfo, dc);
enqueueHandler<CL_COMMAND_READ_BUFFER>(
surfaces,
false,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_READ_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, false);
if (event) {
castToObjectOrAbort<Event>(*event)->setCmdType(CL_COMMAND_SVM_UNMAP);
}
@ -364,13 +354,9 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemcpy(cl_bool blockingCopy,
surfaces[0] = &srcSvmSurf;
surfaces[1] = &dstHostPtrSurf;
builder.buildDispatchInfos(dispatchInfo, operationParams);
enqueueHandler<CL_COMMAND_READ_BUFFER>(
surfaces,
blockingCopy == CL_TRUE,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_READ_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingCopy);
} else if (copyType == HostToSvm) {
HostPtrSurface srcHostPtrSurf(const_cast<void *>(srcPtr), size);
GeneralSurface dstSvmSurf(dstSvmData->gpuAllocations.getGraphicsAllocation(rootDeviceIndex));
@ -388,13 +374,9 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemcpy(cl_bool blockingCopy,
surfaces[0] = &dstSvmSurf;
surfaces[1] = &srcHostPtrSurf;
builder.buildDispatchInfos(dispatchInfo, operationParams);
enqueueHandler<CL_COMMAND_WRITE_BUFFER>(
surfaces,
blockingCopy == CL_TRUE,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_WRITE_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingCopy);
} else if (copyType == SvmToSvm) {
GeneralSurface srcSvmSurf(srcSvmData->gpuAllocations.getGraphicsAllocation(rootDeviceIndex));
GeneralSurface dstSvmSurf(dstSvmData->gpuAllocations.getGraphicsAllocation(rootDeviceIndex));
@ -403,13 +385,9 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemcpy(cl_bool blockingCopy,
surfaces[0] = &srcSvmSurf;
surfaces[1] = &dstSvmSurf;
builder.buildDispatchInfos(dispatchInfo, operationParams);
enqueueHandler<CL_COMMAND_SVM_MEMCPY>(
surfaces,
blockingCopy ? true : false,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_SVM_MEMCPY>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingCopy);
} else {
HostPtrSurface srcHostPtrSurf(const_cast<void *>(srcPtr), size);
HostPtrSurface dstHostPtrSurf(dstPtr, size);
@ -429,13 +407,8 @@ cl_int CommandQueueHw<GfxFamily>::enqueueSVMMemcpy(cl_bool blockingCopy,
surfaces[1] = &dstHostPtrSurf;
builder.buildDispatchInfos(dispatchInfo, operationParams);
enqueueHandler<CL_COMMAND_WRITE_BUFFER>(
surfaces,
blockingCopy ? true : false,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_WRITE_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingCopy);
}
if (event) {
auto pEvent = castToObjectOrAbort<Event>(*event);

View File

@ -116,17 +116,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueWriteBuffer(
MultiDispatchInfo dispatchInfo;
builder.buildDispatchInfos(dispatchInfo, dc);
if (blitEnqueueAllowed(cmdType)) {
enqueueBlit<CL_COMMAND_WRITE_BUFFER>(dispatchInfo, numEventsInWaitList, eventWaitList, event, blockingWrite);
} else {
enqueueHandler<CL_COMMAND_WRITE_BUFFER>(
surfaces,
blockingWrite == CL_TRUE,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
}
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_WRITE_BUFFER>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingWrite);
if (context->isProvidingPerformanceHints()) {
context->providePerformanceHint(CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL, CL_ENQUEUE_WRITE_BUFFER_REQUIRES_COPY_DATA, static_cast<cl_mem>(buffer));

View File

@ -92,13 +92,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueWriteBufferRect(
MultiDispatchInfo dispatchInfo;
builder.buildDispatchInfos(dispatchInfo, dc);
enqueueHandler<CL_COMMAND_WRITE_BUFFER_RECT>(
surfaces,
blockingWrite == CL_TRUE,
dispatchInfo,
numEventsInWaitList,
eventWaitList,
event);
dispatchBcsOrGpgpuEnqueue<CL_COMMAND_WRITE_BUFFER_RECT>(dispatchInfo, surfaces, numEventsInWaitList, eventWaitList, event, blockingWrite);
if (context->isProvidingPerformanceHints()) {
context->providePerformanceHint(CL_CONTEXT_DIAGNOSTICS_LEVEL_NEUTRAL_INTEL, CL_ENQUEUE_WRITE_BUFFER_RECT_REQUIRES_COPY_DATA, static_cast<cl_mem>(buffer));