/* * Copyright (C) 2018-2024 Intel Corporation * * SPDX-License-Identifier: MIT * */ #include "shared/source/command_stream/linear_stream.h" #include "shared/source/device/device_info.h" #include "shared/source/helpers/hw_info.h" #include "shared/test/common/cmd_parse/gen_cmd_parse.h" #include "shared/test/common/cmd_parse/hw_parse.h" #include "gtest/gtest.h" namespace NEO { template uint32_t UnitTestHelper::getTdCtlRegisterOffset() { return 0xe400; } template bool UnitTestHelper::isPageTableManagerSupported(const HardwareInfo &hwInfo) { return false; } template bool UnitTestHelper::isPipeControlWArequired(const HardwareInfo &hwInfo) { return false; } template const bool UnitTestHelper::useFullRowForLocalIdsGeneration = false; template const bool UnitTestHelper::additionalMiFlushDwRequired = false; template inline uint64_t UnitTestHelper::getPipeControlPostSyncAddress(const typename GfxFamily::PIPE_CONTROL &pipeControl) { uint64_t gpuAddress = pipeControl.getAddress(); uint64_t gpuAddressHigh = pipeControl.getAddressHigh(); return (gpuAddressHigh << 32) | gpuAddress; } template void UnitTestHelper::validateSbaMocs(uint32_t expectedMocs, CommandStreamReceiver &csr) { using STATE_BASE_ADDRESS = typename GfxFamily::STATE_BASE_ADDRESS; HardwareParse hwParse; hwParse.parseCommands(csr.getCS(0), 0); auto itorCmd = reverseFind(hwParse.cmdList.rbegin(), hwParse.cmdList.rend()); EXPECT_NE(hwParse.cmdList.rend(), itorCmd); auto sba = genCmdCast(*itorCmd); EXPECT_NE(nullptr, sba); auto mocs = sba->getStatelessDataPortAccessMemoryObjectControlState(); EXPECT_EQ(expectedMocs, mocs); } template bool UnitTestHelper::getDisableFusionStateFromFrontEndCommand(const typename GfxFamily::FrontEndStateCommand &feCmd) { return false; } template bool UnitTestHelper::getComputeDispatchAllWalkerFromFrontEndCommand(const typename GfxFamily::FrontEndStateCommand &feCmd) { return false; } template bool UnitTestHelper::expectNullDsh(const DeviceInfo &deviceInfo) { if constexpr (GfxFamily::supportsSampler) { return !deviceInfo.imageSupport; } return true; } template bool UnitTestHelper::findStateCacheFlushPipeControl(CommandStreamReceiver &csr, LinearStream &csrStream) { using PIPE_CONTROL = typename GfxFamily::PIPE_CONTROL; HardwareParse hwParserCsr; hwParserCsr.parsePipeControl = true; hwParserCsr.parseCommands(csrStream, 0); hwParserCsr.findHardwareCommands(); bool stateCacheFlushFound = false; auto itorPipeControl = hwParserCsr.pipeControlList.begin(); while (itorPipeControl != hwParserCsr.pipeControlList.end()) { auto pipeControl = reinterpret_cast(*itorPipeControl); if (pipeControl->getRenderTargetCacheFlushEnable() && pipeControl->getStateCacheInvalidationEnable() && pipeControl->getTextureCacheInvalidationEnable() && ((csr.isTlbFlushRequiredForStateCacheFlush() && pipeControl->getTlbInvalidate()) || (!csr.isTlbFlushRequiredForStateCacheFlush() && !pipeControl->getTlbInvalidate()))) { stateCacheFlushFound = true; break; } itorPipeControl++; } return stateCacheFlushFound; } template uint32_t UnitTestHelper::getProgrammedGrfValue(CommandStreamReceiver &csr, LinearStream &linearStream) { return 0u; } template uint32_t UnitTestHelper::getMiLoadRegisterImmProgrammedCmdsCount(bool debuggingEnabled) { return (debuggingEnabled ? 2u : 0u); } } // namespace NEO