@@ -188,6 +188,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
188188 }
189189
190190 TimestampPacketContainer previousTimestampPacketNodes;
191+ TimestampPacketContainer barrierTimestampPacketNode;
191192 EventsRequest eventsRequest (numEventsInWaitList, eventWaitList, event);
192193 CsrDependencies csrDeps;
193194 BlitProperties blitProperties;
@@ -202,6 +203,11 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
202203 nodesCount = estimateTimestampPacketNodesCount (multiDispatchInfo);
203204 }
204205
206+ if (blitEnqueue && getGpgpuCommandStreamReceiver ().isStallingPipeControlOnNextFlushRequired ()) {
207+ auto allocator = getGpgpuCommandStreamReceiver ().getTimestampPacketAllocator ();
208+ barrierTimestampPacketNode.add (allocator->getTag ());
209+ }
210+
205211 if (nodesCount > 0 ) {
206212 obtainNewTimestampPacketNodes (nodesCount, previousTimestampPacketNodes, clearAllDependencies);
207213 csrDeps.push_back (&previousTimestampPacketNodes);
@@ -219,8 +225,8 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
219225 bool flushDependenciesForNonKernelCommand = false ;
220226
221227 if (blitEnqueue) {
222- blitProperties = processDispatchForBlitEnqueue (multiDispatchInfo, previousTimestampPacketNodes, eventsRequest, commandStream ,
223- commandType, blockQueue);
228+ blitProperties = processDispatchForBlitEnqueue (multiDispatchInfo, previousTimestampPacketNodes, barrierTimestampPacketNode ,
229+ eventsRequest, commandStream, commandType, blockQueue);
224230 } else if (multiDispatchInfo.empty () == false ) {
225231 processDispatchForKernels<commandType>(multiDispatchInfo, printfHandler, eventBuilder.getEvent (),
226232 hwTimeStamps, blockQueue, devQueueHw, csrDeps, blockedCommandsData.get (),
@@ -289,6 +295,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
289295 blocking,
290296 enqueueProperties,
291297 &previousTimestampPacketNodes,
298+ barrierTimestampPacketNode,
292299 eventsRequest,
293300 eventBuilder,
294301 taskLevel);
@@ -337,6 +344,7 @@ void CommandQueueHw<GfxFamily>::enqueueHandler(Surface **surfacesForResidency,
337344 numSurfaceForResidency,
338345 multiDispatchInfo,
339346 &previousTimestampPacketNodes,
347+ barrierTimestampPacketNode,
340348 blockedCommandsData,
341349 enqueueProperties,
342350 eventsRequest,
@@ -431,6 +439,7 @@ void CommandQueueHw<GfxFamily>::processDispatchForKernels(const MultiDispatchInf
431439template <typename GfxFamily>
432440BlitProperties CommandQueueHw<GfxFamily>::processDispatchForBlitEnqueue(const MultiDispatchInfo &multiDispatchInfo,
433441 TimestampPacketContainer &previousTimestampPacketNodes,
442+ TimestampPacketContainer &barrierTimestampPacketNode,
434443 const EventsRequest &eventsRequest, LinearStream &commandStream,
435444 uint32_t commandType, bool queueBlocked) {
436445 auto blitDirection = BlitProperties::obtainBlitDirection (commandType);
@@ -444,6 +453,7 @@ BlitProperties CommandQueueHw<GfxFamily>::processDispatchForBlitEnqueue(const Mu
444453 CsrDependencies::DependenciesType::All);
445454
446455 blitProperties.csrDependencies .push_back (&previousTimestampPacketNodes);
456+ blitProperties.csrDependencies .push_back (&barrierTimestampPacketNode);
447457 }
448458
449459 blitProperties.outputTimestampPacket = timestampPacketContainer.get ();
@@ -662,6 +672,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueNonBlocked(
662672
663673 DispatchFlags dispatchFlags (
664674 {}, // csrDependencies
675+ nullptr , // barrierTimestampPacketNodes
665676 {}, // pipelineSelectArgs
666677 this ->flushStamp ->getStampReference (), // flushStampReference
667678 getThrottle (), // throttle
@@ -723,6 +734,7 @@ void CommandQueueHw<GfxFamily>::enqueueBlocked(
723734 size_t surfaceCount,
724735 const MultiDispatchInfo &multiDispatchInfo,
725736 TimestampPacketContainer *previousTimestampPacketNodes,
737+ TimestampPacketContainer &barrierTimestampPacketNode,
726738 std::unique_ptr<KernelOperation> &blockedCommandsData,
727739 const EnqueueProperties &enqueueProperties,
728740 EventsRequest &eventsRequest,
@@ -801,7 +813,7 @@ void CommandQueueHw<GfxFamily>::enqueueBlocked(
801813 auto event = castToObjectOrAbort<Event>(eventsRequest.eventWaitList [i]);
802814 event->incRefInternal ();
803815 }
804- command->setTimestampPacketNode (*timestampPacketContainer, *previousTimestampPacketNodes);
816+ command->setTimestampPacketNode (*timestampPacketContainer, *previousTimestampPacketNodes, barrierTimestampPacketNode );
805817 command->setEventsRequest (eventsRequest);
806818 }
807819 outEvent->setCommand (std::move (command));
@@ -826,6 +838,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
826838 bool &blocking,
827839 const EnqueueProperties &enqueueProperties,
828840 TimestampPacketContainer *previousTimestampPacketNodes,
841+ const TimestampPacketContainer &barrierTimestampPacketNodes,
829842 EventsRequest &eventsRequest,
830843 EventBuilder &eventBuilder,
831844 uint32_t taskLevel) {
@@ -853,6 +866,7 @@ CompletionStamp CommandQueueHw<GfxFamily>::enqueueCommandWithoutKernel(
853866
854867 DispatchFlags dispatchFlags (
855868 {}, // csrDependencies
869+ &barrierTimestampPacketNodes, // barrierTimestampPacketNodes
856870 {}, // pipelineSelectArgs
857871 flushStamp->getStampReference (), // flushStampReference
858872 QueueThrottle::MEDIUM, // throttle
0 commit comments