From d9ed61bb197e1d49b75de42c92673e5d552d27a2 Mon Sep 17 00:00:00 2001 From: Narendra Bagria Date: Wed, 17 Sep 2025 07:44:27 +0000 Subject: [PATCH] feature: use heapless builtins for copyRegion Related-To: NEO-15323, NEO-7621 Signed-off-by: Narendra Bagria --- .../source/builtin/builtin_functions_lib.h | 10 +- .../builtin/builtin_functions_lib_impl.cpp | 8 ++ level_zero/core/source/cmdlist/cmdlist_hw.h | 5 +- level_zero/core/source/cmdlist/cmdlist_hw.inl | 20 ++-- .../core/test/unit_tests/mocks/mock_cmdlist.h | 9 +- .../builtin/builtin_functions_tests.cpp | 13 +++ .../sources/cmdlist/test_cmdlist_1.cpp | 3 + .../sources/cmdlist/test_cmdlist_2.cpp | 5 +- .../sources/cmdlist/test_cmdlist_6.cpp | 104 +++++++++++++++++- .../cmdlist/test_cmdlist_memory_extension.cpp | 5 +- 10 files changed, 156 insertions(+), 26 deletions(-) diff --git a/level_zero/core/source/builtin/builtin_functions_lib.h b/level_zero/core/source/builtin/builtin_functions_lib.h index 4b0c1eef8f..67fd0c0627 100644 --- a/level_zero/core/source/builtin/builtin_functions_lib.h +++ b/level_zero/core/source/builtin/builtin_functions_lib.h @@ -24,8 +24,10 @@ enum class Builtin : uint32_t { copyBufferBytesStatelessHeapless, copyBufferRectBytes2d, copyBufferRectBytes2dStateless, + copyBufferRectBytes2dStatelessHeapless, copyBufferRectBytes3d, copyBufferRectBytes3dStateless, + copyBufferRectBytes3dStatelessHeapless, copyBufferToBufferMiddle, copyBufferToBufferMiddleStateless, copyBufferToBufferMiddleStatelessHeapless, @@ -144,7 +146,9 @@ constexpr Builtin adjustBuiltinType(const bool isState template <> constexpr Builtin adjustBuiltinType(const bool isStateless, const bool isHeapless) { - if (isStateless) { + if (isHeapless) { + return Builtin::copyBufferRectBytes2dStatelessHeapless; + } else if (isStateless) { return Builtin::copyBufferRectBytes2dStateless; } return Builtin::copyBufferRectBytes2d; @@ -152,7 +156,9 @@ constexpr Builtin adjustBuiltinType(const bool i template <> constexpr Builtin adjustBuiltinType(const bool isStateless, const bool isHeapless) { - if (isStateless) { + if (isHeapless) { + return Builtin::copyBufferRectBytes3dStatelessHeapless; + } else if (isStateless) { return Builtin::copyBufferRectBytes3dStateless; } return Builtin::copyBufferRectBytes3d; diff --git a/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp b/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp index de4d47ed71..c61d4d995a 100644 --- a/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp +++ b/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp @@ -53,6 +53,10 @@ void BuiltinFunctionsLibImpl::initBuiltinKernel(Builtin func) { kernelName = "CopyBufferRectBytes2dStateless"; builtin = NEO::EBuiltInOps::copyBufferRectStateless; break; + case Builtin::copyBufferRectBytes2dStatelessHeapless: + kernelName = "CopyBufferRectBytes2dStateless"; + builtin = NEO::EBuiltInOps::copyBufferRectStatelessHeapless; + break; case Builtin::copyBufferRectBytes3d: kernelName = "CopyBufferRectBytes3d"; builtin = NEO::EBuiltInOps::copyBufferRect; @@ -61,6 +65,10 @@ void BuiltinFunctionsLibImpl::initBuiltinKernel(Builtin func) { kernelName = "CopyBufferRectBytes3dStateless"; builtin = NEO::EBuiltInOps::copyBufferRectStateless; break; + case Builtin::copyBufferRectBytes3dStatelessHeapless: + kernelName = "CopyBufferRectBytes3dStateless"; + builtin = NEO::EBuiltInOps::copyBufferRectStatelessHeapless; + break; case Builtin::copyBufferToBufferMiddle: kernelName = "CopyBufferToBufferMiddleRegion"; builtin = NEO::EBuiltInOps::copyBufferToBuffer; diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.h b/level_zero/core/source/cmdlist/cmdlist_hw.h index f1559bae77..47f2c3ffdb 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.h +++ b/level_zero/core/source/cmdlist/cmdlist_hw.h @@ -287,7 +287,7 @@ struct CommandListCoreFamily : public CommandListImp { const ze_copy_region_t *srcRegion, uint32_t srcPitch, size_t srcOffset, Event *signalEvent, uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents, - bool relaxedOrderingDispatch, const bool isStateless); + bool relaxedOrderingDispatch, const bool isStateless, const bool isHeapless); MOCKABLE_VIRTUAL ze_result_t appendMemoryCopyKernel3d(AlignedAllocationData *dstAlignedAllocation, AlignedAllocationData *srcAlignedAllocation, Builtin builtin, const ze_copy_region_t *dstRegion, @@ -295,7 +295,8 @@ struct CommandListCoreFamily : public CommandListImp { const ze_copy_region_t *srcRegion, uint32_t srcPitch, uint32_t srcSlicePitch, size_t srcOffset, Event *signalEvent, uint32_t numWaitEvents, - ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch, const bool isStateless); + ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch, + const bool isStateless, const bool isHeapless); MOCKABLE_VIRTUAL ze_result_t appendBlitFill(void *ptr, const void *pattern, size_t patternSize, size_t size, diff --git a/level_zero/core/source/cmdlist/cmdlist_hw.inl b/level_zero/core/source/cmdlist/cmdlist_hw.inl index 9e453f99d8..af259c2724 100644 --- a/level_zero/core/source/cmdlist/cmdlist_hw.inl +++ b/level_zero/core/source/cmdlist/cmdlist_hw.inl @@ -2128,6 +2128,8 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyRegion(void *d isStateless = true; } + const bool isHeapless = this->isHeaplessModeEnabled(); + ze_result_t result = ZE_RESULT_SUCCESS; if (isCopyOnlyEnabled) { result = appendMemoryCopyBlitRegion(&srcAllocationStruct, &dstAllocationStruct, *srcRegion, *dstRegion, @@ -2135,19 +2137,19 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyRegion(void *d srcPitch, srcSlicePitch, dstPitch, dstSlicePitch, srcSize3, dstSize3, signalEvent, numWaitEvents, phWaitEvents, memoryCopyParams.relaxedOrderingDispatch, isDualStreamCopyOffloadOperation(memoryCopyParams.copyOffloadAllowed)); } else if ((srcRegion->depth > 1) || (srcRegion->originZ != 0) || (dstRegion->originZ != 0)) { - Builtin builtInType = BuiltinTypeHelper::adjustBuiltinType(isStateless, false); + Builtin builtInType = BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless); result = this->appendMemoryCopyKernel3d(&dstAllocationStruct, &srcAllocationStruct, builtInType, dstRegion, dstPitch, dstSlicePitch, dstAllocationStruct.offset, srcRegion, srcPitch, srcSlicePitch, srcAllocationStruct.offset, signalEvent, numWaitEvents, phWaitEvents, - memoryCopyParams.relaxedOrderingDispatch, isStateless); + memoryCopyParams.relaxedOrderingDispatch, isStateless, isHeapless); } else { - Builtin builtInType = BuiltinTypeHelper::adjustBuiltinType(isStateless, false); + Builtin builtInType = BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless); result = this->appendMemoryCopyKernel2d(&dstAllocationStruct, &srcAllocationStruct, builtInType, dstRegion, dstPitch, dstAllocationStruct.offset, srcRegion, srcPitch, srcAllocationStruct.offset, signalEvent, numWaitEvents, phWaitEvents, - memoryCopyParams.relaxedOrderingDispatch, isStateless); + memoryCopyParams.relaxedOrderingDispatch, isStateless, isHeapless); } if (result) { @@ -2197,7 +2199,8 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel3d(Align Event *signalEvent, uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents, - bool relaxedOrderingDispatch, const bool isStateless) { + bool relaxedOrderingDispatch, + const bool isStateless, const bool isHeapless) { auto lock = device->getBuiltinFunctionsLib()->obtainUniqueOwnership(); const auto driverHandle = static_cast(device->getDriverHandle()); @@ -2236,7 +2239,7 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel3d(Align builtinSetArg(builtinKernel, 0u, srcAlignedAllocation->alignedAllocationPtr, srcAlignedAllocation->alloc); builtinSetArg(builtinKernel, 1u, dstAlignedAllocation->alignedAllocationPtr, dstAlignedAllocation->alloc); - if (isStateless) { + if (isStateless || isHeapless) { uint64_t srcOrigin64[3] = {static_cast(srcRegion->originX) + static_cast(srcOffset), static_cast(srcRegion->originY), static_cast(srcRegion->originZ)}; uint64_t dstOrigin64[3] = {static_cast(dstRegion->originX) + static_cast(dstOffset), @@ -2290,7 +2293,8 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel2d(Align Event *signalEvent, uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents, - bool relaxedOrderingDispatch, const bool isStateless) { + bool relaxedOrderingDispatch, + const bool isStateless, const bool isHeapless) { auto lock = device->getBuiltinFunctionsLib()->obtainUniqueOwnership(); const auto driverHandle = static_cast(device->getDriverHandle()); @@ -2328,7 +2332,7 @@ ze_result_t CommandListCoreFamily::appendMemoryCopyKernel2d(Align builtinSetArg(builtinKernel, 0u, srcAlignedAllocation->alignedAllocationPtr, srcAlignedAllocation->alloc); builtinSetArg(builtinKernel, 1u, dstAlignedAllocation->alignedAllocationPtr, dstAlignedAllocation->alloc); - if (isStateless) { + if (isHeapless || isStateless) { uint64_t srcOrigin64[2] = {static_cast(srcRegion->originX) + static_cast(srcOffset), static_cast(srcRegion->originY)}; uint64_t dstOrigin64[2] = {static_cast(dstRegion->originX) + static_cast(dstOffset), diff --git a/level_zero/core/test/unit_tests/mocks/mock_cmdlist.h b/level_zero/core/test/unit_tests/mocks/mock_cmdlist.h index 26adc36a87..8d2931f656 100644 --- a/level_zero/core/test/unit_tests/mocks/mock_cmdlist.h +++ b/level_zero/core/test/unit_tests/mocks/mock_cmdlist.h @@ -719,10 +719,10 @@ class MockCommandListCoreFamily : public CommandListCoreFamily { const ze_copy_region_t *srcRegion, uint32_t srcPitch, size_t srcOffset, L0::Event *signalEvent, uint32_t numWaitEvents, ze_event_handle_t *phWaitEvents, - bool relaxedOrderingDispatch, const bool isStateless) override { + bool relaxedOrderingDispatch, const bool isStateless, const bool isHeapless) override { srcAlignedPtr = srcAlignedAllocation->alignedAllocationPtr; dstAlignedPtr = dstAlignedAllocation->alignedAllocationPtr; - return L0::CommandListCoreFamily::appendMemoryCopyKernel2d(dstAlignedAllocation, srcAlignedAllocation, builtin, dstRegion, dstPitch, dstOffset, srcRegion, srcPitch, srcOffset, signalEvent, numWaitEvents, phWaitEvents, relaxedOrderingDispatch, isStateless); + return L0::CommandListCoreFamily::appendMemoryCopyKernel2d(dstAlignedAllocation, srcAlignedAllocation, builtin, dstRegion, dstPitch, dstOffset, srcRegion, srcPitch, srcOffset, signalEvent, numWaitEvents, phWaitEvents, relaxedOrderingDispatch, isStateless, isHeapless); } ze_result_t appendMemoryCopyKernel3d(AlignedAllocationData *dstAlignedAllocation, AlignedAllocationData *srcAlignedAllocation, @@ -731,10 +731,11 @@ class MockCommandListCoreFamily : public CommandListCoreFamily { const ze_copy_region_t *srcRegion, uint32_t srcPitch, uint32_t srcSlicePitch, size_t srcOffset, L0::Event *signalEvent, uint32_t numWaitEvents, - ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch, const bool isStateless) override { + ze_event_handle_t *phWaitEvents, bool relaxedOrderingDispatch, + const bool isStateless, const bool isHeapless) override { srcAlignedPtr = srcAlignedAllocation->alignedAllocationPtr; dstAlignedPtr = dstAlignedAllocation->alignedAllocationPtr; - return L0::CommandListCoreFamily::appendMemoryCopyKernel3d(dstAlignedAllocation, srcAlignedAllocation, builtin, dstRegion, dstPitch, dstSlicePitch, dstOffset, srcRegion, srcPitch, srcSlicePitch, srcOffset, signalEvent, numWaitEvents, phWaitEvents, relaxedOrderingDispatch, isStateless); + return L0::CommandListCoreFamily::appendMemoryCopyKernel3d(dstAlignedAllocation, srcAlignedAllocation, builtin, dstRegion, dstPitch, dstSlicePitch, dstOffset, srcRegion, srcPitch, srcSlicePitch, srcOffset, signalEvent, numWaitEvents, phWaitEvents, relaxedOrderingDispatch, isStateless, isHeapless); } ze_result_t appendMemoryCopyBlitRegion(AlignedAllocationData *srcAllocationData, diff --git a/level_zero/core/test/unit_tests/sources/builtin/builtin_functions_tests.cpp b/level_zero/core/test/unit_tests/sources/builtin/builtin_functions_tests.cpp index 93937c508b..9df92718af 100644 --- a/level_zero/core/test/unit_tests/sources/builtin/builtin_functions_tests.cpp +++ b/level_zero/core/test/unit_tests/sources/builtin/builtin_functions_tests.cpp @@ -251,6 +251,19 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenHeaplessImageBuiltinsWhenInitBuiltinK EXPECT_STREQ("CopyImage3dToImage3d", lib.kernelNamePassed.c_str()); } +HWTEST_F(TestBuiltinFunctionsLibImpl, givenHeaplessBufferRectBuiltinsWhenInitBuiltinKernelThenCorrectArgumentsArePassed) { + + MockCheckPassedArgumentsBuiltinFunctionsLibImpl lib(device, device->getNEODevice()->getBuiltIns()); + + lib.initBuiltinKernel(L0::Builtin::copyBufferRectBytes2dStatelessHeapless); + EXPECT_EQ(NEO::EBuiltInOps::copyBufferRectStatelessHeapless, lib.builtinPassed); + EXPECT_STREQ("CopyBufferRectBytes2dStateless", lib.kernelNamePassed.c_str()); + + lib.initBuiltinKernel(L0::Builtin::copyBufferRectBytes3dStatelessHeapless); + EXPECT_EQ(NEO::EBuiltInOps::copyBufferRectStatelessHeapless, lib.builtinPassed); + EXPECT_STREQ("CopyBufferRectBytes3dStateless", lib.kernelNamePassed.c_str()); +} + HWTEST_F(TestBuiltinFunctionsLibImpl, givenStatelessBufferRectBuiltinsWhenInitBuiltinKernelThenCorrectArgumentsArePassed) { MockCheckPassedArgumentsBuiltinFunctionsLibImpl lib(device, device->getNEODevice()->getBuiltIns()); diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp index 74f8ec3411..b9dc6fc26f 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_1.cpp @@ -3575,6 +3575,8 @@ TEST(BuiltinTypeHelperTest, givenHeaplessWhenAdjustBuiltinTypeIsCalledThenCorrec bool isHeapless = true; EXPECT_EQ(Builtin::copyBufferBytesStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); + EXPECT_EQ(Builtin::copyBufferRectBytes2dStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); + EXPECT_EQ(Builtin::copyBufferRectBytes3dStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); EXPECT_EQ(Builtin::copyBufferToBufferMiddleStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); EXPECT_EQ(Builtin::copyBufferToBufferSideStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); EXPECT_EQ(Builtin::fillBufferImmediateStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); @@ -3583,6 +3585,7 @@ TEST(BuiltinTypeHelperTest, givenHeaplessWhenAdjustBuiltinTypeIsCalledThenCorrec EXPECT_EQ(Builtin::fillBufferMiddleStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); EXPECT_EQ(Builtin::fillBufferRightLeftoverStatelessHeapless, BuiltinTypeHelper::adjustBuiltinType(isStateless, isHeapless)); } + HWTEST2_F(CommandListCreateTests, givenDummyBlitRequiredWhenEncodeMiFlushWithPostSyncThenDummyBlitIsProgrammedPriorToMiFlushAndDummyAllocationIsAddedToResidencyContainer, IsAtLeastXeCore) { using MI_FLUSH_DW = typename FamilyType::MI_FLUSH_DW; DebugManagerStateRestore restorer; diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp index f5ac718d16..8cebf74d98 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_2.cpp @@ -115,7 +115,7 @@ class MockCommandListHw : public WhiteBox<::L0::CommandListCoreFamilyfreeMem(dstBuffer); } -HWTEST_F(CommandListTest, givenStatelessAnd2dRegionWhenAppendMemoryCopyRegionThenPitchArgumentsAreSetCorrectly) { +HWTEST_F(CommandListTest, givenHeaplessAnd2dRegionWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetAs64Bit) { + auto kernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::copyBufferRectBytes2d); + auto mockBuiltinKernel = static_cast *>(kernel); + mockBuiltinKernel->checkPassedArgumentValues = true; + mockBuiltinKernel->passedArgumentValues.clear(); + mockBuiltinKernel->passedArgumentValues.resize(6); + + auto commandList = std::make_unique>>(); + ASSERT_EQ(ZE_RESULT_SUCCESS, commandList->initialize(device, NEO::EngineGroupType::renderCompute, 0u)); + commandList->heaplessModeEnabled = true; + commandList->statelessBuiltinsEnabled = false; + + void *dstPtr = reinterpret_cast(0x1234); + void *srcPtr = reinterpret_cast(0x2345); + ze_copy_region_t dstRegion = {4, 4, 0, 2, 2, 1}; + ze_copy_region_t srcRegion = {4, 4, 0, 2, 2, 1}; + + EXPECT_EQ(ZE_RESULT_SUCCESS, commandList->appendMemoryCopyRegion(dstPtr, &dstRegion, 0, 0, srcPtr, &srcRegion, 0, 0, nullptr, 0, nullptr, copyParams)); + + EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); + auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); + auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); + + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstOrigin); + EXPECT_EQ(sizeof(uint64_t), passedArgSizeSrcPitch); + EXPECT_EQ(sizeof(uint64_t), passedArgSizeDstPitch); +} + +HWTEST_F(CommandListTest, givenHeaplessAnd3dRegionWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetAs64Bit) { + auto kernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::copyBufferRectBytes3d); + auto mockBuiltinKernel = static_cast *>(kernel); + mockBuiltinKernel->checkPassedArgumentValues = true; + mockBuiltinKernel->passedArgumentValues.clear(); + mockBuiltinKernel->passedArgumentValues.resize(6); + + auto commandList = std::make_unique>>(); + ASSERT_EQ(ZE_RESULT_SUCCESS, commandList->initialize(device, NEO::EngineGroupType::renderCompute, 0u)); + commandList->heaplessModeEnabled = true; + commandList->statelessBuiltinsEnabled = false; + + void *dstPtr = reinterpret_cast(0x1234); + void *srcPtr = reinterpret_cast(0x2345); + ze_copy_region_t dstRegion = {4, 4, 4, 2, 2, 2}; + ze_copy_region_t srcRegion = {4, 4, 4, 2, 2, 2}; + + EXPECT_EQ(ZE_RESULT_SUCCESS, commandList->appendMemoryCopyRegion(dstPtr, &dstRegion, 0, 0, srcPtr, &srcRegion, 0, 0, nullptr, 0, nullptr, copyParams)); + + EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); + auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); + auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); + + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeDstOrigin); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcPitch); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstPitch); +} + +HWTEST_F(CommandListTest, givenStatelessAnd2dRegionWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetCorrectly) { for (bool isStateless : {false, true}) { Builtin func = isStateless ? Builtin::copyBufferRectBytes2dStateless : Builtin::copyBufferRectBytes2d; @@ -672,19 +736,25 @@ HWTEST_F(CommandListTest, givenStatelessAnd2dRegionWhenAppendMemoryCopyRegionThe EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); if (isStateless) { + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint64_t), passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint64_t), passedArgSizeDstPitch); } else { + EXPECT_EQ(sizeof(uint32_t) * 2, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint32_t) * 2, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint32_t), passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint32_t), passedArgSizeDstPitch); } } } -HWTEST_F(CommandListTest, givenStatelessAnd3dRegionWhenAppendMemoryCopyRegionThenPitchArgumentsAreSetCorrectly) { +HWTEST_F(CommandListTest, givenStatelessAnd3dRegionWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetCorrectly) { for (bool isStateless : {false, true}) { Builtin func = isStateless ? Builtin::copyBufferRectBytes3dStateless : Builtin::copyBufferRectBytes3d; @@ -713,19 +783,25 @@ HWTEST_F(CommandListTest, givenStatelessAnd3dRegionWhenAppendMemoryCopyRegionThe EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); if (isStateless) { + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstPitch); } else { + EXPECT_EQ(sizeof(uint32_t) * 3, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint32_t) * 3, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint32_t) * 2, passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint32_t) * 2, passedArgSizeDstPitch); } } } -HWTEST_F(CommandListTest, given4GBOrGreater2dSrcAndDstRegionsWhenAppendMemoryCopyRegionThenPitchArgumentsAreSetAs64Bit) { +HWTEST_F(CommandListTest, given4GBOrGreater2dSrcAndDstRegionsWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetAs64Bit) { auto kernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::copyBufferRectBytes2d); auto mockBuiltinKernel = static_cast *>(kernel); mockBuiltinKernel->checkPassedArgumentValues = true; @@ -750,14 +826,18 @@ HWTEST_F(CommandListTest, given4GBOrGreater2dSrcAndDstRegionsWhenAppendMemoryCop EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint64_t), passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint64_t), passedArgSizeDstPitch); } -HWTEST_F(CommandListTest, given4GBOrGreater3dSrcAndDstRegionsWhenAppendMemoryCopyRegionThenPitchArgumentsAreSetAs64Bit) { +HWTEST_F(CommandListTest, given4GBOrGreater3dSrcAndDstRegionsWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetAs64Bit) { auto kernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::copyBufferRectBytes3d); auto mockBuiltinKernel = static_cast *>(kernel); mockBuiltinKernel->checkPassedArgumentValues = true; @@ -783,14 +863,18 @@ HWTEST_F(CommandListTest, given4GBOrGreater3dSrcAndDstRegionsWhenAppendMemoryCop EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstPitch); } -HWTEST_F(CommandListTest, given4GBOrGreater2dDstRegionWhenAppendMemoryCopyRegionThenPitchArgumentsAreSetAs64Bit) { +HWTEST_F(CommandListTest, given4GBOrGreater2dDstRegionWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetAs64Bit) { auto kernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::copyBufferRectBytes2d); auto mockBuiltinKernel = static_cast *>(kernel); mockBuiltinKernel->checkPassedArgumentValues = true; @@ -815,14 +899,18 @@ HWTEST_F(CommandListTest, given4GBOrGreater2dDstRegionWhenAppendMemoryCopyRegion EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint64_t), passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint64_t), passedArgSizeDstPitch); } -HWTEST_F(CommandListTest, given4GBOrGreater3dDstRegionWhenAppendMemoryCopyRegionThenPitchArgumentsAreSetAs64Bit) { +HWTEST_F(CommandListTest, given4GBOrGreater3dDstRegionWhenAppendMemoryCopyRegionThenOriginAndPitchArgumentsAreSetAs64Bit) { auto kernel = device->getBuiltinFunctionsLib()->getFunction(Builtin::copyBufferRectBytes3d); auto mockBuiltinKernel = static_cast *>(kernel); mockBuiltinKernel->checkPassedArgumentValues = true; @@ -848,9 +936,13 @@ HWTEST_F(CommandListTest, given4GBOrGreater3dDstRegionWhenAppendMemoryCopyRegion EXPECT_TRUE(commandList->usedKernelLaunchParams.isBuiltInKernel); + auto passedArgSizeSrcOrigin = mockBuiltinKernel->passedArgumentValues[2u].size(); + auto passedArgSizeDstOrigin = mockBuiltinKernel->passedArgumentValues[3u].size(); auto passedArgSizeSrcPitch = mockBuiltinKernel->passedArgumentValues[4u].size(); auto passedArgSizeDstPitch = mockBuiltinKernel->passedArgumentValues[5u].size(); + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeSrcOrigin); + EXPECT_EQ(sizeof(uint64_t) * 3, passedArgSizeDstOrigin); EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeSrcPitch); EXPECT_EQ(sizeof(uint64_t) * 2, passedArgSizeDstPitch); } diff --git a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_memory_extension.cpp b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_memory_extension.cpp index 94728d9080..f46f5c38a9 100644 --- a/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_memory_extension.cpp +++ b/level_zero/core/test/unit_tests/sources/cmdlist/test_cmdlist_memory_extension.cpp @@ -157,7 +157,7 @@ class MockCommandListExtensionHw : public WhiteBox<::L0::CommandListCoreFamily