diff --git a/CMakeLists.txt b/CMakeLists.txt index f31a261847..cea0ea45bb 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -819,6 +819,7 @@ endif() set(BIKSIM_LIB_NAME "biksim") set(BUILTINS_SOURCES_LIB_NAME "builtins_sources") +set(BUILTINS_BINARIES_STATELESS_LIB_NAME "builtins_binaries_stateless") set(BUILTINS_BINARIES_BINDFUL_LIB_NAME "builtins_binaries_bindful") set(BUILTINS_BINARIES_BINDLESS_LIB_NAME "builtins_binaries_bindless") set(BUILTINS_SPIRV_LIB_NAME "builtins_spirv") diff --git a/level_zero/CMakeLists.txt b/level_zero/CMakeLists.txt index f7e5933a58..79d0182bb1 100644 --- a/level_zero/CMakeLists.txt +++ b/level_zero/CMakeLists.txt @@ -292,6 +292,7 @@ if(BUILD_WITH_L0) message(STATUS "Prebuilt kernels are linked to Level Zero.") target_sources(${TARGET_NAME_L0} PRIVATE + $ $ $ ) diff --git a/level_zero/core/test/aub_tests/CMakeLists.txt b/level_zero/core/test/aub_tests/CMakeLists.txt index 0d1c8402c0..26fdc3b8ca 100644 --- a/level_zero/core/test/aub_tests/CMakeLists.txt +++ b/level_zero/core/test/aub_tests/CMakeLists.txt @@ -52,6 +52,7 @@ target_sources(${TARGET_NAME} PRIVATE $ $ $ + $ $ $ $ diff --git a/level_zero/core/test/unit_tests/CMakeLists.txt b/level_zero/core/test/unit_tests/CMakeLists.txt index 8c5bb639a6..7604c16de1 100644 --- a/level_zero/core/test/unit_tests/CMakeLists.txt +++ b/level_zero/core/test/unit_tests/CMakeLists.txt @@ -92,6 +92,7 @@ target_sources(${TARGET_NAME} PRIVATE $ $ $ + $ $ $ ) diff --git a/level_zero/core/test/unit_tests/sources/builtin/CMakeLists.txt b/level_zero/core/test/unit_tests/sources/builtin/CMakeLists.txt index d3a5b6e574..2749743cdb 100644 --- a/level_zero/core/test/unit_tests/sources/builtin/CMakeLists.txt +++ b/level_zero/core/test/unit_tests/sources/builtin/CMakeLists.txt @@ -1,5 +1,5 @@ # -# Copyright (C) 2020-2021 Intel Corporation +# Copyright (C) 2020-2022 Intel Corporation # # SPDX-License-Identifier: MIT # @@ -7,7 +7,6 @@ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt ${CMAKE_CURRENT_SOURCE_DIR}/create_ult_builtin_functions_lib.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests_l0.cpp ${CMAKE_CURRENT_SOURCE_DIR}/builtin_functions_tests.cpp ) if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) diff --git a/level_zero/core/test/unit_tests/sources/builtin/built_in_tests_l0.cpp b/level_zero/core/test/unit_tests/sources/builtin/built_in_tests_l0.cpp deleted file mode 100644 index 40fbac4ebe..0000000000 --- a/level_zero/core/test/unit_tests/sources/builtin/built_in_tests_l0.cpp +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright (C) 2020-2022 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "shared/source/built_ins/built_ins.h" -#include "shared/source/helpers/api_specific_config.h" -#include "shared/test/common/built_ins/built_in_tests_shared.inl" -#include "shared/test/common/helpers/debug_manager_state_restore.h" -#include "shared/test/common/test_macros/test.h" - -#include "gtest/gtest.h" - -#include - -using namespace NEO; - -TEST(BuiltInTestsL0, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPassedThenNameHasCorrectPrefix) { - DebugManagerStateRestore dbgRestorer; - DebugManager.flags.UseBindlessMode.set(-1); - EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer; - const std::string extension = ".bin"; - const std::string platformName = "platformName"; - const uint32_t deviceRevId = 123; - - std::string prefix = ApiSpecificConfig::getBindlessConfiguration() ? "bindless" : "bindful"; - - std::string resourceNameGeneric = createBuiltinResourceName(builtin, extension); - std::string resourceNameForPlatform = createBuiltinResourceName(builtin, extension, platformName); - std::string resourceNameForPlatformAndStepping = createBuiltinResourceName(builtin, extension, platformName, deviceRevId); - - std::string expectedResourceNameGeneric = prefix + "_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatform = platformName.c_str(); - expectedResourceNameForPlatform += "_0_" + prefix + "_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatformAndStepping = platformName.c_str(); - expectedResourceNameForPlatformAndStepping += "_"; - expectedResourceNameForPlatformAndStepping += std::to_string(deviceRevId).c_str(); - expectedResourceNameForPlatformAndStepping += "_" + prefix + "_copy_buffer_to_buffer.builtin_kernel.bin"; - - EXPECT_EQ(0, strcmp(expectedResourceNameGeneric.c_str(), resourceNameGeneric.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatform.c_str(), resourceNameForPlatform.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatformAndStepping.c_str(), resourceNameForPlatformAndStepping.c_str())); -} -TEST(BuiltInTestsL0, givenUseBindlessBuiltinDisabledInL0ApiWhenBinExtensionPassedThenNameHasBindfulPrefix) { - givenUseBindlessBuiltinDisabledWhenBinExtensionPassedThenNameHasBindfulPrefix(); -} - -TEST(BuiltInTestsL0, givenUseBindlessBuiltinEnabledInL0ApiWhenBinExtensionPassedThenNameHasBindlessPrefix) { - givenUseBindlessBuiltinEnabledWhenBinExtensionPassedThenNameHasBindlessPrefix(); -} - -TEST(BuiltInTestsL0, GivenBindlessConfigWhenGettingBuiltinResourceThenResourceSizeIsNonZero) { - - DebugManagerStateRestore dbgRestorer; - DebugManager.flags.UseBindlessMode.set(1); - - auto hwInfo = *defaultHwInfo; - auto device = std::unique_ptr(MockDevice::createWithNewExecutionEnvironment(&hwInfo)); - auto mockBuiltinsLib = std::unique_ptr(new MockBuiltinsLib()); - - ASSERT_LE(2u, mockBuiltinsLib->allStorages.size()); - - bool bindlessFound = false; - - auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily); - std::string resourceNameGeneric = createBuiltinResourceName(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::getExtension(BuiltinCode::ECodeType::Binary)); - std::string resourceNameForPlatformType = createBuiltinResourceName(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::getExtension(BuiltinCode::ECodeType::Binary), - getFamilyNameWithType(hwInfo), - hwHelper.getDefaultRevisionId(hwInfo)); - std::string resourceNameForPlatformTypeAndStepping = createBuiltinResourceName(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::getExtension(BuiltinCode::ECodeType::Binary), - getFamilyNameWithType(hwInfo), - hwInfo.platform.usRevId); - - for (const auto &storage : mockBuiltinsLib->allStorages) { - if (storage->load(resourceNameForPlatformTypeAndStepping).size() != 0) { - bindlessFound = true; - } - } - - EXPECT_TRUE(bindlessFound); - - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Binary, *device).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferRect, BuiltinCode::ECodeType::Binary, *device).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillBuffer, BuiltinCode::ECodeType::Binary, *device).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::QueryKernelTimestamps, BuiltinCode::ECodeType::Binary, *device).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::COUNT, BuiltinCode::ECodeType::Binary, *device).size()); -} diff --git a/level_zero/tools/test/unit_tests/CMakeLists.txt b/level_zero/tools/test/unit_tests/CMakeLists.txt index 5ff28a86c1..e6b31ca38c 100644 --- a/level_zero/tools/test/unit_tests/CMakeLists.txt +++ b/level_zero/tools/test/unit_tests/CMakeLists.txt @@ -72,6 +72,7 @@ target_sources(${TARGET_NAME} PRIVATE $ $ $ + $ $ $ ) diff --git a/manifests/manifest.yml b/manifests/manifest.yml index 249798b330..c822883731 100644 --- a/manifests/manifest.yml +++ b/manifests/manifest.yml @@ -38,7 +38,7 @@ components: dest_dir: kernels_bin type: git branch: kernels_bin - revision: 1941-263 + revision: 1941-274 kmdaf: branch: kmdaf dest_dir: kmdaf diff --git a/opencl/source/CMakeLists.txt b/opencl/source/CMakeLists.txt index 8ba93955da..365383f107 100644 --- a/opencl/source/CMakeLists.txt +++ b/opencl/source/CMakeLists.txt @@ -109,6 +109,7 @@ if(${GENERATE_EXECUTABLE}) $ $ $ + $ $ ) diff --git a/opencl/test/unit_test/CMakeLists.txt b/opencl/test/unit_test/CMakeLists.txt index 56b4a2fd86..c2c4c606fa 100644 --- a/opencl/test/unit_test/CMakeLists.txt +++ b/opencl/test/unit_test/CMakeLists.txt @@ -59,6 +59,7 @@ set(NEO_IGDRCL_TESTS__TARGET_OBJECTS $ $ $ + $ $ $ $ diff --git a/opencl/test/unit_test/built_ins/CMakeLists.txt b/opencl/test/unit_test/built_ins/CMakeLists.txt index 5f0a6a99d3..6dfc9b9c58 100644 --- a/opencl/test/unit_test/built_ins/CMakeLists.txt +++ b/opencl/test/unit_test/built_ins/CMakeLists.txt @@ -9,7 +9,6 @@ set(IGDRCL_SRCS_tests_built_in ${CMAKE_CURRENT_SOURCE_DIR}/built_ins_file_names.h ${CMAKE_CURRENT_SOURCE_DIR}/built_ins_file_names.cpp ${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests.cpp - ${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests_ocl.cpp ${CMAKE_CURRENT_SOURCE_DIR}/get_built_ins_file_names.cpp ${CMAKE_CURRENT_SOURCE_DIR}/sip_tests.cpp ) diff --git a/opencl/test/unit_test/built_ins/built_in_tests.cpp b/opencl/test/unit_test/built_ins/built_in_tests.cpp index c6ea6c8b77..51ca5f45ef 100644 --- a/opencl/test/unit_test/built_ins/built_in_tests.cpp +++ b/opencl/test/unit_test/built_ins/built_in_tests.cpp @@ -1485,21 +1485,6 @@ TEST_F(BuiltInTests, GivenBuiltinResourceWhenCreatingBuiltinResourceThenSizesAre EXPECT_EQ(br1, br2); } -TEST_F(BuiltInTests, WhenCreatingBuiltinResourceNameThenCorrectStringIsReturned) { - EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer; - const std::string extension = ".cl"; - const std::string platformName = "skl"; - const uint32_t deviceRevId = 9; - - std::string resourceNameGeneric = createBuiltinResourceName(builtin, extension); - std::string resourceNameForPlatform = createBuiltinResourceName(builtin, extension, platformName); - std::string resourceNameForPlatformAndStepping = createBuiltinResourceName(builtin, extension, platformName, deviceRevId); - - EXPECT_EQ(0, strcmp("copy_buffer_to_buffer.builtin_kernel.cl", resourceNameGeneric.c_str())); - EXPECT_EQ(0, strcmp("skl_0_copy_buffer_to_buffer.builtin_kernel.cl", resourceNameForPlatform.c_str())); - EXPECT_EQ(0, strcmp("skl_9_copy_buffer_to_buffer.builtin_kernel.cl", resourceNameForPlatformAndStepping.c_str())); -} - TEST_F(BuiltInTests, WhenJoiningPathThenPathsAreJoinedWithCorrectSeparator) { std::string resourceName = "copy_buffer_to_buffer.builtin_kernel.cl"; std::string resourcePath = "path"; diff --git a/opencl/test/unit_test/built_ins/built_in_tests_ocl.cpp b/opencl/test/unit_test/built_ins/built_in_tests_ocl.cpp deleted file mode 100644 index 2d1ab654c1..0000000000 --- a/opencl/test/unit_test/built_ins/built_in_tests_ocl.cpp +++ /dev/null @@ -1,51 +0,0 @@ -/* - * Copyright (C) 2020-2022 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "shared/source/built_ins/built_ins.h" -#include "shared/test/common/built_ins/built_in_tests_shared.inl" -#include "shared/test/common/helpers/debug_manager_state_restore.h" -#include "shared/test/common/test_macros/test.h" - -#include "gtest/gtest.h" - -#include - -using namespace NEO; - -TEST(BuiltInTestsOcl, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPassedThenNameHasBindfulPrefix) { - DebugManagerStateRestore dbgRestorer; - DebugManager.flags.UseBindlessMode.set(-1); - EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer; - const std::string extension = ".bin"; - const std::string platformName = "skl"; - const uint32_t deviceRevId = 9; - - std::string resourceNameGeneric = createBuiltinResourceName(builtin, extension); - std::string resourceNameForPlatform = createBuiltinResourceName(builtin, extension, platformName); - std::string resourceNameForPlatformAndStepping = createBuiltinResourceName(builtin, extension, platformName, deviceRevId); - - std::string expectedResourceNameGeneric = "bindful_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatform = platformName.c_str(); - expectedResourceNameForPlatform += "_0_bindful_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatformAndStepping = platformName.c_str(); - expectedResourceNameForPlatformAndStepping += "_"; - expectedResourceNameForPlatformAndStepping += std::to_string(deviceRevId).c_str(); - expectedResourceNameForPlatformAndStepping += "_bindful_copy_buffer_to_buffer.builtin_kernel.bin"; - - EXPECT_EQ(0, strcmp(expectedResourceNameGeneric.c_str(), resourceNameGeneric.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatform.c_str(), resourceNameForPlatform.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatformAndStepping.c_str(), resourceNameForPlatformAndStepping.c_str())); -} -TEST(BuiltInTestsOcl, givenUseBindlessBuiltinDisabledInOclApiWhenBinExtensionPassedThenNameHasBindfulPrefix) { - givenUseBindlessBuiltinDisabledWhenBinExtensionPassedThenNameHasBindfulPrefix(); -} - -TEST(BuiltInTestsOcl, givenUseBindlessBuiltinEnabledInOclApiWhenBinExtensionPassedThenNameHasBindlessPrefix) { - givenUseBindlessBuiltinEnabledWhenBinExtensionPassedThenNameHasBindlessPrefix(); -} diff --git a/shared/source/built_ins/built_in_ops_base.h b/shared/source/built_ins/built_in_ops_base.h index 3357323027..4c842c166d 100644 --- a/shared/source/built_ins/built_in_ops_base.h +++ b/shared/source/built_ins/built_in_ops_base.h @@ -1,11 +1,13 @@ /* - * Copyright (C) 2019-2020 Intel Corporation + * Copyright (C) 2019-2022 Intel Corporation * * SPDX-License-Identifier: MIT * */ #pragma once +#include +#include #include namespace NEO { @@ -32,6 +34,16 @@ constexpr Type FillImage2d{15}; constexpr Type FillImage3d{16}; constexpr Type QueryKernelTimestamps{17}; +constexpr bool isStateless(Type type) { + constexpr std::array statelessBuiltins{{CopyBufferToBufferStateless, CopyBufferRectStateless, FillBufferStateless, CopyBufferToImage3dStateless, CopyImage3dToBufferStateless}}; + for (auto &builtinType : statelessBuiltins) { + if (type == builtinType) { + return true; + } + } + return false; +} + constexpr Type MaxBaseValue{17}; constexpr Type COUNT{64}; } // namespace EBuiltInOps diff --git a/shared/source/built_ins/built_ins.h b/shared/source/built_ins/built_ins.h index 13df4258d2..fabeffab87 100644 --- a/shared/source/built_ins/built_ins.h +++ b/shared/source/built_ins/built_ins.h @@ -36,10 +36,38 @@ static constexpr ConstStringRef mediaKernelsBuildOptionsList[] = { static constexpr CompilerOptions::ConstConcatenation<> mediaKernelsBuildOptions{mediaKernelsBuildOptionsList}; +struct BuiltinCode { + enum class ECodeType { + Any = 0, // for requesting "any" code available - priorities as below + Binary = 1, // ISA - highest priority + Intermediate = 2, // SPIR/LLVM - medium prioroty + Source = 3, // OCL C - lowest priority + COUNT, + INVALID + }; + + static const char *getExtension(BuiltinCode::ECodeType ct) { + switch (ct) { + default: + return ""; + case BuiltinCode::ECodeType::Binary: + return ".bin"; + case BuiltinCode::ECodeType::Intermediate: + return ".bc"; + case BuiltinCode::ECodeType::Source: + return ".cl"; + } + } + + BuiltinCode::ECodeType type; + BuiltinResourceT resource; + Device *targetDevice; +}; + BuiltinResourceT createBuiltinResource(const char *ptr, size_t size); BuiltinResourceT createBuiltinResource(const BuiltinResourceT &r); -std::string createBuiltinResourceName(EBuiltInOps::Type builtin, const std::string &extension, - const std::string &platformName = "", uint32_t deviceRevId = 0); +std::string createBuiltinResourceName(EBuiltInOps::Type builtin, const std::string &extension); +StackVec getBuiltinResourceNames(EBuiltInOps::Type builtin, BuiltinCode::ECodeType type, const Device &device); std::string joinPath(const std::string &lhs, const std::string &rhs); const char *getBuiltinAsString(EBuiltInOps::Type builtin); const char *getAdditionalBuiltinAsString(EBuiltInOps::Type builtin); @@ -97,34 +125,6 @@ class EmbeddedStorage : public Storage { BuiltinResourceT loadImpl(const std::string &fullResourceName) override; }; -struct BuiltinCode { - enum class ECodeType { - Any = 0, // for requesting "any" code available - priorities as below - Binary = 1, // ISA - highest priority - Intermediate = 2, // SPIR/LLVM - medium prioroty - Source = 3, // OCL C - lowest priority - COUNT, - INVALID - }; - - static const char *getExtension(ECodeType ct) { - switch (ct) { - default: - return ""; - case ECodeType::Binary: - return ".bin"; - case ECodeType::Intermediate: - return ".bc"; - case ECodeType::Source: - return ".cl"; - } - } - - ECodeType type; - BuiltinResourceT resource; - Device *targetDevice; -}; - class BuiltinsLib { public: BuiltinsLib(); diff --git a/shared/source/built_ins/built_ins_storage.cpp b/shared/source/built_ins/built_ins_storage.cpp index dab14a2647..b90d6bf7e8 100644 --- a/shared/source/built_ins/built_ins_storage.cpp +++ b/shared/source/built_ins/built_ins_storage.cpp @@ -14,6 +14,7 @@ #include "os_inc.h" #include +#include namespace NEO { @@ -72,24 +73,52 @@ BuiltinResourceT createBuiltinResource(const BuiltinResourceT &r) { return BuiltinResourceT(r); } -std::string createBuiltinResourceName(EBuiltInOps::Type builtin, const std::string &extension, - const std::string &platformName, uint32_t deviceRevId) { - std::string ret; - if (platformName.size() > 0) { - ret = platformName; - ret += "_" + std::to_string(deviceRevId); - ret += "_"; - } - if (extension == ".bin") { - ret += ApiSpecificConfig::getBindlessConfiguration() ? "bindless_" : "bindful_"; - } - ret += getBuiltinAsString(builtin); +std::string createBuiltinResourceName(EBuiltInOps::Type builtin, const std::string &extension) { + return getBuiltinAsString(builtin) + extension; +} - if (extension.size() > 0) { - ret += extension; - } +StackVec getBuiltinResourceNames(EBuiltInOps::Type builtin, BuiltinCode::ECodeType type, const Device &device) { + auto &hwInfo = device.getHardwareInfo(); + auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily); - return ret; + const auto platformName = getFamilyNameWithType(hwInfo); + const auto revisionId = std::to_string(hwInfo.platform.usRevId); + const auto builtinName = getBuiltinAsString(builtin); + const auto extension = BuiltinCode::getExtension(type); + auto getAddressingMode = [type, &hwInfo, builtin]() { + if (type == BuiltinCode::ECodeType::Binary) { + const bool requiresStatelessAddressing = (false == HwInfoConfig::get(hwInfo.platform.eProductFamily)->isStatefulAddressingModeSupported()); + const bool builtInUsesStatelessAddressing = EBuiltInOps::isStateless(builtin); + if (builtInUsesStatelessAddressing || requiresStatelessAddressing) { + return "stateless_"; + } else if (ApiSpecificConfig::getBindlessConfiguration()) { + return "bindless_"; + } else { + return "bindful_"; + } + } + return ""; + }; + const auto addressingMode = getAddressingMode(); + + auto createBuiltinResourceName = [](ConstStringRef platformName, ConstStringRef revisionId, ConstStringRef addressingMode, ConstStringRef builtinName, ConstStringRef extension) { + std::ostringstream outResourceName; + if (false == platformName.empty()) { + outResourceName << platformName.str() << "_" << revisionId.str() << "_"; + } + outResourceName << addressingMode.str() << builtinName.str() << extension.str(); + return outResourceName.str(); + }; + StackVec resourcesToLookup = {}; + resourcesToLookup.push_back(createBuiltinResourceName(platformName, revisionId, addressingMode, builtinName, extension)); + + const bool requiresSpecificResource = (BuiltinCode::ECodeType::Binary == type && hwHelper.isRevisionSpecificBinaryBuiltinRequired()); + if (false == requiresSpecificResource) { + const auto defaultRevisionId = std::to_string(hwHelper.getDefaultRevisionId(hwInfo)); + resourcesToLookup.push_back(createBuiltinResourceName(platformName, defaultRevisionId, addressingMode, builtinName, extension)); + resourcesToLookup.push_back(createBuiltinResourceName("", "", addressingMode, builtinName, extension)); + } + return resourcesToLookup; } std::string joinPath(const std::string &lhs, const std::string &rhs) { @@ -186,33 +215,17 @@ BuiltinCode BuiltinsLib::getBuiltinCode(EBuiltInOps::Type builtin, BuiltinCode:: } BuiltinResourceT BuiltinsLib::getBuiltinResource(EBuiltInOps::Type builtin, BuiltinCode::ECodeType requestedCodeType, Device &device) { - BuiltinResourceT bc; - auto &hwInfo = device.getHardwareInfo(); - auto &hwHelper = HwHelper::get(hwInfo.platform.eRenderCoreFamily); - std::string resourceNameGeneric = createBuiltinResourceName(builtin, BuiltinCode::getExtension(requestedCodeType)); - std::string resourceNameForPlatformType = createBuiltinResourceName(builtin, BuiltinCode::getExtension(requestedCodeType), - getFamilyNameWithType(hwInfo), - hwHelper.getDefaultRevisionId(hwInfo)); - std::string resourceNameForPlatformTypeAndStepping = createBuiltinResourceName(builtin, BuiltinCode::getExtension(requestedCodeType), - getFamilyNameWithType(hwInfo), - hwInfo.platform.usRevId); - - StackVec resourcesToLookup; - resourcesToLookup.push_back(&resourceNameForPlatformTypeAndStepping); - if (BuiltinCode::ECodeType::Binary != requestedCodeType || !hwHelper.isRevisionSpecificBinaryBuiltinRequired()) { - resourcesToLookup.push_back(&resourceNameForPlatformType); - resourcesToLookup.push_back(&resourceNameGeneric); - } - for (auto &rn : resourcesToLookup) { // first look for dedicated version, only fallback to generic one - for (auto &s : allStorages) { - UNRECOVERABLE_IF(!rn); - bc = s->load(*rn); - if (bc.size() != 0) { - return bc; + BuiltinResourceT builtinResource; + auto resourcesToLookup = getBuiltinResourceNames(builtin, requestedCodeType, device); + for (auto &resourceName : resourcesToLookup) { + for (auto &storage : allStorages) { + builtinResource = storage->load(resourceName); + if (builtinResource.size() != 0) { + return builtinResource; } } } - return bc; + return builtinResource; } } // namespace NEO diff --git a/shared/source/built_ins/builtins_binary.cmake b/shared/source/built_ins/builtins_binary.cmake index 9c3364c6e7..cc4b776d79 100644 --- a/shared/source/built_ins/builtins_binary.cmake +++ b/shared/source/built_ins/builtins_binary.cmake @@ -4,15 +4,18 @@ # SPDX-License-Identifier: MIT # +add_library(${BUILTINS_BINARIES_STATELESS_LIB_NAME} OBJECT EXCLUDE_FROM_ALL builtins_binary.cmake) add_library(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} OBJECT EXCLUDE_FROM_ALL builtins_binary.cmake) add_library(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} OBJECT EXCLUDE_FROM_ALL builtins_binary.cmake) +target_compile_definitions(${BUILTINS_BINARIES_STATELESS_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) target_compile_definitions(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) target_compile_definitions(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} PUBLIC MOCKABLE_VIRTUAL=) # Add builtins sources add_subdirectory(registry) -list(APPEND BIND_MODES +list(APPEND ADDRESSING_MODES + "stateless" "bindful" "bindless" ) @@ -55,7 +58,7 @@ if(COMPILE_BUILT_INS) add_subdirectory(kernels) endif() -foreach(MODE ${BIND_MODES}) +foreach(MODE ${ADDRESSING_MODES}) get_property(GENERATED_BUILTINS_CPPS_${MODE} GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE}) source_group("generated files\\${CORE_TYPE_LOWER}" FILES GENERATED_BUILTINS_CPPS_${MODE}) endforeach() @@ -95,3 +98,22 @@ target_include_directories(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} PRIVATE ${NEO__IGC_INCLUDE_DIR} ${THIRD_PARTY_DIR} ) + +if(COMPILE_BUILT_INS) + target_sources(${BUILTINS_BINARIES_STATELESS_LIB_NAME} PUBLIC ${GENERATED_BUILTINS_CPPS_stateless}) + set_source_files_properties(${GENERATED_BUILTINS_CPPS_stateless} PROPERTIES GENERATED TRUE) +endif() + +set_target_properties(${BUILTINS_BINARIES_STATELESS_LIB_NAME} PROPERTIES LINKER_LANGUAGE CXX) +set_target_properties(${BUILTINS_BINARIES_STATELESS_LIB_NAME} PROPERTIES POSITION_INDEPENDENT_CODE ON) +set_target_properties(${BUILTINS_BINARIES_STATELESS_LIB_NAME} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}") + +target_include_directories(${BUILTINS_BINARIES_STATELESS_LIB_NAME} PRIVATE + ${ENGINE_NODE_DIR} + ${KHRONOS_HEADERS_DIR} + ${KHRONOS_GL_HEADERS_DIR} + ${NEO__GMM_INCLUDE_DIR} + ${NEO__IGC_INCLUDE_DIR} + ${THIRD_PARTY_DIR} +) + diff --git a/shared/source/built_ins/kernels/CMakeLists.txt b/shared/source/built_ins/kernels/CMakeLists.txt index c48ae2d946..5f341a78cd 100644 --- a/shared/source/built_ins/kernels/CMakeLists.txt +++ b/shared/source/built_ins/kernels/CMakeLists.txt @@ -7,6 +7,7 @@ add_custom_target(builtins) set_target_properties(builtins PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}") set(BUILTINS_OUTDIR_WITH_ARCH "${TargetDir}/built_ins/${NEO_ARCH}") +add_dependencies(${BUILTINS_BINARIES_STATELESS_LIB_NAME} builtins) add_dependencies(${BUILTINS_BINARIES_BINDFUL_LIB_NAME} builtins) add_dependencies(${BUILTINS_BINARIES_BINDLESS_LIB_NAME} builtins) add_subdirectories() @@ -174,32 +175,57 @@ macro(macro_for_each_core_type) add_custom_target(${target_name}) add_dependencies(builtins ${target_name}) set_target_properties(${target_name} PROPERTIES FOLDER "${SHARED_SOURCE_PROJECTS_FOLDER}/${SHARED_BUILTINS_PROJECTS_FOLDER}/${family_name_with_type}") - foreach(MODE ${BIND_MODES}) + foreach(MODE ${ADDRESSING_MODES}) unset(BUILTINS_COMMANDS) if((${MODE} STREQUAL "bindless") AND (NOT BUILD_WITH_L0 OR("${CORE_TYPE}" STREQUAL "GEN8"))) continue() endif() - foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) - compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) - endforeach() - foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) - compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) - endforeach() - if(${IMAGE_SUPPORT}) - foreach(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES}) - compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTINS_IMAGES}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) - endforeach() - foreach(GENERATED_BUILTIN_IMAGES_STATELESS ${GENERATED_BUILTINS_IMAGES_STATELESS}) - compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_IMAGES_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) - endforeach() - endif() if(${AUX_TRANSLATION_SUPPORT}) foreach(GENERATED_BUILTIN_AUX_TRANSLATION ${GENERATED_BUILTINS_AUX_TRANSLATION}) compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_AUX_TRANSLATION}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) endforeach() endif() + + if(${MODE} STREQUAL "stateless") + foreach(GENERATED_BUILTIN_STATELESS ${GENERATED_BUILTINS_STATELESS}) + compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) + endforeach() + + if(${IMAGE_SUPPORT}) + foreach(GENERATED_BUILTIN_IMAGES_STATELESS ${GENERATED_BUILTINS_IMAGES_STATELESS}) + compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN_IMAGES_STATELESS}.builtin_kernel ${BITS} "${BUILTIN_OPTIONS_STATELESS}" ${MODE}) + endforeach() + endif() + + if("${CORE_TYPE}" STREQUAL "XE_HPC_CORE") + # Compile stateful versions as stateless + foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) + compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + + if(${IMAGE_SUPPORT}) + foreach(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES}) + compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTINS_IMAGES}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + endif() + endif() + else() + if("${CORE_TYPE}" STREQUAL "XE_HPC_CORE") + continue() + endif() + foreach(GENERATED_BUILTIN ${GENERATED_BUILTINS}) + compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTIN}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + + if(${IMAGE_SUPPORT}) + foreach(GENERATED_BUILTINS_IMAGES ${GENERATED_BUILTINS_IMAGES}) + compile_builtin(${CORE_TYPE} ${PLATFORM_TYPE} ${GENERATED_BUILTINS_IMAGES}.builtin_kernel ${NEO_BITS} "${BUILTIN_OPTIONS}" ${MODE}) + endforeach() + endif() + endif() + get_property(GENERATED_BUILTINS_CPPS_${MODE} GLOBAL PROPERTY GENERATED_BUILTINS_CPPS_${MODE}) foreach(BUILTIN ${BUILTINS_COMMANDS}) list(APPEND GENERATED_BUILTINS_CPPS_${MODE} ${BUILTIN}) diff --git a/shared/source/os_interface/hw_info_config.h b/shared/source/os_interface/hw_info_config.h index 4704b8826f..1113dc8472 100644 --- a/shared/source/os_interface/hw_info_config.h +++ b/shared/source/os_interface/hw_info_config.h @@ -135,6 +135,7 @@ class HwInfoConfig { virtual bool isEvictionIfNecessaryFlagSupported() const = 0; virtual void adjustNumberOfCcs(HardwareInfo &hwInfo) const = 0; virtual bool isPrefetcherDisablingInDirectSubmissionRequired() const = 0; + virtual bool isStatefulAddressingModeSupported() const = 0; MOCKABLE_VIRTUAL ~HwInfoConfig() = default; @@ -240,6 +241,7 @@ class HwInfoConfigHw : public HwInfoConfig { bool isEvictionIfNecessaryFlagSupported() const override; void adjustNumberOfCcs(HardwareInfo &hwInfo) const override; bool isPrefetcherDisablingInDirectSubmissionRequired() const override; + bool isStatefulAddressingModeSupported() const override; protected: HwInfoConfigHw() = default; diff --git a/shared/source/os_interface/hw_info_config.inl b/shared/source/os_interface/hw_info_config.inl index 7b4f809247..518ab3bcc9 100644 --- a/shared/source/os_interface/hw_info_config.inl +++ b/shared/source/os_interface/hw_info_config.inl @@ -492,4 +492,9 @@ template bool HwInfoConfigHw::isPrefetcherDisablingInDirectSubmissionRequired() const { return true; } + +template +bool HwInfoConfigHw::isStatefulAddressingModeSupported() const { + return true; +} } // namespace NEO diff --git a/shared/source/xe_hpc_core/pvc/os_agnostic_hw_info_config_pvc.inl b/shared/source/xe_hpc_core/pvc/os_agnostic_hw_info_config_pvc.inl index f391956ca7..f0fbe232df 100644 --- a/shared/source/xe_hpc_core/pvc/os_agnostic_hw_info_config_pvc.inl +++ b/shared/source/xe_hpc_core/pvc/os_agnostic_hw_info_config_pvc.inl @@ -198,4 +198,9 @@ bool HwInfoConfigHw::isIpSamplingSupported(const HardwareInfo &hwInf template <> void HwInfoConfigHw::adjustNumberOfCcs(HardwareInfo &hwInfo) const { hwInfo.gtSystemInfo.CCSInfo.NumberOfCCSEnabled = 1; +} + +template <> +bool HwInfoConfigHw::isStatefulAddressingModeSupported() const { + return false; } \ No newline at end of file diff --git a/shared/test/common/built_ins/CMakeLists.txt b/shared/test/common/built_ins/CMakeLists.txt deleted file mode 100644 index 3b869875dd..0000000000 --- a/shared/test/common/built_ins/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -# -# Copyright (C) 2022 Intel Corporation -# -# SPDX-License-Identifier: MIT -# - -target_sources(neo_libult_common PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt - ${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests_shared.inl -) \ No newline at end of file diff --git a/shared/test/common/built_ins/built_in_tests_shared.inl b/shared/test/common/built_ins/built_in_tests_shared.inl deleted file mode 100644 index 55a976536f..0000000000 --- a/shared/test/common/built_ins/built_in_tests_shared.inl +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (C) 2020-2022 Intel Corporation - * - * SPDX-License-Identifier: MIT - * - */ - -#include "shared/source/built_ins/built_ins.h" -#include "shared/test/common/fixtures/device_fixture.h" -#include "shared/test/common/helpers/debug_manager_state_restore.h" -#include "shared/test/common/mocks/mock_builtinslib.h" -#include "shared/test/common/mocks/ult_device_factory.h" -#include "shared/test/common/test_macros/hw_test.h" - -#include "gtest/gtest.h" - -#include - -namespace NEO { - -void givenUseBindlessBuiltinDisabledWhenBinExtensionPassedThenNameHasBindfulPrefix() { - DebugManagerStateRestore dbgRestorer; - DebugManager.flags.UseBindlessMode.set(0); - EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer; - const std::string extension = ".bin"; - const std::string platformName = "platformName"; - const uint32_t deviceRevId = 123; - - std::string resourceNameGeneric = createBuiltinResourceName(builtin, extension); - std::string resourceNameForPlatform = createBuiltinResourceName(builtin, extension, platformName); - std::string resourceNameForPlatformAndStepping = createBuiltinResourceName(builtin, extension, platformName, deviceRevId); - - std::string expectedResourceNameGeneric = "bindful_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatform = platformName.c_str(); - expectedResourceNameForPlatform += "_0_bindful_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatformAndStepping = platformName.c_str(); - expectedResourceNameForPlatformAndStepping += "_"; - expectedResourceNameForPlatformAndStepping += std::to_string(deviceRevId).c_str(); - expectedResourceNameForPlatformAndStepping += "_bindful_copy_buffer_to_buffer.builtin_kernel.bin"; - - EXPECT_EQ(0, strcmp(expectedResourceNameGeneric.c_str(), resourceNameGeneric.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatform.c_str(), resourceNameForPlatform.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatformAndStepping.c_str(), resourceNameForPlatformAndStepping.c_str())); -} - -void givenUseBindlessBuiltinEnabledWhenBinExtensionPassedThenNameHasBindlessPrefix() { - DebugManagerStateRestore dbgRestorer; - DebugManager.flags.UseBindlessMode.set(1); - EBuiltInOps::Type builtin = EBuiltInOps::CopyBufferToBuffer; - const std::string extension = ".bin"; - const std::string platformName = "skl"; - const uint32_t deviceRevId = 9; - - std::string resourceNameGeneric = createBuiltinResourceName(builtin, extension); - std::string resourceNameForPlatform = createBuiltinResourceName(builtin, extension, platformName); - std::string resourceNameForPlatformAndStepping = createBuiltinResourceName(builtin, extension, platformName, deviceRevId); - - std::string expectedResourceNameGeneric = "bindless_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatform = platformName.c_str(); - expectedResourceNameForPlatform += "_0_bindless_copy_buffer_to_buffer.builtin_kernel.bin"; - - std::string expectedResourceNameForPlatformAndStepping = platformName.c_str(); - expectedResourceNameForPlatformAndStepping += "_"; - expectedResourceNameForPlatformAndStepping += std::to_string(deviceRevId).c_str(); - expectedResourceNameForPlatformAndStepping += "_bindless_copy_buffer_to_buffer.builtin_kernel.bin"; - - EXPECT_EQ(0, strcmp(expectedResourceNameGeneric.c_str(), resourceNameGeneric.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatform.c_str(), resourceNameForPlatform.c_str())); - EXPECT_EQ(0, strcmp(expectedResourceNameForPlatformAndStepping.c_str(), resourceNameForPlatformAndStepping.c_str())); -} -} // namespace NEO - -using namespace NEO; - -using BuiltInSharedTest = Test; -HWTEST_F(BuiltInSharedTest, GivenBuiltinTypeBinaryWhenGettingBuiltinResourceForNotRegisteredRevisionThenBuiltinFromDefaultRevisionIsTaken) { - pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.usRevId += 0xdead; - auto mockBuiltinsLib = std::unique_ptr(new MockBuiltinsLib()); - - const std::array builtinTypes{EBuiltInOps::CopyBufferToBuffer, - EBuiltInOps::CopyBufferRect, - EBuiltInOps::FillBuffer, - EBuiltInOps::CopyBufferToImage3d, - EBuiltInOps::CopyImage3dToBuffer, - EBuiltInOps::CopyImageToImage1d, - EBuiltInOps::CopyImageToImage2d, - EBuiltInOps::CopyImageToImage3d, - EBuiltInOps::FillImage1d, - EBuiltInOps::FillImage2d, - EBuiltInOps::FillImage3d}; - - for (auto &builtinType : builtinTypes) { - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(builtinType, BuiltinCode::ECodeType::Binary, *pDevice).size()); - } - - UltDeviceFactory deviceFactory{1, 0}; - auto pDeviceWithDefaultRevision = deviceFactory.rootDevices[0]; - for (auto &builtinType : builtinTypes) { - EXPECT_EQ(mockBuiltinsLib->getBuiltinResource(builtinType, BuiltinCode::ECodeType::Binary, *pDeviceWithDefaultRevision).size(), mockBuiltinsLib->getBuiltinResource(builtinType, BuiltinCode::ECodeType::Binary, *pDevice).size()); - } -} diff --git a/shared/test/common/mocks/mock_builtinslib.h b/shared/test/common/mocks/mock_builtinslib.h index 2a89fa9898..32b82c9036 100644 --- a/shared/test/common/mocks/mock_builtinslib.h +++ b/shared/test/common/mocks/mock_builtinslib.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2021 Intel Corporation + * Copyright (C) 2021-2022 Intel Corporation * * SPDX-License-Identifier: MIT * @@ -13,5 +13,6 @@ using namespace NEO; class MockBuiltinsLib : BuiltinsLib { public: using BuiltinsLib::allStorages; + using BuiltinsLib::getBuiltinCode; using BuiltinsLib::getBuiltinResource; }; diff --git a/shared/test/common/test_files/CMakeLists.txt b/shared/test/common/test_files/CMakeLists.txt index b60e64d0c4..8d1506698f 100644 --- a/shared/test/common/test_files/CMakeLists.txt +++ b/shared/test/common/test_files/CMakeLists.txt @@ -52,6 +52,7 @@ endfunction() file(GLOB_RECURSE TEST_KERNELS *.cl) file(GLOB_RECURSE TEST_KERNELS_IMAGES *_images.cl) add_custom_target(prepare_test_kernels_for_shared) +add_dependencies(prepare_test_kernels_for_shared ${BUILTINS_BINARIES_STATELESS_LIB_NAME}) add_dependencies(prepare_test_kernels_for_shared ${BUILTINS_BINARIES_BINDFUL_LIB_NAME}) add_dependencies(prepare_test_kernels_for_shared ${BUILTINS_BINARIES_BINDLESS_LIB_NAME}) if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) diff --git a/shared/test/common/test_macros/header/common_matchers.h b/shared/test/common/test_macros/header/common_matchers.h index 1ded0e92f7..05a11505d2 100644 --- a/shared/test/common/test_macros/header/common_matchers.h +++ b/shared/test/common/test_macros/header/common_matchers.h @@ -71,3 +71,7 @@ using IsAtLeastSkl = IsAtLeastProduct; using IsAtMostDg2 = IsAtMostProduct; using IsNotPVC = IsNotWithinProducts; + +using HasStatefulSupport = IsNotAnyGfxCores; + +using HasNoStatefulSupport = IsAnyGfxCores; diff --git a/shared/test/unit_test/CMakeLists.txt b/shared/test/unit_test/CMakeLists.txt index b4f3ece20a..8875ceb426 100644 --- a/shared/test/unit_test/CMakeLists.txt +++ b/shared/test/unit_test/CMakeLists.txt @@ -81,7 +81,12 @@ if(NOT NEO_SKIP_UNIT_TESTS) add_subdirectories() endif() - target_sources(neo_shared_tests PRIVATE $) + target_sources(neo_shared_tests PRIVATE + $ + $ + $ + $ + ) add_dependencies(unit_tests prepare_test_kernels_for_shared) add_dependencies(unit_tests neo_shared_tests) diff --git a/shared/test/unit_test/built_ins/CMakeLists.txt b/shared/test/unit_test/built_ins/CMakeLists.txt index e243b7a31c..b5b2b994b8 100644 --- a/shared/test/unit_test/built_ins/CMakeLists.txt +++ b/shared/test/unit_test/built_ins/CMakeLists.txt @@ -6,6 +6,7 @@ target_sources(neo_shared_tests PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt + ${CMAKE_CURRENT_SOURCE_DIR}/builtin_tests.cpp ${CMAKE_CURRENT_SOURCE_DIR}/sip_tests.cpp ) diff --git a/shared/test/unit_test/built_ins/builtin_tests.cpp b/shared/test/unit_test/built_ins/builtin_tests.cpp new file mode 100644 index 0000000000..83f23de023 --- /dev/null +++ b/shared/test/unit_test/built_ins/builtin_tests.cpp @@ -0,0 +1,156 @@ +/* + * Copyright (C) 2020-2022 Intel Corporation + * + * SPDX-License-Identifier: MIT + * + */ + +#include "shared/source/built_ins/built_ins.h" +#include "shared/test/common/fixtures/device_fixture.h" +#include "shared/test/common/helpers/debug_manager_state_restore.h" +#include "shared/test/common/mocks/mock_builtinslib.h" +#include "shared/test/common/mocks/ult_device_factory.h" +#include "shared/test/common/test_macros/hw_test.h" + +#include "gtest/gtest.h" + +#include + +using BuiltInSharedTest = Test; + +HWTEST2_F(BuiltInSharedTest, givenUseBindlessBuiltinDisabledWhenBinExtensionPassedThenNameHasBindfulPrefix, HasStatefulSupport) { + DebugManagerStateRestore dbgRestorer; + DebugManager.flags.UseBindlessMode.set(0); + auto &hwInfo = *pDevice->getRootDeviceEnvironment().getMutableHardwareInfo(); + const std::string platformName = getFamilyNameWithType(hwInfo); + const std::string revId = std::to_string(hwInfo.platform.usRevId); + const std::string defaultRevId = std::to_string(HwHelper::get(hwInfo.platform.eRenderCoreFamily).getDefaultRevisionId(hwInfo)); + + auto resourceNames = getBuiltinResourceNames(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Binary, *pDevice); + + std::string expectedResourceNameGeneric = "bindful_copy_buffer_to_buffer.builtin_kernel.bin"; + std::string expectedResourceNameForPlatform = platformName + "_" + defaultRevId + "_" + expectedResourceNameGeneric; + std::string expectedResourceNameForPlatformAndStepping = platformName + "_" + revId + "_" + expectedResourceNameGeneric; + + EXPECT_EQ(resourceNames[0], expectedResourceNameForPlatformAndStepping); + EXPECT_EQ(resourceNames[1], expectedResourceNameForPlatform); + EXPECT_EQ(resourceNames[2], expectedResourceNameGeneric); +} + +HWTEST2_F(BuiltInSharedTest, givenUseBindlessBuiltinEnabledWhenBinExtensionPassedThenNameHasBindlessPrefix, HasStatefulSupport) { + DebugManagerStateRestore dbgRestorer; + DebugManager.flags.UseBindlessMode.set(1); + auto &hwInfo = *pDevice->getRootDeviceEnvironment().getMutableHardwareInfo(); + const std::string platformName = getFamilyNameWithType(hwInfo); + const std::string revId = std::to_string(hwInfo.platform.usRevId); + const std::string defaultRevId = std::to_string(HwHelper::get(hwInfo.platform.eRenderCoreFamily).getDefaultRevisionId(hwInfo)); + + auto resourceNames = getBuiltinResourceNames(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Binary, *pDevice); + + std::string expectedResourceNameGeneric = "bindless_copy_buffer_to_buffer.builtin_kernel.bin"; + std::string expectedResourceNameForPlatform = platformName + "_" + defaultRevId + "_" + expectedResourceNameGeneric; + std::string expectedResourceNameForPlatformAndStepping = platformName + "_" + revId + "_" + expectedResourceNameGeneric; + + EXPECT_EQ(resourceNames[0], expectedResourceNameForPlatformAndStepping); + EXPECT_EQ(resourceNames[1], expectedResourceNameForPlatform); + EXPECT_EQ(resourceNames[2], expectedResourceNameGeneric); +} + +HWTEST2_F(BuiltInSharedTest, GivenBuiltinTypeBinaryWhenGettingBuiltinResourceForNotRegisteredRevisionThenBuiltinFromDefaultRevisionIsTaken, HasStatefulSupport) { + auto builtinsLib = std::make_unique(); + auto &hwInfo = *pDevice->getRootDeviceEnvironment().getMutableHardwareInfo(); + hwInfo.platform.usRevId += 0xdead; + const std::array builtinTypes{EBuiltInOps::CopyBufferToBuffer, + EBuiltInOps::CopyBufferRect, + EBuiltInOps::FillBuffer, + EBuiltInOps::CopyBufferToImage3d, + EBuiltInOps::CopyImage3dToBuffer, + EBuiltInOps::CopyImageToImage1d, + EBuiltInOps::CopyImageToImage2d, + EBuiltInOps::CopyImageToImage3d, + EBuiltInOps::FillImage1d, + EBuiltInOps::FillImage2d, + EBuiltInOps::FillImage3d}; + UltDeviceFactory deviceFactory{1, 0}; + auto pDeviceWithDefaultRevision = deviceFactory.rootDevices[0]; + for (auto &builtinType : builtinTypes) { + auto builtinResource = builtinsLib->getBuiltinResource(builtinType, BuiltinCode::ECodeType::Binary, *pDevice); + EXPECT_NE(0U, builtinResource.size()); + + auto expectedBuiltinResource = builtinsLib->getBuiltinResource(builtinType, BuiltinCode::ECodeType::Binary, *pDeviceWithDefaultRevision); + EXPECT_EQ(expectedBuiltinResource.size(), builtinResource.size()); + } +} + +HWTEST2_F(BuiltInSharedTest, GivenStatelessBuiltinWhenGettingResourceNameThenAddressingIsStateless, HasStatefulSupport) { + auto &hwInfo = *pDevice->getRootDeviceEnvironment().getMutableHardwareInfo(); + const std::string platformName = getFamilyNameWithType(hwInfo); + const std::string revId = std::to_string(hwInfo.platform.usRevId); + const std::string defaultRevId = std::to_string(HwHelper::get(hwInfo.platform.eRenderCoreFamily).getDefaultRevisionId(hwInfo)); + + auto resourceNames = getBuiltinResourceNames(EBuiltInOps::CopyBufferToBufferStateless, BuiltinCode::ECodeType::Binary, *pDevice); + + std::string expectedResourceNameGeneric = "stateless_copy_buffer_to_buffer_stateless.builtin_kernel.bin"; + std::string expectedResourceNameForPlatform = platformName + "_" + defaultRevId + "_" + expectedResourceNameGeneric; + std::string expectedResourceNameForPlatformAndStepping = platformName + "_" + revId + "_" + expectedResourceNameGeneric; + + EXPECT_EQ(resourceNames[0], expectedResourceNameForPlatformAndStepping); + EXPECT_EQ(resourceNames[1], expectedResourceNameForPlatform); + EXPECT_EQ(resourceNames[2], expectedResourceNameGeneric); +} + +HWTEST2_F(BuiltInSharedTest, GivenPlatformWithoutStatefulAddresingSupportWhenGettingResourceNamesThenStatelessResourceNameIsReturned, HasNoStatefulSupport) { + auto &hwInfo = *pDevice->getRootDeviceEnvironment().getMutableHardwareInfo(); + const std::string platformName = getFamilyNameWithType(hwInfo); + const std::string revId = std::to_string(hwInfo.platform.usRevId); + + { + auto resourceNames = getBuiltinResourceNames(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Binary, *pDevice); + std::string expectedResourceName = platformName + "_" + revId + "_stateless_copy_buffer_to_buffer.builtin_kernel.bin"; + EXPECT_EQ(resourceNames[0], expectedResourceName); + } + + { + auto resourceNames = getBuiltinResourceNames(EBuiltInOps::CopyBufferToBufferStateless, BuiltinCode::ECodeType::Binary, *pDevice); + std::string expectedResourceName = platformName + "_" + revId + "_stateless_copy_buffer_to_buffer_stateless.builtin_kernel.bin"; + EXPECT_EQ(resourceNames[0], expectedResourceName); + } +} + +HWTEST_F(BuiltInSharedTest, GivenRequestedTypeIntermediateWhenGettingResourceNamesThenCorrectNameIsReturned) { + DebugManagerStateRestore dbgRestorer; + DebugManager.flags.UseBindlessMode.set(0); + auto &hwInfo = *pDevice->getRootDeviceEnvironment().getMutableHardwareInfo(); + const std::string platformName = getFamilyNameWithType(hwInfo); + const std::string revId = std::to_string(hwInfo.platform.usRevId); + const std::string defaultRevId = std::to_string(HwHelper::get(hwInfo.platform.eRenderCoreFamily).getDefaultRevisionId(hwInfo)); + + auto resourceNames = getBuiltinResourceNames(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Intermediate, *pDevice); + + std::string expectedResourceNameGeneric = "copy_buffer_to_buffer.builtin_kernel.bc"; + std::string expectedResourceNameForPlatform = platformName + "_" + defaultRevId + "_" + expectedResourceNameGeneric; + std::string expectedResourceNameForPlatformAndStepping = platformName + "_" + revId + "_" + expectedResourceNameGeneric; + + EXPECT_EQ(resourceNames[0], expectedResourceNameForPlatformAndStepping); + EXPECT_EQ(resourceNames[1], expectedResourceNameForPlatform); + EXPECT_EQ(resourceNames[2], expectedResourceNameGeneric); +} + +HWTEST_F(BuiltInSharedTest, GivenValidBuiltinTypeAndExtensionWhenCreatingBuiltinResourceNameThenCorrectNameIsReturned) { + std::string builtinResourceName = createBuiltinResourceName(EBuiltInOps::CopyBufferToBuffer, ".bin"); + std::string expectedBuiltinResourceName = std::string(getBuiltinAsString(EBuiltInOps::CopyBufferToBuffer)) + ".bin"; + EXPECT_EQ(expectedBuiltinResourceName, builtinResourceName); +} + +HWTEST_F(BuiltInSharedTest, GivenValidBuiltinTypeAndAnyTypeWhenGettingBuiltinCodeThenNonEmptyBuiltinIsReturned) { + auto builtinsLib = std::make_unique(); + + auto &hwInfo = *pDevice->getRootDeviceEnvironment().getMutableHardwareInfo(); + const std::string platformName = getFamilyNameWithType(hwInfo); + const std::string revId = std::to_string(hwInfo.platform.usRevId); + const std::string defaultRevId = std::to_string(HwHelper::get(hwInfo.platform.eRenderCoreFamily).getDefaultRevisionId(hwInfo)); + + auto builtinCode = builtinsLib->getBuiltinCode(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Any, *pDevice); + EXPECT_EQ(BuiltinCode::ECodeType::Binary, builtinCode.type); + EXPECT_NE(0U, builtinCode.resource.size()); +} diff --git a/shared/test/unit_test/helpers/test_hw_info_config.cpp b/shared/test/unit_test/helpers/test_hw_info_config.cpp index a1418a57c5..eab879db2e 100644 --- a/shared/test/unit_test/helpers/test_hw_info_config.cpp +++ b/shared/test/unit_test/helpers/test_hw_info_config.cpp @@ -179,3 +179,8 @@ HWTEST_F(HwInfoConfigTest, givenHwInfoConfigWhenIsPrefetcherDisablingInDirectSub const auto &hwInfoConfig = *HwInfoConfig::get(defaultHwInfo->platform.eProductFamily); EXPECT_TRUE(hwInfoConfig.isPrefetcherDisablingInDirectSubmissionRequired()); } + +HWTEST2_F(HwInfoConfigTest, givenHwInfoConfigWhenIsStatefulAddressingModeSupportedThenReturnTrue, HasStatefulSupport) { + const auto &hwInfoConfig = *HwInfoConfig::get(productFamily); + EXPECT_TRUE(hwInfoConfig.isStatefulAddressingModeSupported()); +} diff --git a/shared/test/unit_test/xe_hpc_core/pvc/test_hw_info_config_pvc.cpp b/shared/test/unit_test/xe_hpc_core/pvc/test_hw_info_config_pvc.cpp index ba04b64615..72dae8e74d 100644 --- a/shared/test/unit_test/xe_hpc_core/pvc/test_hw_info_config_pvc.cpp +++ b/shared/test/unit_test/xe_hpc_core/pvc/test_hw_info_config_pvc.cpp @@ -74,3 +74,8 @@ PVCTEST_F(PVCHwInfoConfig, givenPVCHwInfoConfigWhenIsPrefetcherDisablingInDirect const auto &hwInfoConfig = *HwInfoConfig::get(productFamily); EXPECT_FALSE(hwInfoConfig.isPrefetcherDisablingInDirectSubmissionRequired()); } + +PVCTEST_F(PVCHwInfoConfig, givenPVCHwInfoConfigWhenIsStatefulAddressingModeSupportedThenReturnFalse) { + const auto &hwInfoConfig = *HwInfoConfig::get(productFamily); + EXPECT_FALSE(hwInfoConfig.isStatefulAddressingModeSupported()); +}