mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-03 23:03:02 +08:00
Add programming of Dispatch Walk Order in COMPUTE_WALKER for xe_hpg
- update xe_hpg generated commands - add method isAdjustWalkOrderAvailable Related-To: NEO-7065 Signed-off-by: Katarzyna Cencelewska <katarzyna.cencelewska@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
7f4e25a3f6
commit
615fd4c37a
@@ -94,7 +94,8 @@ struct EncodeDispatchKernel {
|
||||
bool localIdsGenerationByRuntime,
|
||||
bool inlineDataProgrammingRequired,
|
||||
bool isIndirect,
|
||||
uint32_t requiredWorkGroupOrder);
|
||||
uint32_t requiredWorkGroupOrder,
|
||||
const HardwareInfo &hwInfo);
|
||||
|
||||
static void programBarrierEnable(INTERFACE_DESCRIPTOR_DATA &interfaceDescriptor, uint32_t value, const HardwareInfo &hwInfo);
|
||||
|
||||
@@ -106,7 +107,7 @@ struct EncodeDispatchKernel {
|
||||
|
||||
static void setupPostSyncMocs(WALKER_TYPE &walkerCmd, const RootDeviceEnvironment &rootDeviceEnvironment);
|
||||
|
||||
static void adjustWalkOrder(WALKER_TYPE &walkerCmd, uint32_t requiredWorkGroupOrder);
|
||||
static void adjustWalkOrder(WALKER_TYPE &walkerCmd, uint32_t requiredWorkGroupOrder, const HardwareInfo &hwInfo);
|
||||
|
||||
static constexpr bool shouldUpdateGlobalAtomics(bool ¤tVal, bool refVal, bool updateCurrent);
|
||||
};
|
||||
|
||||
@@ -213,7 +213,8 @@ void EncodeDispatchKernel<Family>::encode(CommandContainer &container,
|
||||
true,
|
||||
false,
|
||||
args.isIndirect,
|
||||
args.dispatchInterface->getRequiredWorkgroupOrder());
|
||||
args.dispatchInterface->getRequiredWorkgroupOrder(),
|
||||
hwInfo);
|
||||
|
||||
cmd.setPredicateEnable(args.isPredicate);
|
||||
|
||||
@@ -283,7 +284,8 @@ void EncodeDispatchKernel<Family>::encodeThreadData(WALKER_TYPE &walkerCmd,
|
||||
bool localIdsGenerationByRuntime,
|
||||
bool inlineDataProgrammingRequired,
|
||||
bool isIndirect,
|
||||
uint32_t requiredWorkGroupOrder) {
|
||||
uint32_t requiredWorkGroupOrder,
|
||||
const HardwareInfo &hwInfo) {
|
||||
|
||||
if (isIndirect) {
|
||||
walkerCmd.setIndirectParameterEnable(true);
|
||||
@@ -505,6 +507,6 @@ template <typename Family>
|
||||
void EncodeDispatchKernel<Family>::setupPostSyncMocs(WALKER_TYPE &walkerCmd, const RootDeviceEnvironment &rootDeviceEnvironment) {}
|
||||
|
||||
template <typename Family>
|
||||
void EncodeDispatchKernel<Family>::adjustWalkOrder(WALKER_TYPE &walkerCmd, uint32_t requiredWorkGroupOrder) {}
|
||||
void EncodeDispatchKernel<Family>::adjustWalkOrder(WALKER_TYPE &walkerCmd, uint32_t requiredWorkGroupOrder, const HardwareInfo &hwInfo) {}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -234,7 +234,8 @@ void EncodeDispatchKernel<Family>::encode(CommandContainer &container,
|
||||
localIdsGenerationByRuntime,
|
||||
inlineDataProgramming,
|
||||
args.isIndirect,
|
||||
requiredWorkgroupOrder);
|
||||
requiredWorkgroupOrder,
|
||||
hwInfo);
|
||||
|
||||
using POSTSYNC_DATA = typename Family::POSTSYNC_DATA;
|
||||
auto &postSync = walkerCmd.getPostSync();
|
||||
@@ -394,7 +395,8 @@ void EncodeDispatchKernel<Family>::encodeThreadData(WALKER_TYPE &walkerCmd,
|
||||
bool localIdsGenerationByRuntime,
|
||||
bool inlineDataProgrammingRequired,
|
||||
bool isIndirect,
|
||||
uint32_t requiredWorkGroupOrder) {
|
||||
uint32_t requiredWorkGroupOrder,
|
||||
const HardwareInfo &hwInfo) {
|
||||
|
||||
if (isIndirect) {
|
||||
walkerCmd.setIndirectParameterEnable(true);
|
||||
@@ -444,7 +446,7 @@ void EncodeDispatchKernel<Family>::encodeThreadData(WALKER_TYPE &walkerCmd,
|
||||
walkerCmd.setGenerateLocalId(1);
|
||||
walkerCmd.setWalkOrder(requiredWorkGroupOrder);
|
||||
}
|
||||
adjustWalkOrder(walkerCmd, requiredWorkGroupOrder);
|
||||
adjustWalkOrder(walkerCmd, requiredWorkGroupOrder, hwInfo);
|
||||
if (inlineDataProgrammingRequired == true) {
|
||||
walkerCmd.setEmitInlineParameter(1);
|
||||
}
|
||||
@@ -744,6 +746,6 @@ inline void EncodeStoreMMIO<Family>::appendFlags(MI_STORE_REGISTER_MEM *storeReg
|
||||
}
|
||||
|
||||
template <typename Family>
|
||||
void EncodeDispatchKernel<Family>::adjustWalkOrder(WALKER_TYPE &walkerCmd, uint32_t requiredWorkGroupOrder) {}
|
||||
void EncodeDispatchKernel<Family>::adjustWalkOrder(WALKER_TYPE &walkerCmd, uint32_t requiredWorkGroupOrder, const HardwareInfo &hwInfo) {}
|
||||
|
||||
} // namespace NEO
|
||||
|
||||
@@ -5207,7 +5207,7 @@ typedef struct tagCOMPUTE_WALKER {
|
||||
uint32_t ComputeCommandOpcode : BITFIELD_RANGE(24, 26);
|
||||
uint32_t Pipeline : BITFIELD_RANGE(27, 28);
|
||||
uint32_t CommandType : BITFIELD_RANGE(29, 31);
|
||||
// DWORD 1
|
||||
// DWORD 1 of COMPUTE WALKER = DWORD 0 of COMPUTE_WALKER_BODY
|
||||
uint32_t Reserved_32 : BITFIELD_RANGE(0, 7);
|
||||
uint32_t Reserved_40 : BITFIELD_RANGE(8, 31);
|
||||
// DWORD 2
|
||||
@@ -5219,7 +5219,9 @@ typedef struct tagCOMPUTE_WALKER {
|
||||
uint32_t Reserved_96 : BITFIELD_RANGE(0, 5);
|
||||
uint32_t IndirectDataStartAddress : BITFIELD_RANGE(6, 31);
|
||||
// DWORD 4
|
||||
uint32_t Reserved_128 : BITFIELD_RANGE(0, 16);
|
||||
uint32_t Reserved_128 : BITFIELD_RANGE(0, 4);
|
||||
uint32_t DispatchWalkOrder : BITFIELD_RANGE(5, 6);
|
||||
uint32_t Reserved_135 : BITFIELD_RANGE(7, 16);
|
||||
uint32_t MessageSimd : BITFIELD_RANGE(17, 18);
|
||||
uint32_t TileLayout : BITFIELD_RANGE(19, 21);
|
||||
uint32_t WalkOrder : BITFIELD_RANGE(22, 24);
|
||||
@@ -5298,6 +5300,10 @@ typedef struct tagCOMPUTE_WALKER {
|
||||
PARTITION_ID_SUPPORTED_MIN = 0x0,
|
||||
PARTITION_ID_SUPPORTED_MAX = 0xf,
|
||||
} PARTITION_ID;
|
||||
typedef enum tagDISPATCH_WALK_ORDER { // patched
|
||||
LINERAR_WALKER = 0x0,
|
||||
Y_ORDER_WALKER = 0x1,
|
||||
} DISPATCH_WALK_ORDER;
|
||||
inline void init() {
|
||||
memset(&TheStructure, 0, sizeof(TheStructure));
|
||||
TheStructure.Common.DwordLength = DWORD_LENGTH_FIXED_SIZE;
|
||||
@@ -5405,6 +5411,12 @@ typedef struct tagCOMPUTE_WALKER {
|
||||
inline PARTITION_TYPE getPartitionType() const {
|
||||
return static_cast<PARTITION_TYPE>(TheStructure.Common.PartitionType);
|
||||
}
|
||||
inline void setDispatchWalkOrder(const DISPATCH_WALK_ORDER value) { // patched
|
||||
TheStructure.Common.DispatchWalkOrder = value;
|
||||
}
|
||||
inline DISPATCH_WALK_ORDER getDispatchWalkOrder() const { // patched
|
||||
return static_cast<DISPATCH_WALK_ORDER>(TheStructure.Common.DispatchWalkOrder);
|
||||
}
|
||||
typedef enum tagINDIRECTDATASTARTADDRESS {
|
||||
INDIRECTDATASTARTADDRESS_BIT_SHIFT = 0x6,
|
||||
INDIRECTDATASTARTADDRESS_ALIGN_SIZE = 0x40,
|
||||
|
||||
@@ -115,6 +115,7 @@ class HwInfoConfig {
|
||||
virtual bool isBlitCopyRequiredForLocalMemory(const HardwareInfo &hwInfo, const GraphicsAllocation &allocation) const = 0;
|
||||
virtual bool isImplicitScalingSupported(const HardwareInfo &hwInfo) const = 0;
|
||||
virtual bool isCpuCopyNecessary(const void *ptr, MemoryManager *memoryManager) const = 0;
|
||||
virtual bool isAdjustWalkOrderAvailable(const HardwareInfo &hwInfo) const = 0;
|
||||
|
||||
MOCKABLE_VIRTUAL ~HwInfoConfig() = default;
|
||||
|
||||
@@ -211,6 +212,7 @@ class HwInfoConfigHw : public HwInfoConfig {
|
||||
bool isBlitCopyRequiredForLocalMemory(const HardwareInfo &hwInfo, const GraphicsAllocation &allocation) const override;
|
||||
bool isImplicitScalingSupported(const HardwareInfo &hwInfo) const override;
|
||||
bool isCpuCopyNecessary(const void *ptr, MemoryManager *memoryManager) const override;
|
||||
bool isAdjustWalkOrderAvailable(const HardwareInfo &hwInfo) const override;
|
||||
|
||||
protected:
|
||||
HwInfoConfigHw() = default;
|
||||
|
||||
@@ -418,4 +418,7 @@ template <PRODUCT_FAMILY gfxProduct>
|
||||
bool HwInfoConfigHw<gfxProduct>::isCpuCopyNecessary(const void *ptr, MemoryManager *memoryManager) const {
|
||||
return false;
|
||||
}
|
||||
|
||||
template <PRODUCT_FAMILY gfxProduct>
|
||||
bool HwInfoConfigHw<gfxProduct>::isAdjustWalkOrderAvailable(const HardwareInfo &hwInfo) const { return false; }
|
||||
} // namespace NEO
|
||||
|
||||
@@ -173,6 +173,18 @@ void EncodeSurfaceState<Family>::appendParamsForImageFromBuffer(R_SURFACE_STATE
|
||||
}
|
||||
}
|
||||
|
||||
template <>
|
||||
void EncodeDispatchKernel<Family>::adjustWalkOrder(WALKER_TYPE &walkerCmd, uint32_t requiredWorkGroupOrder, const HardwareInfo &hwInfo) {
|
||||
auto &hwInfoConfig = *HwInfoConfig::get(hwInfo.platform.eProductFamily);
|
||||
if (hwInfoConfig.isAdjustWalkOrderAvailable(hwInfo)) {
|
||||
if (HwWalkOrderHelper::compatibleDimensionOrders[requiredWorkGroupOrder] == HwWalkOrderHelper::linearWalk) {
|
||||
walkerCmd.setDispatchWalkOrder(WALKER_TYPE::DISPATCH_WALK_ORDER::LINERAR_WALKER);
|
||||
} else if (HwWalkOrderHelper::compatibleDimensionOrders[requiredWorkGroupOrder] == HwWalkOrderHelper::yOrderWalk) {
|
||||
walkerCmd.setDispatchWalkOrder(WALKER_TYPE::DISPATCH_WALK_ORDER::Y_ORDER_WALKER);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
template struct EncodeDispatchKernel<Family>;
|
||||
template struct EncodeStates<Family>;
|
||||
template struct EncodeMath<Family>;
|
||||
|
||||
@@ -179,14 +179,14 @@ HWTEST2_F(CommandEncoderTests, givenRequiredWorkGroupOrderWhenCallAdjustWalkOrde
|
||||
WALKER_TYPE walkerOnStart{};
|
||||
|
||||
uint32_t yOrder = 2u;
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, yOrder);
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, yOrder, *defaultHwInfo);
|
||||
EXPECT_EQ(0, memcmp(&walkerOnStart, &walkerCmd, sizeof(WALKER_TYPE))); // no change
|
||||
|
||||
uint32_t linearOrder = 0u;
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, linearOrder);
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, linearOrder, *defaultHwInfo);
|
||||
EXPECT_EQ(0, memcmp(&walkerOnStart, &walkerCmd, sizeof(WALKER_TYPE))); // no change
|
||||
|
||||
uint32_t fakeOrder = 5u;
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, fakeOrder);
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, fakeOrder, *defaultHwInfo);
|
||||
EXPECT_EQ(0, memcmp(&walkerOnStart, &walkerCmd, sizeof(WALKER_TYPE))); // no change
|
||||
}
|
||||
|
||||
@@ -15,6 +15,7 @@
|
||||
#include "shared/test/common/fixtures/command_container_fixture.h"
|
||||
#include "shared/test/common/fixtures/front_window_fixture.h"
|
||||
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
||||
#include "shared/test/common/helpers/default_hw_info.h"
|
||||
#include "shared/test/common/mocks/mock_device.h"
|
||||
#include "shared/test/common/mocks/mock_dispatch_kernel_encoder_interface.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
@@ -850,7 +851,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, WalkerThreadTest, givenStartWorkGroupWhenIndirectIsF
|
||||
startWorkGroup[2] = 3u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, false, false, requiredWorkGroupOrder);
|
||||
0, 0, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -876,7 +877,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, WalkerThreadTest, givenNoStartWorkGroupWhenIndirectI
|
||||
startWorkGroup[2] = 3u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, nullptr, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, false, true, requiredWorkGroupOrder);
|
||||
0, 0, true, false, true, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_TRUE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(0u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(0u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -903,7 +904,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, WalkerThreadTest, givenStartWorkGroupWhenWorkGroupSm
|
||||
workGroupSizes[0] = 30u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, false, false, requiredWorkGroupOrder);
|
||||
0, 0, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -928,7 +929,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, WalkerThreadTest, WhenThreadPerThreadGroupNotZeroThe
|
||||
|
||||
uint32_t expectedThreadPerThreadGroup = 5u;
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
expectedThreadPerThreadGroup, 0, true, false, false, requiredWorkGroupOrder);
|
||||
expectedThreadPerThreadGroup, 0, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -953,7 +954,7 @@ HWCMDTEST_F(IGFX_GEN8_CORE, WalkerThreadTest, WhenExecutionMaskNotZeroThenExpect
|
||||
|
||||
uint32_t expectedExecutionMask = 0xFFFFu;
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, expectedExecutionMask, true, false, false, requiredWorkGroupOrder);
|
||||
0, expectedExecutionMask, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
#include "shared/test/common/cmd_parse/hw_parse.h"
|
||||
#include "shared/test/common/fixtures/command_container_fixture.h"
|
||||
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
||||
#include "shared/test/common/helpers/default_hw_info.h"
|
||||
#include "shared/test/common/helpers/variable_backup.h"
|
||||
#include "shared/test/common/mocks/mock_device.h"
|
||||
#include "shared/test/common/mocks/mock_dispatch_kernel_encoder_interface.h"
|
||||
@@ -612,7 +613,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, givenStartWorkGroupWh
|
||||
startWorkGroup[2] = 3u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, false, false, requiredWorkGroupOrder);
|
||||
0, 0, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -646,7 +647,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, givenNoStartWorkGroup
|
||||
startWorkGroup[2] = 3u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, nullptr, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, false, true, requiredWorkGroupOrder);
|
||||
0, 0, true, false, true, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_TRUE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(0u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(0u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -682,7 +683,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, givenSimdSizeOneWhenW
|
||||
simd = 1;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, false, false, requiredWorkGroupOrder);
|
||||
0, 0, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -717,7 +718,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, givenStartWorkGroupWh
|
||||
workGroupSizes[0] = 30u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, false, false, requiredWorkGroupOrder);
|
||||
0, 0, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -750,7 +751,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, givenLocalIdGeneratio
|
||||
localIdDimensions = 0u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, nullptr, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, false, false, false, requiredWorkGroupOrder);
|
||||
0, 0, false, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -784,7 +785,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, givenLocalIdGeneratio
|
||||
workGroupSizes[1] = workGroupSizes[2] = 2u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, nullptr, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, false, false, false, requiredWorkGroupOrder);
|
||||
0, 0, false, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -822,7 +823,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, givenDebugVariableToO
|
||||
workGroupSizes[1] = workGroupSizes[2] = 2u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, nullptr, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, false, false, false, requiredWorkGroupOrder);
|
||||
0, 0, false, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_EQ(1u, walkerCmd.getMessageSimd());
|
||||
}
|
||||
|
||||
@@ -834,7 +835,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, WhenInlineDataIsTrueT
|
||||
startWorkGroup[2] = 3u;
|
||||
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, 0, true, true, false, requiredWorkGroupOrder);
|
||||
0, 0, true, true, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
@@ -867,7 +868,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, WalkerThreadTestXeHPAndLater, WhenExecutionMaskNotZ
|
||||
|
||||
uint32_t expectedExecutionMask = 0xFFFFu;
|
||||
EncodeDispatchKernel<FamilyType>::encodeThreadData(walkerCmd, startWorkGroup, numWorkGroups, workGroupSizes, simd, localIdDimensions,
|
||||
0, expectedExecutionMask, true, false, false, requiredWorkGroupOrder);
|
||||
0, expectedExecutionMask, true, false, false, requiredWorkGroupOrder, *defaultHwInfo);
|
||||
EXPECT_FALSE(walkerCmd.getIndirectParameterEnable());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdXDimension());
|
||||
EXPECT_EQ(1u, walkerCmd.getThreadGroupIdYDimension());
|
||||
|
||||
@@ -97,4 +97,9 @@ HWTEST2_F(HwInfoConfigTest, givenAotConfigWhenSetHwInfoRevisionIdThenCorrectValu
|
||||
aotConfig.ProductConfig = productConfig;
|
||||
CompilerHwInfoConfig::get(defaultHwInfo->platform.eProductFamily)->setProductConfigForHwInfo(*defaultHwInfo, aotConfig);
|
||||
EXPECT_EQ(defaultHwInfo->platform.usRevId, aotConfig.ProductConfigID.Revision);
|
||||
}
|
||||
|
||||
HWTEST_F(HwInfoConfigTest, givenHwInfoConfigWhenIsAdjustWalkOrderAvailableCallThenFalseReturn) {
|
||||
const auto &hwInfoConfig = *HwInfoConfig::get(defaultHwInfo->platform.eProductFamily);
|
||||
EXPECT_FALSE(hwInfoConfig.isAdjustWalkOrderAvailable(*defaultHwInfo));
|
||||
}
|
||||
@@ -6,8 +6,10 @@
|
||||
*/
|
||||
|
||||
#include "shared/source/command_container/command_encoder.h"
|
||||
#include "shared/source/os_interface/hw_info_config.h"
|
||||
#include "shared/source/xe_hpg_core/hw_cmds_base.h"
|
||||
#include "shared/test/common/helpers/default_hw_info.h"
|
||||
#include "shared/test/common/helpers/variable_backup.h"
|
||||
#include "shared/test/common/test_macros/test.h"
|
||||
|
||||
using namespace NEO;
|
||||
@@ -26,3 +28,30 @@ HWTEST2_F(CommandEncodeStatesTestXeHpgCore, givenVariousValuesWhenCallingSetBarr
|
||||
EXPECT_EQ(barrierCount, idd.getNumberOfBarriers());
|
||||
}
|
||||
}
|
||||
template <PRODUCT_FAMILY productFamily>
|
||||
struct MockHwInfoConfig : NEO::HwInfoConfigHw<productFamily> {
|
||||
bool isAdjustWalkOrderAvailable(const HardwareInfo &hwInfo) const override { return true; }
|
||||
};
|
||||
|
||||
HWTEST2_F(CommandEncodeStatesTestXeHpgCore, givenRequiredWorkGroupOrderAndIsAdjusttWalkOrderAvailableReturnTureWhenCallAdjustWalkOrderThenWalkerIsProgrammedCorrectly, IsXeHpgCore) {
|
||||
using WALKER_TYPE = typename FamilyType::WALKER_TYPE;
|
||||
|
||||
MockHwInfoConfig<productFamily> hwInfoConfig{};
|
||||
VariableBackup<HwInfoConfig *> hwInfoConfigFactoryBackup{&NEO::hwInfoConfigFactory[static_cast<size_t>(defaultHwInfo->platform.eProductFamily)]};
|
||||
hwInfoConfigFactoryBackup = &hwInfoConfig;
|
||||
|
||||
WALKER_TYPE walkerCmd{};
|
||||
WALKER_TYPE walkerOnStart{};
|
||||
|
||||
uint32_t fakeOrder = 5u;
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, fakeOrder, *defaultHwInfo);
|
||||
EXPECT_EQ(0, memcmp(&walkerOnStart, &walkerCmd, sizeof(WALKER_TYPE))); // no change
|
||||
|
||||
uint32_t yOrder = 2u;
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, yOrder, *defaultHwInfo);
|
||||
EXPECT_EQ(WALKER_TYPE::DISPATCH_WALK_ORDER::Y_ORDER_WALKER, walkerCmd.getDispatchWalkOrder());
|
||||
|
||||
uint32_t linearOrder = 0u;
|
||||
EncodeDispatchKernel<FamilyType>::adjustWalkOrder(walkerCmd, linearOrder, *defaultHwInfo);
|
||||
EXPECT_EQ(WALKER_TYPE::DISPATCH_WALK_ORDER::LINERAR_WALKER, walkerCmd.getDispatchWalkOrder());
|
||||
}
|
||||
Reference in New Issue
Block a user