From aafbbf54db79ba855e8fc825eca0f58809f3e438 Mon Sep 17 00:00:00 2001 From: Kamil Diedrich Date: Wed, 3 Aug 2022 00:09:55 +0000 Subject: [PATCH] Add member for handling additional adapterInfo fields Signed-off-by: Kamil Diedrich --- opencl/source/sharings/d3d/enable_d3d.cpp | 14 +++++++---- .../unit_test/d3d_sharing/d3d_tests_part1.cpp | 13 ++++++++++ .../os_interface/windows/CMakeLists.txt | 2 ++ .../windows/driver_info_windows.cpp | 12 ---------- .../windows/driver_info_windows_impl.cpp | 24 +++++++++++++++++++ .../source/os_interface/windows/wddm/wddm.cpp | 2 ++ .../source/os_interface/windows/wddm/wddm.h | 6 +++++ .../wddm_additional_adapter_info_options.cpp | 15 ++++++++++++ shared/test/common/mocks/mock_wddm.h | 4 +++- .../os_interface/windows/wddm_tests.cpp | 5 ++++ 10 files changed, 79 insertions(+), 18 deletions(-) create mode 100644 shared/source/os_interface/windows/driver_info_windows_impl.cpp create mode 100644 shared/source/os_interface/windows/wddm/wddm_additional_adapter_info_options.cpp diff --git a/opencl/source/sharings/d3d/enable_d3d.cpp b/opencl/source/sharings/d3d/enable_d3d.cpp index 6bbd16a4e6..1f591163fe 100644 --- a/opencl/source/sharings/d3d/enable_d3d.cpp +++ b/opencl/source/sharings/d3d/enable_d3d.cpp @@ -1,5 +1,5 @@ /* - * Copyright (C) 2018-2021 Intel Corporation + * Copyright (C) 2018-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -104,11 +104,11 @@ std::string D3DSharingBuilderFactory::getExtensions(Driver } std::string D3DSharingBuilderFactory::getExtensions(DriverInfo *driverInfo) { - return "cl_khr_d3d10_sharing "; + return extensionEnabled ? "cl_khr_d3d10_sharing " : ""; } std::string D3DSharingBuilderFactory::getExtensions(DriverInfo *driverInfo) { - return "cl_khr_d3d11_sharing cl_intel_d3d11_nv12_media_sharing "; + return extensionEnabled ? "cl_khr_d3d11_sharing cl_intel_d3d11_nv12_media_sharing " : ""; } void D3DSharingBuilderFactory::fillGlobalDispatchTable() { @@ -169,9 +169,13 @@ void D3DSharingBuilderFactory::setExtensionEnabled(DriverI extensionEnabled = driverInfo->getMediaSharingSupport(); } -void D3DSharingBuilderFactory::setExtensionEnabled(DriverInfo *driverInfo) {} +void D3DSharingBuilderFactory::setExtensionEnabled(DriverInfo *driverInfo) { + extensionEnabled = driverInfo->getMediaSharingSupport(); +} -void D3DSharingBuilderFactory::setExtensionEnabled(DriverInfo *driverInfo) {} +void D3DSharingBuilderFactory::setExtensionEnabled(DriverInfo *driverInfo) { + extensionEnabled = driverInfo->getMediaSharingSupport(); +} static SharingFactory::RegisterSharing, D3DSharingFunctions> D3D9Sharing; static SharingFactory::RegisterSharing, D3DSharingFunctions> D3D10Sharing; diff --git a/opencl/test/unit_test/d3d_sharing/d3d_tests_part1.cpp b/opencl/test/unit_test/d3d_sharing/d3d_tests_part1.cpp index bec59f9949..df1bc62476 100644 --- a/opencl/test/unit_test/d3d_sharing/d3d_tests_part1.cpp +++ b/opencl/test/unit_test/d3d_sharing/d3d_tests_part1.cpp @@ -850,12 +850,25 @@ TEST(D3D10, givenD3D10BuilderWhenGettingExtensionsThenCorrectExtensionsListIsRet EXPECT_TRUE(hasSubstr(builderFactory->getExtensions(nullptr), std::string("cl_khr_d3d10_sharing"))); } +TEST(D3D10, givenD3D10BuilderAndExtensionEnableFalseWhenGettingExtensionsThenCorrectExtensionsListIsReturned) { + auto builderFactory = std::make_unique>(); + builderFactory->extensionEnabled = false; + EXPECT_FALSE(hasSubstr(builderFactory->getExtensions(nullptr), std::string("cl_khr_d3d10_sharing"))); +} + TEST(D3D11, givenD3D11BuilderWhenGettingExtensionsThenCorrectExtensionsListIsReturned) { auto builderFactory = std::make_unique>(); EXPECT_TRUE(hasSubstr(builderFactory->getExtensions(nullptr), std::string("cl_khr_d3d11_sharing"))); EXPECT_TRUE(hasSubstr(builderFactory->getExtensions(nullptr), std::string("cl_intel_d3d11_nv12_media_sharing"))); } +TEST(D3D11, givenD3D11BuilderAndExtensionEnableFalseWhenGettingExtensionsThenCorrectExtensionsListIsReturned) { + auto builderFactory = std::make_unique>(); + builderFactory->extensionEnabled = false; + EXPECT_FALSE(hasSubstr(builderFactory->getExtensions(nullptr), std::string("cl_khr_d3d11_sharing"))); + EXPECT_FALSE(hasSubstr(builderFactory->getExtensions(nullptr), std::string("cl_intel_d3d11_nv12_media_sharing"))); +} + TEST(D3DSharingFactory, givenEnabledFormatQueryAndFactoryWithD3DSharingsWhenGettingExtensionFunctionAddressThenFormatQueryFunctionsAreReturned) { DebugManagerStateRestore restorer; DebugManager.flags.EnableFormatQuery.set(true); diff --git a/shared/source/os_interface/windows/CMakeLists.txt b/shared/source/os_interface/windows/CMakeLists.txt index ba2370b10d..4d71a0bdd7 100644 --- a/shared/source/os_interface/windows/CMakeLists.txt +++ b/shared/source/os_interface/windows/CMakeLists.txt @@ -15,6 +15,7 @@ set(NEO_CORE_OS_INTERFACE_WINDOWS ${CMAKE_CURRENT_SOURCE_DIR}/debug_registry_reader.cpp ${CMAKE_CURRENT_SOURCE_DIR}/debug_registry_reader.h ${CMAKE_CURRENT_SOURCE_DIR}/device_command_stream.inl + ${CMAKE_CURRENT_SOURCE_DIR}${BRANCH_DIR_SUFFIX}driver_info_windows_impl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/driver_info_windows.cpp ${CMAKE_CURRENT_SOURCE_DIR}/driver_info_windows.h ${CMAKE_CURRENT_SOURCE_DIR}/environment_variables.h @@ -83,6 +84,7 @@ set(NEO_CORE_OS_INTERFACE_WDDM ${CMAKE_CURRENT_SOURCE_DIR}/wddm/adapter_factory.h ${CMAKE_CURRENT_SOURCE_DIR}/wddm/adapter_factory_dxcore.cpp ${CMAKE_CURRENT_SOURCE_DIR}/wddm/adapter_factory_dxcore.h + ${CMAKE_CURRENT_SOURCE_DIR}/wddm${BRANCH_DIR_SUFFIX}wddm_additional_adapter_info_options.cpp ${CMAKE_CURRENT_SOURCE_DIR}/wddm/configure_device_address_space_${DRIVER_MODEL}.cpp ${CMAKE_CURRENT_SOURCE_DIR}/wddm/set_gmm_input_args_${DRIVER_MODEL}.cpp ${CMAKE_CURRENT_SOURCE_DIR}/wddm/max_mem_alloc_size_${DRIVER_MODEL}.cpp diff --git a/shared/source/os_interface/windows/driver_info_windows.cpp b/shared/source/os_interface/windows/driver_info_windows.cpp index 1dfd204af0..a81080fb24 100644 --- a/shared/source/os_interface/windows/driver_info_windows.cpp +++ b/shared/source/os_interface/windows/driver_info_windows.cpp @@ -33,18 +33,6 @@ std::string getCurrentLibraryPath() { } namespace NEO { - -DriverInfo *DriverInfo::create(const HardwareInfo *hwInfo, const OSInterface *osInterface) { - if (osInterface == nullptr) { - return nullptr; - } - - auto wddm = osInterface->getDriverModel()->as(); - UNRECOVERABLE_IF(wddm == nullptr); - - return new DriverInfoWindows(wddm->getDeviceRegistryPath(), wddm->getPciBusInfo()); -}; - DriverInfoWindows::DriverInfoWindows(const std::string &fullPath, const PhysicalDevicePciBusInfo &pciBusInfo) : path(DriverInfoWindows::trimRegistryKey(fullPath)), registryReader(createRegistryReaderFunc(path)) { this->pciBusInfo = pciBusInfo; diff --git a/shared/source/os_interface/windows/driver_info_windows_impl.cpp b/shared/source/os_interface/windows/driver_info_windows_impl.cpp new file mode 100644 index 0000000000..2b564c3987 --- /dev/null +++ b/shared/source/os_interface/windows/driver_info_windows_impl.cpp @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/os_interface/windows/driver_info_windows.h" +#include "shared/source/os_interface/windows/wddm/wddm.h" + +namespace NEO { + +DriverInfo *DriverInfo::create(const HardwareInfo *hwInfo, const OSInterface *osInterface) { + if (osInterface == nullptr) { + return nullptr; + } + + auto wddm = osInterface->getDriverModel()->as(); + UNRECOVERABLE_IF(wddm == nullptr); + + return new DriverInfoWindows(wddm->getDeviceRegistryPath(), wddm->getPciBusInfo()); +}; + +} // namespace NEO \ No newline at end of file diff --git a/shared/source/os_interface/windows/wddm/wddm.cpp b/shared/source/os_interface/windows/wddm/wddm.cpp index 380615bce2..66185c9261 100644 --- a/shared/source/os_interface/windows/wddm/wddm.cpp +++ b/shared/source/os_interface/windows/wddm/wddm.cpp @@ -188,6 +188,8 @@ bool Wddm::queryAdapterInfo() { maxRenderFrequency = adapterInfo.MaxRenderFreq; timestampFrequency = adapterInfo.GfxTimeStampFreq; instrumentationEnabled = adapterInfo.Caps.InstrumentationIsEnabled != 0; + + populateAdditionalAdapterInfoOptions(adapterInfo); } return status == STATUS_SUCCESS; diff --git a/shared/source/os_interface/windows/wddm/wddm.h b/shared/source/os_interface/windows/wddm/wddm.h index 4e7c11c088..ea7e8a7b4b 100644 --- a/shared/source/os_interface/windows/wddm/wddm.h +++ b/shared/source/os_interface/windows/wddm/wddm.h @@ -207,6 +207,10 @@ class Wddm : public DriverModel { PhyicalDevicePciSpeedInfo getPciSpeedInfo() const override; + uint32_t getAdditionalAdapterInfoOptions() { + return additionalAdapterInfoOptions; + } + protected: Wddm(std::unique_ptr &&hwDeviceId, RootDeviceEnvironment &rootDeviceEnvironment); MOCKABLE_VIRTUAL bool waitOnGPU(D3DKMT_HANDLE context); @@ -224,6 +228,7 @@ class Wddm : public DriverModel { return evictNeeded; } void setPlatformSupportEvictWhenNecessaryFlag(const HwInfoConfig &hwInfoConfig); + void populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo); GMM_GFX_PARTITIONING gfxPartition{}; ADAPTER_BDF adapterBDF{}; @@ -265,6 +270,7 @@ class Wddm : public DriverModel { uint32_t maxRenderFrequency = 0; uint32_t timestampFrequency = 0u; + uint32_t additionalAdapterInfoOptions = 0u; unsigned int enablePreemptionRegValue = 1; diff --git a/shared/source/os_interface/windows/wddm/wddm_additional_adapter_info_options.cpp b/shared/source/os_interface/windows/wddm/wddm_additional_adapter_info_options.cpp new file mode 100644 index 0000000000..0906610057 --- /dev/null +++ b/shared/source/os_interface/windows/wddm/wddm_additional_adapter_info_options.cpp @@ -0,0 +1,15 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/os_interface/windows/wddm/wddm.h" + +namespace NEO { + +void Wddm::populateAdditionalAdapterInfoOptions(const ADAPTER_INFO_KMD &adapterInfo) { +} + +} // namespace NEO diff --git a/shared/test/common/mocks/mock_wddm.h b/shared/test/common/mocks/mock_wddm.h index b2528f3362..fe7adc7e24 100644 --- a/shared/test/common/mocks/mock_wddm.h +++ b/shared/test/common/mocks/mock_wddm.h @@ -28,6 +28,7 @@ constexpr auto virtualAllocAddress = is64bit ? 0x7FFFF0000000 : 0xFF000000; class WddmMock : public Wddm { public: using Wddm::adapterBDF; + using Wddm::additionalAdapterInfoOptions; using Wddm::adjustEvictNeededParameter; using Wddm::createPagingFenceLogger; using Wddm::currentPagingFenceValue; @@ -44,6 +45,7 @@ class WddmMock : public Wddm { using Wddm::pagingFenceAddress; using Wddm::pagingQueue; using Wddm::platformSupportsEvictWhenNecessary; + using Wddm::populateAdditionalAdapterInfoOptions; using Wddm::residencyLogger; using Wddm::rootDeviceEnvironment; using Wddm::setPlatformSupportEvictWhenNecessaryFlag; @@ -102,7 +104,7 @@ class WddmMock : public Wddm { bool configureDeviceAddressSpace() { configureDeviceAddressSpaceResult.called++; - //create context cant be called before configureDeviceAddressSpace + // create context cant be called before configureDeviceAddressSpace if (createContextResult.called > 0) { return configureDeviceAddressSpaceResult.success = false; } else { 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 22655521e5..61c67d3b20 100644 --- a/shared/test/unit_test/os_interface/windows/wddm_tests.cpp +++ b/shared/test/unit_test/os_interface/windows/wddm_tests.cpp @@ -149,6 +149,11 @@ TEST_F(WddmTests, GivenPlatformSupportsEvictWhenNecessaryWhenAdjustingEvictNeede EXPECT_TRUE(value); } +TEST_F(WddmTests, GivenWddmWhenAdditionalAdapterInfoOptionIsSetThenCorrectValueIsReturned) { + wddm->additionalAdapterInfoOptions = 13u; + EXPECT_EQ(13u, wddm->getAdditionalAdapterInfoOptions()); +} + TEST_F(WddmTests, GivenPlatformNotSupportEvictWhenNecessaryWhenAdjustingEvictNeededTrueThenExpectTrue) { wddm->platformSupportsEvictWhenNecessary = false; bool value = wddm->adjustEvictNeededParameter(true);