From f19abda0e23fb43ebbd679aff039b86e50c51767 Mon Sep 17 00:00:00 2001 From: Mateusz Hoppe Date: Wed, 16 Nov 2022 19:31:25 +0000 Subject: [PATCH] Set root device index in OsContext - correclty choose default engine context accounting for root device index and subdevices bitfield Related-To: NEO-7516 Signed-off-by: Mateusz Hoppe --- .../os_interface/os_context_l0_tests.cpp | 4 +- .../device/device_drm_or_wddm/test_device.cpp | 8 +- .../unit_tests/sources/kernel/test_kernel.cpp | 2 +- .../command_queue/blit_enqueue_fixture.h | 4 +- .../command_queue_hw_2_tests.cpp | 14 +-- .../command_stream_receiver_hw_2_tests.cpp | 6 +- ...tream_receiver_hw_tests_xehp_and_later.cpp | 9 +- opencl/test/unit_test/mocks/mock_context.cpp | 2 +- .../linux/drm_command_stream_tests_2.cpp | 8 +- .../os_interface/windows/wddm20_tests.cpp | 2 +- .../os_interface/windows/wddm23_tests.cpp | 6 +- .../wddm_residency_controller_tests.cpp | 8 +- .../gl/windows/gl_os_sharing_tests.cpp | 6 +- .../source/memory_manager/memory_manager.cpp | 7 +- .../os_interface/create_os_context_drm.cpp | 6 +- .../create_os_context_drm_or_wddm.cpp | 10 +-- .../os_interface/create_os_context_wddm.cpp | 6 +- .../os_interface/linux/os_context_linux.cpp | 10 +-- .../os_interface/linux/os_context_linux.h | 4 +- shared/source/os_interface/os_context.cpp | 5 +- shared/source/os_interface/os_context.h | 7 +- .../os_interface/windows/os_context_win.cpp | 10 +-- .../os_interface/windows/os_context_win.h | 4 +- .../test/common/mocks/mock_memory_manager.h | 3 +- shared/test/common/mocks/mock_os_context.h | 2 +- .../linux/drm_buffer_object_fixture.h | 2 +- .../linux/drm_command_stream_fixture.h | 2 +- .../os_interface/windows/wddm_fixture.h | 8 +- .../command_stream_receiver_tests.cpp | 42 ++++----- .../direct_submission_controller_tests.cpp | 46 +++++----- .../direct_submission_tests_1.cpp | 2 +- .../linux/drm_direct_submission_tests.cpp | 18 ++-- .../graphics_allocation_tests.cpp | 8 +- .../memory_manager/memory_manager_tests.cpp | 39 +++++++++ .../os_interface/linux/drm_bind_tests.cpp | 4 +- .../linux/drm_buffer_object_tests.cpp | 10 +-- .../linux/drm_command_stream_tests_1.cpp | 4 +- ...and_stream_xehp_and_later_prelim_tests.cpp | 6 +- .../linux/drm_debug_prelim_tests.cpp | 12 +-- .../linux/drm_memory_manager_tests.cpp | 6 +- .../linux/drm_query_prelim_tests.cpp | 12 +-- .../drm_residency_handler_prelim_tests.cpp | 87 ++++++++++++++++++- .../os_interface/linux/drm_tests.cpp | 52 +++++------ .../linux/drm_vm_bind_prelim_tests.cpp | 8 +- .../linux/drm_with_prelim_tests.cpp | 4 +- .../linux/os_context_linux_tests.cpp | 2 +- .../os_interface/os_context_tests.cpp | 18 ++-- .../windows/device_command_stream_tests.cpp | 4 +- .../windows/os_context_win_tests.cpp | 14 +-- .../windows/os_interface_win_tests.cpp | 2 +- .../windows/wddm_preemption_tests.cpp | 2 +- .../windows/wddm_shared_allocations_test.cpp | 2 +- .../os_interface/windows/wddm_tests.cpp | 4 +- 53 files changed, 351 insertions(+), 222 deletions(-) diff --git a/level_zero/core/test/unit_tests/os_interface/os_context_l0_tests.cpp b/level_zero/core/test/unit_tests/os_interface/os_context_l0_tests.cpp index 20ed0c2cca..bc28d9edba 100644 --- a/level_zero/core/test/unit_tests/os_interface/os_context_l0_tests.cpp +++ b/level_zero/core/test/unit_tests/os_interface/os_context_l0_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Intel Corporation + * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -24,7 +24,7 @@ struct DeferredOsContextCreationL0Tests : ::testing::Test { std::unique_ptr createOsContext(EngineTypeUsage engineTypeUsage, bool defaultEngine) { OSInterface *osInterface = device->getRootDeviceEnvironment().osInterface.get(); - std::unique_ptr osContext{OsContext::create(osInterface, 0, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage))}; + std::unique_ptr osContext{OsContext::create(osInterface, 0, 0, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage))}; EXPECT_FALSE(osContext->isInitialized()); return osContext; } diff --git a/level_zero/core/test/unit_tests/sources/device/device_drm_or_wddm/test_device.cpp b/level_zero/core/test/unit_tests/sources/device/device_drm_or_wddm/test_device.cpp index a271862bd9..610fa5bdc0 100644 --- a/level_zero/core/test/unit_tests/sources/device/device_drm_or_wddm/test_device.cpp +++ b/level_zero/core/test/unit_tests/sources/device/device_drm_or_wddm/test_device.cpp @@ -68,8 +68,8 @@ class MockDriverModelWDDMLUID : public NEO::Wddm { class MockOsContextWin : public OsContextWin { public: - MockOsContextWin(MockDriverModelWDDMLUID &wddm, uint32_t contextId, const EngineDescriptor &engineDescriptor) - : OsContextWin(wddm, contextId, engineDescriptor) {} + MockOsContextWin(MockDriverModelWDDMLUID &wddm, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) + : OsContextWin(wddm, rootDeviceIndex, contextId, engineDescriptor) {} }; using LuidDeviceTest = Test; @@ -78,7 +78,7 @@ TEST_F(LuidDeviceTest, givenOsContextWinAndGetLUIDArrayThenLUIDisValid) { DebugManager.flags.EnableL0ReadLUIDExtension.set(true); auto luidMock = new MockDriverModelWDDMLUID(*neoDevice->executionEnvironment->rootDeviceEnvironments[0]); auto defaultEngine = defaultHwInfo->capabilityTable.defaultEngineType; - OsContextWin osContext(*luidMock, 0u, EngineDescriptorHelper::getDefaultDescriptor({defaultEngine, EngineUsage::Regular})); + OsContextWin osContext(*luidMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({defaultEngine, EngineUsage::Regular})); std::vector luidData; size_t arraySize = 8; osContext.getDeviceLuidArray(luidData, arraySize); @@ -95,7 +95,7 @@ TEST_F(LuidDeviceTest, givenLuidDevicePropertiesStructureAndWDDMDriverTypeThenSu auto luidMock = new MockDriverModelWDDMLUID(*neoDevice->executionEnvironment->rootDeviceEnvironments[0]); neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface.reset(new NEO::OSInterface()); neoDevice->executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(luidMock)); - MockOsContextWin mockContext(*luidMock, 0u, EngineDescriptorHelper::getDefaultDescriptor({defaultEngine, EngineUsage::Regular})); + MockOsContextWin mockContext(*luidMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({defaultEngine, EngineUsage::Regular})); auto &deviceRegularEngines = neoDevice->getRegularEngineGroups(); auto &deviceEngine = deviceRegularEngines[0].engines[0]; auto csr = deviceEngine.commandStreamReceiver; diff --git a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp index 0c9db72d78..c36c415cd1 100644 --- a/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp +++ b/level_zero/core/test/unit_tests/sources/kernel/test_kernel.cpp @@ -1633,7 +1633,7 @@ struct KernelIsaTests : Test { if (createBcsEngine) { auto &engine = device->getNEODevice()->getEngine(0); - bcsOsContext.reset(OsContext::create(nullptr, 0, + bcsOsContext.reset(OsContext::create(nullptr, device->getNEODevice()->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, device->getNEODevice()->getDeviceBitfield()))); engine.osContext = bcsOsContext.get(); engine.commandStreamReceiver->setupContext(*bcsOsContext); diff --git a/opencl/test/unit_test/command_queue/blit_enqueue_fixture.h b/opencl/test/unit_test/command_queue/blit_enqueue_fixture.h index 1c000fd7ef..5a7e62eaaf 100644 --- a/opencl/test/unit_test/command_queue/blit_enqueue_fixture.h +++ b/opencl/test/unit_test/command_queue/blit_enqueue_fixture.h @@ -37,7 +37,7 @@ struct BlitEnqueueTests : public ::testing::Test { class BcsMockContext : public MockContext { public: BcsMockContext(ClDevice *device) : MockContext(device) { - bcsOsContext.reset(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}))); + bcsOsContext.reset(OsContext::create(nullptr, device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}))); bcsCsr.reset(createCommandStream(*device->getExecutionEnvironment(), device->getRootDeviceIndex(), device->getDeviceBitfield())); bcsCsr->setupContext(*bcsOsContext); bcsCsr->initializeTagAllocation(); @@ -96,7 +96,7 @@ struct BlitEnqueueTests : public ::testing::Test { } if (createBcsEngine) { auto &engine = device->getEngine(getChosenEngineType(device->getHardwareInfo()), EngineUsage::LowPriority); - bcsOsContext.reset(OsContext::create(nullptr, 1, + bcsOsContext.reset(OsContext::create(nullptr, device->getRootDeviceIndex(), 1, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, device->getDeviceBitfield()))); engine.osContext = bcsOsContext.get(); engine.commandStreamReceiver->setupContext(*bcsOsContext); diff --git a/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp b/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp index 5295c1d572..85575e3a3e 100644 --- a/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_hw_2_tests.cpp @@ -365,15 +365,15 @@ HWTEST_F(IoqCommandQueueHwBlitTest, givenSplitBcsCopyWhenEnqueueReadThenEnqueueB memoryManager->returnFakeAllocation = true; auto cmdQHw = std::make_unique>(context, pClDevice, nullptr); - std::unique_ptr osContext1(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext1(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS1, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); + auto csr1 = std::make_unique>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); csr1->setupContext(*osContext1); csr1->initializeTagAllocation(); EngineControl control1(csr1.get(), osContext1.get()); - - std::unique_ptr osContext2(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext2(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS3, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); auto csr2 = std::make_unique>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); @@ -415,7 +415,7 @@ HWTEST_F(IoqCommandQueueHwBlitTest, givenSplitBcsCopyWhenEnqueueBlockingReadThen memoryManager->returnFakeAllocation = true; auto cmdQHw = static_cast *>(this->pCmdQ); - std::unique_ptr osContext1(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext1(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS1, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); auto csr1 = std::make_unique>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); @@ -423,7 +423,7 @@ HWTEST_F(IoqCommandQueueHwBlitTest, givenSplitBcsCopyWhenEnqueueBlockingReadThen csr1->initializeTagAllocation(); EngineControl control1(csr1.get(), osContext1.get()); - std::unique_ptr osContext2(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext2(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS3, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); auto csr2 = std::make_unique>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); @@ -464,7 +464,7 @@ HWTEST_F(IoqCommandQueueHwBlitTest, givenSplitBcsCopyWhenEnqueueReadWithEventThe memoryManager->returnFakeAllocation = true; auto cmdQHw = static_cast *>(this->pCmdQ); - std::unique_ptr osContext1(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext1(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS1, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); auto csr1 = std::make_unique>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); @@ -472,7 +472,7 @@ HWTEST_F(IoqCommandQueueHwBlitTest, givenSplitBcsCopyWhenEnqueueReadWithEventThe csr1->initializeTagAllocation(); EngineControl control1(csr1.get(), osContext1.get()); - std::unique_ptr osContext2(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext2(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS3, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); auto csr2 = std::make_unique>(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp index 8c454e77f6..d804ee583b 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_2_tests.cpp @@ -381,7 +381,7 @@ HWTEST_F(BcsTests, givenUpdateTaskCountFromWaitWhenBlitBufferThenCsrHasProperTas } HWTEST_F(BcsTests, givenProfilingEnabledWhenBlitBufferThenCommandBufferIsConstructedProperly) { - auto bcsOsContext = std::unique_ptr(OsContext::create(nullptr, 0, + auto bcsOsContext = std::unique_ptr(OsContext::create(nullptr, pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, pDevice->getDeviceBitfield()))); auto bcsCsr = std::make_unique>(*pDevice->getExecutionEnvironment(), pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); bcsCsr->setupContext(*bcsOsContext); @@ -430,7 +430,7 @@ HWTEST_F(BcsTests, givenProfilingEnabledWhenBlitBufferThenCommandBufferIsConstru } HWTEST_F(BcsTests, givenNotInitializedOsContextWhenBlitBufferIsCalledThenInitializeContext) { - auto bcsOsContext = std::unique_ptr(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, pDevice->getDeviceBitfield()))); + auto bcsOsContext = std::unique_ptr(OsContext::create(nullptr, pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, pDevice->getDeviceBitfield()))); auto bcsCsr = std::make_unique>(*pDevice->getExecutionEnvironment(), pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); bcsCsr->setupContext(*bcsOsContext); bcsCsr->initializeTagAllocation(); @@ -513,7 +513,7 @@ HWTEST_F(BcsTests, givenInputAllocationsWhenBlitDispatchedThenMakeAllAllocations HWTEST_F(BcsTests, givenFenceAllocationIsRequiredWhenBlitDispatchedThenMakeAllAllocationsResident) { RAIIHwHelperFactory> hwHelperBackup{pDevice->getHardwareInfo().platform.eRenderCoreFamily}; - auto bcsOsContext = std::unique_ptr(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, pDevice->getDeviceBitfield()))); + auto bcsOsContext = std::unique_ptr(OsContext::create(nullptr, pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, pDevice->getDeviceBitfield()))); auto bcsCsr = std::make_unique>(*pDevice->getExecutionEnvironment(), pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); bcsCsr->setupContext(*bcsOsContext); bcsCsr->initializeTagAllocation(); diff --git a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_tests_xehp_and_later.cpp b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_tests_xehp_and_later.cpp index c2d38a5ac0..8bcaaab82e 100644 --- a/opencl/test/unit_test/command_stream/command_stream_receiver_hw_tests_xehp_and_later.cpp +++ b/opencl/test/unit_test/command_stream/command_stream_receiver_hw_tests_xehp_and_later.cpp @@ -131,8 +131,9 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverHwTestXeHPAndLater, WhenOsCont ExecutionEnvironment *executionEnvironment = platform()->peekExecutionEnvironment(); executionEnvironment->memoryManager.reset(new MockMemoryManager(false, true, *executionEnvironment)); uint32_t tileMask = 0b11; - std::unique_ptr osContext(OsContext::create(nullptr, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::MidThread, tileMask))); - auto commandStreamReceiver = std::make_unique>(*executionEnvironment, 0, tileMask); + uint32_t rootDeviceIndex = 0; + std::unique_ptr osContext(OsContext::create(nullptr, rootDeviceIndex, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::MidThread, tileMask))); + auto commandStreamReceiver = std::make_unique>(*executionEnvironment, rootDeviceIndex, tileMask); initPlatform(); void *ssh = alignedMalloc(512, 4096); @@ -715,10 +716,10 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverHwTestXeHPAndLater, givenBlock HWCMDTEST_F(IGFX_XE_HP_CORE, CommandStreamReceiverHwTestXeHPAndLater, WhenOsContextSupportsMultipleDevicesThenCommandStreamReceiverIsMultiOsContextCapable) { uint32_t multiDeviceMask = 0b11; uint32_t singleDeviceMask = 0b10; - std::unique_ptr multiDeviceOsContext(OsContext::create(nullptr, 0u, + std::unique_ptr multiDeviceOsContext(OsContext::create(nullptr, pDevice->getRootDeviceIndex(), 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::MidThread, multiDeviceMask))); - std::unique_ptr singleDeviceOsContext(OsContext::create(nullptr, 0u, + std::unique_ptr singleDeviceOsContext(OsContext::create(nullptr, pDevice->getRootDeviceIndex(), 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::MidThread, singleDeviceMask))); diff --git a/opencl/test/unit_test/mocks/mock_context.cpp b/opencl/test/unit_test/mocks/mock_context.cpp index e0f0e3a259..91c1780194 100644 --- a/opencl/test/unit_test/mocks/mock_context.cpp +++ b/opencl/test/unit_test/mocks/mock_context.cpp @@ -171,7 +171,7 @@ MockUnrestrictiveContextMultiGPU::MockUnrestrictiveContextMultiGPU() : MockConte } BcsMockContext::BcsMockContext(ClDevice *device) : MockContext(device) { - bcsOsContext.reset(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, device->getDeviceBitfield()))); + bcsOsContext.reset(OsContext::create(nullptr, device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, device->getDeviceBitfield()))); bcsCsr.reset(createCommandStream(*device->getExecutionEnvironment(), device->getRootDeviceIndex(), device->getDeviceBitfield())); bcsCsr->setupContext(*bcsOsContext); bcsCsr->initializeTagAllocation(); diff --git a/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp b/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp index fd83bab464..26622450c3 100644 --- a/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp +++ b/opencl/test/unit_test/os_interface/linux/drm_command_stream_tests_2.cpp @@ -1369,7 +1369,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenMergeWithResidencyContaine auto operationHandler = static_cast(executionEnvironment->rootDeviceEnvironments[0]->memoryOperationsInterface.get()); operationHandler->mergeWithResidencyContainerResult = NEO::MemoryOperationsStatus::FAILED; - auto osContext = std::make_unique(*mock, 0u, + auto osContext = std::make_unique(*mock, rootDeviceIndex, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo))); @@ -1400,7 +1400,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenMergeWithResidencyContaine auto operationHandler = static_cast(executionEnvironment->rootDeviceEnvironments[0]->memoryOperationsInterface.get()); operationHandler->mergeWithResidencyContainerResult = NEO::MemoryOperationsStatus::OUT_OF_MEMORY; - auto osContext = std::make_unique(*mock, 0u, + auto osContext = std::make_unique(*mock, rootDeviceIndex, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo))); @@ -1434,7 +1434,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenNoAllocsInMemoryOperationH } }; - auto osContext = std::make_unique(*mock, 0u, + auto osContext = std::make_unique(*mock, rootDeviceIndex, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo))); @@ -1465,7 +1465,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamEnhancedTest, givenAllocsInMemoryOperationHan } }; - auto osContext = std::make_unique(*mock, 0u, + auto osContext = std::make_unique(*mock, rootDeviceIndex, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo))); diff --git a/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp index 3be05e39d4..010a8298b2 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm20_tests.cpp @@ -693,7 +693,7 @@ struct WddmContextSchedulingPriorityTests : public Wddm20WithMockGdiDllTestsWith auto engineDescriptor = EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode); engineDescriptor.engineTypeUsage.second = lowPriority ? EngineUsage::LowPriority : EngineUsage::Regular; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, engineDescriptor); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, engineDescriptor); osContext->ensureContextInitialized(); } }; diff --git a/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp index 46c3b13feb..6c631e13c8 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm23_tests.cpp @@ -45,7 +45,7 @@ struct Wddm23TestsWithoutWddmInit : public ::testing::Test, GdiDllFixture { wddmMockInterface = static_cast(wddm->wddmInterface.release()); wddm->init(); wddm->wddmInterface.reset(wddmMockInterface); - osContext = std::make_unique(*wddm, 0u, + osContext = std::make_unique(*wddm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], preemptionMode)); osContext->ensureContextInitialized(); } @@ -79,9 +79,9 @@ TEST_F(Wddm23Tests, whenCreateContextIsCalledThenEnableHwQueues) { TEST_F(Wddm23Tests, givenPreemptionModeWhenCreateHwQueueCalledThenSetGpuTimeoutIfEnabled) { auto defaultEngine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0]; - OsContextWin osContextWithoutPreemption(*wddm, 0u, + OsContextWin osContextWithoutPreemption(*wddm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(defaultEngine, PreemptionMode::Disabled)); - OsContextWin osContextWithPreemption(*wddm, 0, EngineDescriptorHelper::getDefaultDescriptor(defaultEngine, PreemptionMode::MidBatch)); + OsContextWin osContextWithPreemption(*wddm, 0, 0, EngineDescriptorHelper::getDefaultDescriptor(defaultEngine, PreemptionMode::MidBatch)); wddm->wddmInterface->createHwQueue(osContextWithoutPreemption); EXPECT_EQ(0u, getCreateHwQueueDataFcn()->Flags.DisableGpuTimeout); diff --git a/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp b/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp index 37a94c28d8..b2a2e636ec 100644 --- a/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp +++ b/opencl/test/unit_test/os_interface/windows/wddm_residency_controller_tests.cpp @@ -63,8 +63,8 @@ class MockWddmResidencyController : public WddmResidencyController { class MockOsContextWin : public OsContextWin { public: - MockOsContextWin(Wddm &wddm, uint32_t contextId, const EngineDescriptor &engineDescriptor) - : OsContextWin(wddm, contextId, engineDescriptor), + MockOsContextWin(Wddm &wddm, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) + : OsContextWin(wddm, rootDeviceIndex, contextId, engineDescriptor), mockResidencyController(wddm, contextId) {} WddmResidencyController &getResidencyController() override { return mockResidencyController; }; @@ -80,7 +80,7 @@ struct WddmResidencyControllerTest : ::testing::Test { rootDeviceEnvironment = std::make_unique(*executionEnvironment); wddm = static_cast(Wddm::createWddm(nullptr, *rootDeviceEnvironment)); wddm->init(); - mockOsContextWin = std::make_unique(*wddm, osContextId, EngineDescriptorHelper::getDefaultDescriptor()); + mockOsContextWin = std::make_unique(*wddm, 0, osContextId, EngineDescriptorHelper::getDefaultDescriptor()); wddm->getWddmInterface()->createMonitoredFence(*mockOsContextWin); residencyController = &mockOsContextWin->mockResidencyController; } @@ -103,7 +103,7 @@ struct WddmResidencyControllerWithGdiTest : ::testing::Test { wddm->resetGdi(gdi); wddm->init(); - mockOsContextWin = std::make_unique(*wddm, osContextId, EngineDescriptorHelper::getDefaultDescriptor()); + mockOsContextWin = std::make_unique(*wddm, 0, osContextId, EngineDescriptorHelper::getDefaultDescriptor()); wddm->getWddmInterface()->createMonitoredFence(*mockOsContextWin); residencyController = &mockOsContextWin->mockResidencyController; residencyController->registerCallback(); diff --git a/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp b/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp index 71de6e91fc..5eac8f7153 100644 --- a/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp +++ b/opencl/test/unit_test/sharings/gl/windows/gl_os_sharing_tests.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2021 Intel Corporation + * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -335,7 +335,7 @@ TEST_F(GlArbSyncEventOsTest, GivenCallToSignalArbSyncObjectWhenSignalSynchroniza FailSignalSyncObjectMock::reset(); auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo); wddm->init(); - OsContextWin osContext(*wddm, 0u, + OsContextWin osContext(*wddm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], preemptionMode)); CL_GL_SYNC_INFO syncInfo = {}; @@ -395,7 +395,7 @@ TEST_F(GlArbSyncEventOsTest, GivenCallToSignalArbSyncObjectWhenSignalSynchroniza FailSignalSyncObjectMock::reset(); auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo); wddm->init(); - OsContextWin osContext(*wddm, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], preemptionMode)); + OsContextWin osContext(*wddm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], preemptionMode)); CL_GL_SYNC_INFO syncInfo = {}; syncInfo.submissionSynchronizationObject = 0x7cU; diff --git a/shared/source/memory_manager/memory_manager.cpp b/shared/source/memory_manager/memory_manager.cpp index 60cf897234..92278eaa66 100644 --- a/shared/source/memory_manager/memory_manager.cpp +++ b/shared/source/memory_manager/memory_manager.cpp @@ -277,9 +277,11 @@ OsContext *MemoryManager::createAndRegisterOsContext(CommandStreamReceiver *comm updateLatestContextIdForRootDevice(rootDeviceIndex); auto contextId = ++latestContextId; - auto osContext = OsContext::create(peekExecutionEnvironment().rootDeviceEnvironments[rootDeviceIndex]->osInterface.get(), contextId, engineDescriptor); + auto osContext = OsContext::create(peekExecutionEnvironment().rootDeviceEnvironments[rootDeviceIndex]->osInterface.get(), rootDeviceIndex, contextId, engineDescriptor); osContext->incRefInternal(); + UNRECOVERABLE_IF(rootDeviceIndex != osContext->getRootDeviceIndex()); + registeredEngines.emplace_back(commandStreamReceiver, osContext); return osContext; @@ -886,7 +888,8 @@ OsContext *MemoryManager::getDefaultEngineContext(uint32_t rootDeviceIndex, Devi OsContext *defaultContext = nullptr; for (auto engineIndex = 0u; engineIndex < this->getRegisteredEnginesCount(); engineIndex++) { OsContext *engine = this->getRegisteredEngines()[engineIndex].osContext; - if (engine->isDefaultContext() && engine->getDeviceBitfield() == subdevicesBitfield) { + if ((engine->getRootDeviceIndex() == rootDeviceIndex) && + (engine->isDefaultContext() && engine->getDeviceBitfield() == subdevicesBitfield)) { defaultContext = engine; break; } diff --git a/shared/source/os_interface/create_os_context_drm.cpp b/shared/source/os_interface/create_os_context_drm.cpp index 35d90309b3..479b982697 100644 --- a/shared/source/os_interface/create_os_context_drm.cpp +++ b/shared/source/os_interface/create_os_context_drm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Intel Corporation + * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -10,8 +10,8 @@ namespace NEO { -OsContext *OsContext::create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor) { - return OsContextLinux::create(osInterface, contextId, engineDescriptor); +OsContext *OsContext::create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) { + return OsContextLinux::create(osInterface, rootDeviceIndex, contextId, engineDescriptor); } } // namespace NEO diff --git a/shared/source/os_interface/create_os_context_drm_or_wddm.cpp b/shared/source/os_interface/create_os_context_drm_or_wddm.cpp index ebc1b75ea4..3158064d1b 100644 --- a/shared/source/os_interface/create_os_context_drm_or_wddm.cpp +++ b/shared/source/os_interface/create_os_context_drm_or_wddm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Intel Corporation + * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -12,15 +12,15 @@ namespace NEO { -OsContext *OsContext::create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor) { +OsContext *OsContext::create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) { if (osInterface) { if (osInterface->getDriverModel()->getDriverModelType() == DriverModelType::DRM) { - return OsContextLinux::create(osInterface, contextId, engineDescriptor); + return OsContextLinux::create(osInterface, rootDeviceIndex, contextId, engineDescriptor); } else { - return OsContextWin::create(osInterface, contextId, engineDescriptor); + return OsContextWin::create(osInterface, rootDeviceIndex, contextId, engineDescriptor); } } - return OsContextLinux::create(osInterface, contextId, engineDescriptor); + return OsContextLinux::create(osInterface, rootDeviceIndex, contextId, engineDescriptor); } } // namespace NEO diff --git a/shared/source/os_interface/create_os_context_wddm.cpp b/shared/source/os_interface/create_os_context_wddm.cpp index a640bb8c2c..08d24363d7 100644 --- a/shared/source/os_interface/create_os_context_wddm.cpp +++ b/shared/source/os_interface/create_os_context_wddm.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Intel Corporation + * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -10,8 +10,8 @@ namespace NEO { -OsContext *OsContext::create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor) { - return OsContextWin::create(osInterface, contextId, engineDescriptor); +OsContext *OsContext::create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) { + return OsContextWin::create(osInterface, rootDeviceIndex, contextId, engineDescriptor); } } // namespace NEO diff --git a/shared/source/os_interface/linux/os_context_linux.cpp b/shared/source/os_interface/linux/os_context_linux.cpp index f8c072a93b..8c99ab04b4 100644 --- a/shared/source/os_interface/linux/os_context_linux.cpp +++ b/shared/source/os_interface/linux/os_context_linux.cpp @@ -19,15 +19,15 @@ namespace NEO { -OsContext *OsContextLinux::create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor) { +OsContext *OsContextLinux::create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) { if (osInterface) { - return new OsContextLinux(*osInterface->getDriverModel()->as(), contextId, engineDescriptor); + return new OsContextLinux(*osInterface->getDriverModel()->as(), rootDeviceIndex, contextId, engineDescriptor); } - return new OsContext(contextId, engineDescriptor); + return new OsContext(rootDeviceIndex, contextId, engineDescriptor); } -OsContextLinux::OsContextLinux(Drm &drm, uint32_t contextId, const EngineDescriptor &engineDescriptor) - : OsContext(contextId, engineDescriptor), +OsContextLinux::OsContextLinux(Drm &drm, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) + : OsContext(rootDeviceIndex, contextId, engineDescriptor), drm(drm) {} void OsContextLinux::initializeContext() { diff --git a/shared/source/os_interface/linux/os_context_linux.h b/shared/source/os_interface/linux/os_context_linux.h index 0315001637..459f30a90c 100644 --- a/shared/source/os_interface/linux/os_context_linux.h +++ b/shared/source/os_interface/linux/os_context_linux.h @@ -20,7 +20,7 @@ class OsContextLinux : public OsContext { public: OsContextLinux() = delete; ~OsContextLinux() override; - OsContextLinux(Drm &drm, uint32_t contextId, const EngineDescriptor &engineDescriptor); + OsContextLinux(Drm &drm, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor); unsigned int getEngineFlag() const { return engineFlag; } void setEngineFlag(unsigned int engineFlag) { this->engineFlag = engineFlag; } @@ -41,7 +41,7 @@ class OsContextLinux : public OsContext { bool isDirectSubmissionSupported(const HardwareInfo &hwInfo) const override; Drm &getDrm() const; void waitForPagingFence(); - static OsContext *create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor); + static OsContext *create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor); void reInitializeContext() override; protected: diff --git a/shared/source/os_interface/os_context.cpp b/shared/source/os_interface/os_context.cpp index e56bb8c315..6b17598de0 100644 --- a/shared/source/os_interface/os_context.cpp +++ b/shared/source/os_interface/os_context.cpp @@ -14,8 +14,9 @@ #include "shared/source/helpers/hw_info.h" namespace NEO { -OsContext::OsContext(uint32_t contextId, const EngineDescriptor &engineDescriptor) - : contextId(contextId), +OsContext::OsContext(uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) + : rootDeviceIndex(rootDeviceIndex), + contextId(contextId), deviceBitfield(engineDescriptor.deviceBitfield), preemptionMode(engineDescriptor.preemptionMode), numSupportedDevices(static_cast(engineDescriptor.deviceBitfield.count())), diff --git a/shared/source/os_interface/os_context.h b/shared/source/os_interface/os_context.h index 0fe3b0764f..f058b56aa2 100644 --- a/shared/source/os_interface/os_context.h +++ b/shared/source/os_interface/os_context.h @@ -23,8 +23,8 @@ struct HardwareInfo; class OsContext : public ReferenceTrackedObject { public: - OsContext(uint32_t contextId, const EngineDescriptor &engineDescriptor); - static OsContext *create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor); + OsContext(uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor); + static OsContext *create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor); bool isImmediateContextInitializationEnabled(bool isDefaultEngine) const; bool isInitialized() const { return contextInitialized; } @@ -58,9 +58,12 @@ class OsContext : public ReferenceTrackedObject { uint8_t getUmdPowerHintValue() { return powerHintValue; } void setUmdPowerHintValue(uint8_t powerHintValue) { this->powerHintValue = powerHintValue; } + uint32_t getRootDeviceIndex() { return rootDeviceIndex; } + protected: virtual void initializeContext() {} + const uint32_t rootDeviceIndex; const uint32_t contextId; const DeviceBitfield deviceBitfield; const PreemptionMode preemptionMode; diff --git a/shared/source/os_interface/windows/os_context_win.cpp b/shared/source/os_interface/windows/os_context_win.cpp index a2a16f2dcd..453795ad67 100644 --- a/shared/source/os_interface/windows/os_context_win.cpp +++ b/shared/source/os_interface/windows/os_context_win.cpp @@ -15,15 +15,15 @@ namespace NEO { -OsContext *OsContextWin::create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor) { +OsContext *OsContextWin::create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) { if (osInterface) { - return new OsContextWin(*osInterface->getDriverModel()->as(), contextId, engineDescriptor); + return new OsContextWin(*osInterface->getDriverModel()->as(), rootDeviceIndex, contextId, engineDescriptor); } - return new OsContext(contextId, engineDescriptor); + return new OsContext(rootDeviceIndex, contextId, engineDescriptor); } -OsContextWin::OsContextWin(Wddm &wddm, uint32_t contextId, const EngineDescriptor &engineDescriptor) - : OsContext(contextId, engineDescriptor), +OsContextWin::OsContextWin(Wddm &wddm, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor) + : OsContext(rootDeviceIndex, contextId, engineDescriptor), residencyController(wddm, contextId), wddm(wddm) { } diff --git a/shared/source/os_interface/windows/os_context_win.h b/shared/source/os_interface/windows/os_context_win.h index 29276002e3..cbcaaa7718 100644 --- a/shared/source/os_interface/windows/os_context_win.h +++ b/shared/source/os_interface/windows/os_context_win.h @@ -25,7 +25,7 @@ class OsContextWin : public OsContext { OsContextWin() = delete; ~OsContextWin() override; - OsContextWin(Wddm &wddm, uint32_t contextId, const EngineDescriptor &engineDescriptor); + OsContextWin(Wddm &wddm, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor); D3DKMT_HANDLE getWddmContextHandle() const { return wddmContextHandle; } void setWddmContextHandle(D3DKMT_HANDLE wddmContextHandle) { this->wddmContextHandle = wddmContextHandle; } @@ -33,7 +33,7 @@ class OsContextWin : public OsContext { void setHwQueue(HardwareQueue hardwareQueue) { this->hardwareQueue = hardwareQueue; } Wddm *getWddm() const { return &wddm; } MOCKABLE_VIRTUAL WddmResidencyController &getResidencyController() { return residencyController; } - static OsContext *create(OSInterface *osInterface, uint32_t contextId, const EngineDescriptor &engineDescriptor); + static OsContext *create(OSInterface *osInterface, uint32_t rootDeviceIndex, uint32_t contextId, const EngineDescriptor &engineDescriptor); void reInitializeContext() override; void getDeviceLuidArray(std::vector &luidData, size_t arraySize); diff --git a/shared/test/common/mocks/mock_memory_manager.h b/shared/test/common/mocks/mock_memory_manager.h index be8fe2e9db..35358073ce 100644 --- a/shared/test/common/mocks/mock_memory_manager.h +++ b/shared/test/common/mocks/mock_memory_manager.h @@ -6,6 +6,7 @@ */ #pragma once +#include "shared/source/command_stream/command_stream_receiver.h" #include "shared/source/execution_environment/execution_environment.h" #include "shared/source/memory_manager/os_agnostic_memory_manager.h" #include "shared/test/common/helpers/default_hw_info.h" @@ -390,7 +391,7 @@ class MockMemoryManagerOsAgnosticContext : public MockMemoryManager { MockMemoryManagerOsAgnosticContext(NEO::ExecutionEnvironment &executionEnvironment) : MockMemoryManager(executionEnvironment) {} OsContext *createAndRegisterOsContext(CommandStreamReceiver *commandStreamReceiver, const EngineDescriptor &engineDescriptor) override { - auto osContext = new OsContext(0, engineDescriptor); + auto osContext = new OsContext(commandStreamReceiver->getRootDeviceIndex(), 0, engineDescriptor); osContext->incRefInternal(); registeredEngines.emplace_back(commandStreamReceiver, osContext); return osContext; diff --git a/shared/test/common/mocks/mock_os_context.h b/shared/test/common/mocks/mock_os_context.h index 3e2c6cc534..1abf1282bb 100644 --- a/shared/test/common/mocks/mock_os_context.h +++ b/shared/test/common/mocks/mock_os_context.h @@ -18,7 +18,7 @@ class MockOsContext : public OsContext { using OsContext::getDeviceBitfield; MockOsContext(uint32_t contextId, const EngineDescriptor &engineDescriptorHelper) - : OsContext(contextId, engineDescriptorHelper) {} + : OsContext(0, contextId, engineDescriptorHelper) {} }; static_assert(sizeof(OsContext) == sizeof(MockOsContext)); diff --git a/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h b/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h index 95603d5266..3e091bbc0e 100644 --- a/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h +++ b/shared/test/common/os_interface/linux/drm_buffer_object_fixture.h @@ -78,7 +78,7 @@ class DrmBufferObjectFixture { this->mock = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]); ASSERT_NE(nullptr, this->mock); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u); - osContext.reset(new OsContextLinux(*this->mock, 0u, EngineDescriptorHelper::getDefaultDescriptor())); + osContext.reset(new OsContextLinux(*this->mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor())); this->mock->reset(); bo = new TestedBufferObject(this->mock.get()); ASSERT_NE(nullptr, bo); diff --git a/shared/test/common/os_interface/linux/drm_command_stream_fixture.h b/shared/test/common/os_interface/linux/drm_command_stream_fixture.h index 8f4f62f4d4..660e9b2988 100644 --- a/shared/test/common/os_interface/linux/drm_command_stream_fixture.h +++ b/shared/test/common/os_interface/linux/drm_command_stream_fixture.h @@ -48,7 +48,7 @@ class DrmCommandStreamTest : public ::testing::Test { executionEnvironment.rootDeviceEnvironments[0]->initGmm(); mock->createVirtualMemoryAddressSpace(HwHelper::getSubDevicesCount(hwInfo)); - osContext = std::make_unique(*mock, 0u, + osContext = std::make_unique(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*hwInfo))); osContext->ensureContextInitialized(); diff --git a/shared/test/common/os_interface/windows/wddm_fixture.h b/shared/test/common/os_interface/windows/wddm_fixture.h index 8c3eb5373c..49d5e264f1 100644 --- a/shared/test/common/os_interface/windows/wddm_fixture.h +++ b/shared/test/common/os_interface/windows/wddm_fixture.h @@ -47,7 +47,7 @@ struct WddmFixture : public Test { wddm->init(); auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); osContext->ensureContextInitialized(); mockTemporaryResources = static_cast(wddm->temporaryResources.get()); } @@ -78,7 +78,7 @@ struct WddmFixtureLuid : public Test { wddm->init(); auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); osContext->ensureContextInitialized(); mockTemporaryResources = static_cast(wddm->temporaryResources.get()); } @@ -115,7 +115,7 @@ struct WddmFixtureWithMockGdiDll : public GdiDllFixture, public MockExecutionEnv auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); osContext->ensureContextInitialized(); } @@ -163,7 +163,7 @@ struct WddmFixtureWithMockGdiDllWddmNoCleanup : public GdiDllFixture, public Moc auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); osContext->ensureContextInitialized(); } diff --git a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp index 9602be5bfa..41f6d30d3d 100644 --- a/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp +++ b/shared/test/unit_test/command_stream/command_stream_receiver_tests.cpp @@ -639,7 +639,7 @@ HWTEST_F(CommandStreamReceiverTest, givenDebugVariableEnabledWhenCreatingCsrThen HWTEST_F(CommandStreamReceiverTest, whenDirectSubmissionDisabledThenExpectNoFeatureAvailable) { DeviceFactory::prepareDeviceEnvironments(*pDevice->getExecutionEnvironment()); CommandStreamReceiverHw csr(*pDevice->executionEnvironment, pDevice->getRootDeviceIndex(), pDevice->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); osContext->setDefaultContext(true); @@ -750,7 +750,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerEnabledWhenIni DebugManager.flags.EnableDirectSubmissionController.set(1); auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); @@ -782,7 +782,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionControllerDisabledWhenIn DebugManager.flags.EnableDirectSubmissionController.set(0); auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); @@ -806,7 +806,7 @@ HWTEST_F(InitDirectSubmissionTest, givenSetCsrFlagSetWhenInitDirectSubmissionThe DebugManager.flags.SetCommandStreamReceiver.set(1); auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); @@ -827,7 +827,7 @@ HWTEST_F(InitDirectSubmissionTest, givenSetCsrFlagSetWhenInitDirectSubmissionThe HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnRcsThenExpectFeatureAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -860,7 +860,7 @@ class CommandStreamReceiverHwDirectSubmissionMock : public CommandStreamReceiver HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionAgainThenItIsNotReinitialized) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -887,7 +887,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionAgainThenItIsNotR HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionThenObtainLock) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -903,7 +903,7 @@ HWTEST_F(InitDirectSubmissionTest, whenCallInitDirectSubmissionThenObtainLock) { } HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSupportsRcsThenExpectFeatureNotAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -922,7 +922,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnBcsThenExpectFeatureAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -943,7 +943,7 @@ HWTEST_F(InitDirectSubmissionTest, whenDirectSubmissionEnabledOnBcsThenExpectFea HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSupportsBcsThenExpectFeatureNotAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -964,7 +964,7 @@ HWTEST_F(InitDirectSubmissionTest, givenDirectSubmissionEnabledWhenPlatformNotSu HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionDisabledOnLowPriorityThenExpectFeatureNotAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -985,7 +985,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionDi HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionEnabledOnLowPriorityThenExpectFeatureAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -1004,7 +1004,7 @@ HWTEST_F(InitDirectSubmissionTest, givenLowPriorityContextWhenDirectSubmissionEn HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionDisabledOnInternalThenExpectFeatureNotAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -1025,7 +1025,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionDisab HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionEnabledOnInternalThenExpectFeatureAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -1045,7 +1045,7 @@ HWTEST_F(InitDirectSubmissionTest, givenInternalContextWhenDirectSubmissionEnabl HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionDisabledOnRootDeviceThenExpectFeatureNotAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup, device->getDeviceBitfield(), true))); osContext->ensureContextInitialized(); @@ -1066,7 +1066,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionDis HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionEnabledOnRootDeviceThenExpectFeatureAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup, device->getDeviceBitfield(), true))); osContext->ensureContextInitialized(); @@ -1086,7 +1086,7 @@ HWTEST_F(InitDirectSubmissionTest, givenRootDeviceContextWhenDirectSubmissionEna HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextWhenDirectSubmissionDisabledOnNonDefaultThenExpectFeatureNotAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -1107,7 +1107,7 @@ HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextWhenDirectSubmissionDis HWTEST_F(InitDirectSubmissionTest, givenNonDefaultContextContextWhenDirectSubmissionEnabledOnNonDefaultContextThenExpectFeatureAvailable) { auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -1132,7 +1132,7 @@ HWTEST_F(InitDirectSubmissionTest, GivenBlitterOverrideEnabledWhenBlitterIsNonDe DebugManager.flags.DirectSubmissionInsertExtraMiMemFenceCommands.set(0); auto csr = std::make_unique>(*device->executionEnvironment, device->getRootDeviceIndex(), device->getDeviceBitfield()); - std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Internal}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); @@ -1406,7 +1406,7 @@ TEST(CommandStreamReceiverSimpleTest, givenPrintfTagAllocationAddressFlagEnabled DebugManagerStateRestore restore; DebugManager.flags.PrintTagAllocationAddress.set(true); DeviceBitfield deviceBitfield(1); - auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, + auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}))); MockExecutionEnvironment executionEnvironment; @@ -1483,7 +1483,7 @@ TEST(CommandStreamReceiverSimpleTest, givenMultipleActivePartitionsWhenWaitingFo executionEnvironment.initializeMemoryManager(); DeviceBitfield deviceBitfield(0b11); MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, + auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}))); csr.setupContext(*osContext); diff --git a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp index d7e8d6b21e..2a7b8640e0 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_controller_tests.cpp @@ -39,7 +39,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste DeviceBitfield deviceBitfield(1); MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext(OsContext::create(nullptr, 0, + std::unique_ptr osContext(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr.setupContext(*osContext.get()); @@ -83,7 +83,7 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenTimeout DeviceBitfield deviceBitfield(1); MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext(OsContext::create(nullptr, 0, + std::unique_ptr osContext(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr.setupContext(*osContext.get()); @@ -140,31 +140,31 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste DeviceBitfield deviceBitfield(1); MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext(OsContext::create(nullptr, 0, + std::unique_ptr osContext(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr.setupContext(*osContext.get()); MockCommandStreamReceiver csr1(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext1(OsContext::create(nullptr, 0, + std::unique_ptr osContext1(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr1.setupContext(*osContext1.get()); MockCommandStreamReceiver csr2(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext2(OsContext::create(nullptr, 0, + std::unique_ptr osContext2(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr2.setupContext(*osContext2.get()); MockCommandStreamReceiver csr3(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext3(OsContext::create(nullptr, 0, + std::unique_ptr osContext3(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr3.setupContext(*osContext3.get()); MockCommandStreamReceiver csr4(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext4(OsContext::create(nullptr, 0, + std::unique_ptr osContext4(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr4.setupContext(*osContext4.get()); @@ -208,67 +208,67 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerWhenRegiste DeviceBitfield deviceBitfield1(0b10); MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext(OsContext::create(nullptr, 0, + std::unique_ptr osContext(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr.setupContext(*osContext.get()); MockCommandStreamReceiver csr1(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext1(OsContext::create(nullptr, 0, + std::unique_ptr osContext1(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr1.setupContext(*osContext1.get()); MockCommandStreamReceiver csr2(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext2(OsContext::create(nullptr, 0, + std::unique_ptr osContext2(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr2.setupContext(*osContext2.get()); MockCommandStreamReceiver csr3(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext3(OsContext::create(nullptr, 0, + std::unique_ptr osContext3(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr3.setupContext(*osContext3.get()); MockCommandStreamReceiver csr4(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext4(OsContext::create(nullptr, 0, + std::unique_ptr osContext4(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr4.setupContext(*osContext4.get()); MockCommandStreamReceiver csr5(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext5(OsContext::create(nullptr, 0, + std::unique_ptr osContext5(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield1))); csr5.setupContext(*osContext5.get()); MockCommandStreamReceiver csr6(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext6(OsContext::create(nullptr, 0, + std::unique_ptr osContext6(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield1))); csr6.setupContext(*osContext6.get()); MockCommandStreamReceiver csr7(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext7(OsContext::create(nullptr, 0, + std::unique_ptr osContext7(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield1))); csr7.setupContext(*osContext7.get()); MockCommandStreamReceiver csr8(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext8(OsContext::create(nullptr, 0, + std::unique_ptr osContext8(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield1))); csr8.setupContext(*osContext8.get()); MockCommandStreamReceiver csr9(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext9(OsContext::create(nullptr, 0, + std::unique_ptr osContext9(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield1))); csr9.setupContext(*osContext9.get()); MockCommandStreamReceiver csr10(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext10(OsContext::create(nullptr, 0, + std::unique_ptr osContext10(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield1))); csr10.setupContext(*osContext10.get()); @@ -327,31 +327,31 @@ TEST(DirectSubmissionControllerTests, givenDirectSubmissionControllerDirectSubmi DeviceBitfield deviceBitfield(1); MockCommandStreamReceiver csr(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext(OsContext::create(nullptr, 0, + std::unique_ptr osContext(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr.setupContext(*osContext.get()); MockCommandStreamReceiver csr1(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext1(OsContext::create(nullptr, 0, + std::unique_ptr osContext1(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr1.setupContext(*osContext1.get()); MockCommandStreamReceiver csr2(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext2(OsContext::create(nullptr, 0, + std::unique_ptr osContext2(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_CCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr2.setupContext(*osContext2.get()); MockCommandStreamReceiver csr3(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext3(OsContext::create(nullptr, 0, + std::unique_ptr osContext3(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr3.setupContext(*osContext3.get()); MockCommandStreamReceiver csr4(executionEnvironment, 0, deviceBitfield); - std::unique_ptr osContext4(OsContext::create(nullptr, 0, + std::unique_ptr osContext4(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, deviceBitfield))); csr4.setupContext(*osContext4.get()); diff --git a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp index 8c1697ebe2..590b0e2c8c 100644 --- a/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp +++ b/shared/test/unit_test/direct_submission/direct_submission_tests_1.cpp @@ -79,7 +79,7 @@ HWTEST_F(DirectSubmissionTest, givenDirectSubmissionWhenStopThenRingIsNotStarted HWTEST_F(DirectSubmissionTest, givenBlitterDirectSubmissionWhenStopThenRingIsNotStarted) { MockDirectSubmissionHw> directSubmission(*pDevice->getDefaultEngine().commandStreamReceiver); auto &csr = pDevice->getUltCommandStreamReceiver(); - std::unique_ptr osContext(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + std::unique_ptr osContext(OsContext::create(pDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), pDevice->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, pDevice->getDeviceBitfield()))); csr.blitterDirectSubmission.reset(&directSubmission); diff --git a/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp b/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp index 2399b7d609..35ab99b12f 100644 --- a/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp +++ b/shared/test/unit_test/direct_submission/linux/drm_direct_submission_tests.cpp @@ -40,7 +40,7 @@ struct DrmDirectSubmissionTest : public DrmMemoryManagerBasic { true, executionEnvironment); device.reset(MockDevice::create(&executionEnvironment, 0u)); - osContext = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as(), 0u, + osContext = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as(), device->getRootDeviceIndex(), 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield())); osContext->ensureContextInitialized(); @@ -251,7 +251,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenCompletionFenceSupportAndFenceIsNotComple { DeviceBitfield firstTileBitfield{0b01}; - OsContextLinux osContext(*drm, 0u, + OsContextLinux osContext(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, firstTileBitfield)); osContext.ensureContextInitialized(); @@ -267,7 +267,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenCompletionFenceSupportAndFenceIsNotComple } { DeviceBitfield secondTileBitfield{0b10}; - OsContextLinux osContext(*drm, 0u, + OsContextLinux osContext(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, secondTileBitfield)); osContext.ensureContextInitialized(); @@ -284,7 +284,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenCompletionFenceSupportAndFenceIsNotComple { DeviceBitfield twoTilesBitfield{0b11}; - OsContextLinux osContext(*drm, 0u, + OsContextLinux osContext(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, twoTilesBitfield)); osContext.ensureContextInitialized(); @@ -347,7 +347,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenTile0AndCompletionFenceSupportWhenSubmitt auto completionFenceBaseGpuAddress = commandStreamReceiver.getTagAllocation()->getGpuAddress() + Drm::completionFenceOffset; DeviceBitfield firstTileBitfield{0b01}; - OsContextLinux osContextTile0(*drm, 0u, + OsContextLinux osContextTile0(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, firstTileBitfield)); osContextTile0.ensureContextInitialized(); @@ -386,7 +386,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenTile1AndCompletionFenceSupportWhenSubmitt auto completionFenceBaseGpuAddress = commandStreamReceiver.getTagAllocation()->getGpuAddress() + Drm::completionFenceOffset; DeviceBitfield secondTileBitfield{0b10}; - OsContextLinux osContextTile1(*drm, 0u, + OsContextLinux osContextTile1(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, secondTileBitfield)); osContextTile1.ensureContextInitialized(); @@ -425,7 +425,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenTwoTilesAndCompletionFenceSupportWhenSubm auto completionFenceBaseGpuAddress = commandStreamReceiver.getTagAllocation()->getGpuAddress() + Drm::completionFenceOffset; DeviceBitfield twoTilesBitfield{0b11}; - OsContextLinux osContextBothTiles(*drm, 0u, + OsContextLinux osContextBothTiles(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, twoTilesBitfield)); osContextBothTiles.ensureContextInitialized(); @@ -658,7 +658,7 @@ HWTEST_F(DrmDirectSubmissionTest, device->rootCsrCreated = true; device->numSubDevices = 2; - osContext = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as(), 0u, + osContext = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as(), device->getRootDeviceIndex(), 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield())); osContext->ensureContextInitialized(); @@ -709,7 +709,7 @@ HWTEST_F(DrmDirectSubmissionTest, givenBlitterDispatcherAndMultiTileDeviceWhenCr VariableBackup backup(&ImplicitScaling::apiSupport, true); device->deviceBitfield.set(0b11); - osContext = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as(), 0u, + osContext = std::make_unique(*executionEnvironment.rootDeviceEnvironments[0]->osInterface->getDriverModel()->as(), device->getRootDeviceIndex(), 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield())); osContext->ensureContextInitialized(); diff --git a/shared/test/unit_test/memory_manager/graphics_allocation_tests.cpp b/shared/test/unit_test/memory_manager/graphics_allocation_tests.cpp index ad6ce1c866..a3668d2b00 100644 --- a/shared/test/unit_test/memory_manager/graphics_allocation_tests.cpp +++ b/shared/test/unit_test/memory_manager/graphics_allocation_tests.cpp @@ -425,7 +425,7 @@ TEST(GraphicsAllocationTest, givenGraphicsAllocationWhenAssignedTaskCountEqualZe HWTEST_F(GraphicsAllocationTests, givenGraphicsAllocationWhenAssignedTaskCountAbovelZeroThenPrepareForResidencyGetTaskCountWasCalled) { executionEnvironment.initializeMemoryManager(); - auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor())); + auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor())); MockCommandStreamReceiver csr(executionEnvironment, 0, 1); csr.osContext = osContext.get(); MockGraphicsAllocationTaskCount::getTaskCountCalleedTimes = 0; @@ -438,7 +438,7 @@ HWTEST_F(GraphicsAllocationTests, givenGraphicsAllocationWhenAssignedTaskCountAb HWTEST_F(GraphicsAllocationTests, givenGraphicsAllocationAllocTaskCountHigherThanInCsrThenUpdateTaskCountWasNotCalled) { executionEnvironment.initializeMemoryManager(); - auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor())); + auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor())); MockCommandStreamReceiver csr(executionEnvironment, 0, 1); csr.osContext = osContext.get(); MockGraphicsAllocationTaskCount graphicsAllocation; @@ -452,7 +452,7 @@ HWTEST_F(GraphicsAllocationTests, givenGraphicsAllocationAllocTaskCountHigherTha HWTEST_F(GraphicsAllocationTests, givenGraphicsAllocationAllocTaskCountLowerThanInCsrThenUpdateTaskCountWasCalled) { executionEnvironment.initializeMemoryManager(); - auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor())); + auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor())); MockCommandStreamReceiver csr(executionEnvironment, 0, 1); csr.osContext = osContext.get(); MockGraphicsAllocationTaskCount graphicsAllocation; @@ -466,7 +466,7 @@ HWTEST_F(GraphicsAllocationTests, givenGraphicsAllocationAllocTaskCountLowerThan HWTEST_F(GraphicsAllocationTests, givenGraphicsAllocationAllocTaskCountLowerThanInCsrThenAssignmentCountIsDecremented) { executionEnvironment.initializeMemoryManager(); - auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor())); + auto osContext = std::unique_ptr(OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor())); MockCommandStreamReceiver csr(executionEnvironment, 0, 1); csr.osContext = osContext.get(); MockGraphicsAllocationTaskCount graphicsAllocation; diff --git a/shared/test/unit_test/memory_manager/memory_manager_tests.cpp b/shared/test/unit_test/memory_manager/memory_manager_tests.cpp index 0e51d6aca4..ffb6bd4f68 100644 --- a/shared/test/unit_test/memory_manager/memory_manager_tests.cpp +++ b/shared/test/unit_test/memory_manager/memory_manager_tests.cpp @@ -69,6 +69,45 @@ TEST(MemoryManagerTest, givenMemoryManagerWhenGettingDefaultContextThenCorrectCo executionEnvironment.memoryManager->getDefaultEngineContext(0, 2)); } +TEST(MemoryManagerTest, givenMultipleDevicesMemoryManagerWhenGettingDefaultContextThenCorrectContextForDeviceAndSubdeviceBitfieldIsReturned) { + MockExecutionEnvironment executionEnvironment(defaultHwInfo.get(), true, 2); + auto mockMemoryManager = new MockMemoryManager(false, false, executionEnvironment); + executionEnvironment.memoryManager.reset(mockMemoryManager); + auto csr0 = std::make_unique(executionEnvironment, 0, 1); + auto csr1 = std::make_unique(executionEnvironment, 0, 1); + auto csr2 = std::make_unique(executionEnvironment, 0, 3); + auto csr3 = std::make_unique(executionEnvironment, 1, 1); + auto csr4 = std::make_unique(executionEnvironment, 1, 3); + + csr0->internalAllocationStorage.reset(new MockInternalAllocationStorage(*csr0)); + csr1->internalAllocationStorage.reset(new MockInternalAllocationStorage(*csr1)); + csr2->internalAllocationStorage.reset(new MockInternalAllocationStorage(*csr2)); + csr3->internalAllocationStorage.reset(new MockInternalAllocationStorage(*csr3)); + csr4->internalAllocationStorage.reset(new MockInternalAllocationStorage(*csr4)); + + auto osContext0 = executionEnvironment.memoryManager->createAndRegisterOsContext(csr0.get(), EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_RCS, EngineUsage::LowPriority})); + auto osContext1 = executionEnvironment.memoryManager->createAndRegisterOsContext(csr1.get(), EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_RCS, EngineUsage::Regular})); + auto osContext2 = executionEnvironment.memoryManager->createAndRegisterOsContext(csr2.get(), EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_RCS, EngineUsage::Regular}, DeviceBitfield(0x3))); + osContext1->setDefaultContext(true); + osContext2->setDefaultContext(true); + + auto osContext3 = executionEnvironment.memoryManager->createAndRegisterOsContext(csr3.get(), EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_RCS, EngineUsage::Regular})); + auto osContext4 = executionEnvironment.memoryManager->createAndRegisterOsContext(csr4.get(), EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_RCS, EngineUsage::Regular}, DeviceBitfield(0x3))); + osContext3->setDefaultContext(true); + osContext4->setDefaultContext(true); + + EXPECT_NE(nullptr, osContext0); + EXPECT_NE(nullptr, osContext1); + EXPECT_NE(nullptr, osContext2); + EXPECT_NE(nullptr, osContext3); + EXPECT_NE(nullptr, osContext4); + + EXPECT_EQ(osContext3, executionEnvironment.memoryManager->getDefaultEngineContext(1, 1)); + EXPECT_EQ(osContext4, executionEnvironment.memoryManager->getDefaultEngineContext(1, 3)); + EXPECT_EQ(mockMemoryManager->getRegisteredEngines()[mockMemoryManager->defaultEngineIndex[1]].osContext, + executionEnvironment.memoryManager->getDefaultEngineContext(0, 2)); +} + TEST(MemoryManagerTest, givenFailureOnRegisterSystemMemoryAllocationWhenAllocatingMemoryThenNullptrIsReturned) { AllocationProperties properties(mockRootDeviceIndex, true, MemoryConstants::cacheLineSize, AllocationType::BUFFER, false, mockDeviceBitfield); MockMemoryManager memoryManager; diff --git a/shared/test/unit_test/os_interface/linux/drm_bind_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_bind_tests.cpp index 18ccd693f1..320303d7bb 100644 --- a/shared/test/unit_test/os_interface/linux/drm_bind_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_bind_tests.cpp @@ -17,7 +17,7 @@ using namespace NEO; TEST(DrmBindTest, givenBindAlreadyCompleteWhenWaitForBindThenWaitUserFenceIoctlIsNotCalled) { auto executionEnvironment = std::make_unique(); DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); drm.pagingFence[0] = 31u; @@ -38,7 +38,7 @@ TEST(DrmBindTest, givenBindAlreadyCompleteWhenWaitForBindThenWaitUserFenceIoctlI TEST(DrmBindTest, givenBindNotCompleteWhenWaitForBindThenWaitUserFenceIoctlIsCalled) { auto executionEnvironment = std::make_unique(); DrmMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); drm.pagingFence[0] = 26u; diff --git a/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp index cd2a3e6d5c..b59ae691c5 100644 --- a/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_buffer_object_tests.cpp @@ -201,7 +201,7 @@ TEST(DrmBufferObjectSimpleTest, givenInvalidBoWhenValidateHostptrIsCalledThenErr MockExecutionEnvironment executionEnvironment; std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u); - OsContextLinux osContext(*mock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); ASSERT_NE(nullptr, mock.get()); std::unique_ptr bo(new TestedBufferObject(mock.get())); ASSERT_NE(nullptr, bo.get()); @@ -226,7 +226,7 @@ TEST(DrmBufferObjectSimpleTest, givenInvalidBoWhenPinIsCalledThenErrorIsReturned MockExecutionEnvironment executionEnvironment; std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u); - OsContextLinux osContext(*mock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); ASSERT_NE(nullptr, mock.get()); std::unique_ptr bo(new TestedBufferObject(mock.get())); ASSERT_NE(nullptr, bo.get()); @@ -259,7 +259,7 @@ TEST(DrmBufferObjectSimpleTest, givenArrayOfBosWhenPinnedThenAllBosArePinned) { MockExecutionEnvironment executionEnvironment; std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); ASSERT_NE(nullptr, mock.get()); - OsContextLinux osContext(*mock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); std::unique_ptr bo(new TestedBufferObject(mock.get())); ASSERT_NE(nullptr, bo.get()); @@ -293,7 +293,7 @@ TEST(DrmBufferObjectSimpleTest, givenArrayOfBosWhenValidatedThenAllBosArePinned) MockExecutionEnvironment executionEnvironment; std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); ASSERT_NE(nullptr, mock.get()); - OsContextLinux osContext(*mock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); std::unique_ptr bo(new TestedBufferObject(mock.get())); ASSERT_NE(nullptr, bo.get()); @@ -373,7 +373,7 @@ TEST(DrmBufferObject, givenDrmIoctlReturnsErrorNotSupportedThenBufferObjectRetur MockBufferObject bo(drm, 3, 0, 0, osContextCount); std::unique_ptr osContext; - osContext.reset(new OsContextLinux(*drm, 0u, EngineDescriptorHelper::getDefaultDescriptor())); + osContext.reset(new OsContextLinux(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor())); ExecObject execObjectsStorage = {}; auto ret = bo.exec(0, 0, 0, false, osContext.get(), 0, 1, nullptr, 0u, &execObjectsStorage, 0, 0); diff --git a/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp b/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp index a8bc5ad165..1ead9e1b3e 100644 --- a/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_command_stream_tests_1.cpp @@ -173,7 +173,7 @@ HWTEST_TEMPLATED_F(DrmCommandStreamTest, givenDrmContextIdWhenFlushingThenSetIdT mock->storedDrmContextId = expectedDrmContextId; - osContext = std::make_unique(*mock, 1, + osContext = std::make_unique(*mock, csr->getRootDeviceIndex(), 1, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo))); osContext->ensureContextInitialized(); @@ -701,7 +701,7 @@ struct DrmCommandStreamBlitterDirectSubmissionTest : public DrmCommandStreamDire DrmCommandStreamDirectSubmissionTest::setUpT(); executionEnvironment->incRefInternal(); - osContext.reset(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, + osContext.reset(OsContext::create(device->getExecutionEnvironment()->rootDeviceEnvironments[0]->osInterface.get(), 0, 0, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular}, PreemptionMode::ThreadGroup, device->getDeviceBitfield()))); osContext->ensureContextInitialized(); diff --git a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp index 2da7605e56..784d8aa7b1 100644 --- a/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_command_stream_xehp_and_later_prelim_tests.cpp @@ -294,7 +294,7 @@ class DrmCommandStreamForceTileTest : public ::testing::Test { executionEnvironment.rootDeviceEnvironments[0]->initGmm(); mock->createVirtualMemoryAddressSpace(HwHelper::getSubDevicesCount(hwInfo)); - osContext = std::make_unique(*mock, rootDeviceIndex, + osContext = std::make_unique(*mock, rootDeviceIndex, 0, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*hwInfo), DeviceBitfield(3))); osContext->ensureContextInitialized(); @@ -408,7 +408,7 @@ struct DrmImplicitScalingCommandStreamTest : ::testing::Test { executionEnvironment->rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*drm, 0u); executionEnvironment->rootDeviceEnvironments[0]->initGmm(); - osContext = std::make_unique(*drm, 0u, + osContext = std::make_unique(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo), DeviceBitfield(0b11))); osContext->ensureContextInitialized(); @@ -505,7 +505,7 @@ HWCMDTEST_F(IGFX_XE_HP_CORE, DrmImplicitScalingCommandStreamTest, whenForceExecu uint32_t execCalled = 0; }; - auto osContext = std::make_unique(*drm, 0u, + auto osContext = std::make_unique(*drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo))); osContext->ensureContextInitialized(); diff --git a/shared/test/unit_test/os_interface/linux/drm_debug_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_debug_prelim_tests.cpp index 5e6d5bb3aa..5333f23298 100644 --- a/shared/test/unit_test/os_interface/linux/drm_debug_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_debug_prelim_tests.cpp @@ -245,7 +245,7 @@ TEST_F(DrmDebugPrelimTest, givenAddedBindExtHandlesInBoWhenBindingWithinDefaultE bo.addBindExtHandle(4); bo.addBindExtHandle(5); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); bo.bind(&osContext, 0); @@ -265,7 +265,7 @@ TEST_F(DrmDebugPrelimTest, givenAddedBindExtHandlesInBoWhenBindingWithinInternal bo.addBindExtHandle(4); bo.addBindExtHandle(5); - OsContextLinux osContext(drm, 0u, {{aub_stream::EngineType::ENGINE_RCS, EngineUsage::Internal}, 1 /*deviceBitfield*/, PreemptionMode::Disabled, true /* isRootDevice*/, false /* isEngineInstanced*/}); + OsContextLinux osContext(drm, 0, 0u, {{aub_stream::EngineType::ENGINE_RCS, EngineUsage::Internal}, 1 /*deviceBitfield*/, PreemptionMode::Disabled, true /* isRootDevice*/, false /* isEngineInstanced*/}); osContext.ensureContextInitialized(); bo.bind(&osContext, 0); @@ -281,7 +281,7 @@ TEST_F(DrmDebugPrelimTest, givenAddedBindExtHandlesInBoWhenBindingWithinCopyEngi drm.context.receivedVmBindUuidExt[0].reset(); - OsContextLinux osContext(drm, 0u, {{aub_stream::EngineType::ENGINE_BCS, EngineUsage::Regular}, 1 /*deviceBitfield*/, PreemptionMode::Disabled, true /* isRootDevice*/, false /* isEngineInstanced*/}); + OsContextLinux osContext(drm, 0, 0u, {{aub_stream::EngineType::ENGINE_BCS, EngineUsage::Regular}, 1 /*deviceBitfield*/, PreemptionMode::Disabled, true /* isRootDevice*/, false /* isEngineInstanced*/}); osContext.ensureContextInitialized(); bo.bind(&osContext, 0); @@ -296,7 +296,7 @@ HWTEST_F(DrmDebugPrelimTest, givenAddedBindExtHandlesInBoWhenUnbindingThenExtens bo.addBindExtHandle(4); bo.addBindExtHandle(5); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); bo.bind(&osContext, 0); EXPECT_NE(0u, drm.context.receivedVmBind.value().extensions); @@ -323,7 +323,7 @@ TEST(DrmPrelimTest, givenProgramDebuggingAndContextDebugAvailableAndCCSEnginesWh drm->contextDebugSupported = true; executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(drm)); - OsContextLinux osContext(*drm, 5u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_EQ(DrmPrelimHelper::getSIPContextParamDebugFlag() << 32 | DrmPrelimHelper::getSIPContextParamDebugFlag(), drm->context.receivedSetContextParamValue); @@ -345,7 +345,7 @@ TEST(DrmPrelimTest, givenProgramDebuggingAndContextDebugAvailableAndCCSEnginesWh drm->contextDebugSupported = true; executionEnvironment->rootDeviceEnvironments[0]->osInterface->setDriverModel(std::unique_ptr(drm)); - OsContextLinux osContext(*drm, 5u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_EQ(DrmPrelimHelper::getSIPContextParamDebugFlag() << 32 | DrmPrelimHelper::getSIPContextParamDebugFlag(), drm->context.receivedSetContextParamValue); diff --git a/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp index 18efdaa40e..1425689c46 100644 --- a/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_memory_manager_tests.cpp @@ -4206,7 +4206,7 @@ TEST_F(DrmMemoryManagerTest, givenPageFaultIsUnSupportedWhenCallingBindBoOnBuffe DrmMock drm(*executionEnvironment->rootDeviceEnvironments[0]); EXPECT_FALSE(drm.pageFaultSupported); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint32_t vmHandleId = 0; @@ -4232,7 +4232,7 @@ TEST_F(DrmMemoryManagerTest, givenPageFaultIsSupportedAndKmdMigrationEnabledForB DrmMock drm(*executionEnvironment->rootDeviceEnvironments[0]); EXPECT_FALSE(drm.pageFaultSupported); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint32_t vmHandleId = 0; @@ -4264,7 +4264,7 @@ TEST_F(DrmMemoryManagerTest, givenPageFaultIsSupportedWhenCallingBindBoOnAllocat DrmMock drm(*executionEnvironment->rootDeviceEnvironments[0]); drm.pageFaultSupported = true; - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint32_t vmHandleId = 0; diff --git a/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp index a95620d570..2a619d1856 100644 --- a/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_query_prelim_tests.cpp @@ -331,7 +331,7 @@ TEST(DrmBufferObjectTestPrelim, givenBufferObjectSetToColourWithBindWhenBindingT bo.setColourWithBind(); bo.setColourChunk(MemoryConstants::pageSize64k); bo.addColouringAddress(0xffeeffee); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); bo.bind(&osContext, 0); @@ -385,7 +385,7 @@ TEST(DrmBufferObjectTestPrelim, givenBufferObjectMarkedForCaptureWhenBindingThen executionEnvironment->initializeMemoryManager(); DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; BufferObjectMock bo(&drm, 3, 1, 0, 1); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); bo.markForCapture(); @@ -403,7 +403,7 @@ TEST(DrmBufferObjectTestPrelim, givenNoActiveDirectSubmissionAndForceUseImmediat executionEnvironment->initializeMemoryManager(); DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; BufferObjectMock bo(&drm, 3, 1, 0, 1); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); bo.bind(&osContext, 0); @@ -419,7 +419,7 @@ TEST(DrmBufferObjectTestPrelim, whenBindingThenImmediateFlagIsSetAndExtensionLis DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; drm.setDirectSubmissionActive(true); BufferObjectMock bo(&drm, 3, 1, 0, 1); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); osContext.setDirectSubmissionActive(); @@ -432,7 +432,7 @@ TEST(DrmBufferObjectTestPrelim, whenBindingThenImmediateFlagIsSetAndExtensionLis TEST(DrmBufferObjectTestPrelim, givenProvidedCtxIdWhenCallingWaitUserFenceThenExpectCtxFlagSetAndNoSoftFlagSet) { auto executionEnvironment = std::make_unique(); DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint64_t gpuAddress = 0x1020304000ull; @@ -453,7 +453,7 @@ TEST(DrmBufferObjectTestPrelim, givenProvidedCtxIdWhenCallingWaitUserFenceThenEx TEST(DrmBufferObjectTestPrelim, givenProvidedNoCtxIdWhenCallingWaitUserFenceThenExpectCtxFlagNotSetAndSoftFlagSet) { auto executionEnvironment = std::make_unique(); DrmQueryMock drm{*executionEnvironment->rootDeviceEnvironments[0]}; - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint64_t gpuAddress = 0x1020304000ull; diff --git a/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp index 975f68e663..ada3ef0123 100644 --- a/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_residency_handler_prelim_tests.cpp @@ -613,13 +613,13 @@ HWTEST_F(DrmMemoryOperationsHandlerBindTest, givenVmBindSupportAndMultiSubdevice EXPECT_EQ(0, mock->ioctlCount.execbuffer2); } -struct DrmMemoryOperationsHandlerBindWithPerContextVms : public DrmMemoryOperationsHandlerBindFixture<1> { +struct DrmMemoryOperationsHandlerBindWithPerContextVms : public DrmMemoryOperationsHandlerBindFixture<2> { void SetUp() override { - DrmMemoryOperationsHandlerBindFixture<1>::setUp(true); + DrmMemoryOperationsHandlerBindFixture<2>::setUp(true); } void TearDown() override { - DrmMemoryOperationsHandlerBindFixture<1>::TearDown(); + DrmMemoryOperationsHandlerBindFixture<2>::TearDown(); } }; @@ -700,6 +700,87 @@ HWTEST_F(DrmMemoryOperationsHandlerBindWithPerContextVms, givenVmBindMultipleSub EXPECT_EQ(0, mock->ioctlCount.execbuffer2); } +HWTEST_F(DrmMemoryOperationsHandlerBindWithPerContextVms, givenVmBindMultipleRootDevicesAndPerContextVmsWhenValidateHostptrThenCorrectContextsVmIdIsUsed) { + mock->bindAvailable = true; + mock->incrementVmId = true; + + auto device1 = devices[1].get(); + auto mock1 = executionEnvironment->rootDeviceEnvironments[1]->osInterface->getDriverModel()->as(); + mock1->bindAvailable = true; + mock1->incrementVmId = true; + + std::unique_ptr memoryManager(new (std::nothrow) TestedDrmMemoryManager(true, + false, + true, + *executionEnvironment)); + + uint32_t vmIdForDevice0 = 0; + uint32_t vmIdForDevice0Subdevice0 = 0; + uint32_t vmIdForDevice1 = 0; + + memoryManager->registeredEngines = EngineControlContainer{this->device->allEngines}; + memoryManager->registeredEngines.insert(memoryManager->registeredEngines.end(), this->device->getSubDevice(0)->getAllEngines().begin(), this->device->getSubDevice(0)->getAllEngines().end()); + memoryManager->registeredEngines.insert(memoryManager->registeredEngines.end(), device1->getAllEngines().begin(), device1->getAllEngines().end()); + + for (auto engine : memoryManager->registeredEngines) { + engine.osContext->incRefInternal(); + if (engine.osContext->isDefaultContext()) { + + if (engine.osContext->getRootDeviceIndex() == 0) { + + if (engine.osContext->getDeviceBitfield().to_ulong() == 3) { + auto osContexLinux = static_cast(engine.osContext); + vmIdForDevice0 = osContexLinux->getDrmVmIds()[0]; + } else if (engine.osContext->getDeviceBitfield().to_ulong() == 1) { + auto osContexLinux = static_cast(engine.osContext); + vmIdForDevice0Subdevice0 = osContexLinux->getDrmVmIds()[0]; + } + } else { + if (engine.osContext->getDeviceBitfield().to_ulong() == 3) { + auto osContexLinux = static_cast(engine.osContext); + vmIdForDevice1 = osContexLinux->getDrmVmIds()[0]; + } + } + } + } + + EXPECT_NE(0u, vmIdForDevice0); + EXPECT_NE(0u, vmIdForDevice0Subdevice0); + EXPECT_NE(0u, vmIdForDevice1); + + AllocationData allocationData; + allocationData.size = 13u; + allocationData.hostPtr = reinterpret_cast(0x5001); + allocationData.rootDeviceIndex = device1->getRootDeviceIndex(); + allocationData.storageInfo.subDeviceBitfield = device1->getDeviceBitfield(); + + mock->context.vmBindCalled = 0; + mock1->context.vmBindCalled = 0; + + auto allocation = memoryManager->allocateGraphicsMemoryForNonSvmHostPtr(allocationData); + EXPECT_NE(nullptr, allocation); + + memoryManager->freeGraphicsMemory(allocation); + + EXPECT_EQ(mock->context.vmBindCalled, 0u); + EXPECT_EQ(mock1->context.vmBindCalled, 1u); + EXPECT_EQ(vmIdForDevice1, mock1->context.receivedVmBind->vmId); + + auto vmBindCalledBefore = mock1->context.vmBindCalled; + + allocationData.storageInfo.subDeviceBitfield = device->getSubDevice(0)->getDeviceBitfield(); + allocation = memoryManager->allocateGraphicsMemoryForNonSvmHostPtr(allocationData); + + EXPECT_NE(nullptr, allocation); + + memoryManager->freeGraphicsMemory(allocation); + + EXPECT_EQ(vmBindCalledBefore + 1, mock1->context.vmBindCalled); + + EXPECT_FALSE(mock->context.receivedVmBind.has_value()); + EXPECT_EQ(vmIdForDevice1, mock1->context.receivedVmBind->vmId); +} + HWTEST_F(DrmMemoryOperationsHandlerBindTest, givenDirectSubmissionWhenPinBOThenVmBindIsCalledInsteadOfExec) { DebugManager.flags.UseVmBind.set(1); mock->bindAvailable = true; diff --git a/shared/test/unit_test/os_interface/linux/drm_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_tests.cpp index 8a039acf4b..5a5f84efaa 100644 --- a/shared/test/unit_test/os_interface/linux/drm_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_tests.cpp @@ -358,7 +358,7 @@ TEST(DrmTest, givenDrmWhenOsContextIsCreatedThenCreateAndDestroyNewDrmOsContext) executionEnvironment->rootDeviceEnvironments[0]->initGmm(); { - OsContextLinux osContext1(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext1(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext1.ensureContextInitialized(); EXPECT_EQ(1u, osContext1.getDrmContextIds().size()); @@ -366,7 +366,7 @@ TEST(DrmTest, givenDrmWhenOsContextIsCreatedThenCreateAndDestroyNewDrmOsContext) EXPECT_EQ(0u, drmMock.receivedDestroyContextId); { - OsContextLinux osContext2(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext2(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext2.ensureContextInitialized(); EXPECT_EQ(1u, osContext2.getDrmContextIds().size()); EXPECT_EQ(drmMock.storedDrmContextId, osContext2.getDrmContextIds()[0]); @@ -386,7 +386,7 @@ TEST(DrmTest, whenCreatingDrmContextWithVirtualMemoryAddressSpaceThenProperVmIdI ASSERT_EQ(1u, drmMock.virtualMemoryIds.size()); - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_EQ(2u, drmMock.receivedContextParamRequestCount); @@ -404,7 +404,7 @@ TEST(DrmTest, whenCreatingDrmContextWithNoVirtualMemoryAddressSpaceThenProperCon ASSERT_EQ(0u, drmMock.virtualMemoryIds.size()); - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_EQ(1u, drmMock.receivedContextParamRequestCount); // unrecoverable context @@ -422,7 +422,7 @@ TEST(DrmTest, givenDrmAndNegativeCheckNonPersistentContextsSupportWhenOsContextI drmMock.storedRetValForPersistant = -1; drmMock.checkNonPersistentContextsSupport(); expectedCount += 2; - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_EQ(expectedCount, drmMock.receivedContextParamRequestCount); } @@ -430,7 +430,7 @@ TEST(DrmTest, givenDrmAndNegativeCheckNonPersistentContextsSupportWhenOsContextI drmMock.storedRetValForPersistant = 0; drmMock.checkNonPersistentContextsSupport(); ++expectedCount; - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); expectedCount += 3; EXPECT_EQ(expectedCount, drmMock.receivedContextParamRequestCount); @@ -445,20 +445,20 @@ TEST(DrmTest, givenDrmPreemptionEnabledAndLowPriorityEngineWhenCreatingOsContext DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]); drmMock.preemptionSupported = false; - OsContextLinux osContext1(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext1(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext1.ensureContextInitialized(); - OsContextLinux osContext2(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority})); + OsContextLinux osContext2(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority})); osContext2.ensureContextInitialized(); EXPECT_EQ(4u, drmMock.receivedContextParamRequestCount); drmMock.preemptionSupported = true; - OsContextLinux osContext3(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext3(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext3.ensureContextInitialized(); EXPECT_EQ(6u, drmMock.receivedContextParamRequestCount); - OsContextLinux osContext4(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority})); + OsContextLinux osContext4(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority})); osContext4.ensureContextInitialized(); EXPECT_EQ(9u, drmMock.receivedContextParamRequestCount); EXPECT_EQ(drmMock.storedDrmContextId, drmMock.receivedContextParamRequest.contextId); @@ -645,7 +645,7 @@ TEST(DrmTest, givenDrmWhenCreatingOsContextThenCreateDrmContextWithVmId) { executionEnvironment->rootDeviceEnvironments[0]->initGmm(); DrmMock drmMock(*executionEnvironment->rootDeviceEnvironments[0]); - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); drmMock.latestCreatedVmId = 0u; @@ -664,10 +664,10 @@ TEST(DrmTest, givenDrmWithPerContextVMRequiredWhenCreatingOsContextsThenImplicit DrmMock drmMock(rootEnv); EXPECT_TRUE(drmMock.requirePerContextVM); - OsContextLinux osContext1(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext1(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext1.ensureContextInitialized(); - OsContextLinux osContext2(drmMock, 5u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext2(drmMock, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor()); osContext2.ensureContextInitialized(); } @@ -681,7 +681,7 @@ TEST(DrmTest, givenPerContextVMRequiredWhenCreatingOsContextsThenImplicitVmIdPer drmMock.storedRetValForVmId = 20; - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_EQ(2u, drmMock.receivedContextParamRequestCount); @@ -702,7 +702,7 @@ TEST(DrmTest, givenPerContextVMRequiredWhenCreatingOsContextForSubDeviceThenImpl drmMock.storedRetValForVmId = 4; DeviceBitfield deviceBitfield(1 << 3); - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor(deviceBitfield)); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(deviceBitfield)); osContext.ensureContextInitialized(); EXPECT_EQ(2u, drmMock.receivedContextParamRequestCount); @@ -726,7 +726,7 @@ TEST(DrmTest, givenPerContextVMRequiredWhenCreatingOsContextsForRootDeviceThenIm drmMock.storedRetValForVmId = 4; DeviceBitfield deviceBitfield(1 | 1 << 1); - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor(deviceBitfield)); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(deviceBitfield)); osContext.ensureContextInitialized(); EXPECT_EQ(2 * 2u, drmMock.receivedContextParamRequestCount); @@ -749,7 +749,7 @@ TEST(DrmTest, givenNoPerContextVmsDrmWhenCreatingOsContextsThenVmIdIsNotQueriedA drmMock.storedRetValForVmId = 1; - OsContextLinux osContext(drmMock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_EQ(2u, drmMock.receivedContextParamRequestCount); @@ -770,7 +770,7 @@ TEST(DrmTest, givenProgramDebuggingAndContextDebugAvailableWhenCreatingContextTh drmMock.contextDebugSupported = true; drmMock.callBaseCreateDrmContext = false; - OsContextLinux osContext(drmMock, 5u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drmMock, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); // drmMock returns ctxId == 0 @@ -789,7 +789,7 @@ TEST(DrmTest, givenProgramDebuggingAndContextDebugAvailableWhenCreatingContextFo DrmMockNonFailing drmMock(*executionEnvironment->rootDeviceEnvironments[0]); drmMock.contextDebugSupported = true; - OsContextLinux osContext(drmMock, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal})); + OsContextLinux osContext(drmMock, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal})); osContext.ensureContextInitialized(); EXPECT_EQ(static_cast(-1), drmMock.passedContextDebugId); @@ -810,7 +810,7 @@ TEST(DrmTest, givenNotEnabledDebuggingOrContextDebugUnsupportedWhenCreatingConte EXPECT_FALSE(executionEnvironment->isDebuggingEnabled()); - OsContextLinux osContext(drmMock, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular})); + OsContextLinux osContext(drmMock, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular})); osContext.ensureContextInitialized(); EXPECT_FALSE(drmMock.capturedCooperativeContextRequest); @@ -820,7 +820,7 @@ TEST(DrmTest, givenNotEnabledDebuggingOrContextDebugUnsupportedWhenCreatingConte drmMock.callBaseCreateDrmContext = false; drmMock.capturedCooperativeContextRequest = true; - OsContextLinux osContext2(drmMock, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular})); + OsContextLinux osContext2(drmMock, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular})); osContext2.ensureContextInitialized(); EXPECT_FALSE(drmMock.capturedCooperativeContextRequest); @@ -880,7 +880,7 @@ TEST(DrmTest, givenProgramDebuggingWhenCreatingContextThenUnrecoverableContextIs DrmMock drm(*executionEnvironment->rootDeviceEnvironments[0]); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); EXPECT_TRUE(drm.unrecoverableContextSet); @@ -1250,7 +1250,7 @@ TEST(DrmTest, GivenIoctlErrorWhenIsGpuHangIsCalledThenErrorIsThrown) { uint32_t contextId{0}; EngineDescriptor engineDescriptor{EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular})}; - MockOsContextLinux mockOsContextLinux{drm, contextId, engineDescriptor}; + MockOsContextLinux mockOsContextLinux{drm, 0, contextId, engineDescriptor}; mockOsContextLinux.drmContextIds.push_back(0); mockOsContextLinux.drmContextIds.push_back(3); @@ -1264,7 +1264,7 @@ TEST(DrmTest, GivenZeroBatchActiveAndZeroBatchPendingResetStatsWhenIsGpuHangIsCa uint32_t contextId{0}; EngineDescriptor engineDescriptor{EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular})}; - MockOsContextLinux mockOsContextLinux{drm, contextId, engineDescriptor}; + MockOsContextLinux mockOsContextLinux{drm, 0, contextId, engineDescriptor}; mockOsContextLinux.drmContextIds.push_back(0); mockOsContextLinux.drmContextIds.push_back(3); @@ -1287,7 +1287,7 @@ TEST(DrmTest, GivenBatchActiveGreaterThanZeroResetStatsWhenIsGpuHangIsCalledThen uint32_t contextId{0}; EngineDescriptor engineDescriptor{EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular})}; - MockOsContextLinux mockOsContextLinux{drm, contextId, engineDescriptor}; + MockOsContextLinux mockOsContextLinux{drm, 0, contextId, engineDescriptor}; mockOsContextLinux.drmContextIds.push_back(0); mockOsContextLinux.drmContextIds.push_back(3); @@ -1311,7 +1311,7 @@ TEST(DrmTest, GivenBatchPendingGreaterThanZeroResetStatsWhenIsGpuHangIsCalledThe uint32_t contextId{0}; EngineDescriptor engineDescriptor{EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_BCS, EngineUsage::Regular})}; - MockOsContextLinux mockOsContextLinux{drm, contextId, engineDescriptor}; + MockOsContextLinux mockOsContextLinux{drm, 0, contextId, engineDescriptor}; mockOsContextLinux.drmContextIds.push_back(8); ResetStats resetStats{}; diff --git a/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp index 44b8b747a3..8611c77746 100644 --- a/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_vm_bind_prelim_tests.cpp @@ -25,7 +25,7 @@ TEST(DrmVmBindTest, givenBoRequiringImmediateBindWhenBindingThenImmediateFlagIsP MockBufferObject bo(&drm, 3, 0, 0, 1); bo.requireImmediateBinding(true); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); bo.bind(&osContext, 0); @@ -43,7 +43,7 @@ TEST(DrmVmBindTest, givenBoRequiringExplicitResidencyWhenBindingThenMakeResident MockBufferObject bo(&drm, 3, 0, 0, 1); bo.requireExplicitResidency(requireResidency); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint32_t vmHandleId = 0; bo.bind(&osContext, vmHandleId); @@ -81,7 +81,7 @@ TEST(DrmVmBindTest, givenBoNotRequiringExplicitResidencyWhenCallingWaitForBindTh MockBufferObject bo(&drm, 3, 0, 0, 1); bo.requireExplicitResidency(requireResidency); - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint32_t vmHandleId = 0; bo.bind(&osContext, vmHandleId); @@ -107,7 +107,7 @@ TEST(DrmVmBindTest, givenUseKmdMigrationWhenCallingBindBoOnUnifiedSharedMemoryTh DrmQueryMock drm(*executionEnvironment->rootDeviceEnvironments[0]); drm.pageFaultSupported = true; - OsContextLinux osContext(drm, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(drm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); osContext.ensureContextInitialized(); uint32_t vmHandleId = 0; diff --git a/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp b/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp index 2d3d16a252..3e16b21662 100644 --- a/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/drm_with_prelim_tests.cpp @@ -497,7 +497,7 @@ TEST_F(IoctlHelperPrelimFixture, givenProgramDebuggingAndContextDebugSupportedWh executionEnvironment->rootDeviceEnvironments[0]->getMutableHardwareInfo()->platform.eProductFamily = defaultHwInfo->platform.eProductFamily; - OsContextLinux osContext(*drm, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular})); + OsContextLinux osContext(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Regular})); osContext.ensureContextInitialized(); EXPECT_NE(static_cast(-1), drm->passedContextDebugId); @@ -507,7 +507,7 @@ TEST_F(IoctlHelperPrelimFixture, givenProgramDebuggingAndContextDebugSupportedWh EXPECT_FALSE(drm->capturedCooperativeContextRequest); } - OsContextLinux osContext2(*drm, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Cooperative})); + OsContextLinux osContext2(*drm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Cooperative})); osContext2.ensureContextInitialized(); EXPECT_NE(static_cast(-1), drm->passedContextDebugId); diff --git a/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp b/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp index e29736ae8e..9b6df7baf5 100644 --- a/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp +++ b/shared/test/unit_test/os_interface/linux/os_context_linux_tests.cpp @@ -29,7 +29,7 @@ TEST(OSContextLinux, givenReinitializeContextWhenContextIsInitThenContextIsStill MockExecutionEnvironment executionEnvironment; std::unique_ptr mock(new DrmMockCustom(*executionEnvironment.rootDeviceEnvironments[0])); executionEnvironment.rootDeviceEnvironments[0]->memoryOperationsInterface = DrmMemoryOperationsHandler::create(*mock.get(), 0u); - OsContextLinux osContext(*mock, 0u, EngineDescriptorHelper::getDefaultDescriptor()); + OsContextLinux osContext(*mock, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor()); EXPECT_NO_THROW(osContext.reInitializeContext()); EXPECT_NO_THROW(osContext.ensureContextInitialized()); } diff --git a/shared/test/unit_test/os_interface/os_context_tests.cpp b/shared/test/unit_test/os_interface/os_context_tests.cpp index 6b3738f513..8229c7cbd0 100644 --- a/shared/test/unit_test/os_interface/os_context_tests.cpp +++ b/shared/test/unit_test/os_interface/os_context_tests.cpp @@ -17,7 +17,7 @@ using namespace NEO; TEST(OSContext, whenCreatingDefaultOsContextThenExpectInitializedAlways) { - OsContext *osContext = OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor()); + OsContext *osContext = OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor()); EXPECT_FALSE(osContext->isLowPriority()); EXPECT_FALSE(osContext->isInternalEngine()); EXPECT_FALSE(osContext->isRootDevice()); @@ -28,7 +28,7 @@ TEST(OSContext, givenInternalAndRootDeviceAreTrueWhenCreatingDefaultOsContextThe auto descriptor = EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::Internal}); descriptor.isRootDevice = true; - OsContext *osContext = OsContext::create(nullptr, 0, descriptor); + OsContext *osContext = OsContext::create(nullptr, 0, 0, descriptor); EXPECT_FALSE(osContext->isLowPriority()); EXPECT_TRUE(osContext->isInternalEngine()); EXPECT_TRUE(osContext->isRootDevice()); @@ -39,7 +39,7 @@ TEST(OSContext, givenLowPriorityAndRootDeviceAreTrueWhenCreatingDefaultOsContext auto descriptor = EngineDescriptorHelper::getDefaultDescriptor({aub_stream::ENGINE_RCS, EngineUsage::LowPriority}); descriptor.isRootDevice = true; - OsContext *osContext = OsContext::create(nullptr, 0, descriptor); + OsContext *osContext = OsContext::create(nullptr, 0, 0, descriptor); EXPECT_TRUE(osContext->isLowPriority()); EXPECT_FALSE(osContext->isInternalEngine()); EXPECT_TRUE(osContext->isRootDevice()); @@ -47,7 +47,7 @@ TEST(OSContext, givenLowPriorityAndRootDeviceAreTrueWhenCreatingDefaultOsContext } TEST(OSContext, givenOsContextCreatedDefaultIsFalseWhenSettingTrueThenFlagTrueReturned) { - OsContext *osContext = OsContext::create(nullptr, 0, EngineDescriptorHelper::getDefaultDescriptor()); + OsContext *osContext = OsContext::create(nullptr, 0, 0, EngineDescriptorHelper::getDefaultDescriptor()); EXPECT_FALSE(osContext->isDefaultContext()); osContext->setDefaultContext(true); EXPECT_TRUE(osContext->isDefaultContext()); @@ -57,7 +57,7 @@ TEST(OSContext, givenOsContextCreatedDefaultIsFalseWhenSettingTrueThenFlagTrueRe TEST(OSContext, givenCooperativeEngineWhenIsCooperativeEngineIsCalledThenReturnTrue) { auto engineDescriptor = EngineDescriptorHelper::getDefaultDescriptor(); engineDescriptor.engineTypeUsage.second = EngineUsage::Cooperative; - auto pOsContext = OsContext::create(nullptr, 0, engineDescriptor); + auto pOsContext = OsContext::create(nullptr, 0, 0, engineDescriptor); EXPECT_FALSE(pOsContext->isRegular()); EXPECT_FALSE(pOsContext->isLowPriority()); EXPECT_FALSE(pOsContext->isInternalEngine()); @@ -67,7 +67,7 @@ TEST(OSContext, givenCooperativeEngineWhenIsCooperativeEngineIsCalledThenReturnT TEST(OSContext, givenReinitializeContextWhenContextIsInitThenContextIsStillIinitializedAfter) { auto engineDescriptor = EngineDescriptorHelper::getDefaultDescriptor(); - auto pOsContext = OsContext::create(nullptr, 0, engineDescriptor); + auto pOsContext = OsContext::create(nullptr, 0, 0, engineDescriptor); EXPECT_NO_THROW(pOsContext->reInitializeContext()); EXPECT_NO_THROW(pOsContext->ensureContextInitialized()); delete pOsContext; @@ -75,7 +75,7 @@ TEST(OSContext, givenReinitializeContextWhenContextIsInitThenContextIsStillIinit TEST(OSContext, givenSetPowerHintThenGetPowerHintShowsTheSameValue) { auto engineDescriptor = EngineDescriptorHelper::getDefaultDescriptor(); - auto pOsContext = OsContext::create(nullptr, 0, engineDescriptor); + auto pOsContext = OsContext::create(nullptr, 0, 0, engineDescriptor); pOsContext->setUmdPowerHintValue(1); EXPECT_EQ(1, pOsContext->getUmdPowerHintValue()); delete pOsContext; @@ -89,7 +89,7 @@ struct DeferredOsContextCreationTests : ::testing::Test { std::unique_ptr createOsContext(EngineTypeUsage engineTypeUsage, bool defaultEngine) { OSInterface *osInterface = device->getRootDeviceEnvironment().osInterface.get(); - std::unique_ptr osContext{OsContext::create(osInterface, 0, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage))}; + std::unique_ptr osContext{OsContext::create(osInterface, device->getRootDeviceIndex(), 0, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage))}; EXPECT_FALSE(osContext->isInitialized()); return osContext; } @@ -169,7 +169,7 @@ TEST_F(DeferredOsContextCreationTests, givenBlitterEngineWhenCreatingOsContextTh TEST_F(DeferredOsContextCreationTests, givenEnsureContextInitializeCalledMultipleTimesWhenOsContextIsCreatedThenInitializeOnlyOnce) { struct MyOsContext : OsContext { MyOsContext(uint32_t contextId, - const EngineDescriptor &engineDescriptor) : OsContext(contextId, engineDescriptor) {} + const EngineDescriptor &engineDescriptor) : OsContext(0, contextId, engineDescriptor) {} void initializeContext() override { initializeContextCalled++; diff --git a/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp b/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp index ea073b2046..d8b3e2b289 100644 --- a/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/device_command_stream_tests.cpp @@ -354,7 +354,7 @@ TEST_F(WddmPreemptionHeaderTests, givenWddmCommandStreamReceiverWhenPreemptionIs auto csr = std::make_unique>(*executionEnvironment, 0, 1); executionEnvironment->memoryManager.reset(new MemoryManagerCreate(false, false, *executionEnvironment)); csr->overrideDispatchPolicy(DispatchMode::ImmediateDispatch); - OsContextWin osContext(*wddm, 0u, + OsContextWin osContext(*wddm, csr->getRootDeviceIndex(), 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*hwInfo))); csr->setupContext(osContext); @@ -379,7 +379,7 @@ TEST_F(WddmPreemptionHeaderTests, givenWddmCommandStreamReceiverWhenPreemptionIs auto csr = std::make_unique>(*executionEnvironment, 0, 1); executionEnvironment->memoryManager.reset(new MemoryManagerCreate(false, false, *executionEnvironment)); csr->overrideDispatchPolicy(DispatchMode::ImmediateDispatch); - OsContextWin osContext(*wddm, 0u, + OsContextWin osContext(*wddm, csr->getRootDeviceIndex(), 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(hwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0], PreemptionHelper::getDefaultPreemptionMode(*hwInfo))); csr->setupContext(osContext); diff --git a/shared/test/unit_test/os_interface/windows/os_context_win_tests.cpp b/shared/test/unit_test/os_interface/windows/os_context_win_tests.cpp index 51af8c308f..5dccfc1801 100644 --- a/shared/test/unit_test/os_interface/windows/os_context_win_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/os_context_win_tests.cpp @@ -26,25 +26,25 @@ struct OsContextWinTest : public WddmTestWithMockGdiDll { }; TEST_F(OsContextWinTest, givenWddm20WhenCreatingOsContextThenOsContextIsInitialized) { - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); EXPECT_NO_THROW(osContext->ensureContextInitialized()); } TEST_F(OsContextWinTest, givenWddm20WhenCreatingWddmContextFailThenOsContextCreationFails) { wddm->device = INVALID_HANDLE; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); EXPECT_ANY_THROW(osContext->ensureContextInitialized()); } TEST_F(OsContextWinTest, givenWddm20WhenCreatingWddmMonitorFenceFailThenOsContextCreationFails) { *getCreateSynchronizationObject2FailCallFcn() = true; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); EXPECT_ANY_THROW(osContext->ensureContextInitialized()); } TEST_F(OsContextWinTest, givenWddm20WhenRegisterTrimCallbackFailThenOsContextCreationFails) { *getRegisterTrimNotificationFailCallFcn() = true; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); EXPECT_ANY_THROW(osContext->ensureContextInitialized()); } @@ -53,12 +53,12 @@ TEST_F(OsContextWinTest, givenWddm20WhenRegisterTrimCallbackIsDisabledThenOsCont DebugManager.flags.DoNotRegisterTrimCallback.set(true); *getRegisterTrimNotificationFailCallFcn() = true; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); EXPECT_NO_THROW(osContext->ensureContextInitialized()); } TEST_F(OsContextWinTest, givenReinitializeContextWhenContextIsInitThenContextIsDestroyedAndRecreated) { - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); EXPECT_NO_THROW(osContext->reInitializeContext()); EXPECT_NO_THROW(osContext->ensureContextInitialized()); } @@ -82,7 +82,7 @@ struct OsContextWinTestNoCleanup : public WddmTestWithMockGdiDllNoCleanup { }; TEST_F(OsContextWinTestNoCleanup, givenReinitializeContextWhenContextIsInitThenContextIsNotDestroyed) { - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engineTypeUsage, preemptionMode)); EXPECT_FALSE(this->wddm->isDriverAvailable()); EXPECT_TRUE(this->wddm->skipResourceCleanup()); EXPECT_NO_THROW(osContext->reInitializeContext()); diff --git a/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp b/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp index 9049f85499..3242e292b4 100644 --- a/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/os_interface_win_tests.cpp @@ -32,7 +32,7 @@ TEST(OsContextTest, givenWddmWhenCreateOsContextAfterInitWddmThenOsContextIsInit auto preemptionMode = PreemptionHelper::getDefaultPreemptionMode(*defaultHwInfo); wddm->init(); EXPECT_EQ(0u, wddm->registerTrimCallbackResult.called); - auto osContext = std::make_unique(*wddm, 0u, + auto osContext = std::make_unique(*wddm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*defaultHwInfo)[0], preemptionMode)); osContext->ensureContextInitialized(); EXPECT_EQ(osContext->getWddm(), wddm); diff --git a/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp index 2d2203e4c4..d34a06d17d 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_preemption_tests.cpp @@ -42,7 +42,7 @@ class WddmPreemptionTests : public Test { hwInfo = executionEnvironment->rootDeviceEnvironments[0]->getHardwareInfo(); ASSERT_NE(nullptr, hwInfo); auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - osContext = std::make_unique(*wddm, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); + osContext = std::make_unique(*wddm, 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); osContext->ensureContextInitialized(); } diff --git a/shared/test/unit_test/os_interface/windows/wddm_shared_allocations_test.cpp b/shared/test/unit_test/os_interface/windows/wddm_shared_allocations_test.cpp index 9a6e8f45b5..77732071d8 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_shared_allocations_test.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_shared_allocations_test.cpp @@ -45,7 +45,7 @@ class WddmSharedTestsFixture : public GdiDllFixture, public MockExecutionEnviron auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); osContext->ensureContextInitialized(); } diff --git a/shared/test/unit_test/os_interface/windows/wddm_tests.cpp b/shared/test/unit_test/os_interface/windows/wddm_tests.cpp index 0c6da87bf9..7ea79f5a30 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_tests.cpp @@ -100,7 +100,7 @@ TEST_F(WddmTests, whenftrEuDebugIsFalseThenDebuggingEnabledReturnsFalse) { TEST_F(WddmTests, whenProgramDebugIsEnabledAndCreatingContextWithInternalEngineThenDebuggableContextReturnsFalse) { executionEnvironment->setDebuggingEnabled(); wddm->init(); - OsContextWin osContext(*wddm, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_RCS, EngineUsage::Internal})); + OsContextWin osContext(*wddm, 0, 5u, EngineDescriptorHelper::getDefaultDescriptor({aub_stream::EngineType::ENGINE_RCS, EngineUsage::Internal})); osContext.ensureContextInitialized(); EXPECT_FALSE(osContext.isDebuggableContext()); } @@ -434,7 +434,7 @@ struct WddmSkipResourceCleanupFixtureWithMockGdiDll : public GdiDllFixture, publ auto hwInfo = rootDeviceEnvironment->getHardwareInfo(); auto engine = HwHelper::get(defaultHwInfo->platform.eRenderCoreFamily).getGpgpuEngineInstances(*hwInfo)[0]; - osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); + osContext = std::make_unique(*osInterface->getDriverModel()->as(), 0, 0u, EngineDescriptorHelper::getDefaultDescriptor(engine, preemptionMode)); osContext->ensureContextInitialized(); }