@@ -602,9 +602,12 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionAvailableWhenProgrammingEndi
602
602
bool ret = mockCsr->isDirectSubmissionEnabled ();
603
603
EXPECT_TRUE (ret);
604
604
605
+ MockGraphicsAllocation mockAllocation;
606
+
605
607
void *location = nullptr ;
606
608
uint8_t buffer[128 ];
607
609
mockCsr->commandStream .replaceBuffer (&buffer[0 ], 128u );
610
+ mockCsr->commandStream .replaceGraphicsAllocation (&mockAllocation);
608
611
auto &device = *pDevice;
609
612
mockCsr->programEndingCmd (mockCsr->commandStream , device, &location, ret);
610
613
EXPECT_EQ (sizeof (MI_BATCH_BUFFER_START), mockCsr->commandStream .getUsed ());
@@ -615,18 +618,17 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionAvailableWhenProgrammingEndi
615
618
mockCsr->getCmdSizeForEpilogueCommands (dispatchFlags);
616
619
expectedSize = alignUp (expectedSize, MemoryConstants::cacheLineSize);
617
620
EXPECT_EQ (expectedSize, mockCsr->getCmdSizeForEpilogue (dispatchFlags));
621
+
622
+ mockCsr->commandStream .replaceGraphicsAllocation (nullptr );
618
623
}
619
624
620
- HWTEST_F (DirectSubmissionTest, givenDebugFlagSetWhenProgrammingEndingCommandThenUseNonZeroBatchBufferStart ) {
625
+ HWTEST_F (DirectSubmissionTest, givenDebugFlagSetWhenProgrammingEndingCommandThenUseCorrectBatchBufferStartValue ) {
621
626
using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
622
627
623
628
DebugManagerStateRestore restorer;
624
-
625
- DebugManager.flags .BatchBufferStartPrepatchingWaEnabled .set (1 );
626
-
627
629
MockGraphicsAllocation mockAllocation;
628
-
629
630
int32_t executionStamp = 0 ;
631
+
630
632
std::unique_ptr<MockCsr<FamilyType>> mockCsr = std::make_unique<MockCsr<FamilyType>>(executionStamp, *pDevice->executionEnvironment ,
631
633
pDevice->getRootDeviceIndex (), pDevice->getDeviceBitfield ());
632
634
@@ -636,25 +638,30 @@ HWTEST_F(DirectSubmissionTest, givenDebugFlagSetWhenProgrammingEndingCommandThen
636
638
EXPECT_TRUE (ret);
637
639
638
640
void *location = nullptr ;
639
- uint8_t buffer[128 ];
640
- mockCsr->commandStream .replaceBuffer (&buffer[0 ], 128u );
641
- mockCsr->commandStream .replaceGraphicsAllocation (&mockAllocation);
641
+
642
+ uint8_t buffer[256 ] = {};
643
+ auto &cmdStream = mockCsr->commandStream ;
644
+ cmdStream.replaceBuffer (&buffer[0 ], 256 );
645
+ cmdStream.replaceGraphicsAllocation (&mockAllocation);
642
646
auto &device = *pDevice;
643
- mockCsr->programEndingCmd (mockCsr->commandStream , device, &location, ret);
644
- EXPECT_EQ (sizeof (MI_BATCH_BUFFER_START), mockCsr->commandStream .getUsed ());
645
647
646
- DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags ();
647
- dispatchFlags.epilogueRequired = true ;
648
- size_t expectedSize = sizeof (MI_BATCH_BUFFER_START) +
649
- mockCsr->getCmdSizeForEpilogueCommands (dispatchFlags);
650
- expectedSize = alignUp (expectedSize, MemoryConstants::cacheLineSize);
651
- EXPECT_EQ (expectedSize, mockCsr->getCmdSizeForEpilogue (dispatchFlags));
648
+ for (int32_t value : {-1 , 0 , 1 }) {
649
+ DebugManager.flags .BatchBufferStartPrepatchingWaEnabled .set (value);
652
650
653
- auto bbStartCmd = reinterpret_cast <MI_BATCH_BUFFER_START *>(mockCsr->commandStream .getCpuBase ());
651
+ auto currectBbStartCmd = reinterpret_cast <MI_BATCH_BUFFER_START *>(cmdStream.getSpace (0 ));
652
+ uint64_t expectedGpuVa = cmdStream.getGraphicsAllocation ()->getGpuAddress () + cmdStream.getUsed ();
654
653
655
- EXPECT_EQ (mockCsr->commandStream .getGraphicsAllocation ()->getGpuAddress (), bbStartCmd->getBatchBufferStartAddress ());
654
+ mockCsr->programEndingCmd (cmdStream, device, &location, ret);
655
+ EncodeNoop<FamilyType>::alignToCacheLine (cmdStream);
656
656
657
- mockCsr->commandStream .replaceGraphicsAllocation (nullptr );
657
+ if (value == 0 ) {
658
+ EXPECT_EQ (0u , currectBbStartCmd->getBatchBufferStartAddress ());
659
+ } else {
660
+ EXPECT_EQ (expectedGpuVa, currectBbStartCmd->getBatchBufferStartAddress ());
661
+ }
662
+ }
663
+
664
+ cmdStream.replaceGraphicsAllocation (nullptr );
658
665
}
659
666
660
667
HWTEST_F (DirectSubmissionTest,
0 commit comments