diff --git a/opencl/test/unit_test/command_queue/command_queue_tests_pvc_and_later.cpp b/opencl/test/unit_test/command_queue/command_queue_tests_pvc_and_later.cpp index 233838bf4d..1a80d94d67 100644 --- a/opencl/test/unit_test/command_queue/command_queue_tests_pvc_and_later.cpp +++ b/opencl/test/unit_test/command_queue/command_queue_tests_pvc_and_later.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021-2023 Intel Corporation + * Copyright (C) 2021-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -206,7 +206,12 @@ HWTEST2_F(CommandQueuePvcAndLaterTests, givenAdditionalBcsWhenCreatingCommandQue MockClDevice clDevice{device}; MockContext context{&clDevice}; - const auto familyIndex = device->getEngineGroupIndexFromEngineGroupType(EngineGroupType::linkedCopy); + const auto &productHelper = device->getExecutionEnvironment()->rootDeviceEnvironments[0]->getProductHelper(); + auto engineGroupType = EngineGroupType::linkedCopy; + if (aub_stream::EngineType::ENGINE_BCS != productHelper.getDefaultCopyEngine()) { + engineGroupType = EngineGroupType::copy; + } + const auto familyIndex = device->getEngineGroupIndexFromEngineGroupType(engineGroupType); cl_command_queue_properties queueProperties[5] = { CL_QUEUE_FAMILY_INTEL, familyIndex, @@ -574,9 +579,14 @@ struct BcsCsrSelectionCommandQueueTests : ::testing::Test { } std::unique_ptr createQueueWithLinkBcsSelectedWithQueueFamilies(size_t linkBcsIndex) { + const auto &productHelper = device->getRootDeviceEnvironment().getProductHelper(); + auto engineGroupType = EngineGroupType::linkedCopy; + if (aub_stream::EngineType::ENGINE_BCS != productHelper.getDefaultCopyEngine()) { + engineGroupType = EngineGroupType::copy; + } cl_command_queue_properties queueProperties[5] = {}; queueProperties[0] = CL_QUEUE_FAMILY_INTEL; - queueProperties[1] = device->getEngineGroupIndexFromEngineGroupType(EngineGroupType::linkedCopy); + queueProperties[1] = device->getEngineGroupIndexFromEngineGroupType(engineGroupType); queueProperties[2] = CL_QUEUE_INDEX_INTEL; queueProperties[3] = linkBcsIndex; auto queue = createQueue(queueProperties); diff --git a/shared/source/device/device.cpp b/shared/source/device/device.cpp index 393bc5cc4f..8514be4971 100644 --- a/shared/source/device/device.cpp +++ b/shared/source/device/device.cpp @@ -355,9 +355,11 @@ bool Device::createEngines() { void Device::addEngineToEngineGroup(EngineControl &engine) { auto &hardwareInfo = this->getHardwareInfo(); auto &gfxCoreHelper = getGfxCoreHelper(); + auto &productHelper = getProductHelper(); auto &rootDeviceEnvironment = this->getRootDeviceEnvironment(); - const EngineGroupType engineGroupType = gfxCoreHelper.getEngineGroupType(engine.getEngineType(), engine.getEngineUsage(), hardwareInfo); + EngineGroupType engineGroupType = gfxCoreHelper.getEngineGroupType(engine.getEngineType(), engine.getEngineUsage(), hardwareInfo); + productHelper.adjustEngineGroupType(engineGroupType); if (!gfxCoreHelper.isSubDeviceEngineSupported(rootDeviceEnvironment, getDeviceBitfield(), engine.getEngineType())) { return; diff --git a/shared/source/os_interface/product_helper.h b/shared/source/os_interface/product_helper.h index b2aa804ed0..7f59d5e012 100644 --- a/shared/source/os_interface/product_helper.h +++ b/shared/source/os_interface/product_helper.h @@ -42,6 +42,7 @@ struct RootDeviceEnvironment; class OSInterface; class DriverModel; enum class DriverModelType; +enum class EngineGroupType : uint32_t; using ProductHelperCreateFunctionType = std::unique_ptr (*)(); extern ProductHelperCreateFunctionType productHelperFactory[IGFX_MAX_PRODUCT]; @@ -213,6 +214,7 @@ class ProductHelper { virtual uint64_t overridePatIndex(bool isUncachedType, uint64_t patIndex) const = 0; virtual std::vector getSupportedNumGrfs(const ReleaseHelper *releaseHelper) const = 0; virtual aub_stream::EngineType getDefaultCopyEngine() const = 0; + virtual void adjustEngineGroupType(EngineGroupType &engineGroupType) const = 0; virtual ~ProductHelper() = default; diff --git a/shared/source/os_interface/product_helper.inl b/shared/source/os_interface/product_helper.inl index e790c2a7ef..8b43c63aad 100644 --- a/shared/source/os_interface/product_helper.inl +++ b/shared/source/os_interface/product_helper.inl @@ -836,4 +836,7 @@ aub_stream::EngineType ProductHelperHw::getDefaultCopyEngine() const return aub_stream::EngineType::ENGINE_BCS; } +template +void ProductHelperHw::adjustEngineGroupType(EngineGroupType &engineGroupType) const {} + } // namespace NEO diff --git a/shared/source/os_interface/product_helper_hw.h b/shared/source/os_interface/product_helper_hw.h index 8a9cc45e32..e9d86cacf3 100644 --- a/shared/source/os_interface/product_helper_hw.h +++ b/shared/source/os_interface/product_helper_hw.h @@ -163,6 +163,7 @@ class ProductHelperHw : public ProductHelper { uint64_t overridePatIndex(bool isUncachedType, uint64_t patIndex) const override; std::vector getSupportedNumGrfs(const ReleaseHelper *releaseHelper) const override; aub_stream::EngineType getDefaultCopyEngine() const override; + void adjustEngineGroupType(EngineGroupType &engineGroupType) const override; ~ProductHelperHw() override = default; diff --git a/shared/test/unit_test/os_interface/product_helper_tests.cpp b/shared/test/unit_test/os_interface/product_helper_tests.cpp index 1abd819362..6a70488aa9 100644 --- a/shared/test/unit_test/os_interface/product_helper_tests.cpp +++ b/shared/test/unit_test/os_interface/product_helper_tests.cpp @@ -859,3 +859,12 @@ HWTEST_F(ProductHelperTest, givenProductHelperWhenGettingSupportedNumGrfsThenCor HWTEST_F(ProductHelperTest, givenProductHelperWhenGettingDefaultCopyEngineThenEngineBCSIsReturned) { EXPECT_EQ(aub_stream::EngineType::ENGINE_BCS, productHelper->getDefaultCopyEngine()); } + +HWTEST_F(ProductHelperTest, givenProductHelperWhenAdjustingEnginesGroupThenDoNotChangeEngineGroups) { + for (uint32_t engineGroupIt = static_cast(EngineGroupType::compute); engineGroupIt < static_cast(EngineGroupType::maxEngineGroups); engineGroupIt++) { + auto engineGroupType = static_cast(engineGroupIt); + auto engineGroupTypeUnchanged = engineGroupType; + productHelper->adjustEngineGroupType(engineGroupType); + EXPECT_EQ(engineGroupTypeUnchanged, engineGroupType); + } +} \ No newline at end of file