@@ -736,3 +736,147 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, ImplicitScalingTests,
736
736
auto miSemaphoreList = hwParser.getCommandsList <MI_SEMAPHORE_WAIT>();
737
737
EXPECT_EQ (3u , miSemaphoreList.size ());
738
738
}
739
+
740
+ HWCMDTEST_F (IGFX_XE_HP_CORE, ImplicitScalingTests,
741
+ givenBarrierDispatchWhenApiNotRequiresSelfCleanupThenExpectMinimalCommandBuffer) {
742
+ using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
743
+ using MI_ATOMIC = typename FamilyType::MI_ATOMIC;
744
+ using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
745
+ using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
746
+
747
+ size_t expectedSize = sizeof (PIPE_CONTROL) +
748
+ sizeof (MI_ATOMIC) + sizeof (MI_SEMAPHORE_WAIT) +
749
+ sizeof (MI_BATCH_BUFFER_START) +
750
+ sizeof (WalkerPartition::BarrierControlSection);
751
+
752
+ size_t estimatedSize = 0 ;
753
+ size_t totalBytesProgrammed = 0 ;
754
+
755
+ estimatedSize = ImplicitScalingDispatch<FamilyType>::getBarrierSize (false );
756
+ EXPECT_EQ (expectedSize, estimatedSize);
757
+
758
+ ImplicitScalingDispatch<FamilyType>::dispatchBarrierCommands (commandStream, twoTile, false , false , false );
759
+ totalBytesProgrammed = commandStream.getUsed ();
760
+ EXPECT_EQ (expectedSize, totalBytesProgrammed);
761
+
762
+ HardwareParse hwParser;
763
+ hwParser.parsePipeControl = true ;
764
+ hwParser.parseCommands <FamilyType>(commandStream, 0 );
765
+ hwParser.findHardwareCommands <FamilyType>();
766
+
767
+ EXPECT_EQ (1u , hwParser.pipeControlList .size ());
768
+
769
+ auto pipeControl = reinterpret_cast <PIPE_CONTROL *>(*hwParser.pipeControlList .begin ());
770
+ EXPECT_EQ (false , pipeControl->getDcFlushEnable ());
771
+
772
+ auto miAtomicList = hwParser.getCommandsList <MI_ATOMIC>();
773
+ EXPECT_EQ (1u , miAtomicList.size ());
774
+
775
+ auto miSemaphoreList = hwParser.getCommandsList <MI_SEMAPHORE_WAIT>();
776
+ EXPECT_EQ (1u , miSemaphoreList.size ());
777
+
778
+ auto bbStartList = hwParser.getCommandsList <MI_BATCH_BUFFER_START>();
779
+ EXPECT_EQ (1u , bbStartList.size ());
780
+ auto bbStart = reinterpret_cast <MI_BATCH_BUFFER_START *>(*bbStartList.begin ());
781
+ EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_FIRST_LEVEL_BATCH, bbStart->getSecondLevelBatchBuffer ());
782
+ }
783
+
784
+ HWCMDTEST_F (IGFX_XE_HP_CORE, ImplicitScalingTests,
785
+ givenBarrierDispatchWhenApiRequiresSelfCleanupThenExpectDefaultSelfCleanupSection) {
786
+ using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
787
+ using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
788
+ using MI_ATOMIC = typename FamilyType::MI_ATOMIC;
789
+ using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
790
+ using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
791
+
792
+ size_t expectedSize = sizeof (MI_STORE_DATA_IMM) +
793
+ sizeof (PIPE_CONTROL) +
794
+ sizeof (MI_ATOMIC) + sizeof (MI_SEMAPHORE_WAIT) +
795
+ sizeof (MI_BATCH_BUFFER_START) +
796
+ sizeof (WalkerPartition::BarrierControlSection) +
797
+ sizeof (MI_ATOMIC) + sizeof (MI_SEMAPHORE_WAIT) +
798
+ sizeof (MI_STORE_DATA_IMM) +
799
+ sizeof (MI_ATOMIC) + sizeof (MI_SEMAPHORE_WAIT);
800
+
801
+ size_t estimatedSize = 0 ;
802
+ size_t totalBytesProgrammed = 0 ;
803
+
804
+ estimatedSize = ImplicitScalingDispatch<FamilyType>::getBarrierSize (true );
805
+ EXPECT_EQ (expectedSize, estimatedSize);
806
+
807
+ ImplicitScalingDispatch<FamilyType>::dispatchBarrierCommands (commandStream, twoTile, true , true , true );
808
+ totalBytesProgrammed = commandStream.getUsed ();
809
+ EXPECT_EQ (expectedSize, totalBytesProgrammed);
810
+
811
+ HardwareParse hwParser;
812
+ hwParser.parsePipeControl = true ;
813
+ hwParser.parseCommands <FamilyType>(commandStream, 0 );
814
+ hwParser.findHardwareCommands <FamilyType>();
815
+
816
+ auto storeDataImmList = hwParser.getCommandsList <MI_STORE_DATA_IMM>();
817
+ EXPECT_EQ (2u , storeDataImmList.size ());
818
+
819
+ EXPECT_EQ (1u , hwParser.pipeControlList .size ());
820
+ auto pipeControl = reinterpret_cast <PIPE_CONTROL *>(*hwParser.pipeControlList .begin ());
821
+ EXPECT_EQ (MemorySynchronizationCommands<FamilyType>::isDcFlushAllowed (), pipeControl->getDcFlushEnable ());
822
+
823
+ auto miAtomicList = hwParser.getCommandsList <MI_ATOMIC>();
824
+ EXPECT_EQ (3u , miAtomicList.size ());
825
+
826
+ auto miSemaphoreList = hwParser.getCommandsList <MI_SEMAPHORE_WAIT>();
827
+ EXPECT_EQ (3u , miSemaphoreList.size ());
828
+
829
+ auto bbStartList = hwParser.getCommandsList <MI_BATCH_BUFFER_START>();
830
+ EXPECT_EQ (1u , bbStartList.size ());
831
+ auto bbStart = reinterpret_cast <MI_BATCH_BUFFER_START *>(*bbStartList.begin ());
832
+ EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH, bbStart->getSecondLevelBatchBuffer ());
833
+ }
834
+
835
+ HWCMDTEST_F (IGFX_XE_HP_CORE, ImplicitScalingTests,
836
+ givenBarrierDispatchWhenApiRequiresSelfCleanupForcedUseAtomicThenExpectUseAtomicForSelfCleanupSection) {
837
+ using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
838
+ using MI_ATOMIC = typename FamilyType::MI_ATOMIC;
839
+ using MI_SEMAPHORE_WAIT = typename FamilyType::MI_SEMAPHORE_WAIT;
840
+ using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
841
+
842
+ size_t expectedSize = sizeof (MI_ATOMIC) +
843
+ sizeof (PIPE_CONTROL) +
844
+ sizeof (MI_ATOMIC) + sizeof (MI_SEMAPHORE_WAIT) +
845
+ sizeof (MI_BATCH_BUFFER_START) +
846
+ sizeof (WalkerPartition::BarrierControlSection) +
847
+ sizeof (MI_ATOMIC) + sizeof (MI_SEMAPHORE_WAIT) +
848
+ sizeof (MI_ATOMIC) +
849
+ sizeof (MI_ATOMIC) + sizeof (MI_SEMAPHORE_WAIT);
850
+
851
+ DebugManager.flags .UseAtomicsForSelfCleanupSection .set (1 );
852
+
853
+ size_t estimatedSize = 0 ;
854
+ size_t totalBytesProgrammed = 0 ;
855
+
856
+ estimatedSize = ImplicitScalingDispatch<FamilyType>::getBarrierSize (true );
857
+ EXPECT_EQ (expectedSize, estimatedSize);
858
+
859
+ ImplicitScalingDispatch<FamilyType>::dispatchBarrierCommands (commandStream, twoTile, true , true , true );
860
+ totalBytesProgrammed = commandStream.getUsed ();
861
+ EXPECT_EQ (expectedSize, totalBytesProgrammed);
862
+
863
+ HardwareParse hwParser;
864
+ hwParser.parsePipeControl = true ;
865
+ hwParser.parseCommands <FamilyType>(commandStream, 0 );
866
+ hwParser.findHardwareCommands <FamilyType>();
867
+
868
+ EXPECT_EQ (1u , hwParser.pipeControlList .size ());
869
+ auto pipeControl = reinterpret_cast <PIPE_CONTROL *>(*hwParser.pipeControlList .begin ());
870
+ EXPECT_EQ (MemorySynchronizationCommands<FamilyType>::isDcFlushAllowed (), pipeControl->getDcFlushEnable ());
871
+
872
+ auto miAtomicList = hwParser.getCommandsList <MI_ATOMIC>();
873
+ EXPECT_EQ (5u , miAtomicList.size ());
874
+
875
+ auto miSemaphoreList = hwParser.getCommandsList <MI_SEMAPHORE_WAIT>();
876
+ EXPECT_EQ (3u , miSemaphoreList.size ());
877
+
878
+ auto bbStartList = hwParser.getCommandsList <MI_BATCH_BUFFER_START>();
879
+ EXPECT_EQ (1u , bbStartList.size ());
880
+ auto bbStart = reinterpret_cast <MI_BATCH_BUFFER_START *>(*bbStartList.begin ());
881
+ EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH, bbStart->getSecondLevelBatchBuffer ());
882
+ }
0 commit comments