@@ -918,6 +918,79 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeWhenDcFlushI
918
918
EXPECT_NE (nullptr , cmdBuffer->epiloguePipeControlLocation );
919
919
}
920
920
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
+
921
994
HWTEST_F (CommandStreamReceiverFlushTaskTests,
922
995
givenCsrInBatchingModeAndOoqFlagSetToFalseWhenTwoTasksArePassedWithTheSameLevelThenThereIsPipeControlBetweenThemAfterFlush) {
923
996
CommandQueueHw<FamilyType> commandQueue (nullptr , pDevice, 0 );
0 commit comments