From f1a38cbe492b0f274eb2b6484a2e530661d34d2f Mon Sep 17 00:00:00 2001 From: Andrzej Koska Date: Wed, 23 Nov 2022 11:29:58 +0000 Subject: [PATCH] Add AIL for Davinci Resolve This AIL allows the Davinci Resolve to use overlapping buffers outside of the specification Related-To: NEO-5871 Signed-off-by: Andrzej Koska andrzej.koska@intel.com --- shared/source/ail/ail_configuration.cpp | 3 ++ shared/source/ail/ail_configuration.h | 1 + .../ail/gen11/ehl/ail_configuration_ehl.cpp | 38 +++++++++++++++++ .../gen11/icllp/ail_configuration_icllp.cpp | 38 +++++++++++++++++ .../ail/gen11/lkf/ail_configuration_lkf.cpp | 38 +++++++++++++++++ .../ail/gen9/bxt/ail_configuration_bxt.cpp | 38 +++++++++++++++++ .../ail/gen9/cfl/ail_configuration_cfl.cpp | 38 +++++++++++++++++ .../ail/gen9/glk/ail_configuration_glk.cpp | 38 +++++++++++++++++ .../ail/gen9/kbl/ail_configuration_kbl.cpp | 38 +++++++++++++++++ .../ail/gen9/skl/ail_configuration_skl.cpp | 38 +++++++++++++++++ shared/test/unit_test/ail/ail_tests.cpp | 42 +++++++++++++++++-- 11 files changed, 347 insertions(+), 3 deletions(-) create mode 100644 shared/source/ail/gen11/ehl/ail_configuration_ehl.cpp create mode 100644 shared/source/ail/gen11/icllp/ail_configuration_icllp.cpp create mode 100644 shared/source/ail/gen11/lkf/ail_configuration_lkf.cpp create mode 100644 shared/source/ail/gen9/bxt/ail_configuration_bxt.cpp create mode 100644 shared/source/ail/gen9/cfl/ail_configuration_cfl.cpp create mode 100644 shared/source/ail/gen9/glk/ail_configuration_glk.cpp create mode 100644 shared/source/ail/gen9/kbl/ail_configuration_kbl.cpp create mode 100644 shared/source/ail/gen9/skl/ail_configuration_skl.cpp diff --git a/shared/source/ail/ail_configuration.cpp b/shared/source/ail/ail_configuration.cpp index 0dcbd5ebe8..5899a755c4 100644 --- a/shared/source/ail/ail_configuration.cpp +++ b/shared/source/ail/ail_configuration.cpp @@ -8,7 +8,9 @@ #include "shared/source/ail/ail_configuration.h" #include "shared/source/helpers/hash.h" +#include "shared/source/helpers/hw_info.h" +#include #include #include @@ -21,4 +23,5 @@ bool AILConfiguration::isKernelHashCorrect(const std::string &kernelsSources, ui bool AILConfiguration::sourcesContainKernel(const std::string &kernelsSources, std::string_view kernelName) const { return (kernelsSources.find(kernelName) != std::string::npos); } + } // namespace NEO diff --git a/shared/source/ail/ail_configuration.h b/shared/source/ail/ail_configuration.h index efb1e126ed..287ab7b2b9 100644 --- a/shared/source/ail/ail_configuration.h +++ b/shared/source/ail/ail_configuration.h @@ -33,6 +33,7 @@ enum class AILEnumeration : uint32_t { DISABLE_BLITTER, DISABLE_COMPRESSION, ENABLE_FP64, + DISABLE_HOST_PTR_TRACKING, AIL_MAX_OPTIONS_COUNT }; diff --git a/shared/source/ail/gen11/ehl/ail_configuration_ehl.cpp b/shared/source/ail/gen11/ehl/ail_configuration_ehl.cpp new file mode 100644 index 0000000000..d535085cba --- /dev/null +++ b/shared/source/ail/gen11/ehl/ail_configuration_ehl.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILEHL; + +std::map> applicationMapEHL = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapEHL.find(processName); + if (search != applicationMapEHL.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/source/ail/gen11/icllp/ail_configuration_icllp.cpp b/shared/source/ail/gen11/icllp/ail_configuration_icllp.cpp new file mode 100644 index 0000000000..c49538f2c1 --- /dev/null +++ b/shared/source/ail/gen11/icllp/ail_configuration_icllp.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILICLLP; + +std::map> applicationMapICLLP = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapICLLP.find(processName); + if (search != applicationMapICLLP.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/source/ail/gen11/lkf/ail_configuration_lkf.cpp b/shared/source/ail/gen11/lkf/ail_configuration_lkf.cpp new file mode 100644 index 0000000000..a3e0a5c2b5 --- /dev/null +++ b/shared/source/ail/gen11/lkf/ail_configuration_lkf.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILLKF; + +std::map> applicationMapLKF = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapLKF.find(processName); + if (search != applicationMapLKF.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/source/ail/gen9/bxt/ail_configuration_bxt.cpp b/shared/source/ail/gen9/bxt/ail_configuration_bxt.cpp new file mode 100644 index 0000000000..1423a14569 --- /dev/null +++ b/shared/source/ail/gen9/bxt/ail_configuration_bxt.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILBXT; + +std::map> applicationMapBXT = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapBXT.find(processName); + if (search != applicationMapBXT.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/source/ail/gen9/cfl/ail_configuration_cfl.cpp b/shared/source/ail/gen9/cfl/ail_configuration_cfl.cpp new file mode 100644 index 0000000000..c3631dcafe --- /dev/null +++ b/shared/source/ail/gen9/cfl/ail_configuration_cfl.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILCFL; + +std::map> applicationMapCFL = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapCFL.find(processName); + if (search != applicationMapCFL.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/source/ail/gen9/glk/ail_configuration_glk.cpp b/shared/source/ail/gen9/glk/ail_configuration_glk.cpp new file mode 100644 index 0000000000..dc3a966fb5 --- /dev/null +++ b/shared/source/ail/gen9/glk/ail_configuration_glk.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILGLK; + +std::map> applicationMapGLK = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapGLK.find(processName); + if (search != applicationMapGLK.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/source/ail/gen9/kbl/ail_configuration_kbl.cpp b/shared/source/ail/gen9/kbl/ail_configuration_kbl.cpp new file mode 100644 index 0000000000..a4fa73a14f --- /dev/null +++ b/shared/source/ail/gen9/kbl/ail_configuration_kbl.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILKBL; + +std::map> applicationMapKBL = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapKBL.find(processName); + if (search != applicationMapKBL.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/source/ail/gen9/skl/ail_configuration_skl.cpp b/shared/source/ail/gen9/skl/ail_configuration_skl.cpp new file mode 100644 index 0000000000..f8cb285f16 --- /dev/null +++ b/shared/source/ail/gen9/skl/ail_configuration_skl.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/ail/ail_configuration_base.inl" +#include "shared/source/helpers/hw_info.h" + +#include +#include + +namespace NEO { +static EnableAIL enableAILSKL; + +std::map> applicationMapSKL = { + {"resolve", {AILEnumeration::DISABLE_HOST_PTR_TRACKING}} // Disable hostPtrTracking for DaVinci Resolve +}; + +template <> +inline void AILConfigurationHw::applyExt(RuntimeCapabilityTable &runtimeCapabilityTable) { + auto search = applicationMapSKL.find(processName); + if (search != applicationMapSKL.end()) { + for (size_t i = 0; i < search->second.size(); ++i) { + switch (search->second[i]) { + case AILEnumeration::DISABLE_HOST_PTR_TRACKING: + runtimeCapabilityTable.hostPtrTrackingEnabled = false; + break; + default: + break; + } + } + } +} + +template class AILConfigurationHw; +} // namespace NEO diff --git a/shared/test/unit_test/ail/ail_tests.cpp b/shared/test/unit_test/ail/ail_tests.cpp index b120008325..c7f5f50811 100644 --- a/shared/test/unit_test/ail/ail_tests.cpp +++ b/shared/test/unit_test/ail/ail_tests.cpp @@ -13,6 +13,7 @@ namespace NEO { using IsSKL = IsProduct; using IsDG2 = IsProduct; +using IsHostPtrTrackingDisabled = IsWithinGfxCore; using AILTests = ::testing::Test; template @@ -23,10 +24,9 @@ class AILMock : public AILConfigurationHw { using AILConfiguration::sourcesContainKernel; }; -HWTEST2_F(AILTests, givenUninitializedTemplateWhenGetAILConfigurationThenNullptrIsReturned, IsSKL) { +HWTEST2_F(AILTests, givenInitializedTemplateWhenGetAILConfigurationThenNullptrIsNotReturned, IsSKL) { auto ailConfiguration = AILConfiguration::get(productFamily); - - ASSERT_EQ(nullptr, ailConfiguration); + EXPECT_NE(nullptr, ailConfiguration); } HWTEST2_F(AILTests, givenInitilizedTemplateWhenApplyWithBlenderIsCalledThenFP64SupportIsEnabled, IsAtLeastGen12lp) { @@ -179,4 +179,40 @@ HWTEST2_F(AILTests, whenModifyKernelIfRequiredIsCalledThenDontChangeKernelSource EXPECT_STREQ(copyKernel.c_str(), kernelSources.c_str()); } +HWTEST2_F(AILTests, givenPreGen12AndProcessNameIsResolveWhenApplyWithDavinciResolveThenHostPtrTrackingIsDisabled, IsHostPtrTrackingDisabled) { + VariableBackup ailConfigurationBackup(&ailConfigurationTable[productFamily]); + + AILMock ailTemp; + ailTemp.processName = "resolve"; + ailConfigurationTable[productFamily] = &ailTemp; + + auto ailConfiguration = AILConfiguration::get(productFamily); + ASSERT_NE(nullptr, ailConfiguration); + + NEO::RuntimeCapabilityTable rtTable = {}; + rtTable.hostPtrTrackingEnabled = true; + + ailConfiguration->apply(rtTable); + + EXPECT_FALSE(rtTable.hostPtrTrackingEnabled); +} + +HWTEST2_F(AILTests, givenPreGen12AndAndProcessNameIsNotResolveWhenApplyWithDavinciResolveThenHostPtrTrackingIsEnabled, IsHostPtrTrackingDisabled) { + VariableBackup ailConfigurationBackup(&ailConfigurationTable[productFamily]); + + AILMock ailTemp; + ailTemp.processName = "usualProcessName"; + ailConfigurationTable[productFamily] = &ailTemp; + + auto ailConfiguration = AILConfiguration::get(productFamily); + ASSERT_NE(nullptr, ailConfiguration); + + NEO::RuntimeCapabilityTable rtTable = {}; + rtTable.hostPtrTrackingEnabled = true; + + ailConfiguration->apply(rtTable); + + EXPECT_TRUE(rtTable.hostPtrTrackingEnabled); +} + } // namespace NEO