Add sip kernel as hexadecimal array header
Signed-off-by: Kamil Kopryk <kamil.kopryk@intel.com> Related-To: NEO-5777
This commit is contained in:
parent
c051495eb8
commit
a203cd2863
|
@ -10,6 +10,7 @@
|
||||||
#include "shared/test/common/mocks/mock_compilers.h"
|
#include "shared/test/common/mocks/mock_compilers.h"
|
||||||
#include "shared/test/common/mocks/mock_device.h"
|
#include "shared/test/common/mocks/mock_device.h"
|
||||||
#include "shared/test/common/mocks/mock_os_library.h"
|
#include "shared/test/common/mocks/mock_os_library.h"
|
||||||
|
#include "shared/test/common/mocks/mock_sip.h"
|
||||||
|
|
||||||
#include "opencl/test/unit_test/mocks/mock_source_level_debugger.h"
|
#include "opencl/test/unit_test/mocks/mock_source_level_debugger.h"
|
||||||
|
|
||||||
|
@ -39,6 +40,11 @@ struct ActiveDebuggerFixture {
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
|
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
|
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
|
||||||
|
|
||||||
|
auto isHexadecimalArrayPrefered = HwHelper::get(hwInfo.platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
|
||||||
|
if (isHexadecimalArrayPrefered) {
|
||||||
|
MockSipData::useMockSip = true;
|
||||||
|
}
|
||||||
|
|
||||||
debugger = new MockActiveSourceLevelDebugger(new MockOsLibrary);
|
debugger = new MockActiveSourceLevelDebugger(new MockOsLibrary);
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(debugger);
|
executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(debugger);
|
||||||
executionEnvironment->initializeMemoryManager();
|
executionEnvironment->initializeMemoryManager();
|
||||||
|
@ -70,6 +76,9 @@ struct ActiveDebuggerFixture {
|
||||||
L0::Device *deviceL0;
|
L0::Device *deviceL0;
|
||||||
MockActiveSourceLevelDebugger *debugger = nullptr;
|
MockActiveSourceLevelDebugger *debugger = nullptr;
|
||||||
HardwareInfo hwInfo;
|
HardwareInfo hwInfo;
|
||||||
|
VariableBackup<bool> mockSipCalled{&NEO::MockSipData::called};
|
||||||
|
VariableBackup<NEO::SipKernelType> mockSipCalledType{&NEO::MockSipData::calledType};
|
||||||
|
VariableBackup<bool> backupSipInitType{&MockSipData::useMockSip};
|
||||||
};
|
};
|
||||||
} // namespace ult
|
} // namespace ult
|
||||||
} // namespace L0
|
} // namespace L0
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
#include "shared/test/common/mocks/mock_compilers.h"
|
#include "shared/test/common/mocks/mock_compilers.h"
|
||||||
#include "shared/test/common/mocks/mock_device.h"
|
#include "shared/test/common/mocks/mock_device.h"
|
||||||
#include "shared/test/common/mocks/mock_memory_operations_handler.h"
|
#include "shared/test/common/mocks/mock_memory_operations_handler.h"
|
||||||
|
#include "shared/test/common/mocks/mock_sip.h"
|
||||||
|
|
||||||
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
|
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
|
||||||
#include "level_zero/core/test/unit_tests/mocks/mock_built_ins.h"
|
#include "level_zero/core/test/unit_tests/mocks/mock_built_ins.h"
|
||||||
|
@ -30,6 +31,12 @@ struct L0DebuggerFixture {
|
||||||
|
|
||||||
hwInfo = *NEO::defaultHwInfo.get();
|
hwInfo = *NEO::defaultHwInfo.get();
|
||||||
hwInfo.featureTable.ftrLocalMemory = true;
|
hwInfo.featureTable.ftrLocalMemory = true;
|
||||||
|
|
||||||
|
auto isHexadecimalArrayPrefered = HwHelper::get(hwInfo.platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
|
||||||
|
if (isHexadecimalArrayPrefered) {
|
||||||
|
MockSipData::useMockSip = true;
|
||||||
|
}
|
||||||
|
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
|
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
|
||||||
executionEnvironment->initializeMemoryManager();
|
executionEnvironment->initializeMemoryManager();
|
||||||
|
|
||||||
|
@ -52,6 +59,9 @@ struct L0DebuggerFixture {
|
||||||
L0::Device *device = nullptr;
|
L0::Device *device = nullptr;
|
||||||
NEO::HardwareInfo hwInfo;
|
NEO::HardwareInfo hwInfo;
|
||||||
MockMemoryOperations *memoryOperationsHandler = nullptr;
|
MockMemoryOperations *memoryOperationsHandler = nullptr;
|
||||||
|
VariableBackup<bool> mockSipCalled{&NEO::MockSipData::called};
|
||||||
|
VariableBackup<NEO::SipKernelType> mockSipCalledType{&NEO::MockSipData::calledType};
|
||||||
|
VariableBackup<bool> backupSipInitType{&MockSipData::useMockSip};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct L0DebuggerHwFixture : public L0DebuggerFixture {
|
struct L0DebuggerHwFixture : public L0DebuggerFixture {
|
||||||
|
|
|
@ -53,7 +53,11 @@ TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingSipAllocationThenValidSipTypeIs
|
||||||
ASSERT_NE(nullptr, systemRoutine);
|
ASSERT_NE(nullptr, systemRoutine);
|
||||||
|
|
||||||
auto sipType = SipKernel::getSipKernelType(*neoDevice);
|
auto sipType = SipKernel::getSipKernelType(*neoDevice);
|
||||||
auto expectedSipAllocation = neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getSipAllocation();
|
auto isHexadecimalArrayPreferred = HwHelper::get(hwInfo.platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
|
||||||
|
|
||||||
|
auto expectedSipAllocation = isHexadecimalArrayPreferred
|
||||||
|
? NEO::MockSipData::mockSipKernel->getSipAllocation()
|
||||||
|
: neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getSipAllocation();
|
||||||
|
|
||||||
EXPECT_EQ(expectedSipAllocation, systemRoutine);
|
EXPECT_EQ(expectedSipAllocation, systemRoutine);
|
||||||
}
|
}
|
||||||
|
@ -69,9 +73,13 @@ TEST_F(L0DebuggerTest, givenL0DebuggerWhenGettingStateSaveAreaHeaderThenValidSip
|
||||||
|
|
||||||
TEST(Debugger, givenL0DebuggerOFFWhenGettingStateSaveAreaHeaderThenValidSipTypeIsReturned) {
|
TEST(Debugger, givenL0DebuggerOFFWhenGettingStateSaveAreaHeaderThenValidSipTypeIsReturned) {
|
||||||
auto executionEnvironment = new NEO::ExecutionEnvironment();
|
auto executionEnvironment = new NEO::ExecutionEnvironment();
|
||||||
auto mockBuiltIns = new MockBuiltins();
|
|
||||||
executionEnvironment->prepareRootDeviceEnvironments(1);
|
executionEnvironment->prepareRootDeviceEnvironments(1);
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
|
|
||||||
|
auto isHexadecimalArrayPreferred = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred();
|
||||||
|
if (!isHexadecimalArrayPreferred) {
|
||||||
|
auto mockBuiltIns = new MockBuiltins();
|
||||||
|
executionEnvironment->rootDeviceEnvironments[0]->builtins.reset(mockBuiltIns);
|
||||||
|
}
|
||||||
auto hwInfo = *NEO::defaultHwInfo.get();
|
auto hwInfo = *NEO::defaultHwInfo.get();
|
||||||
hwInfo.featureTable.ftrLocalMemory = true;
|
hwInfo.featureTable.ftrLocalMemory = true;
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
|
executionEnvironment->rootDeviceEnvironments[0]->setHwInfo(&hwInfo);
|
||||||
|
@ -84,13 +92,20 @@ TEST(Debugger, givenL0DebuggerOFFWhenGettingStateSaveAreaHeaderThenValidSipTypeI
|
||||||
driverHandle->enableProgramDebugging = false;
|
driverHandle->enableProgramDebugging = false;
|
||||||
|
|
||||||
driverHandle->initialize(std::move(devices));
|
driverHandle->initialize(std::move(devices));
|
||||||
|
auto sipType = SipKernel::getSipKernelType(*neoDevice);
|
||||||
|
|
||||||
|
if (isHexadecimalArrayPreferred) {
|
||||||
|
SipKernel::initSipKernel(sipType, *neoDevice);
|
||||||
|
}
|
||||||
auto &stateSaveAreaHeader = SipKernel::getSipKernel(*neoDevice).getStateSaveAreaHeader();
|
auto &stateSaveAreaHeader = SipKernel::getSipKernel(*neoDevice).getStateSaveAreaHeader();
|
||||||
|
|
||||||
auto sipType = SipKernel::getSipKernelType(*neoDevice);
|
if (isHexadecimalArrayPreferred) {
|
||||||
auto &expectedStateSaveAreaHeader = neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getStateSaveAreaHeader();
|
auto &expectedStateSaveAreaHeader = neoDevice->getRootDeviceEnvironment().sipKernels[static_cast<uint32_t>(sipType)]->getStateSaveAreaHeader();
|
||||||
|
EXPECT_EQ(expectedStateSaveAreaHeader, stateSaveAreaHeader);
|
||||||
EXPECT_EQ(expectedStateSaveAreaHeader, stateSaveAreaHeader);
|
} else {
|
||||||
|
auto &expectedStateSaveAreaHeader = neoDevice->getBuiltIns()->getSipKernel(sipType, *neoDevice).getStateSaveAreaHeader();
|
||||||
|
EXPECT_EQ(expectedStateSaveAreaHeader, stateSaveAreaHeader);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
HWTEST_F(L0DebuggerTest, givenL0DebuggerWhenCreatedThenPerContextSbaTrackingBuffersAreAllocated) {
|
HWTEST_F(L0DebuggerTest, givenL0DebuggerWhenCreatedThenPerContextSbaTrackingBuffersAreAllocated) {
|
||||||
|
@ -195,7 +210,7 @@ HWTEST_F(L0DebuggerTest, givenDebuggingEnabledWhenCommandListIsExecutedThenValid
|
||||||
|
|
||||||
auto systemRoutine = SipKernel::getSipKernel(*neoDevice).getSipAllocation();
|
auto systemRoutine = SipKernel::getSipKernel(*neoDevice).getSipAllocation();
|
||||||
ASSERT_NE(nullptr, systemRoutine);
|
ASSERT_NE(nullptr, systemRoutine);
|
||||||
EXPECT_EQ(systemRoutine->getGpuAddress(), stateSip->getSystemInstructionPointer());
|
EXPECT_EQ(systemRoutine->getGpuAddressToPatch(), stateSip->getSystemInstructionPointer());
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto i = 0u; i < numCommandLists; i++) {
|
for (auto i = 0u; i < numCommandLists; i++) {
|
||||||
|
|
|
@ -84,8 +84,9 @@ struct OOQueueHwTest : public ClDeviceFixture,
|
||||||
HWTEST_F(CommandQueueHwTest, WhenConstructingTwoCommandQueuesThenOnlyOneDebugSurfaceIsAllocated) {
|
HWTEST_F(CommandQueueHwTest, WhenConstructingTwoCommandQueuesThenOnlyOneDebugSurfaceIsAllocated) {
|
||||||
ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment();
|
ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment();
|
||||||
executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(new MockActiveSourceLevelDebugger(new MockOsLibrary));
|
executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(new MockActiveSourceLevelDebugger(new MockOsLibrary));
|
||||||
|
|
||||||
auto device = std::make_unique<MockClDevice>(MockDevice::create<MockDeviceWithDebuggerActive>(executionEnvironment, 0u));
|
auto device = std::make_unique<MockClDevice>(MockDevice::create<MockDeviceWithDebuggerActive>(executionEnvironment, 0u));
|
||||||
|
auto sipType = SipKernel::getSipKernelType(device->getDevice());
|
||||||
|
SipKernel::initSipKernel(sipType, device->getDevice());
|
||||||
|
|
||||||
MockCommandQueueHw<FamilyType> mockCmdQueueHw1(context, device.get(), nullptr);
|
MockCommandQueueHw<FamilyType> mockCmdQueueHw1(context, device.get(), nullptr);
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,9 @@ class EnqueueDebugKernelTest : public ProgramSimpleFixture,
|
||||||
device = pClDevice;
|
device = pClDevice;
|
||||||
pDevice->executionEnvironment->rootDeviceEnvironments[pDevice->getRootDeviceIndex()]->debugger.reset(new SourceLevelDebugger(nullptr));
|
pDevice->executionEnvironment->rootDeviceEnvironments[pDevice->getRootDeviceIndex()]->debugger.reset(new SourceLevelDebugger(nullptr));
|
||||||
|
|
||||||
|
auto sipType = SipKernel::getSipKernelType(*pDevice);
|
||||||
|
SipKernel::initSipKernel(sipType, *pDevice);
|
||||||
|
|
||||||
if (pDevice->getHardwareInfo().platform.eRenderCoreFamily >= IGFX_GEN9_CORE) {
|
if (pDevice->getHardwareInfo().platform.eRenderCoreFamily >= IGFX_GEN9_CORE) {
|
||||||
pDevice->deviceInfo.debuggerActive = true;
|
pDevice->deviceInfo.debuggerActive = true;
|
||||||
std::string filename;
|
std::string filename;
|
||||||
|
|
|
@ -188,6 +188,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInBatchingModeAndMidThread
|
||||||
|
|
||||||
DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
||||||
dispatchFlags.preemptionMode = PreemptionMode::MidThread;
|
dispatchFlags.preemptionMode = PreemptionMode::MidThread;
|
||||||
|
auto sipType = SipKernel::getSipKernelType(*pDevice);
|
||||||
|
SipKernel::initSipKernel(sipType, *pDevice);
|
||||||
|
|
||||||
mockCsr.flushTask(commandStream,
|
mockCsr.flushTask(commandStream,
|
||||||
0,
|
0,
|
||||||
|
@ -219,6 +221,8 @@ HWTEST_F(CommandStreamReceiverFlushTaskTests, givenCsrInDefaultModeAndMidThreadP
|
||||||
|
|
||||||
DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
DispatchFlags dispatchFlags = DispatchFlagsHelper::createDefaultDispatchFlags();
|
||||||
dispatchFlags.preemptionMode = PreemptionMode::MidThread;
|
dispatchFlags.preemptionMode = PreemptionMode::MidThread;
|
||||||
|
auto sipType = SipKernel::getSipKernelType(*pDevice);
|
||||||
|
SipKernel::initSipKernel(sipType, *pDevice);
|
||||||
|
|
||||||
mockCsr->flushTask(commandStream,
|
mockCsr->flushTask(commandStream,
|
||||||
0,
|
0,
|
||||||
|
|
|
@ -1307,6 +1307,30 @@ HWTEST_F(HwHelperTest, whenSetRenderCompressedFlagThenProperFlagSet) {
|
||||||
EXPECT_EQ(0u, gmm->resourceParams.Flags.Info.RenderCompressed);
|
EXPECT_EQ(0u, gmm->resourceParams.Flags.Info.RenderCompressed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HWTEST_F(HwHelperTest, whenAdjustPreemptionSurfaceSizeIsCalledThenCsrSizeDoesntChange) {
|
||||||
|
auto &hwHelper = HwHelper::get(renderCoreFamily);
|
||||||
|
size_t csrSize = 1024;
|
||||||
|
size_t oldCsrSize = csrSize;
|
||||||
|
hwHelper.adjustPreemptionSurfaceSize(csrSize);
|
||||||
|
EXPECT_EQ(oldCsrSize, csrSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
HWTEST_F(HwHelperTest, whenSetSipKernelDataIsCalledThenSipKernelDataDoesntChange) {
|
||||||
|
auto &hwHelper = HwHelper::get(renderCoreFamily);
|
||||||
|
uint32_t *sipKernelBinary = nullptr;
|
||||||
|
uint32_t *oldSipKernelBinary = sipKernelBinary;
|
||||||
|
size_t kernelBinarySize = 1024;
|
||||||
|
size_t oldKernelBinarySize = kernelBinarySize;
|
||||||
|
hwHelper.setSipKernelData(sipKernelBinary, kernelBinarySize);
|
||||||
|
EXPECT_EQ(oldKernelBinarySize, kernelBinarySize);
|
||||||
|
EXPECT_EQ(oldSipKernelBinary, sipKernelBinary);
|
||||||
|
}
|
||||||
|
|
||||||
|
HWTEST_F(HwHelperTest, whenIsSipKernelAsHexadecimalArrayPreferredIsCalledThenReturnFalse) {
|
||||||
|
auto &hwHelper = HwHelper::get(renderCoreFamily);
|
||||||
|
EXPECT_FALSE(hwHelper.isSipKernelAsHexadecimalArrayPreferred());
|
||||||
|
}
|
||||||
|
|
||||||
using isXeHpCoreOrBelow = IsAtMostProduct<IGFX_XE_HP_SDV>;
|
using isXeHpCoreOrBelow = IsAtMostProduct<IGFX_XE_HP_SDV>;
|
||||||
HWTEST2_F(HwHelperTest, givenXeHPAndBelowPlatformWhenCheckingIfAdditionalPipeControlArgsAreRequiredThenReturnFalse, isXeHpCoreOrBelow) {
|
HWTEST2_F(HwHelperTest, givenXeHPAndBelowPlatformWhenCheckingIfAdditionalPipeControlArgsAreRequiredThenReturnFalse, isXeHpCoreOrBelow) {
|
||||||
const auto &hwHelper = HwHelper::get(renderCoreFamily);
|
const auto &hwHelper = HwHelper::get(renderCoreFamily);
|
||||||
|
|
|
@ -176,7 +176,11 @@ TEST_F(DeviceFactoryTest, givenPointerToHwInfoWhenGetDevicedCalledThenRequiedSur
|
||||||
ASSERT_TRUE(success);
|
ASSERT_TRUE(success);
|
||||||
auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo();
|
auto hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo();
|
||||||
|
|
||||||
EXPECT_EQ(hwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte, hwInfo->capabilityTable.requiredPreemptionSurfaceSize);
|
const auto &hwHelper = HwHelper::get(hwInfo->platform.eRenderCoreFamily);
|
||||||
|
auto expextedSize = static_cast<size_t>(hwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte);
|
||||||
|
hwHelper.adjustPreemptionSurfaceSize(expextedSize);
|
||||||
|
|
||||||
|
EXPECT_EQ(expextedSize, hwInfo->capabilityTable.requiredPreemptionSurfaceSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(DeviceFactoryTest, givenCreateMultipleRootDevicesDebugFlagWhenPrepareDeviceEnvironmentsIsCalledThenNumberOfReturnedDevicesIsEqualToDebugVariable) {
|
TEST_F(DeviceFactoryTest, givenCreateMultipleRootDevicesDebugFlagWhenPrepareDeviceEnvironmentsIsCalledThenNumberOfReturnedDevicesIsEqualToDebugVariable) {
|
||||||
|
|
|
@ -449,7 +449,9 @@ TEST_F(HwInfoConfigTestLinuxDummy, givenPointerToHwInfoWhenConfigureHwInfoCalled
|
||||||
EXPECT_EQ(MemoryConstants::pageSize, pInHwInfo.capabilityTable.requiredPreemptionSurfaceSize);
|
EXPECT_EQ(MemoryConstants::pageSize, pInHwInfo.capabilityTable.requiredPreemptionSurfaceSize);
|
||||||
int ret = hwConfig.configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
|
int ret = hwConfig.configureHwInfoDrm(&pInHwInfo, &outHwInfo, osInterface);
|
||||||
EXPECT_EQ(0, ret);
|
EXPECT_EQ(0, ret);
|
||||||
EXPECT_EQ(outHwInfo.gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte, outHwInfo.capabilityTable.requiredPreemptionSurfaceSize);
|
auto expectedSize = static_cast<size_t>(outHwInfo.gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte);
|
||||||
|
HwHelper::get(outHwInfo.platform.eRenderCoreFamily).adjustPreemptionSurfaceSize(expectedSize);
|
||||||
|
EXPECT_EQ(expectedSize, outHwInfo.capabilityTable.requiredPreemptionSurfaceSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(HwInfoConfigTestLinuxDummy, givenInstrumentationForHardwareIsEnabledOrDisabledWhenConfiguringHwInfoThenOverrideItUsingHaveInstrumentation) {
|
TEST_F(HwInfoConfigTestLinuxDummy, givenInstrumentationForHardwareIsEnabledOrDisabledWhenConfiguringHwInfoThenOverrideItUsingHaveInstrumentation) {
|
||||||
|
|
|
@ -22,6 +22,8 @@
|
||||||
HWTEST_F(CommandStreamReceiverWithActiveDebuggerTest, givenCsrWithActiveDebuggerAndDisabledPreemptionWhenFlushTaskIsCalledThenSipKernelIsMadeResident) {
|
HWTEST_F(CommandStreamReceiverWithActiveDebuggerTest, givenCsrWithActiveDebuggerAndDisabledPreemptionWhenFlushTaskIsCalledThenSipKernelIsMadeResident) {
|
||||||
|
|
||||||
auto mockCsr = createCSR<FamilyType>();
|
auto mockCsr = createCSR<FamilyType>();
|
||||||
|
auto sipType = SipKernel::getSipKernelType(device->getDevice());
|
||||||
|
SipKernel::initSipKernel(sipType, device->getDevice());
|
||||||
|
|
||||||
CommandQueueHw<FamilyType> commandQueue(nullptr, device.get(), 0, false);
|
CommandQueueHw<FamilyType> commandQueue(nullptr, device.get(), 0, false);
|
||||||
auto &commandStream = commandQueue.getCS(4096u);
|
auto &commandStream = commandQueue.getCS(4096u);
|
||||||
|
|
|
@ -111,6 +111,38 @@ bool SipKernel::initRawBinaryFromFileKernel(SipKernelType type, Device &device,
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool SipKernel::initHexadecimalArraySipKernel(SipKernelType type, Device &device) {
|
||||||
|
uint32_t *sipKernelBinary = nullptr;
|
||||||
|
size_t kernelBinarySize = 0u;
|
||||||
|
auto &hwInfo = device.getHardwareInfo();
|
||||||
|
auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily);
|
||||||
|
hwHelper.setSipKernelData(sipKernelBinary, kernelBinarySize);
|
||||||
|
|
||||||
|
uint32_t sipIndex = static_cast<uint32_t>(type);
|
||||||
|
uint32_t rootDeviceIndex = device.getRootDeviceIndex();
|
||||||
|
if (device.getExecutionEnvironment()->rootDeviceEnvironments[rootDeviceIndex]->sipKernels[sipIndex].get() != nullptr) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
const auto allocType = GraphicsAllocation::AllocationType::KERNEL_ISA_INTERNAL;
|
||||||
|
AllocationProperties properties = {rootDeviceIndex, kernelBinarySize, allocType, device.getDeviceBitfield()};
|
||||||
|
properties.flags.use32BitFrontWindow = false;
|
||||||
|
|
||||||
|
auto sipAllocation = device.getMemoryManager()->allocateGraphicsMemoryWithProperties(properties);
|
||||||
|
if (sipAllocation == nullptr) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
MemoryTransferHelper::transferMemoryToAllocation(hwHelper.isBlitCopyRequiredForLocalMemory(hwInfo, *sipAllocation),
|
||||||
|
device, sipAllocation, 0, sipKernelBinary,
|
||||||
|
kernelBinarySize);
|
||||||
|
|
||||||
|
std::vector<char> emptyStateSaveAreaHeader;
|
||||||
|
device.getExecutionEnvironment()->rootDeviceEnvironments[rootDeviceIndex]->sipKernels[sipIndex] =
|
||||||
|
std::make_unique<SipKernel>(type, sipAllocation, std::move(emptyStateSaveAreaHeader));
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void SipKernel::freeSipKernels(RootDeviceEnvironment *rootDeviceEnvironment, MemoryManager *memoryManager) {
|
void SipKernel::freeSipKernels(RootDeviceEnvironment *rootDeviceEnvironment, MemoryManager *memoryManager) {
|
||||||
for (auto &sipKernel : rootDeviceEnvironment->sipKernels) {
|
for (auto &sipKernel : rootDeviceEnvironment->sipKernels) {
|
||||||
if (sipKernel.get()) {
|
if (sipKernel.get()) {
|
||||||
|
@ -119,10 +151,12 @@ void SipKernel::freeSipKernels(RootDeviceEnvironment *rootDeviceEnvironment, Mem
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void SipKernel::selectSipClassType(std::string &fileName) {
|
void SipKernel::selectSipClassType(std::string &fileName, const HardwareInfo &hwInfo) {
|
||||||
const std::string unknown("unk");
|
const std::string unknown("unk");
|
||||||
if (fileName.compare(unknown) == 0) {
|
if (fileName.compare(unknown) == 0) {
|
||||||
SipKernel::classType = SipClassType::Builtins;
|
SipKernel::classType = HwHelper::get(hwInfo.platform.eRenderCoreFamily).isSipKernelAsHexadecimalArrayPreferred()
|
||||||
|
? SipClassType::HexadecimalHeaderFile
|
||||||
|
: SipClassType::Builtins;
|
||||||
} else {
|
} else {
|
||||||
SipKernel::classType = SipClassType::RawBinaryFromFile;
|
SipKernel::classType = SipClassType::RawBinaryFromFile;
|
||||||
}
|
}
|
||||||
|
@ -130,21 +164,28 @@ void SipKernel::selectSipClassType(std::string &fileName) {
|
||||||
|
|
||||||
bool SipKernel::initSipKernelImpl(SipKernelType type, Device &device) {
|
bool SipKernel::initSipKernelImpl(SipKernelType type, Device &device) {
|
||||||
std::string fileName = DebugManager.flags.LoadBinarySipFromFile.get();
|
std::string fileName = DebugManager.flags.LoadBinarySipFromFile.get();
|
||||||
SipKernel::selectSipClassType(fileName);
|
SipKernel::selectSipClassType(fileName, *device.getRootDeviceEnvironment().getHardwareInfo());
|
||||||
|
|
||||||
if (SipKernel::classType == SipClassType::RawBinaryFromFile) {
|
switch (SipKernel::classType) {
|
||||||
|
case SipClassType::RawBinaryFromFile:
|
||||||
return SipKernel::initRawBinaryFromFileKernel(type, device, fileName);
|
return SipKernel::initRawBinaryFromFileKernel(type, device, fileName);
|
||||||
|
case SipClassType::HexadecimalHeaderFile:
|
||||||
|
return SipKernel::initHexadecimalArraySipKernel(type, device);
|
||||||
|
default:
|
||||||
|
return SipKernel::initBuiltinsSipKernel(type, device);
|
||||||
}
|
}
|
||||||
return SipKernel::initBuiltinsSipKernel(type, device);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const SipKernel &SipKernel::getSipKernelImpl(Device &device) {
|
const SipKernel &SipKernel::getSipKernelImpl(Device &device) {
|
||||||
auto sipType = SipKernel::getSipKernelType(device);
|
auto sipType = SipKernel::getSipKernelType(device);
|
||||||
|
|
||||||
if (SipKernel::classType == SipClassType::RawBinaryFromFile) {
|
switch (SipKernel::classType) {
|
||||||
|
case SipClassType::RawBinaryFromFile:
|
||||||
|
case SipClassType::HexadecimalHeaderFile:
|
||||||
return *device.getRootDeviceEnvironment().sipKernels[static_cast<uint32_t>(sipType)].get();
|
return *device.getRootDeviceEnvironment().sipKernels[static_cast<uint32_t>(sipType)].get();
|
||||||
|
default:
|
||||||
|
return device.getBuiltIns()->getSipKernel(sipType, device);
|
||||||
}
|
}
|
||||||
return device.getBuiltIns()->getSipKernel(sipType, device);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const SipKernel &SipKernel::getBindlessDebugSipKernel(Device &device) {
|
const SipKernel &SipKernel::getBindlessDebugSipKernel(Device &device) {
|
||||||
|
|
|
@ -52,8 +52,8 @@ class SipKernel {
|
||||||
|
|
||||||
static bool initBuiltinsSipKernel(SipKernelType type, Device &device);
|
static bool initBuiltinsSipKernel(SipKernelType type, Device &device);
|
||||||
static bool initRawBinaryFromFileKernel(SipKernelType type, Device &device, std::string &fileName);
|
static bool initRawBinaryFromFileKernel(SipKernelType type, Device &device, std::string &fileName);
|
||||||
|
static bool initHexadecimalArraySipKernel(SipKernelType type, Device &device);
|
||||||
static void selectSipClassType(std::string &fileName);
|
static void selectSipClassType(std::string &fileName, const HardwareInfo &hwInfo);
|
||||||
|
|
||||||
const std::vector<char> stateSaveAreaHeader;
|
const std::vector<char> stateSaveAreaHeader;
|
||||||
GraphicsAllocation *sipAllocation = nullptr;
|
GraphicsAllocation *sipAllocation = nullptr;
|
||||||
|
|
|
@ -121,6 +121,16 @@ macro(macro_for_each_gen)
|
||||||
list(APPEND CORE_SRCS_${GEN_TYPE}_H_BASE ${SRC_FILE})
|
list(APPEND CORE_SRCS_${GEN_TYPE}_H_BASE ${SRC_FILE})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
set(SRC_FILE "${NEO_SOURCE_DIR}/third_party${BRANCH_DIR}sip_kernels/${GEN_TYPE_LOWER}/sip_kernel_${GEN_TYPE_LOWER}.cpp")
|
||||||
|
if(EXISTS ${SRC_FILE})
|
||||||
|
list(APPEND CORE_SRCS_${GEN_TYPE}_CPP_BASE ${SRC_FILE})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(SRC_FILE "${NEO_SOURCE_DIR}/third_party${BRANCH_DIR}sip_kernels/${GEN_TYPE_LOWER}/sip_kernel_${GEN_TYPE_LOWER}.h")
|
||||||
|
if(EXISTS ${SRC_FILE})
|
||||||
|
list(APPEND CORE_SRCS_${GEN_TYPE}_H_BASE ${SRC_FILE})
|
||||||
|
endif()
|
||||||
|
|
||||||
endforeach()
|
endforeach()
|
||||||
if(EXISTS ${GENERATED_GENX_PREFIX}/hw_cmds_generated_${GEN_TYPE_LOWER}.inl)
|
if(EXISTS ${GENERATED_GENX_PREFIX}/hw_cmds_generated_${GEN_TYPE_LOWER}.inl)
|
||||||
list(APPEND CORE_SRCS_${GEN_TYPE}_H_BASE "${GENERATED_GENX_PREFIX}/hw_cmds_generated_${GEN_TYPE_LOWER}.inl")
|
list(APPEND CORE_SRCS_${GEN_TYPE}_H_BASE "${GENERATED_GENX_PREFIX}/hw_cmds_generated_${GEN_TYPE_LOWER}.inl")
|
||||||
|
|
|
@ -156,6 +156,10 @@ class HwHelper {
|
||||||
static uint32_t getSubDevicesCount(const HardwareInfo *pHwInfo);
|
static uint32_t getSubDevicesCount(const HardwareInfo *pHwInfo);
|
||||||
static uint32_t getCopyEnginesCount(const HardwareInfo &hwInfo);
|
static uint32_t getCopyEnginesCount(const HardwareInfo &hwInfo);
|
||||||
|
|
||||||
|
virtual bool isSipKernelAsHexadecimalArrayPreferred() const = 0;
|
||||||
|
virtual void setSipKernelData(uint32_t *&sipKernelBinary, size_t &kernelBinarySize) const = 0;
|
||||||
|
virtual void adjustPreemptionSurfaceSize(size_t &csrSize) const = 0;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual LocalMemoryAccessMode getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const = 0;
|
virtual LocalMemoryAccessMode getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const = 0;
|
||||||
|
|
||||||
|
@ -386,6 +390,12 @@ class HwHelperHw : public HwHelper {
|
||||||
|
|
||||||
bool isEngineTypeRemappingToHwSpecificRequired() const override;
|
bool isEngineTypeRemappingToHwSpecificRequired() const override;
|
||||||
|
|
||||||
|
bool isSipKernelAsHexadecimalArrayPreferred() const override;
|
||||||
|
|
||||||
|
void setSipKernelData(uint32_t *&sipKernelBinary, size_t &kernelBinarySize) const override;
|
||||||
|
|
||||||
|
void adjustPreemptionSurfaceSize(size_t &csrSize) const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
LocalMemoryAccessMode getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const override;
|
LocalMemoryAccessMode getDefaultLocalMemoryAccessMode(const HardwareInfo &hwInfo) const override;
|
||||||
|
|
||||||
|
|
|
@ -656,4 +656,17 @@ bool HwHelperHw<GfxFamily>::isEngineTypeRemappingToHwSpecificRequired() const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <typename GfxFamily>
|
||||||
|
bool HwHelperHw<GfxFamily>::isSipKernelAsHexadecimalArrayPreferred() const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename GfxFamily>
|
||||||
|
void HwHelperHw<GfxFamily>::setSipKernelData(uint32_t *&sipKernelBinary, size_t &kernelBinarySize) const {
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename GfxFamily>
|
||||||
|
void HwHelperHw<GfxFamily>::adjustPreemptionSurfaceSize(size_t &csrSize) const {
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace NEO
|
} // namespace NEO
|
||||||
|
|
|
@ -179,7 +179,9 @@ int HwInfoConfig::configureHwInfoDrm(const HardwareInfo *inHwInfo, HardwareInfo
|
||||||
static_cast<bool>(outHwInfo->featureTable.ftrGpGpuMidThreadLevelPreempt) && preemption,
|
static_cast<bool>(outHwInfo->featureTable.ftrGpGpuMidThreadLevelPreempt) && preemption,
|
||||||
static_cast<bool>(outHwInfo->featureTable.ftrGpGpuThreadGroupLevelPreempt) && preemption,
|
static_cast<bool>(outHwInfo->featureTable.ftrGpGpuThreadGroupLevelPreempt) && preemption,
|
||||||
static_cast<bool>(outHwInfo->featureTable.ftrGpGpuMidBatchPreempt) && preemption);
|
static_cast<bool>(outHwInfo->featureTable.ftrGpGpuMidBatchPreempt) && preemption);
|
||||||
|
|
||||||
outHwInfo->capabilityTable.requiredPreemptionSurfaceSize = outHwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte;
|
outHwInfo->capabilityTable.requiredPreemptionSurfaceSize = outHwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte;
|
||||||
|
hwHelper.adjustPreemptionSurfaceSize(outHwInfo->capabilityTable.requiredPreemptionSurfaceSize);
|
||||||
|
|
||||||
auto &kmdNotifyProperties = outHwInfo->capabilityTable.kmdNotifyProperties;
|
auto &kmdNotifyProperties = outHwInfo->capabilityTable.kmdNotifyProperties;
|
||||||
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
|
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
|
||||||
|
|
|
@ -35,6 +35,7 @@ int HwInfoConfig::configureHwInfoWddm(const HardwareInfo *inHwInfo, HardwareInfo
|
||||||
outHwInfo->gtSystemInfo.CsrSizeInMb = static_cast<uint32_t>(DebugManager.flags.OverridePreemptionSurfaceSizeInMb.get());
|
outHwInfo->gtSystemInfo.CsrSizeInMb = static_cast<uint32_t>(DebugManager.flags.OverridePreemptionSurfaceSizeInMb.get());
|
||||||
}
|
}
|
||||||
outHwInfo->capabilityTable.requiredPreemptionSurfaceSize = outHwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte;
|
outHwInfo->capabilityTable.requiredPreemptionSurfaceSize = outHwInfo->gtSystemInfo.CsrSizeInMb * MemoryConstants::megaByte;
|
||||||
|
hwHelper.adjustPreemptionSurfaceSize(outHwInfo->capabilityTable.requiredPreemptionSurfaceSize);
|
||||||
|
|
||||||
auto &kmdNotifyProperties = outHwInfo->capabilityTable.kmdNotifyProperties;
|
auto &kmdNotifyProperties = outHwInfo->capabilityTable.kmdNotifyProperties;
|
||||||
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
|
KmdNotifyHelper::overrideFromDebugVariable(DebugManager.flags.OverrideEnableKmdNotify.get(), kmdNotifyProperties.enableKmdNotify);
|
||||||
|
|
|
@ -28,7 +28,12 @@ void clearUseFlags() {
|
||||||
|
|
||||||
bool SipKernel::initSipKernel(SipKernelType type, Device &device) {
|
bool SipKernel::initSipKernel(SipKernelType type, Device &device) {
|
||||||
if (MockSipData::useMockSip) {
|
if (MockSipData::useMockSip) {
|
||||||
SipKernel::classType = SipClassType::Builtins;
|
auto &hwHelper = HwHelper::get(device.getRootDeviceEnvironment().getHardwareInfo()->platform.eRenderCoreFamily);
|
||||||
|
if (hwHelper.isSipKernelAsHexadecimalArrayPreferred()) {
|
||||||
|
SipKernel::classType = SipClassType::HexadecimalHeaderFile;
|
||||||
|
} else {
|
||||||
|
SipKernel::classType = SipClassType::Builtins;
|
||||||
|
}
|
||||||
MockSipData::calledType = type;
|
MockSipData::calledType = type;
|
||||||
MockSipData::called = true;
|
MockSipData::called = true;
|
||||||
|
|
||||||
|
|
|
@ -9,3 +9,5 @@ target_sources(${TARGET_NAME} PRIVATE
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests_shared.inl
|
${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests_shared.inl
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/sip_tests.cpp
|
${CMAKE_CURRENT_SOURCE_DIR}/sip_tests.cpp
|
||||||
)
|
)
|
||||||
|
|
||||||
|
add_subdirectories()
|
||||||
|
|
|
@ -225,3 +225,51 @@ TEST_F(RawBinarySipTest, givenRawBinaryFileWhenInitSipKernelTwiceThenSipIsLoaded
|
||||||
EXPECT_EQ(sipKernel, secondSipKernel);
|
EXPECT_EQ(sipKernel, secondSipKernel);
|
||||||
EXPECT_EQ(storedAllocation, secondStoredAllocation);
|
EXPECT_EQ(storedAllocation, secondStoredAllocation);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
struct HexadecimalHeaderSipKernel : public SipKernel {
|
||||||
|
using SipKernel::getSipKernelImpl;
|
||||||
|
using SipKernel::initHexadecimalArraySipKernel;
|
||||||
|
};
|
||||||
|
using HexadecimalHeaderSipTest = Test<DeviceFixture>;
|
||||||
|
|
||||||
|
TEST_F(HexadecimalHeaderSipTest, whenInitHexadecimalArraySipKernelIsCalledThenSipKernelIsCorrect) {
|
||||||
|
VariableBackup<SipClassType> backupSipClassType(&SipKernel::classType, SipClassType::HexadecimalHeaderFile);
|
||||||
|
|
||||||
|
EXPECT_TRUE(HexadecimalHeaderSipKernel::initHexadecimalArraySipKernel(SipKernelType::Csr, *pDevice));
|
||||||
|
EXPECT_EQ(SipKernelType::Csr, SipKernel::getSipKernelType(*pDevice));
|
||||||
|
|
||||||
|
uint32_t sipIndex = static_cast<uint32_t>(SipKernelType::Csr);
|
||||||
|
const auto expectedSipKernel = pDevice->getRootDeviceEnvironment().sipKernels[sipIndex].get();
|
||||||
|
ASSERT_NE(nullptr, expectedSipKernel);
|
||||||
|
|
||||||
|
const auto &sipKernel = HexadecimalHeaderSipKernel::getSipKernelImpl(*pDevice);
|
||||||
|
EXPECT_EQ(expectedSipKernel, &sipKernel);
|
||||||
|
|
||||||
|
auto expectedSipAllocation = expectedSipKernel->getSipAllocation();
|
||||||
|
auto sipAllocation = sipKernel.getSipAllocation();
|
||||||
|
EXPECT_EQ(expectedSipAllocation, sipAllocation);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(HexadecimalHeaderSipTest, givenFailMemoryManagerWhenInitHexadecimalArraySipKernelIsCalledThenSipKernelIsNullptr) {
|
||||||
|
pDevice->executionEnvironment->memoryManager.reset(new FailMemoryManager(0, *pDevice->executionEnvironment));
|
||||||
|
EXPECT_FALSE(HexadecimalHeaderSipKernel::initHexadecimalArraySipKernel(SipKernelType::Csr, *pDevice));
|
||||||
|
|
||||||
|
uint32_t sipIndex = static_cast<uint32_t>(SipKernelType::Csr);
|
||||||
|
auto sipKernel = pDevice->getRootDeviceEnvironment().sipKernels[sipIndex].get();
|
||||||
|
EXPECT_EQ(nullptr, sipKernel);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST_F(HexadecimalHeaderSipTest, whenInitHexadecimalArraySipKernelIsCalledTwiceThenSipKernelIsCreatedOnce) {
|
||||||
|
VariableBackup<SipClassType> backupSipClassType(&SipKernel::classType, SipClassType::HexadecimalHeaderFile);
|
||||||
|
EXPECT_TRUE(HexadecimalHeaderSipKernel::initHexadecimalArraySipKernel(SipKernelType::Csr, *pDevice));
|
||||||
|
|
||||||
|
const auto &sipKernel = HexadecimalHeaderSipKernel::getSipKernelImpl(*pDevice);
|
||||||
|
EXPECT_TRUE(HexadecimalHeaderSipKernel::initHexadecimalArraySipKernel(SipKernelType::Csr, *pDevice));
|
||||||
|
|
||||||
|
const auto &sipKernel2 = HexadecimalHeaderSipKernel::getSipKernelImpl(*pDevice);
|
||||||
|
EXPECT_EQ(&sipKernel, &sipKernel2);
|
||||||
|
|
||||||
|
auto sipAllocation = sipKernel.getSipAllocation();
|
||||||
|
auto sipAllocation2 = sipKernel2.getSipAllocation();
|
||||||
|
EXPECT_EQ(sipAllocation, sipAllocation2);
|
||||||
|
}
|
||||||
|
|
|
@ -97,6 +97,9 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, XeHPAndLaterPreemptionTests, GivenDebuggerUsedWhenP
|
||||||
using STATE_SIP = typename FamilyType::STATE_SIP;
|
using STATE_SIP = typename FamilyType::STATE_SIP;
|
||||||
device->executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(new MockDebugger);
|
device->executionEnvironment->rootDeviceEnvironments[0]->debugger.reset(new MockDebugger);
|
||||||
|
|
||||||
|
auto sipType = SipKernel::getSipKernelType(*device.get());
|
||||||
|
SipKernel::initSipKernel(sipType, *device.get());
|
||||||
|
|
||||||
size_t requiredSize = PreemptionHelper::getRequiredStateSipCmdSize<FamilyType>(*device);
|
size_t requiredSize = PreemptionHelper::getRequiredStateSipCmdSize<FamilyType>(*device);
|
||||||
EXPECT_EQ(sizeof(STATE_SIP), requiredSize);
|
EXPECT_EQ(sizeof(STATE_SIP), requiredSize);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue