mirror of
https://github.com/intel/compute-runtime.git
synced 2026-01-11 16:45:25 +08:00
test: unify tests compute mode programming within Xe Hpg
Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
9e89704624
commit
824a98815e
@@ -7,10 +7,13 @@
|
||||
|
||||
#include "shared/source/helpers/bit_helpers.h"
|
||||
#include "shared/source/helpers/ptr_math.h"
|
||||
#include "shared/source/release_helper/release_helper.h"
|
||||
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
||||
#include "shared/test/common/helpers/engine_descriptor_helper.h"
|
||||
#include "shared/test/common/helpers/unit_test_helper.h"
|
||||
#include "shared/test/common/mocks/mock_allocation_properties.h"
|
||||
#include "shared/test/common/mocks/mock_device.h"
|
||||
#include "shared/test/common/mocks/mock_os_context.h"
|
||||
#include "shared/test/common/test_macros/hw_test.h"
|
||||
#include "shared/test/unit_test/command_stream/compute_mode_tests.h"
|
||||
|
||||
@@ -270,7 +273,6 @@ HWTEST2_F(ComputeModeRequirements, givenCoherencyRequirementWithSharedHandlesWhe
|
||||
setUpImpl<FamilyType>();
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto startOffset = getCsrHw<FamilyType>()->commandStream.getUsed();
|
||||
auto graphicsAlloc = csr->getMemoryManager()->allocateGraphicsMemoryWithProperties(MockAllocationProperties{csr->getRootDeviceIndex(), MemoryConstants::pageSize});
|
||||
IndirectHeap stream(graphicsAlloc);
|
||||
@@ -501,3 +503,96 @@ HWTEST2_F(ComputeModeRequirements, givenComputeModeProgrammingWhenRequiredGRFNum
|
||||
expectedScmCmd.setMaskBits(scmCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, scmCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
}
|
||||
|
||||
HWTEST2_F(ComputeModeRequirements, GivenSingleCCSEnabledSetupThenCorrectCommandsAreAdded, IsXeHpgCore) {
|
||||
HardwareInfo hwInfo = *defaultHwInfo;
|
||||
hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 1;
|
||||
|
||||
setUpImpl<FamilyType>(&hwInfo);
|
||||
MockOsContext ccsOsContext(0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}));
|
||||
|
||||
getCsrHw<FamilyType>()->setupContext(ccsOsContext);
|
||||
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using FORCE_NON_COHERENT = typename STATE_COMPUTE_MODE::FORCE_NON_COHERENT;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto *releaseHelper = device->getReleaseHelper();
|
||||
EXPECT_NE(nullptr, releaseHelper);
|
||||
const auto &productHelper = device->getProductHelper();
|
||||
const auto &[isBasicWARequired, isExtendedWARequired] = productHelper.isPipeControlPriorToNonPipelinedStateCommandsWARequired(*defaultHwInfo, csr->isRcs(), releaseHelper);
|
||||
std::ignore = isExtendedWARequired;
|
||||
|
||||
auto cmdsSize = sizeof(STATE_COMPUTE_MODE);
|
||||
auto cmdOffset = 0u;
|
||||
if (isBasicWARequired) {
|
||||
cmdsSize += sizeof(PIPE_CONTROL);
|
||||
cmdOffset = sizeof(PIPE_CONTROL);
|
||||
}
|
||||
char buff[1024] = {0};
|
||||
LinearStream stream(buff, 1024);
|
||||
|
||||
auto expectedScmCmd = FamilyType::cmdInitStateComputeMode;
|
||||
overrideComputeModeRequest<FamilyType>(true, false, false, false);
|
||||
|
||||
auto retSize = getCsrHw<FamilyType>()->getCmdSizeForComputeMode();
|
||||
EXPECT_EQ(cmdsSize, retSize);
|
||||
|
||||
getCsrHw<FamilyType>()->programComputeMode(stream, flags, hwInfo);
|
||||
EXPECT_EQ(cmdsSize, stream.getUsed());
|
||||
|
||||
auto startOffset = getCsrHw<FamilyType>()->commandStream.getUsed();
|
||||
|
||||
HardwareParse hwParser;
|
||||
hwParser.parseCommands<FamilyType>(stream, startOffset);
|
||||
if (isBasicWARequired) {
|
||||
auto pipeControlIterator = find<PIPE_CONTROL *>(hwParser.cmdList.begin(), hwParser.cmdList.end());
|
||||
auto pipeControlCmd = genCmdCast<PIPE_CONTROL *>(*pipeControlIterator);
|
||||
|
||||
EXPECT_TRUE(UnitTestHelper<FamilyType>::getPipeControlHdcPipelineFlush(*pipeControlCmd));
|
||||
EXPECT_TRUE(pipeControlCmd->getUnTypedDataPortCacheFlush());
|
||||
|
||||
EXPECT_FALSE(pipeControlCmd->getAmfsFlushEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getInstructionCacheInvalidateEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getTextureCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getConstantCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getStateCacheInvalidationEnable());
|
||||
}
|
||||
|
||||
auto stateComputeModeCmd = reinterpret_cast<STATE_COMPUTE_MODE *>(ptrOffset(stream.getCpuBase(), cmdOffset));
|
||||
expectedScmCmd.setMaskBits(stateComputeModeCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, stateComputeModeCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
}
|
||||
|
||||
HWTEST2_F(ComputeModeRequirements, givenComputeModeProgrammingWhenRequiredGRFNumberIsLowerThan128ThenSmallGRFModeIsProgrammed, IsXeHpgCore) {
|
||||
setUpImpl<FamilyType>();
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto *releaseHelper = device->getReleaseHelper();
|
||||
EXPECT_NE(nullptr, releaseHelper);
|
||||
const auto &productHelper = device->getProductHelper();
|
||||
const auto &[isBasicWARequired, isExtendedWARequired] = productHelper.isPipeControlPriorToNonPipelinedStateCommandsWARequired(*defaultHwInfo, csr->isRcs(), releaseHelper);
|
||||
std::ignore = isExtendedWARequired;
|
||||
|
||||
auto cmdsSize = sizeof(STATE_COMPUTE_MODE);
|
||||
auto cmdOffset = 0u;
|
||||
if (isBasicWARequired) {
|
||||
cmdsSize += sizeof(PIPE_CONTROL);
|
||||
cmdOffset = sizeof(PIPE_CONTROL);
|
||||
}
|
||||
char buff[1024]{};
|
||||
LinearStream stream(buff, 1024);
|
||||
|
||||
auto expectedScmCmd = FamilyType::cmdInitStateComputeMode;
|
||||
expectedScmCmd.setLargeGrfMode(false);
|
||||
auto expectedBitsMask = FamilyType::stateComputeModeLargeGrfModeMask;
|
||||
overrideComputeModeRequest<FamilyType>(false, false, false, true, 127u);
|
||||
getCsrHw<FamilyType>()->programComputeMode(stream, flags, *defaultHwInfo);
|
||||
EXPECT_EQ(cmdsSize, stream.getUsed());
|
||||
|
||||
auto scmCmd = reinterpret_cast<STATE_COMPUTE_MODE *>(ptrOffset(stream.getCpuBase(), cmdOffset));
|
||||
EXPECT_TRUE(isValueSet(scmCmd->getMaskBits(), expectedBitsMask));
|
||||
expectedScmCmd.setMaskBits(scmCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, scmCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
}
|
||||
|
||||
@@ -34,4 +34,6 @@ HWTEST_EXCLUDE_PRODUCT(CommandEncodeStatesTestDg2AndLater, GivenVariousSlmTotalS
|
||||
HWTEST_EXCLUDE_PRODUCT(ProductHelperCommonTest, givenHwHelperWhenIsFusedEuDisabledForDpasCalledThenFalseReturned, IGFX_DG2);
|
||||
HWTEST_EXCLUDE_PRODUCT(ProductHelperCommonTest, givenProductHelperWhenCallingIsCalculationForDisablingEuFusionWithDpasNeededThenFalseReturned, IGFX_DG2);
|
||||
HWTEST_EXCLUDE_PRODUCT(ProductHelperTest, whenDisableL3ForDebugCalledThenFalseIsReturned, IGFX_DG2);
|
||||
HWTEST_EXCLUDE_PRODUCT(WddmMemoryManagerSimpleTest, givenLinearStreamWhenItIsAllocatedThenItIsInLocalMemoryHasCpuPointerAndHasStandardHeap64kbAsGpuAddress, IGFX_DG2);
|
||||
HWTEST_EXCLUDE_PRODUCT(WddmMemoryManagerSimpleTest, givenLinearStreamWhenItIsAllocatedThenItIsInLocalMemoryHasCpuPointerAndHasStandardHeap64kbAsGpuAddress, IGFX_DG2);
|
||||
HWTEST_EXCLUDE_PRODUCT(ComputeModeRequirements, GivenSingleCCSEnabledSetupThenCorrectCommandsAreAdded_IsXeHpgCore, IGFX_DG2);
|
||||
HWTEST_EXCLUDE_PRODUCT(ComputeModeRequirements, givenComputeModeProgrammingWhenRequiredGRFNumberIsLowerThan128ThenSmallGRFModeIsProgrammed_IsXeHpgCore, IGFX_DG2);
|
||||
@@ -11,7 +11,6 @@ if(TESTS_MTL)
|
||||
target_sources(neo_shared_tests PRIVATE
|
||||
${NEO_CORE_tests_xe_hpg_core_mtl_excludes}
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/compute_mode_tests_mtl.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/excludes_xe_hpg_core_mtl.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/hw_aot_config_tests_mtl.cpp
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/gfx_core_helper_tests_mtl.cpp
|
||||
|
||||
@@ -1,179 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2022-2023 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
*/
|
||||
|
||||
#include "shared/source/helpers/bit_helpers.h"
|
||||
#include "shared/source/helpers/ptr_math.h"
|
||||
#include "shared/source/xe_hpg_core/hw_cmds_xe_hpg_core_base.h"
|
||||
#include "shared/test/common/helpers/debug_manager_state_restore.h"
|
||||
#include "shared/test/common/helpers/engine_descriptor_helper.h"
|
||||
#include "shared/test/common/helpers/unit_test_helper.h"
|
||||
#include "shared/test/common/mocks/mock_allocation_properties.h"
|
||||
#include "shared/test/common/mocks/mock_device.h"
|
||||
#include "shared/test/common/mocks/mock_os_context.h"
|
||||
#include "shared/test/common/test_macros/header/per_product_test_definitions.h"
|
||||
#include "shared/test/unit_test/command_stream/compute_mode_tests.h"
|
||||
|
||||
#include "test_traits_common.h"
|
||||
|
||||
using namespace NEO;
|
||||
|
||||
using MtlComputeModeRequirements = ComputeModeRequirements;
|
||||
|
||||
MTLTEST_F(MtlComputeModeRequirements, givenFlushWithoutSharedHandlesWhenPreviouslyUsedThenPcAndSCMAreNotProgrammed) {
|
||||
setUpImpl<FamilyType>();
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto graphicAlloc = csr->getMemoryManager()->allocateGraphicsMemoryWithProperties(MockAllocationProperties{csr->getRootDeviceIndex(), MemoryConstants::pageSize});
|
||||
IndirectHeap stream(graphicAlloc);
|
||||
|
||||
makeResidentSharedAlloc();
|
||||
csr->flushTask(stream, 0, &stream, &stream, &stream, 0, flags, *device);
|
||||
EXPECT_TRUE(getCsrHw<FamilyType>()->getCsrRequestFlags()->hasSharedHandles);
|
||||
auto startOffset = getCsrHw<FamilyType>()->commandStream.getUsed();
|
||||
|
||||
csr->flushTask(stream, 0, &stream, &stream, &stream, 0, flags, *device);
|
||||
EXPECT_TRUE(getCsrHw<FamilyType>()->getCsrRequestFlags()->hasSharedHandles);
|
||||
|
||||
HardwareParse hwParser;
|
||||
hwParser.parseCommands<FamilyType>(getCsrHw<FamilyType>()->commandStream, startOffset);
|
||||
|
||||
EXPECT_EQ(0u, hwParser.cmdList.size());
|
||||
|
||||
csr->getMemoryManager()->freeGraphicsMemory(graphicAlloc);
|
||||
}
|
||||
|
||||
MTLTEST_F(MtlComputeModeRequirements, givenComputeModeProgrammingWhenLargeGrfModeChangeIsRequiredThenCorrectCommandsAreAdded) {
|
||||
setUpImpl<FamilyType>();
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto cmdsSize = sizeof(STATE_COMPUTE_MODE) + sizeof(PIPE_CONTROL);
|
||||
char buff[1024]{};
|
||||
LinearStream stream(buff, 1024);
|
||||
|
||||
auto expectedScmCmd = FamilyType::cmdInitStateComputeMode;
|
||||
auto expectedBitsMask = FamilyType::stateComputeModeLargeGrfModeMask;
|
||||
|
||||
expectedScmCmd.setLargeGrfMode(true);
|
||||
|
||||
overrideComputeModeRequest<FamilyType>(false, false, false, true, 256u);
|
||||
getCsrHw<FamilyType>()->programComputeMode(stream, flags, *defaultHwInfo);
|
||||
EXPECT_EQ(cmdsSize, stream.getUsed());
|
||||
|
||||
auto scmCmd = reinterpret_cast<STATE_COMPUTE_MODE *>(ptrOffset(stream.getCpuBase(), sizeof(PIPE_CONTROL)));
|
||||
EXPECT_TRUE(isValueSet(scmCmd->getMaskBits(), expectedBitsMask));
|
||||
expectedScmCmd.setMaskBits(scmCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, scmCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
|
||||
auto startOffset = stream.getUsed();
|
||||
|
||||
overrideComputeModeRequest<FamilyType>(false, false, false, true, 128u);
|
||||
getCsrHw<FamilyType>()->programComputeMode(stream, flags, *defaultHwInfo);
|
||||
EXPECT_EQ(cmdsSize * 2, stream.getUsed());
|
||||
|
||||
expectedScmCmd = FamilyType::cmdInitStateComputeMode;
|
||||
expectedScmCmd.setLargeGrfMode(false);
|
||||
scmCmd = reinterpret_cast<STATE_COMPUTE_MODE *>(ptrOffset(stream.getCpuBase(), sizeof(PIPE_CONTROL) + startOffset));
|
||||
EXPECT_TRUE(isValueSet(scmCmd->getMaskBits(), expectedBitsMask));
|
||||
expectedScmCmd.setMaskBits(scmCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, scmCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
}
|
||||
|
||||
MTLTEST_F(MtlComputeModeRequirements, GivenSingleCCSEnabledSetupThenCorrectCommandsAreAdded) {
|
||||
HardwareInfo hwInfo = *defaultHwInfo;
|
||||
hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 1;
|
||||
|
||||
setUpImpl<FamilyType>(&hwInfo);
|
||||
MockOsContext ccsOsContext(0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}));
|
||||
|
||||
getCsrHw<FamilyType>()->setupContext(ccsOsContext);
|
||||
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using FORCE_NON_COHERENT = typename STATE_COMPUTE_MODE::FORCE_NON_COHERENT;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto cmdsSize = sizeof(STATE_COMPUTE_MODE) + sizeof(PIPE_CONTROL);
|
||||
char buff[1024] = {0};
|
||||
LinearStream stream(buff, 1024);
|
||||
|
||||
auto expectedScmCmd = FamilyType::cmdInitStateComputeMode;
|
||||
overrideComputeModeRequest<FamilyType>(true, false, false, false);
|
||||
|
||||
auto retSize = getCsrHw<FamilyType>()->getCmdSizeForComputeMode();
|
||||
EXPECT_EQ(cmdsSize, retSize);
|
||||
|
||||
getCsrHw<FamilyType>()->programComputeMode(stream, flags, hwInfo);
|
||||
EXPECT_EQ(cmdsSize, stream.getUsed());
|
||||
|
||||
auto startOffset = getCsrHw<FamilyType>()->commandStream.getUsed();
|
||||
|
||||
HardwareParse hwParser;
|
||||
hwParser.parseCommands<FamilyType>(stream, startOffset);
|
||||
|
||||
auto pipeControlIterator = find<PIPE_CONTROL *>(hwParser.cmdList.begin(), hwParser.cmdList.end());
|
||||
auto pipeControlCmd = genCmdCast<PIPE_CONTROL *>(*pipeControlIterator);
|
||||
|
||||
EXPECT_TRUE(UnitTestHelper<FamilyType>::getPipeControlHdcPipelineFlush(*pipeControlCmd));
|
||||
EXPECT_TRUE(pipeControlCmd->getUnTypedDataPortCacheFlush());
|
||||
|
||||
EXPECT_FALSE(pipeControlCmd->getAmfsFlushEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getInstructionCacheInvalidateEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getTextureCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getConstantCacheInvalidationEnable());
|
||||
EXPECT_FALSE(pipeControlCmd->getStateCacheInvalidationEnable());
|
||||
|
||||
auto stateComputeModeCmd = reinterpret_cast<STATE_COMPUTE_MODE *>(ptrOffset(stream.getCpuBase(), sizeof(PIPE_CONTROL)));
|
||||
expectedScmCmd.setMaskBits(stateComputeModeCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, stateComputeModeCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
}
|
||||
|
||||
MTLTEST_F(MtlComputeModeRequirements, givenComputeModeProgrammingWhenRequiredGRFNumberIsLowerThan128ThenSmallGRFModeIsProgrammed) {
|
||||
setUpImpl<FamilyType>();
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto cmdsSize = sizeof(STATE_COMPUTE_MODE) + sizeof(PIPE_CONTROL);
|
||||
char buff[1024]{};
|
||||
LinearStream stream(buff, 1024);
|
||||
|
||||
auto expectedScmCmd = FamilyType::cmdInitStateComputeMode;
|
||||
expectedScmCmd.setLargeGrfMode(false);
|
||||
auto expectedBitsMask = FamilyType::stateComputeModeLargeGrfModeMask;
|
||||
|
||||
overrideComputeModeRequest<FamilyType>(false, false, false, true, 127u);
|
||||
getCsrHw<FamilyType>()->programComputeMode(stream, flags, *defaultHwInfo);
|
||||
EXPECT_EQ(cmdsSize, stream.getUsed());
|
||||
|
||||
auto scmCmd = reinterpret_cast<STATE_COMPUTE_MODE *>(ptrOffset(stream.getCpuBase(), sizeof(PIPE_CONTROL)));
|
||||
EXPECT_TRUE(isValueSet(scmCmd->getMaskBits(), expectedBitsMask));
|
||||
expectedScmCmd.setMaskBits(scmCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, scmCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
}
|
||||
|
||||
MTLTEST_F(MtlComputeModeRequirements, givenComputeModeProgrammingWhenRequiredGRFNumberIsGreaterThan128ThenLargeGRFModeIsProgrammed) {
|
||||
setUpImpl<FamilyType>();
|
||||
using STATE_COMPUTE_MODE = typename FamilyType::STATE_COMPUTE_MODE;
|
||||
using PIPE_CONTROL = typename FamilyType::PIPE_CONTROL;
|
||||
|
||||
auto cmdsSize = sizeof(STATE_COMPUTE_MODE) + sizeof(PIPE_CONTROL);
|
||||
char buff[1024]{};
|
||||
LinearStream stream(buff, 1024);
|
||||
|
||||
auto expectedScmCmd = FamilyType::cmdInitStateComputeMode;
|
||||
expectedScmCmd.setLargeGrfMode(true);
|
||||
auto expectedBitsMask = FamilyType::stateComputeModeLargeGrfModeMask;
|
||||
|
||||
overrideComputeModeRequest<FamilyType>(false, false, false, true, 256u);
|
||||
getCsrHw<FamilyType>()->programComputeMode(stream, flags, *defaultHwInfo);
|
||||
EXPECT_EQ(cmdsSize, stream.getUsed());
|
||||
|
||||
auto scmCmd = reinterpret_cast<STATE_COMPUTE_MODE *>(ptrOffset(stream.getCpuBase(), sizeof(PIPE_CONTROL)));
|
||||
EXPECT_TRUE(isValueSet(scmCmd->getMaskBits(), expectedBitsMask));
|
||||
expectedScmCmd.setMaskBits(scmCmd->getMaskBits());
|
||||
EXPECT_TRUE(memcmp(&expectedScmCmd, scmCmd, sizeof(STATE_COMPUTE_MODE)) == 0);
|
||||
}
|
||||
Reference in New Issue
Block a user