Wait for barrier on every OCL split blitter

Signed-off-by: Lukasz Jobczyk <lukasz.jobczyk@intel.com>
This commit is contained in:
Lukasz Jobczyk
2023-03-13 14:30:26 +00:00
committed by Compute-Runtime-Automation
parent adbda5906a
commit 320deec53b
4 changed files with 73 additions and 1 deletions

View File

@@ -452,6 +452,7 @@ class CommandQueue : public BaseObject<_cl_command_queue> {
};
std::array<BcsTimestampPacketContainers, bcsInfoMaskSize> bcsTimestampPacketContainers;
bool stallingCommandsOnNextFlushRequired = false;
bool splitBarrierRequired = false;
};
template <typename PtrType>

View File

@@ -258,6 +258,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
} else if (computeCommandStreamReceiver.peekTimestampPacketWriteEnabled()) {
if (CL_COMMAND_BARRIER == commandType) {
setStallingCommandsOnNextFlush(true);
this->splitBarrierRequired = true;
}
for (size_t i = 0; i < eventsRequest.numEventsInWaitList; i++) {
@@ -1245,7 +1246,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueBlitSplit(MultiDispatchInfo &dispatchIn
di,
numEventsInWaitList,
eventWaitList,
event);
nullptr);
DEBUG_BREAK_IF(ret != CL_SUCCESS);
}
@@ -1259,6 +1260,9 @@ cl_int CommandQueueHw<GfxFamily>::enqueueBlitSplit(MultiDispatchInfo &dispatchIn
auto remainingSize = size;
for (size_t i = 0; i < copyEngines.size(); i++) {
if (isOOQEnabled() && this->splitBarrierRequired) {
this->setStallingCommandsOnNextFlush(true);
}
auto localSize = remainingSize / (copyEngines.size() - i);
auto localParams = dispatchInfo.peekBuiltinOpParams();
localParams.size.x = localSize;
@@ -1282,6 +1286,7 @@ cl_int CommandQueueHw<GfxFamily>::enqueueBlitSplit(MultiDispatchInfo &dispatchIn
}
this->timestampPacketContainer->swapNodes(splitNodes);
this->splitBarrierRequired = false;
queueOwnership.unlock();
for (auto &lock : locks) {