@@ -918,6 +918,79 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeWhenDcFlushI
918918 EXPECT_NE (nullptr , cmdBuffer->epiloguePipeControlLocation );
919919}
920920
921+ HWTEST_F (CommandStreamReceiverFlushTaskTests, givenEpiloguePipeControlThenDcFlushIsEnabled) {
922+ using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
923+
924+ CommandQueueHw<FamilyType> commandQueue (nullptr , pDevice, 0 );
925+ auto &commandStream = commandQueue.getCS (4096u );
926+
927+ auto mockCsr = new MockCsrHw2<FamilyType>(*platformDevices[0 ], *pDevice->executionEnvironment );
928+ pDevice->resetCommandStreamReceiver (mockCsr);
929+
930+ mockCsr->overrideDispatchPolicy (DispatchMode::BatchedDispatch);
931+
932+ auto mockedSubmissionsAggregator = new mockSubmissionsAggregator ();
933+ mockCsr->overrideSubmissionAggregator (mockedSubmissionsAggregator);
934+
935+ DispatchFlags dispatchFlags;
936+ dispatchFlags.guardCommandBufferWithPipeControl = true ;
937+ dispatchFlags.outOfOrderExecutionAllowed = false ;
938+ dispatchFlags.preemptionMode = PreemptionHelper::getDefaultPreemptionMode (pDevice->getHardwareInfo ());
939+ mockCsr->flushTask (commandStream,
940+ 0 ,
941+ dsh,
942+ ioh,
943+ ssh,
944+ taskLevel,
945+ dispatchFlags,
946+ *pDevice);
947+
948+ auto cmdBuffer = mockedSubmissionsAggregator->peekCommandBuffers ().peekHead ();
949+ ASSERT_NE (nullptr , cmdBuffer->epiloguePipeControlLocation );
950+ auto pipeControl = genCmdCast<PIPE_CONTROL *>(cmdBuffer->epiloguePipeControlLocation );
951+ ASSERT_NE (nullptr , pipeControl);
952+ mockCsr->flushBatchedSubmissions ();
953+ EXPECT_TRUE (pipeControl->getDcFlushEnable ());
954+ }
955+
956+ HWTEST_F (CommandStreamReceiverFlushTaskTests, givenEpiloguePipeControlWhendDcFlushDisabledByDebugFlagThenDcFlushIsDisabled) {
957+ using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
958+
959+ DebugManagerStateRestore debugRestorer;
960+ DebugManager.flags .DisableDcFlushInEpilogue .set (true );
961+
962+ CommandQueueHw<FamilyType> commandQueue (nullptr , pDevice, 0 );
963+ auto &commandStream = commandQueue.getCS (4096u );
964+
965+ auto mockCsr = new MockCsrHw2<FamilyType>(*platformDevices[0 ], *pDevice->executionEnvironment );
966+ pDevice->resetCommandStreamReceiver (mockCsr);
967+
968+ mockCsr->overrideDispatchPolicy (DispatchMode::BatchedDispatch);
969+
970+ auto mockedSubmissionsAggregator = new mockSubmissionsAggregator ();
971+ mockCsr->overrideSubmissionAggregator (mockedSubmissionsAggregator);
972+
973+ DispatchFlags dispatchFlags;
974+ dispatchFlags.guardCommandBufferWithPipeControl = true ;
975+ dispatchFlags.outOfOrderExecutionAllowed = false ;
976+ dispatchFlags.preemptionMode = PreemptionHelper::getDefaultPreemptionMode (pDevice->getHardwareInfo ());
977+ mockCsr->flushTask (commandStream,
978+ 0 ,
979+ dsh,
980+ ioh,
981+ ssh,
982+ taskLevel,
983+ dispatchFlags,
984+ *pDevice);
985+
986+ auto cmdBuffer = mockedSubmissionsAggregator->peekCommandBuffers ().peekHead ();
987+ ASSERT_NE (nullptr , cmdBuffer->epiloguePipeControlLocation );
988+ auto pipeControl = genCmdCast<PIPE_CONTROL *>(cmdBuffer->epiloguePipeControlLocation );
989+ ASSERT_NE (nullptr , pipeControl);
990+ mockCsr->flushBatchedSubmissions ();
991+ EXPECT_FALSE (pipeControl->getDcFlushEnable ());
992+ }
993+
921994HWTEST_F (CommandStreamReceiverFlushTaskTests,
922995 givenCsrInBatchingModeAndOoqFlagSetToFalseWhenTwoTasksArePassedWithTheSameLevelThenThereIsPipeControlBetweenThemAfterFlush) {
923996 CommandQueueHw<FamilyType> commandQueue (nullptr , pDevice, 0 );
0 commit comments