From 8a5b0ee5189805f1b1d8ab23f0f956c15e69d00c Mon Sep 17 00:00:00 2001 From: "Zdanowicz, Zbigniew" Date: Wed, 14 Feb 2018 14:52:00 +0100 Subject: [PATCH] Debug variable must override HardwareInfo capability at DeviceFactory RT must override engineType at DeviceFactory, since Wddm CSR uses HardwareInfo at its ctor. AUB tests must override engineType at Device ctor since they bypass DeviceFactory. Change-Id: I73e4066e9b16aed0410fe39a82726d3baea2e67f --- runtime/os_interface/linux/hw_info_config.cpp | 4 ++++ runtime/os_interface/windows/device_factory.cpp | 3 +++ unit_tests/os_interface/device_factory_tests.cpp | 16 ++++++++++++++++ 3 files changed, 23 insertions(+) diff --git a/runtime/os_interface/linux/hw_info_config.cpp b/runtime/os_interface/linux/hw_info_config.cpp index 57b553fe7a..521dcd19c1 100644 --- a/runtime/os_interface/linux/hw_info_config.cpp +++ b/runtime/os_interface/linux/hw_info_config.cpp @@ -167,6 +167,10 @@ int HwInfoConfig::configureHwInfo(const HardwareInfo *inHwInfo, HardwareInfo *ou hwHelper.setCapabilityCoherencyFlag(const_cast(outHwInfo), platformCoherency); outHwInfo->capabilityTable.ftrSupportsCoherency = (platformCoherency && drm->peekCoherencyDisablePatchActive()); + outHwInfo->capabilityTable.defaultEngineType = DebugManager.flags.NodeOrdinal.get() == -1 + ? outHwInfo->capabilityTable.defaultEngineType + : static_cast(DebugManager.flags.NodeOrdinal.get()); + outHwInfo->capabilityTable.instrumentationEnabled = false; outHwInfo->capabilityTable.ftrCompression = false; diff --git a/runtime/os_interface/windows/device_factory.cpp b/runtime/os_interface/windows/device_factory.cpp index 0886bf3891..ed5f0f3c35 100644 --- a/runtime/os_interface/windows/device_factory.cpp +++ b/runtime/os_interface/windows/device_factory.cpp @@ -71,6 +71,9 @@ bool DeviceFactory::getDevices(HardwareInfo **pHWInfos, size_t &numDevices) { HwHelper &hwHelper = HwHelper::get(adapterInfo->GfxPlatform.eRenderCoreFamily); hwHelper.adjustDefaultEngineType(&tempHwInfos[devNum]); + tempHwInfos[devNum].capabilityTable.defaultEngineType = DebugManager.flags.NodeOrdinal.get() == -1 + ? tempHwInfos[devNum].capabilityTable.defaultEngineType + : static_cast(DebugManager.flags.NodeOrdinal.get()); hwHelper.setCapabilityCoherencyFlag(&tempHwInfos[devNum], tempHwInfos[devNum].capabilityTable.ftrSupportsCoherency); diff --git a/unit_tests/os_interface/device_factory_tests.cpp b/unit_tests/os_interface/device_factory_tests.cpp index 49abce0486..41f3254423 100644 --- a/unit_tests/os_interface/device_factory_tests.cpp +++ b/unit_tests/os_interface/device_factory_tests.cpp @@ -116,3 +116,19 @@ TEST_F(DeviceFactoryTest, overrideKmdNotifySettings) { DeviceFactory::releaseDevices(); } + +TEST_F(DeviceFactoryTest, getEngineTypeDebugOverride) { + DebugManagerStateRestore dbgRestorer; + int32_t debugEngineType = 2; + DebugManager.flags.NodeOrdinal.set(debugEngineType); + HardwareInfo *hwInfoOverriden = nullptr; + size_t numDevices = 0; + + bool success = DeviceFactory::getDevices(&hwInfoOverriden, numDevices); + ASSERT_TRUE(success); + ASSERT_NE(nullptr, hwInfoOverriden); + int32_t actualEngineType = static_cast(hwInfoOverriden->capabilityTable.defaultEngineType); + EXPECT_EQ(debugEngineType, actualEngineType); + + DeviceFactory::releaseDevices(); +}