diff --git a/level_zero/core/source/device/device_imp.cpp b/level_zero/core/source/device/device_imp.cpp index 731ec41da4..f5b3097921 100644 --- a/level_zero/core/source/device/device_imp.cpp +++ b/level_zero/core/source/device/device_imp.cpp @@ -1058,13 +1058,18 @@ ze_result_t DeviceImp::getCsrForOrdinalAndIndex(NEO::CommandStreamReceiver **csr ze_result_t DeviceImp::getCsrForLowPriority(NEO::CommandStreamReceiver **csr) { NEO::Device *activeDevice = getActiveDevice(); - for (auto &it : activeDevice->getAllEngines()) { - if (it.osContext->isLowPriority()) { - *csr = it.commandStreamReceiver; - return ZE_RESULT_SUCCESS; + if (this->implicitScalingCapable) { + *csr = activeDevice->getDefaultEngine().commandStreamReceiver; + return ZE_RESULT_SUCCESS; + } else { + for (auto &it : activeDevice->getAllEngines()) { + if (it.osContext->isLowPriority()) { + *csr = it.commandStreamReceiver; + return ZE_RESULT_SUCCESS; + } } + // if the code falls through, we have no low priority context created by neoDevice. } - // if the code falls through, we have no low priority context created by neoDevice. UNRECOVERABLE_IF(true); return ZE_RESULT_ERROR_UNKNOWN; } diff --git a/level_zero/core/test/unit_tests/sources/device/test_device.cpp b/level_zero/core/test/unit_tests/sources/device/test_device.cpp index 39a8b24a2b..1ed5d1ad4a 100644 --- a/level_zero/core/test/unit_tests/sources/device/test_device.cpp +++ b/level_zero/core/test/unit_tests/sources/device/test_device.cpp @@ -2485,11 +2485,12 @@ TEST_F(zeDeviceSystemBarrierTest, whenCallingSystemBarrierThenReturnErrorUnsuppo EXPECT_EQ(ZE_RESULT_ERROR_UNSUPPORTED_FEATURE, result); } -template +template struct MultiSubDeviceFixture : public DeviceFixture { void SetUp() { DebugManager.flags.CreateMultipleSubDevices.set(2); DebugManager.flags.EnableWalkerPartition.set(enablePartitionWalker); + DebugManager.flags.EnableImplicitScaling.set(enableImplicitScaling); osLocalMemoryBackup = std::make_unique>(&NEO::OSInterface::osEnableLocalMemory, osLocalMemory); apiSupportBackup = std::make_unique>(&NEO::ImplicitScaling::apiSupport, apiSupport); @@ -2506,7 +2507,7 @@ struct MultiSubDeviceFixture : public DeviceFixture { std::unique_ptr> apiSupportBackup; }; -using MultiSubDeviceTest = Test>; +using MultiSubDeviceTest = Test>; TEST_F(MultiSubDeviceTest, GivenApiSupportAndLocalMemoryEnabledWhenDeviceContainsSubDevicesThenItIsImplicitScalingCapable) { if (NEO::HwHelper::get(neoDevice->getHardwareInfo().platform.eRenderCoreFamily).platformSupportsImplicitScaling(neoDevice->getHardwareInfo())) { EXPECT_TRUE(device->isImplicitScalingCapable()); @@ -2517,23 +2518,38 @@ TEST_F(MultiSubDeviceTest, GivenApiSupportAndLocalMemoryEnabledWhenDeviceContain } } -using MultiSubDeviceTestNoApi = Test>; +using MultiSubDeviceTestNoApi = Test>; TEST_F(MultiSubDeviceTestNoApi, GivenNoApiSupportAndLocalMemoryEnabledWhenDeviceContainsSubDevicesThenItIsNotImplicitScalingCapable) { EXPECT_FALSE(device->isImplicitScalingCapable()); EXPECT_EQ(subDevice, deviceImp->getActiveDevice()); } -using MultiSubDeviceTestNoLocalMemory = Test>; +using MultiSubDeviceTestNoLocalMemory = Test>; TEST_F(MultiSubDeviceTestNoLocalMemory, GivenApiSupportAndLocalMemoryDisabledWhenDeviceContainsSubDevicesThenItIsNotImplicitScalingCapable) { EXPECT_FALSE(device->isImplicitScalingCapable()); EXPECT_EQ(subDevice, deviceImp->getActiveDevice()); } -using MultiSubDeviceTestNoApiForceOn = Test>; +using MultiSubDeviceTestNoApiForceOn = Test>; TEST_F(MultiSubDeviceTestNoApiForceOn, GivenNoApiSupportAndLocalMemoryEnabledWhenForcedImplicitScalingThenItIsImplicitScalingCapable) { EXPECT_TRUE(device->isImplicitScalingCapable()); EXPECT_EQ(neoDevice, deviceImp->getActiveDevice()); } +using MultiSubDeviceEnabledImplicitScalingTest = Test>; +TEST_F(MultiSubDeviceEnabledImplicitScalingTest, GivenApiSupportAndLocalMemoryEnabledWhenDeviceContainsSubDevicesAndSupportsImplicitScalingThenItIsImplicitScalingCapable) { + EXPECT_TRUE(device->isImplicitScalingCapable()); + EXPECT_EQ(neoDevice, deviceImp->getActiveDevice()); +} + +TEST_F(MultiSubDeviceEnabledImplicitScalingTest, GivenEnabledImplicitScalingWhenDeviceReturnsLowPriorityCsrThenItIsDefaultCsr) { + auto &defaultEngine = deviceImp->getActiveDevice()->getDefaultEngine(); + + NEO::CommandStreamReceiver *csr = nullptr; + auto ret = deviceImp->getCsrForLowPriority(&csr); + EXPECT_EQ(ZE_RESULT_SUCCESS, ret); + EXPECT_EQ(defaultEngine.commandStreamReceiver, csr); +} + } // namespace ult } // namespace L0