Skip to content

Commit 3960090

Browse files
Add MI_ARB_CHECK commands between blits
Change-Id: I07772c6f69c64bfa15cc21749839edc218abdf80 Signed-off-by: Bartosz Dunajski <[email protected]>
1 parent 320794c commit 3960090

File tree

2 files changed

+53
-20
lines changed

2 files changed

+53
-20
lines changed

opencl/test/unit_test/command_stream/command_stream_receiver_hw_tests.cpp

Lines changed: 29 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -341,13 +341,14 @@ struct BcsTests : public CommandStreamReceiverHwTest {
341341

342342
HWTEST_F(BcsTests, givenBltSizeWhenEstimatingCommandSizeThenAddAllRequiredCommands) {
343343
constexpr auto max2DBlitSize = BlitterConstants::maxBlitWidth * BlitterConstants::maxBlitHeight;
344+
constexpr size_t cmdsSizePerBlit = sizeof(typename FamilyType::XY_COPY_BLT) + sizeof(typename FamilyType::MI_ARB_CHECK);
344345
size_t notAlignedBltSize = (3 * max2DBlitSize) + 1;
345346
size_t alignedBltSize = (3 * max2DBlitSize);
346347
uint32_t alignedNumberOfBlts = 3;
347348
uint32_t notAlignedNumberOfBlts = 4;
348349

349-
auto expectedAlignedSize = sizeof(typename FamilyType::XY_COPY_BLT) * alignedNumberOfBlts;
350-
auto expectedNotAlignedSize = sizeof(typename FamilyType::XY_COPY_BLT) * notAlignedNumberOfBlts;
350+
auto expectedAlignedSize = cmdsSizePerBlit * alignedNumberOfBlts;
351+
auto expectedNotAlignedSize = cmdsSizePerBlit * notAlignedNumberOfBlts;
351352

352353
auto alignedEstimatedSize = BlitCommandsHelper<FamilyType>::estimateBlitCommandsSize({alignedBltSize, 1, 1}, csrDependencies, false);
353354
auto notAlignedEstimatedSize = BlitCommandsHelper<FamilyType>::estimateBlitCommandsSize({notAlignedBltSize, 1, 1}, csrDependencies, false);
@@ -358,13 +359,14 @@ HWTEST_F(BcsTests, givenBltSizeWhenEstimatingCommandSizeThenAddAllRequiredComman
358359

359360
HWTEST_F(BcsTests, givenBltSizeWhenEstimatingCommandSizeForReadBufferRectThenAddAllRequiredCommands) {
360361
constexpr auto max2DBlitSize = BlitterConstants::maxBlitWidth * BlitterConstants::maxBlitHeight;
362+
constexpr size_t cmdsSizePerBlit = sizeof(typename FamilyType::XY_COPY_BLT) + sizeof(typename FamilyType::MI_ARB_CHECK);
361363
Vec3<size_t> notAlignedBltSize = {(3 * max2DBlitSize) + 1, 4, 2};
362364
Vec3<size_t> alignedBltSize = {(3 * max2DBlitSize), 4, 2};
363365
size_t alignedNumberOfBlts = 3 * alignedBltSize.y * alignedBltSize.z;
364366
size_t notAlignedNumberOfBlts = 4 * notAlignedBltSize.y * notAlignedBltSize.z;
365367

366-
auto expectedAlignedSize = sizeof(typename FamilyType::XY_COPY_BLT) * alignedNumberOfBlts;
367-
auto expectedNotAlignedSize = sizeof(typename FamilyType::XY_COPY_BLT) * notAlignedNumberOfBlts;
368+
auto expectedAlignedSize = cmdsSizePerBlit * alignedNumberOfBlts;
369+
auto expectedNotAlignedSize = cmdsSizePerBlit * notAlignedNumberOfBlts;
368370

369371
auto alignedEstimatedSize = BlitCommandsHelper<FamilyType>::estimateBlitCommandsSize(alignedBltSize, csrDependencies, false);
370372
auto notAlignedEstimatedSize = BlitCommandsHelper<FamilyType>::estimateBlitCommandsSize(notAlignedBltSize, csrDependencies, false);
@@ -391,7 +393,8 @@ HWTEST_F(BcsTests, givenBlitPropertiesContainerWhenExstimatingCommandsSizeThenCa
391393
const uint32_t numberOfBlitOperations = 4;
392394

393395
auto baseSize = EncodeMiFlushDW<FamilyType>::getMiFlushDwCmdSizeForDataWrite() + sizeof(typename FamilyType::MI_BATCH_BUFFER_END);
394-
auto expectedBlitInstructionsSize = sizeof(typename FamilyType::XY_COPY_BLT) * numberOfBlts;
396+
constexpr size_t cmdsSizePerBlit = sizeof(typename FamilyType::XY_COPY_BLT) + sizeof(typename FamilyType::MI_ARB_CHECK);
397+
auto expectedBlitInstructionsSize = cmdsSizePerBlit * numberOfBlts;
395398

396399
auto expectedAlignedSize = baseSize + MemorySynchronizationCommands<FamilyType>::getSizeForAdditonalSynchronization(pDevice->getHardwareInfo());
397400

@@ -416,9 +419,10 @@ HWTEST_F(BcsTests, givenBlitPropertiesContainerWhenExstimatingCommandsSizeForWri
416419
const Vec3<size_t> bltSize = {(3 * max2DBlitSize), 4, 2};
417420
const size_t numberOfBlts = 3 * bltSize.y * bltSize.z;
418421
const size_t numberOfBlitOperations = 4 * bltSize.y * bltSize.z;
422+
const size_t cmdsSizePerBlit = sizeof(typename FamilyType::XY_COPY_BLT) + sizeof(typename FamilyType::MI_ARB_CHECK);
419423

420424
auto baseSize = EncodeMiFlushDW<FamilyType>::getMiFlushDwCmdSizeForDataWrite() + sizeof(typename FamilyType::MI_BATCH_BUFFER_END);
421-
auto expectedBlitInstructionsSize = sizeof(typename FamilyType::XY_COPY_BLT) * numberOfBlts;
425+
auto expectedBlitInstructionsSize = cmdsSizePerBlit * numberOfBlts;
422426

423427
auto expectedAlignedSize = baseSize + MemorySynchronizationCommands<FamilyType>::getSizeForAdditonalSynchronization(pDevice->getHardwareInfo());
424428

@@ -439,7 +443,7 @@ HWTEST_F(BcsTests, givenBlitPropertiesContainerWhenExstimatingCommandsSizeForWri
439443
}
440444

441445
HWTEST_F(BcsTests, givenTimestampPacketWriteRequestWhenEstimatingSizeForCommandsThenAddMiFlushDw) {
442-
size_t expectedBaseSize = sizeof(typename FamilyType::XY_COPY_BLT);
446+
constexpr size_t expectedBaseSize = sizeof(typename FamilyType::XY_COPY_BLT) + sizeof(typename FamilyType::MI_ARB_CHECK);
443447

444448
auto expectedSizeWithTimestampPacketWrite = expectedBaseSize + EncodeMiFlushDW<FamilyType>::getMiFlushDwCmdSizeForDataWrite();
445449
auto expectedSizeWithoutTimestampPacketWrite = expectedBaseSize;
@@ -461,7 +465,8 @@ HWTEST_F(BcsTests, givenBltSizeAndCsrDependenciesWhenEstimatingCommandSizeThenAd
461465
csrDependencies.push_back(&timestamp0);
462466
csrDependencies.push_back(&timestamp1);
463467

464-
size_t expectedSize = (sizeof(typename FamilyType::XY_COPY_BLT) * numberOfBlts) +
468+
constexpr size_t cmdsSizePerBlit = sizeof(typename FamilyType::XY_COPY_BLT) + sizeof(typename FamilyType::MI_ARB_CHECK);
469+
size_t expectedSize = (cmdsSizePerBlit * numberOfBlts) +
465470
TimestampPacketHelper::getRequiredCmdStreamSize<FamilyType>(csrDependencies);
466471

467472
auto estimatedSize = BlitCommandsHelper<FamilyType>::estimateBlitCommandsSize({1, 1, 1}, csrDependencies, false);
@@ -520,6 +525,10 @@ HWTEST_F(BcsTests, givenBltSizeWithLeftoverWhenDispatchedThenProgramAllRequiredC
520525
EXPECT_EQ(expectedHeight, bltCmd->getTransferHeight());
521526
EXPECT_EQ(expectedWidth, bltCmd->getDestinationPitch());
522527
EXPECT_EQ(expectedWidth, bltCmd->getSourcePitch());
528+
529+
auto miArbCheckCmd = genCmdCast<typename FamilyType::MI_ARB_CHECK *>(*(cmdIterator++));
530+
EXPECT_NE(nullptr, miArbCheckCmd);
531+
EXPECT_TRUE(memcmp(&FamilyType::cmdInitArbCheck, miArbCheckCmd, sizeof(typename FamilyType::MI_ARB_CHECK)) == 0);
523532
}
524533

525534
if (UnitTestHelper<FamilyType>::isSynchronizationWArequired(pDevice->getHardwareInfo())) {
@@ -703,6 +712,10 @@ HWTEST_P(BcsDetaliedTestsWithParams, givenBltSizeWithLeftoverWhenDispatchedThenP
703712
EXPECT_EQ(srcAddr, expectedSrcAddr);
704713

705714
offset += (expectedWidth * expectedHeight);
715+
716+
auto miArbCheckCmd = genCmdCast<typename FamilyType::MI_ARB_CHECK *>(*(cmdIterator++));
717+
EXPECT_NE(nullptr, miArbCheckCmd);
718+
EXPECT_TRUE(memcmp(&FamilyType::cmdInitArbCheck, miArbCheckCmd, sizeof(typename FamilyType::MI_ARB_CHECK)) == 0);
706719
}
707720
}
708721

@@ -781,6 +794,10 @@ HWTEST_P(BcsDetaliedTestsWithParams, givenBltSizeWithLeftoverWhenDispatchedThenP
781794
EXPECT_EQ(srcAddr, bltCmd->getSourceBaseAddress());
782795

783796
offset += (expectedWidth * expectedHeight);
797+
798+
auto miArbCheckCmd = genCmdCast<typename FamilyType::MI_ARB_CHECK *>(*(cmdIterator++));
799+
EXPECT_NE(nullptr, miArbCheckCmd);
800+
EXPECT_TRUE(memcmp(&FamilyType::cmdInitArbCheck, miArbCheckCmd, sizeof(typename FamilyType::MI_ARB_CHECK)) == 0);
784801
}
785802
}
786803

@@ -854,6 +871,10 @@ HWTEST_P(BcsDetaliedTestsWithParams, givenBltSizeWithLeftoverWhenDispatchedThenP
854871
EXPECT_EQ(srcAddr, bltCmd->getSourceBaseAddress());
855872

856873
offset += (expectedWidth * expectedHeight);
874+
875+
auto miArbCheckCmd = genCmdCast<typename FamilyType::MI_ARB_CHECK *>(*(cmdIterator++));
876+
EXPECT_NE(nullptr, miArbCheckCmd);
877+
EXPECT_TRUE(memcmp(&FamilyType::cmdInitArbCheck, miArbCheckCmd, sizeof(typename FamilyType::MI_ARB_CHECK)) == 0);
857878
}
858879
}
859880

shared/source/helpers/blit_commands_helper_base.inl

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ size_t BlitCommandsHelper<GfxFamily>::estimateBlitCommandsSize(Vec3<size_t> copy
3838
}
3939
}
4040

41+
constexpr size_t cmdsSizePerBlit = (sizeof(typename GfxFamily::XY_COPY_BLT) + sizeof(typename GfxFamily::MI_ARB_CHECK));
42+
4143
return TimestampPacketHelper::getRequiredCmdStreamSize<GfxFamily>(csrDependencies) +
42-
(sizeof(typename GfxFamily::XY_COPY_BLT) * numberOfBlits) +
44+
(cmdsSizePerBlit * numberOfBlits) +
4345
(EncodeMiFlushDW<GfxFamily>::getMiFlushDwCmdSizeForDataWrite() * static_cast<size_t>(updateTimestampPacket));
4446
}
4547

@@ -94,21 +96,31 @@ void BlitCommandsHelper<GfxFamily>::dispatchBlitCommandsForBuffer(const BlitProp
9496
height = 1;
9597
}
9698

97-
auto bltCmd = linearStream.getSpaceForCmd<typename GfxFamily::XY_COPY_BLT>();
98-
*bltCmd = GfxFamily::cmdInitXyCopyBlt;
99+
{
100+
auto bltCmd = GfxFamily::cmdInitXyCopyBlt;
101+
102+
bltCmd.setTransferWidth(static_cast<uint32_t>(width));
103+
bltCmd.setTransferHeight(static_cast<uint32_t>(height));
104+
bltCmd.setDestinationPitch(static_cast<uint32_t>(width));
105+
bltCmd.setSourcePitch(static_cast<uint32_t>(width));
99106

100-
bltCmd->setTransferWidth(static_cast<uint32_t>(width));
101-
bltCmd->setTransferHeight(static_cast<uint32_t>(height));
102-
bltCmd->setDestinationPitch(static_cast<uint32_t>(width));
103-
bltCmd->setSourcePitch(static_cast<uint32_t>(width));
107+
auto dstAddr = calculateBlitCommandDestinationBaseAddress(blitProperties, offset, row, slice);
108+
auto srcAddr = calculateBlitCommandSourceBaseAddress(blitProperties, offset, row, slice);
104109

105-
auto dstAddr = calculateBlitCommandDestinationBaseAddress(blitProperties, offset, row, slice);
106-
auto srcAddr = calculateBlitCommandSourceBaseAddress(blitProperties, offset, row, slice);
110+
bltCmd.setDestinationBaseAddress(dstAddr);
111+
bltCmd.setSourceBaseAddress(srcAddr);
107112

108-
bltCmd->setDestinationBaseAddress(dstAddr);
109-
bltCmd->setSourceBaseAddress(srcAddr);
113+
appendBlitCommandsForBuffer(blitProperties, bltCmd, rootDeviceEnvironment);
110114

111-
appendBlitCommandsForBuffer(blitProperties, *bltCmd, rootDeviceEnvironment);
115+
auto bltStream = linearStream.getSpaceForCmd<typename GfxFamily::XY_COPY_BLT>();
116+
*bltStream = bltCmd;
117+
}
118+
119+
{
120+
auto miArbCheckCmd = GfxFamily::cmdInitArbCheck;
121+
auto miArbCheckStream = linearStream.getSpaceForCmd<typename GfxFamily::MI_ARB_CHECK>();
122+
*miArbCheckStream = miArbCheckCmd;
123+
}
112124

113125
auto blitSize = width * height;
114126
sizeToBlit -= blitSize;

0 commit comments

Comments
 (0)