From f404f3ceb1d1687e6894e04fef145ddabf0aa5af Mon Sep 17 00:00:00 2001 From: "Dunajski, Bartosz" Date: Mon, 19 Feb 2024 13:33:43 +0000 Subject: [PATCH] refactor: initial support for per platform extension string Signed-off-by: Dunajski, Bartosz --- .../core/source/driver/driver_handle_imp.cpp | 3 +++ .../gfx_core_helpers/l0_gfx_core_helper.h | 3 +++ .../l0_gfx_core_helper_base.inl | 6 +++++- .../unit_tests/sources/driver/test_driver.cpp | 20 ++++++++++++++++--- 4 files changed, 28 insertions(+), 4 deletions(-) diff --git a/level_zero/core/source/driver/driver_handle_imp.cpp b/level_zero/core/source/driver/driver_handle_imp.cpp index 74521556cc..bd96d36a97 100644 --- a/level_zero/core/source/driver/driver_handle_imp.cpp +++ b/level_zero/core/source/driver/driver_handle_imp.cpp @@ -30,6 +30,7 @@ #include "level_zero/core/source/driver/extension_function_address.h" #include "level_zero/core/source/driver/host_pointer_manager.h" #include "level_zero/core/source/fabric/fabric.h" +#include "level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h" #include "level_zero/core/source/image/image.h" #include "driver_version_l0.h" @@ -146,6 +147,8 @@ ze_result_t DriverHandleImp::getExtensionProperties(uint32_t *pCount, additionalExtensions.push_back({ZE_BINDLESS_IMAGE_EXP_NAME, ZE_BINDLESS_IMAGE_EXP_VERSION_CURRENT}); } + devices[0]->getL0GfxCoreHelper().appendPlatformSpecificExtensions(additionalExtensions, devices[0]->getProductHelper()); + auto extensionCount = static_cast(this->extensionsSupported.size() + additionalExtensions.size()); if (nullptr == pExtensionProperties) { diff --git a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h index 4e0c8eaf67..1124620e09 100644 --- a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h +++ b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h @@ -25,6 +25,7 @@ struct HardwareInfo; struct EngineGroupT; struct RootDeviceEnvironment; class Debugger; +class ProductHelper; } // namespace NEO namespace L0 { @@ -89,6 +90,7 @@ class L0GfxCoreHelper : public NEO::ApiGfxCoreHelper { virtual bool hasUnifiedPostSyncAllocationLayout() const = 0; virtual uint32_t getImmediateWritePostSyncOffset() const = 0; virtual uint32_t getCmdListUpdateCapabilities() const = 0; + virtual void appendPlatformSpecificExtensions(std::vector> &extensions, const NEO::ProductHelper &productHelper) const = 0; protected: L0GfxCoreHelper() = default; @@ -131,6 +133,7 @@ class L0GfxCoreHelperHw : public L0GfxCoreHelper { bool hasUnifiedPostSyncAllocationLayout() const override; uint32_t getImmediateWritePostSyncOffset() const override; uint32_t getCmdListUpdateCapabilities() const override; + void appendPlatformSpecificExtensions(std::vector> &extensions, const NEO::ProductHelper &productHelper) const override; protected: L0GfxCoreHelperHw() = default; diff --git a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl index b65b4ec234..48bbbd3950 100644 --- a/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl +++ b/level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper_base.inl @@ -1,5 +1,5 @@ /* - * Copyright (C) 2020-2023 Intel Corporation + * Copyright (C) 2020-2024 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -64,4 +64,8 @@ uint32_t L0GfxCoreHelperHw::getImmediateWritePostSyncOffset() const { return NEO::ImplicitScalingDispatch::getImmediateWritePostSyncOffset(); } +template +void L0GfxCoreHelperHw::appendPlatformSpecificExtensions(std::vector> &extensions, const NEO::ProductHelper &productHelper) const { +} + } // namespace L0 diff --git a/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp b/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp index 6382093e43..ef27da1aa4 100644 --- a/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp +++ b/level_zero/core/test/unit_tests/sources/driver/test_driver.cpp @@ -29,6 +29,7 @@ #include "level_zero/api/driver_experimental/public/zex_driver.h" #include "level_zero/core/source/driver/driver_handle_imp.h" #include "level_zero/core/source/driver/driver_imp.h" +#include "level_zero/core/source/gfx_core_helpers/l0_gfx_core_helper.h" #include "level_zero/core/test/unit_tests/fixtures/device_fixture.h" #include "level_zero/core/test/unit_tests/fixtures/host_pointer_manager_fixture.h" #include "level_zero/core/test/unit_tests/mocks/mock_driver.h" @@ -108,24 +109,37 @@ TEST_F(DriverVersionTest, givenSupportedExtensionsWhenCheckIfDeviceIpVersionIsSu } TEST_F(DriverVersionTest, givenCallToGetExtensionPropertiesThenSupportedExtensionsAreReturned) { + std::vector> additionalExtensions; + device->getL0GfxCoreHelper().appendPlatformSpecificExtensions(additionalExtensions, device->getProductHelper()); + uint32_t count = 0; ze_result_t res = driverHandle->getExtensionProperties(&count, nullptr); - EXPECT_EQ(count, static_cast(driverHandle->extensionsSupported.size())); + EXPECT_EQ(count, static_cast(driverHandle->extensionsSupported.size() + additionalExtensions.size())); EXPECT_EQ(ZE_RESULT_SUCCESS, res); ze_driver_extension_properties_t *extensionProperties = new ze_driver_extension_properties_t[count]; count++; res = driverHandle->getExtensionProperties(&count, extensionProperties); - EXPECT_EQ(count, static_cast(driverHandle->extensionsSupported.size())); + EXPECT_EQ(count, static_cast(driverHandle->extensionsSupported.size() + additionalExtensions.size())); EXPECT_EQ(ZE_RESULT_SUCCESS, res); DriverHandleImp *driverHandleImp = static_cast(driverHandle.get()); - for (uint32_t i = 0; i < count; i++) { + + size_t i = 0; + for (; i < driverHandleImp->extensionsSupported.size(); i++) { auto extension = extensionProperties[i]; EXPECT_EQ(0, strcmp(extension.name, driverHandleImp->extensionsSupported[i].first.c_str())); EXPECT_EQ(extension.version, driverHandleImp->extensionsSupported[i].second); } + for (size_t j = 0; j < additionalExtensions.size(); j++) { + auto extension = extensionProperties[i]; + EXPECT_EQ(0, strcmp(extension.name, additionalExtensions[j].first.c_str())); + EXPECT_EQ(extension.version, additionalExtensions[j].second); + + i++; + } + delete[] extensionProperties; }