11
11
#include " shared/source/helpers/per_thread_data.h"
12
12
#include " shared/source/utilities/software_tags_manager.h"
13
13
#include " shared/test/common/cmd_parse/gen_cmd_parse.h"
14
+ #include " shared/test/common/helpers/unit_test_helper.h"
14
15
#include " shared/test/common/mocks/mock_compilers.h"
15
16
#include " shared/test/common/test_macros/test.h"
16
17
@@ -937,14 +938,16 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
937
938
expectedImplicitArgs.groupCountZ = 3 ;
938
939
}
939
940
941
+ template <typename FamilyType>
940
942
void dispatchKernelWithImplicitArgs () {
941
943
expectedImplicitArgs.globalSizeX = expectedImplicitArgs.localSizeX * expectedImplicitArgs.groupCountX ;
942
944
expectedImplicitArgs.globalSizeY = expectedImplicitArgs.localSizeY * expectedImplicitArgs.groupCountY ;
943
945
expectedImplicitArgs.globalSizeZ = expectedImplicitArgs.localSizeZ * expectedImplicitArgs.groupCountZ ;
944
946
945
947
std::unique_ptr<MockImmutableData> mockKernelImmData = std::make_unique<MockImmutableData>(0u );
946
948
auto kernelDescriptor = mockKernelImmData->kernelDescriptor ;
947
- kernelDescriptor->kernelAttributes .flags .requiresImplicitArgs = true ;
949
+
950
+ UnitTestHelper<FamilyType>::adjustKernelDescriptorForImplicitArgs (*kernelDescriptor);
948
951
kernelDescriptor->kernelAttributes .simdSize = expectedImplicitArgs.simdWidth ;
949
952
kernelDescriptor->kernelAttributes .workgroupDimensionsOrder [0 ] = workgroupDimOrder[0 ];
950
953
kernelDescriptor->kernelAttributes .workgroupDimensionsOrder [1 ] = workgroupDimOrder[1 ];
@@ -957,6 +960,7 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
957
960
kernel->initialize (&kernelDesc);
958
961
kernel->kernelRequiresGenerationOfLocalIdsByRuntime = kernelRequiresGenerationOfLocalIdsByRuntime;
959
962
kernel->requiredWorkgroupOrder = requiredWorkgroupOrder;
963
+ kernel->setCrossThreadData (sizeof (uint64_t ));
960
964
961
965
EXPECT_TRUE (kernel->getKernelDescriptor ().kernelAttributes .flags .requiresImplicitArgs );
962
966
ASSERT_NE (nullptr , kernel->getImplicitArgs ());
@@ -982,7 +986,9 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
982
986
auto sizePerThreadDataForWholeGroup = kernel->getPerThreadDataSizeForWholeThreadGroup ();
983
987
EXPECT_EQ (indirectHeap->getUsed (), sizeCrossThreadData + sizePerThreadDataForWholeGroup + implicitArgsProgrammingSize);
984
988
985
- expectedImplicitArgs.localIdTablePtr = indirectHeapAllocation->getGpuAddress ();
989
+ if (FamilyType::supportsCmdSet (IGFX_XE_HP_CORE)) {
990
+ expectedImplicitArgs.localIdTablePtr = indirectHeapAllocation->getGpuAddress ();
991
+ }
986
992
expectedImplicitArgs.printfBufferPtr = kernel->getPrintfBufferAllocation ()->getGpuAddress ();
987
993
}
988
994
std::unique_ptr<L0::CommandList> commandList;
@@ -994,15 +1000,16 @@ struct CmdlistAppendLaunchKernelWithImplicitArgsTests : CmdlistAppendLaunchKerne
994
1000
bool kernelRequiresGenerationOfLocalIdsByRuntime = true ;
995
1001
uint32_t requiredWorkgroupOrder = 0 ;
996
1002
};
997
- HWTEST_F (CmdlistAppendLaunchKernelWithImplicitArgsTests, givenKernelWithImplicitArgsWhenAppendLaunchKernelThenImplicitArgsAreSentToIndirectHeap) {
1003
+
1004
+ HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenXeHpAndLaterPlatformWhenAppendLaunchKernelWithImplicitArgsThenImplicitArgsAreSentToIndirectHeapWithLocalIds) {
998
1005
std::array<uint16_t , 3 > localSize{2 , 3 , 4 };
999
1006
size_t totalLocalSize = localSize[0 ] * localSize[1 ] * localSize[2 ];
1000
1007
1001
1008
expectedImplicitArgs.localSizeX = localSize[0 ];
1002
1009
expectedImplicitArgs.localSizeY = localSize[1 ];
1003
1010
expectedImplicitArgs.localSizeZ = localSize[2 ];
1004
1011
1005
- dispatchKernelWithImplicitArgs ();
1012
+ dispatchKernelWithImplicitArgs<FamilyType> ();
1006
1013
1007
1014
auto grfSize = ImplicitArgsHelper::getGrfSize (expectedImplicitArgs.simdWidth , sizeof (typename FamilyType::GRF));
1008
1015
auto expectedLocalIds = alignedMalloc (implicitArgsProgrammingSize - sizeof (ImplicitArgs), MemoryConstants::cacheLineSize);
@@ -1017,7 +1024,20 @@ HWTEST_F(CmdlistAppendLaunchKernelWithImplicitArgsTests, givenKernelWithImplicit
1017
1024
auto implicitArgsInIndirectData = ptrOffset (indirectHeapAllocation->getUnderlyingBuffer (), localIdsProgrammingSize);
1018
1025
EXPECT_EQ (0 , memcmp (implicitArgsInIndirectData, &expectedImplicitArgs, sizeof (ImplicitArgs)));
1019
1026
}
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) {
1021
1041
workgroupDimOrder[0 ] = 2 ;
1022
1042
workgroupDimOrder[1 ] = 1 ;
1023
1043
workgroupDimOrder[2 ] = 0 ;
@@ -1034,7 +1054,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, giv
1034
1054
expectedImplicitArgs.localSizeY = localSize[1 ];
1035
1055
expectedImplicitArgs.localSizeZ = localSize[2 ];
1036
1056
1037
- dispatchKernelWithImplicitArgs ();
1057
+ dispatchKernelWithImplicitArgs<FamilyType> ();
1038
1058
1039
1059
auto grfSize = ImplicitArgsHelper::getGrfSize (expectedImplicitArgs.simdWidth , sizeof (typename FamilyType::GRF));
1040
1060
auto expectedLocalIds = alignedMalloc (implicitArgsProgrammingSize - sizeof (ImplicitArgs), MemoryConstants::cacheLineSize);
@@ -1050,7 +1070,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, giv
1050
1070
EXPECT_EQ (0 , memcmp (implicitArgsInIndirectData, &expectedImplicitArgs, sizeof (ImplicitArgs)));
1051
1071
}
1052
1072
1053
- HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenKernelWithImplicitArgsWhenAppendLaunchKernelWithSimd1ThenLocalIdsAreGeneratedCorrectly ) {
1073
+ HWCMDTEST_F (IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, givenXeHpAndLaterPlatformWhenAppendLaunchKernelWithImplicitArgsAndSimd1ThenLocalIdsAreGeneratedCorrectly ) {
1054
1074
workgroupDimOrder[0 ] = 2 ;
1055
1075
workgroupDimOrder[1 ] = 1 ;
1056
1076
workgroupDimOrder[2 ] = 0 ;
@@ -1060,7 +1080,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CmdlistAppendLaunchKernelWithImplicitArgsTests, giv
1060
1080
expectedImplicitArgs.localSizeY = 2 ;
1061
1081
expectedImplicitArgs.localSizeZ = 1 ;
1062
1082
1063
- dispatchKernelWithImplicitArgs ();
1083
+ dispatchKernelWithImplicitArgs<FamilyType> ();
1064
1084
1065
1085
uint16_t expectedLocalIds[][3 ] = {{0 , 0 , 0 },
1066
1086
{0 , 1 , 0 },
0 commit comments