@@ -84,7 +84,7 @@ HWTEST_F(CommandListAppendBarrier, GivenEventVsNoEventWhenAppendingBarrierThenCo
8484template <typename FamilyType>
8585void validateMultiTileBarrier (void *cmdBuffer, size_t &parsedOffset,
8686 uint64_t gpuFinalSyncAddress, uint64_t gpuCrossTileSyncAddress, uint64_t gpuStartAddress,
87- bool validateCleanupSection) {
87+ bool validateCleanupSection, bool secondaryBatchBuffer ) {
8888 using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
8989 using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
9090 using MI_STORE_DATA_IMM = typename FamilyType::MI_STORE_DATA_IMM;
@@ -130,7 +130,11 @@ void validateMultiTileBarrier(void *cmdBuffer, size_t &parsedOffset,
130130 auto bbStart = genCmdCast<MI_BATCH_BUFFER_START *>(ptrOffset (cmdBuffer, parsedOffset));
131131 ASSERT_NE (nullptr , bbStart);
132132 EXPECT_EQ (gpuStartAddress, bbStart->getBatchBufferStartAddress ());
133- EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH, bbStart->getSecondLevelBatchBuffer ());
133+ if (secondaryBatchBuffer) {
134+ EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH, bbStart->getSecondLevelBatchBuffer ());
135+ } else {
136+ EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_FIRST_LEVEL_BATCH, bbStart->getSecondLevelBatchBuffer ());
137+ }
134138 parsedOffset += sizeof (MI_BATCH_BUFFER_START);
135139 }
136140 {
@@ -236,7 +240,7 @@ HWTEST2_F(MultiTileCommandListAppendBarrier, WhenAppendingBarrierThenPipeControl
236240 void *cmdBuffer = ptrOffset (commandList->commandContainer .getCommandStream ()->getCpuBase (), usedSpaceBefore);
237241 size_t parsedOffset = 0 ;
238242
239- validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true );
243+ validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true , true );
240244
241245 EXPECT_EQ (expectedUseBuffer, parsedOffset);
242246}
@@ -298,7 +302,7 @@ HWTEST2_F(MultiTileCommandListAppendBarrier,
298302 void *cmdBuffer = cmdListStream->getCpuBase ();
299303 size_t parsedOffset = 0 ;
300304
301- validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true );
305+ validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true , true );
302306
303307 EXPECT_EQ (expectedUseBuffer, parsedOffset);
304308}
@@ -363,7 +367,7 @@ HWTEST2_F(MultiTileCommandListAppendBarrier,
363367 void *cmdBuffer = ptrOffset (cmdListStream->getCpuBase (), useSizeBefore);
364368 size_t parsedOffset = 0 ;
365369
366- validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true );
370+ validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true , true );
367371 EXPECT_EQ (multiTileBarrierSize, parsedOffset);
368372
369373 cmdBuffer = ptrOffset (cmdBuffer, parsedOffset);
@@ -485,7 +489,7 @@ HWTEST2_F(MultiTileCommandListAppendBarrier,
485489 cmdBuffer = ptrOffset (cmdBuffer, timestampRegisters);
486490 size_t parsedOffset = 0 ;
487491
488- validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true );
492+ validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, gpuFinalSyncAddress, gpuCrossTileSyncAddress, gpuStartAddress, true , true );
489493 EXPECT_EQ (multiTileBarrierSize, parsedOffset);
490494
491495 cmdBuffer = ptrOffset (cmdBuffer, (parsedOffset + postBarrierSynchronization));
@@ -517,6 +521,7 @@ HWTEST2_F(MultiTileImmediateCommandListAppendBarrier,
517521 auto immediateCommandList = std::make_unique<::L0::ult::CommandListCoreFamily<gfxCoreFamily>>();
518522 ASSERT_NE (nullptr , immediateCommandList);
519523 immediateCommandList->cmdListType = ::L0::CommandList::CommandListType::TYPE_IMMEDIATE;
524+ immediateCommandList->isFlushTaskSubmissionEnabled = true ;
520525 ze_result_t returnValue = immediateCommandList->initialize (device, NEO::EngineGroupType::Compute, 0u );
521526 EXPECT_EQ (ZE_RESULT_SUCCESS, returnValue);
522527 EXPECT_EQ (2u , immediateCommandList->partitionCount );
@@ -586,7 +591,7 @@ HWTEST2_F(MultiTileImmediateCommandListAppendBarrier,
586591 ASSERT_NE (cmdList.end (), itorBbStart);
587592 auto cmdBbStart = genCmdCast<MI_BATCH_BUFFER_START *>(*itorBbStart);
588593 EXPECT_EQ (bbStartGpuAddress, cmdBbStart->getBatchBufferStartAddress ());
589- EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH , cmdBbStart->getSecondLevelBatchBuffer ());
594+ EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_FIRST_LEVEL_BATCH , cmdBbStart->getSecondLevelBatchBuffer ());
590595
591596 auto atomicCounter = reinterpret_cast <uint32_t *>(ptrOffset (cmdBbStart, sizeof (MI_BATCH_BUFFER_START)));
592597 EXPECT_EQ (0u , *atomicCounter);
@@ -599,9 +604,42 @@ HWTEST2_F(MultiTileImmediateCommandListAppendBarrier,
599604 void *cmdBuffer = ptrOffset (cmdStream->getCpuBase (), usedBeforeSize);
600605 size_t parsedOffset = 0 ;
601606
602- validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, 0 , crossTileSyncGpuAddress, bbStartGpuAddress, false );
607+ validateMultiTileBarrier<FamilyType>(cmdBuffer, parsedOffset, 0 , crossTileSyncGpuAddress, bbStartGpuAddress, false , false );
603608 EXPECT_EQ (expectedSize, parsedOffset);
604609}
605610
611+ HWTEST2_F (MultiTileImmediateCommandListAppendBarrier,
612+ givenMultiTileImmediateCommandListNotUsingFlushTaskWhenAppendingBarrierThenExpectSecondaryBufferStart, IsWithinXeGfxFamily) {
613+ using GfxFamily = typename NEO::GfxFamilyMapper<gfxCoreFamily>::GfxFamily;
614+ using MI_BATCH_BUFFER_START = typename FamilyType::MI_BATCH_BUFFER_START;
615+
616+ auto immediateCommandList = std::make_unique<::L0::ult::CommandListCoreFamily<gfxCoreFamily>>();
617+ ASSERT_NE (nullptr , immediateCommandList);
618+ immediateCommandList->cmdListType = ::L0::CommandList::CommandListType::TYPE_IMMEDIATE;
619+ immediateCommandList->isFlushTaskSubmissionEnabled = false ;
620+ ze_result_t returnValue = immediateCommandList->initialize (device, NEO::EngineGroupType::Compute, 0u );
621+ EXPECT_EQ (ZE_RESULT_SUCCESS, returnValue);
622+ EXPECT_EQ (2u , immediateCommandList->partitionCount );
623+
624+ auto cmdStream = immediateCommandList->commandContainer .getCommandStream ();
625+
626+ size_t usedBeforeSize = cmdStream->getUsed ();
627+
628+ returnValue = immediateCommandList->appendBarrier (nullptr , 0 , nullptr );
629+ EXPECT_EQ (ZE_RESULT_SUCCESS, returnValue);
630+ size_t usedAfterSize = cmdStream->getUsed ();
631+
632+ GenCmdList cmdList;
633+ ASSERT_TRUE (FamilyType::PARSE::parseCommandBuffer (
634+ cmdList,
635+ ptrOffset (cmdStream->getCpuBase (), usedBeforeSize),
636+ (usedAfterSize - usedBeforeSize)));
637+
638+ auto itorBbStart = find<MI_BATCH_BUFFER_START *>(cmdList.begin (), cmdList.end ());
639+ ASSERT_NE (cmdList.end (), itorBbStart);
640+ auto cmdBbStart = genCmdCast<MI_BATCH_BUFFER_START *>(*itorBbStart);
641+ EXPECT_EQ (MI_BATCH_BUFFER_START::SECOND_LEVEL_BATCH_BUFFER::SECOND_LEVEL_BATCH_BUFFER_SECOND_LEVEL_BATCH, cmdBbStart->getSecondLevelBatchBuffer ());
642+ }
643+
606644} // namespace ult
607645} // namespace L0
0 commit comments