1111#include " shared/source/helpers/per_thread_data.h"
1212#include " shared/source/utilities/software_tags_manager.h"
1313#include " shared/test/common/cmd_parse/gen_cmd_parse.h"
14+ #include " shared/test/common/helpers/unit_test_helper.h"
1415#include " shared/test/common/mocks/mock_compilers.h"
1516#include " shared/test/common/test_macros/test.h"
1617
@@ -937,14 +938,16 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
937938 expectedImplicitArgs.groupCountZ = 3 ;
938939 }
939940
941+ template <typename FamilyType>
940942 void dispatchKernelWithImplicitArgs () {
941943 expectedImplicitArgs.globalSizeX = expectedImplicitArgs.localSizeX * expectedImplicitArgs.groupCountX ;
942944 expectedImplicitArgs.globalSizeY = expectedImplicitArgs.localSizeY * expectedImplicitArgs.groupCountY ;
943945 expectedImplicitArgs.globalSizeZ = expectedImplicitArgs.localSizeZ * expectedImplicitArgs.groupCountZ ;
944946
945947 std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u );
946948 auto kernelDescriptor = mockKernelImmData->kernelDescriptor ;
947- kernelDescriptor->kernelAttributes .flags .requiresImplicitArgs = true ;
949+
950+ UnitTestHelper<FamilyType>::adjustKernelDescriptorForImplicitArgs (*kernelDescriptor);
948951 kernelDescriptor->kernelAttributes .simdSize = expectedImplicitArgs.simdWidth ;
949952 kernelDescriptor->kernelAttributes .workgroupDimensionsOrder [0 ] = workgroupDimOrder[0 ];
950953 kernelDescriptor->kernelAttributes .workgroupDimensionsOrder [1 ] = workgroupDimOrder[1 ];
@@ -957,6 +960,7 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
957960 kernel->initialize (&kernelDesc);
958961 kernel->kernelRequiresGenerationOfLocalIdsByRuntime = kernelRequiresGenerationOfLocalIdsByRuntime;
959962 kernel->requiredWorkgroupOrder = requiredWorkgroupOrder;
963+ kernel->setCrossThreadData (sizeof (uint64_t ));
960964
961965 EXPECT_TRUE (kernel->getKernelDescriptor ().kernelAttributes .flags .requiresImplicitArgs );
962966 ASSERT_NE (nullptr , kernel->getImplicitArgs ());
@@ -982,7 +986,9 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
982986 auto sizePerThreadDataForWholeGroup = kernel->getPerThreadDataSizeForWholeThreadGroup ();
983987 EXPECT_EQ (indirectHeap->getUsed (), sizeCrossThreadData + sizePerThreadDataForWholeGroup + implicitArgsProgrammingSize);
984988
985- expectedImplicitArgs.localIdTablePtr = indirectHeapAllocation->getGpuAddress ();
989+ if (FamilyType::supportsCmdSet (IGFX_XE_HP_CORE)) {
990+ expectedImplicitArgs.localIdTablePtr = indirectHeapAllocation->getGpuAddress ();
991+ }
986992 expectedImplicitArgs.printfBufferPtr = kernel->getPrintfBufferAllocation ()->getGpuAddress ();
987993 }
988994 std::unique_ptr<L0::CommandList> commandList;
@@ -994,15 +1000,16 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
9941000 bool kernelRequiresGenerationOfLocalIdsByRuntime = true ;
9951001 uint32_t requiredWorkgroupOrder = 0 ;
9961002};
997- HWTEST_F (CmdlistAppendLaunchKernelWithImplicitArgsTests, givenKernelWithImplicitArgsWhenAppendLaunchKernelThenImplicitArgsAreSentToIndirectHeap) {
1003+
1004+ HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenXeHpAndLaterPlatformWhenAppendLaunchKernelWithImplicitArgsThenImplicitArgsAreSentToIndirectHeapWithLocalIds) {
9981005 std::array<uint16_t , 3 > localSize{2 , 3 , 4 };
9991006 size_t totalLocalSize = localSize[0 ] * localSize[1 ] * localSize[2 ];
10001007
10011008 expectedImplicitArgs.localSizeX = localSize[0 ];
10021009 expectedImplicitArgs.localSizeY = localSize[1 ];
10031010 expectedImplicitArgs.localSizeZ = localSize[2 ];
10041011
1005- dispatchKernelWithImplicitArgs ();
1012+ dispatchKernelWithImplicitArgs<FamilyType> ();
10061013
10071014 auto grfSize = ImplicitArgsHelper::getGrfSize (expectedImplicitArgs.simdWidth , sizeof (typename FamilyType::GRF));
10081015 auto expectedLocalIds = alignedMalloc (implicitArgsProgrammingSize - sizeof (ImplicitArgs), MemoryConstants::cacheLineSize);
@@ -1017,7 +1024,20 @@ HWTEST_F(CmdlistAppendLaunchKernelWithImplicitArgsTests, givenKernelWithImplicit
10171024 auto implicitArgsInIndirectData = ptrOffset (indirectHeapAllocation->getUnderlyingBuffer (), localIdsProgrammingSize);
10181025 EXPECT_EQ (0 , memcmp (implicitArgsInIndirectData, &expectedImplicitArgs, sizeof (ImplicitArgs)));
10191026}
1020- HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenKernelWithImplicitArgsAndHwGeneratedLocalIdsWhenAppendLaunchKernelThenImplicitArgsLocalIdsRespectWalkOrder) {
1027+
1028+ HWCMDTEST_F (IGFX_GEN8_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenPreXeHpPlatformWhenAppendLaunchKernelWithImplicitArgsThenImplicitArgsAreSentToIndirectHeapWithoutLocalIds) {
1029+ dispatchKernelWithImplicitArgs<FamilyType>();
1030+
1031+ auto implicitArgsInIndirectData = indirectHeapAllocation->getUnderlyingBuffer ();
1032+ EXPECT_EQ (0 , memcmp (implicitArgsInIndirectData, &expectedImplicitArgs, sizeof (ImplicitArgs)));
1033+
1034+ auto crossThreadDataInIndirectData = ptrOffset (indirectHeapAllocation->getUnderlyingBuffer (), 0x80 );
1035+
1036+ auto programmedImplicitArgsGpuVA = reinterpret_cast <uint64_t *>(crossThreadDataInIndirectData)[0 ];
1037+ EXPECT_EQ (indirectHeapAllocation->getGpuAddress (), programmedImplicitArgsGpuVA);
1038+ }
1039+
1040+ HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenXeHpAndLaterPlatformAndHwGeneratedLocalIdsWhenAppendLaunchKernelWithImplicitArgsThenImplicitArgsLocalIdsRespectWalkOrder) {
10211041 workgroupDimOrder[0 ] = 2 ;
10221042 workgroupDimOrder[1 ] = 1 ;
10231043 workgroupDimOrder[2 ] = 0 ;
@@ -1034,7 +1054,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, giv
10341054 expectedImplicitArgs.localSizeY = localSize[1 ];
10351055 expectedImplicitArgs.localSizeZ = localSize[2 ];
10361056
1037- dispatchKernelWithImplicitArgs ();
1057+ dispatchKernelWithImplicitArgs<FamilyType> ();
10381058
10391059 auto grfSize = ImplicitArgsHelper::getGrfSize (expectedImplicitArgs.simdWidth , sizeof (typename FamilyType::GRF));
10401060 auto expectedLocalIds = alignedMalloc (implicitArgsProgrammingSize - sizeof (ImplicitArgs), MemoryConstants::cacheLineSize);
@@ -1050,7 +1070,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, giv
10501070 EXPECT_EQ (0 , memcmp (implicitArgsInIndirectData, &expectedImplicitArgs, sizeof (ImplicitArgs)));
10511071}
10521072
1053- HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenKernelWithImplicitArgsWhenAppendLaunchKernelWithSimd1ThenLocalIdsAreGeneratedCorrectly ) {
1073+ HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenXeHpAndLaterPlatformWhenAppendLaunchKernelWithImplicitArgsAndSimd1ThenLocalIdsAreGeneratedCorrectly ) {
10541074 workgroupDimOrder[0 ] = 2 ;
10551075 workgroupDimOrder[1 ] = 1 ;
10561076 workgroupDimOrder[2 ] = 0 ;
@@ -1060,7 +1080,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, giv
10601080 expectedImplicitArgs.localSizeY = 2 ;
10611081 expectedImplicitArgs.localSizeZ = 1 ;
10621082
1063- dispatchKernelWithImplicitArgs ();
1083+ dispatchKernelWithImplicitArgs<FamilyType> ();
10641084
10651085 uint16_t expectedLocalIds[][3 ] = {{0 , 0 , 0 },
10661086 {0 , 1 , 0 },
0 commit comments