mirror of
https://github.com/intel/compute-runtime.git
synced 2025-12-31 12:11:31 +08:00
fix: correct preemption surface size when getting wmtp sip from igc
when SIP kernel is taken from IGC then state save area header describes preemption surface size required for the SIP kernel Related-To: NEO-12826 Signed-off-by: Mateusz Jablonski <mateusz.jablonski@intel.com>
This commit is contained in:
committed by
Compute-Runtime-Automation
parent
9e03c52e71
commit
da8ce85f0a
@@ -73,7 +73,7 @@ const SipKernel &BuiltIns::getSipKernel(SipKernelType type, Device &device) {
|
||||
sipBuiltIn.first->parseBinaryForContextId();
|
||||
}
|
||||
|
||||
if (debugManager.flags.ForceSipClass.get() == static_cast<uint32_t>(SipClassType::builtins) && type == SipKernelType::csr) {
|
||||
if (type == SipKernelType::csr) {
|
||||
rootDeviceEnvironment.getMutableHardwareInfo()->capabilityTable.requiredPreemptionSurfaceSize = sipBuiltIn.first->getStateSaveAreaSize(&device);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -26,9 +26,6 @@ void ProductHelper::setupPreemptionSurfaceSize(HardwareInfo &hwInfo, const RootD
|
||||
hwInfo.gtSystemInfo.CsrSizeInMb = static_cast<uint32_t>(debugManager.flags.OverridePreemptionSurfaceSizeInMb.get());
|
||||
}
|
||||
|
||||
if (debugManager.flags.ForceSipClass.get() == static_cast<uint32_t>(SipClassType::builtins)) {
|
||||
return;
|
||||
}
|
||||
auto &gfxCoreHelper = rootDeviceEnvironment.getHelper<GfxCoreHelper>();
|
||||
|
||||
hwInfo.capabilityTable.requiredPreemptionSurfaceSize = hwInfo.gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte;
|
||||
|
||||
@@ -545,12 +545,15 @@ bool MockIgcOclDeviceCtx::GetSystemRoutine(IGC::SystemRoutineType::SystemRoutine
|
||||
|
||||
if (debugVars.binaryToReturnSize > 0 && debugVars.binaryToReturn != nullptr) {
|
||||
outSystemRoutineBuffer->PushBackRawBytes(debugVars.binaryToReturn, debugVars.binaryToReturnSize);
|
||||
stateSaveAreaHeaderInit->PushBackRawBytes(mockData2, 64);
|
||||
return true;
|
||||
} else {
|
||||
outSystemRoutineBuffer->PushBackRawBytes(mockData1, 64);
|
||||
}
|
||||
|
||||
outSystemRoutineBuffer->PushBackRawBytes(mockData1, 64);
|
||||
stateSaveAreaHeaderInit->PushBackRawBytes(mockData2, 64);
|
||||
if (debugVars.stateSaveAreaHeaderToReturnSize > 0 && debugVars.stateSaveAreaHeaderToReturn != nullptr) {
|
||||
stateSaveAreaHeaderInit->PushBackRawBytes(debugVars.stateSaveAreaHeaderToReturn, debugVars.stateSaveAreaHeaderToReturnSize);
|
||||
} else {
|
||||
stateSaveAreaHeaderInit->PushBackRawBytes(mockData2, 64);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (C) 2018-2023 Intel Corporation
|
||||
* Copyright (C) 2018-2024 Intel Corporation
|
||||
*
|
||||
* SPDX-License-Identifier: MIT
|
||||
*
|
||||
@@ -37,6 +37,8 @@ struct MockCompilerDebugVars {
|
||||
size_t debugDataToReturnSize = 0;
|
||||
void *binaryToReturn = nullptr;
|
||||
size_t binaryToReturnSize = 0;
|
||||
void *stateSaveAreaHeaderToReturn = nullptr;
|
||||
size_t stateSaveAreaHeaderToReturnSize = 0;
|
||||
bool failCreatePlatformInterface = false;
|
||||
bool failCreateGtSystemInfoInterface = false;
|
||||
bool failCreateIgcFeWaInterface = false;
|
||||
|
||||
@@ -409,6 +409,7 @@ TEST_F(StateSaveAreaSipTest, givenCorrectStateSaveAreaHeaderWhenGetStateSaveArea
|
||||
auto stateSaveSize = 0x1800u * numSlices * 8 * 7 + sizeof(NEO::StateSaveAreaHeader);
|
||||
EXPECT_EQ(alignUp(fifoSize + stateSaveSize, MemoryConstants::pageSize), SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
|
||||
}
|
||||
|
||||
TEST_F(StateSaveAreaSipTest, givenStateSaveAreaHeaderVersion4WhenGetStateSaveAreaSizeCalledThenTotalWmtpDataSizeIsReturned) {
|
||||
VariableBackup<bool> backupSipInitType(&MockSipData::useMockSip, true);
|
||||
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(4);
|
||||
@@ -417,6 +418,23 @@ TEST_F(StateSaveAreaSipTest, givenStateSaveAreaHeaderVersion4WhenGetStateSaveAre
|
||||
EXPECT_EQ(MockSipData::totalWmtpDataSize, SipKernel::getSipKernel(*pDevice, nullptr).getStateSaveAreaSize(pDevice));
|
||||
}
|
||||
|
||||
TEST_F(StateSaveAreaSipTest, givenStateSaveAreaHeaderVersion4WhenGetSipKernelIsCalledForCsrSipThenPreemptionSurfaceSizeIsUpdated) {
|
||||
auto stateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(4);
|
||||
MockCompilerDebugVars debugVars = {};
|
||||
debugVars.stateSaveAreaHeaderToReturn = stateSaveAreaHeader.data();
|
||||
debugVars.stateSaveAreaHeaderToReturnSize = stateSaveAreaHeader.size();
|
||||
gEnvironment->igcPushDebugVars(debugVars);
|
||||
std::unique_ptr<void, void (*)(void *)> igcDebugVarsAutoPop{&gEnvironment, [](void *) -> void { gEnvironment->igcPopDebugVars(); }};
|
||||
|
||||
auto hwInfo = pDevice->getRootDeviceEnvironment().getMutableHardwareInfo();
|
||||
hwInfo->capabilityTable.requiredPreemptionSurfaceSize = static_cast<size_t>(MockSipData::totalWmtpDataSize * 4);
|
||||
EXPECT_NE(hwInfo->capabilityTable.requiredPreemptionSurfaceSize, MockSipData::totalWmtpDataSize);
|
||||
|
||||
auto builtins = pDevice->getBuiltIns();
|
||||
EXPECT_EQ(MockSipData::totalWmtpDataSize, builtins->getSipKernel(SipKernelType::csr, *pDevice).getStateSaveAreaSize(pDevice));
|
||||
EXPECT_EQ(hwInfo->capabilityTable.requiredPreemptionSurfaceSize, MockSipData::totalWmtpDataSize);
|
||||
}
|
||||
|
||||
TEST_F(StateSaveAreaSipTest, givenNotsupportedStateSaveAreaHeaderVersionWhenGetStateSaveAreaSizeCalledThenNoSizeIsReturned) {
|
||||
VariableBackup<bool> backupSipInitType(&MockSipData::useMockSip, true);
|
||||
MockSipData::mockSipKernel->mockStateSaveAreaHeader = MockSipData::createStateSaveAreaHeader(1);
|
||||
|
||||
@@ -1011,18 +1011,6 @@ HWTEST2_F(ProductHelperTest, givenPatIndexWhenCheckIsCoherentAllocationThenRetur
|
||||
}
|
||||
}
|
||||
|
||||
TEST(ProductHelperPreemptionSettingTest, whenSipClassIsForcedToBuiltinThenRequiredPreemptionSizeIsNotAdjusted) {
|
||||
MockExecutionEnvironment executionEnvironment{};
|
||||
DebugManagerStateRestore restorer;
|
||||
debugManager.flags.ForceSipClass.set(static_cast<int32_t>(SipClassType::builtins));
|
||||
auto hwInfo = *defaultHwInfo;
|
||||
hwInfo.gtSystemInfo.CsrSizeInMb = 1;
|
||||
constexpr uint32_t initialPreemptionSurfaceSize = 0xdeadbeef;
|
||||
hwInfo.capabilityTable.requiredPreemptionSurfaceSize = initialPreemptionSurfaceSize;
|
||||
MockProductHelper::setupPreemptionSurfaceSize(hwInfo, *executionEnvironment.rootDeviceEnvironments[0]);
|
||||
EXPECT_EQ(initialPreemptionSurfaceSize, hwInfo.capabilityTable.requiredPreemptionSurfaceSize);
|
||||
}
|
||||
|
||||
HWTEST2_F(ProductHelperTest, givenProductHelperWhenItsPreXe2ThenCacheLineSizeIs64Bytes, IsAtMostPVC) {
|
||||
EXPECT_EQ(productHelper->getCacheLineSize(), 64u);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user