diff --git a/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp b/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp index fd1f5b80f4..b7fdac7f8f 100644 --- a/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp +++ b/level_zero/core/source/builtin/builtin_functions_lib_impl.cpp @@ -221,28 +221,16 @@ Kernel *BuiltinFunctionsLibImpl::getImageFunction(ImageBuiltin func) { std::unique_ptr BuiltinFunctionsLibImpl::loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName) { using BuiltInCodeType = NEO::BuiltinCode::ECodeType; - StackVec supportedTypes{}; - if (!NEO::DebugManager.flags.RebuildPrecompiledKernels.get()) { - supportedTypes.push_back(BuiltInCodeType::Binary); - } - supportedTypes.push_back(BuiltInCodeType::Intermediate); - - NEO::BuiltinCode builtinCode{}; - - for (auto &builtinCodeType : supportedTypes) { - builtinCode = builtInsLib->getBuiltinsLib().getBuiltinCode(builtin, builtinCodeType, *device->getNEODevice()); - if (!builtinCode.resource.empty()) { - break; - } - } + auto builtInCodeType = NEO::DebugManager.flags.RebuildPrecompiledKernels.get() ? BuiltInCodeType::Intermediate : BuiltInCodeType::Binary; + auto builtInCode = builtInsLib->getBuiltinsLib().getBuiltinCode(builtin, builtInCodeType, *device->getNEODevice()); ze_result_t res; std::unique_ptr module; ze_module_handle_t moduleHandle; ze_module_desc_t moduleDesc = {}; - moduleDesc.format = builtinCode.type == BuiltInCodeType::Binary ? ZE_MODULE_FORMAT_NATIVE : ZE_MODULE_FORMAT_IL_SPIRV; - moduleDesc.pInputModule = reinterpret_cast(&builtinCode.resource[0]); - moduleDesc.inputSize = builtinCode.resource.size(); + moduleDesc.format = builtInCode.type == BuiltInCodeType::Binary ? ZE_MODULE_FORMAT_NATIVE : ZE_MODULE_FORMAT_IL_SPIRV; + moduleDesc.pInputModule = reinterpret_cast(&builtInCode.resource[0]); + moduleDesc.inputSize = builtInCode.resource.size(); res = device->createModule(&moduleDesc, &moduleHandle, nullptr, ModuleType::Builtin); UNRECOVERABLE_IF(res != ZE_RESULT_SUCCESS); diff --git a/level_zero/core/test/unit_tests/mocks/mock_device_recompile_built_ins.h b/level_zero/core/test/unit_tests/mocks/mock_device_recompile_built_ins.h index a1d340a1ca..31f3202348 100644 --- a/level_zero/core/test/unit_tests/mocks/mock_device_recompile_built_ins.h +++ b/level_zero/core/test/unit_tests/mocks/mock_device_recompile_built_ins.h @@ -5,9 +5,9 @@ * */ +#include "level_zero/core/source/device/device_imp.h" #include "level_zero/core/source/module/module_imp.h" #include "level_zero/core/test/unit_tests/mocks/mock_device.h" -#include "level_zero/core/test/unit_tests/mocks/mock_kernel.h" namespace L0 { namespace ult { @@ -15,31 +15,34 @@ namespace ult { struct MockDeviceForRebuildBuilins : public Mock { struct MockModuleForRebuildBuiltins : public ModuleImp { - MockModuleForRebuildBuiltins(Device *device, ModuleType type) : ModuleImp(device, nullptr, type) {} + MockModuleForRebuildBuiltins(Device *device) : ModuleImp(device, nullptr) {} ze_result_t createKernel(const ze_kernel_desc_t *desc, ze_kernel_handle_t *phFunction) override { - *phFunction = new Mock(); + *phFunction = nullptr; return ZE_RESULT_SUCCESS; } }; - MockDeviceForRebuildBuilins(NEO::Device *device) : Mock(device, device->getExecutionEnvironment()) { + MockDeviceForRebuildBuilins(L0::Device *device) : Mock(device->getNEODevice(), static_cast(device->getExecEnvironment())) { + driverHandle = device->getDriverHandle(); + builtins = BuiltinFunctionsLib::create(this, neoDevice->getBuiltIns()); + } + ~MockDeviceForRebuildBuilins() { } ze_result_t createModule(const ze_module_desc_t *desc, ze_module_handle_t *module, - ze_module_build_log_handle_t *buildLog, ModuleType type) override { + ze_module_build_log_handle_t *buildLog) override { - if (desc) { - formatForModule = desc->format; - } - *module = new MockModuleForRebuildBuiltins(this, type); + createModuleCalled = true; + *module = new MockModuleForRebuildBuiltins(this); return ZE_RESULT_SUCCESS; } - ze_module_format_t formatForModule{}; + + bool createModuleCalled = false; }; } // namespace ult -} // namespace L0 \ No newline at end of file +} // namespace L0 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..92e9bd8aa1 100644 --- a/level_zero/core/test/unit_tests/sources/builtin/CMakeLists.txt +++ b/level_zero/core/test/unit_tests/sources/builtin/CMakeLists.txt @@ -10,8 +10,3 @@ target_sources(${TARGET_NAME} PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/built_in_tests_l0.cpp ${CMAKE_CURRENT_SOURCE_DIR}/builtin_functions_tests.cpp ) -if(TARGET ${BUILTINS_SPIRV_LIB_NAME}) - target_sources(${TARGET_NAME} PRIVATE - ${CMAKE_CURRENT_SOURCE_DIR}/built_in_spv_tests_l0.cpp - ) -endif() diff --git a/level_zero/core/test/unit_tests/sources/builtin/built_in_spv_tests_l0.cpp b/level_zero/core/test/unit_tests/sources/builtin/built_in_spv_tests_l0.cpp deleted file mode 100644 index 19492264e3..0000000000 --- a/level_zero/core/test/unit_tests/sources/builtin/built_in_spv_tests_l0.cpp +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (C) 2021 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/mocks/mock_builtinslib.h" - -#include "test.h" - -#include "level_zero/core/source/builtin/builtin_functions_lib_impl.h" -#include "level_zero/core/test/unit_tests/mocks/mock_device_recompile_built_ins.h" - -using namespace NEO; - -using BuiltInTestL0 = Test; - -TEST_F(BuiltInTestL0, GivenBuiltinTypeIntermediateWhenGettingBuiltinResourceForNotRegisteredRevisionThenResourceSizeIsNonZero) { - pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.usRevId += 0xdead; - auto mockBuiltinsLib = std::unique_ptr(new MockBuiltinsLib()); - - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferRect, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillBuffer, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToImage3d, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImage3dToBuffer, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage1d, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage2d, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage3d, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage1d, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage2d, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage3d, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::COUNT, BuiltinCode::ECodeType::Intermediate, *pDevice).size()); -} - -TEST_F(BuiltInTestL0, givenDeviceWithUnregisteredBinaryBuiltinWhenGettingBuiltinKernelThenFallbackToIntermediate) { - pDevice->incRefInternal(); - L0::ult::MockDeviceForRebuildBuilins deviceL0(pDevice); - pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.usRevId += 0xdead; - L0::BuiltinFunctionsLibImpl builtinFunctionsLib{&deviceL0, pDevice->getBuiltIns()}; - for (uint32_t builtId = 0; builtId < static_cast(L0::Builtin::COUNT); builtId++) { - deviceL0.formatForModule = {}; - ASSERT_NE(nullptr, builtinFunctionsLib.getFunction(static_cast(builtId))); - EXPECT_EQ(ZE_MODULE_FORMAT_IL_SPIRV, deviceL0.formatForModule); - } -} \ No newline at end of file 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 index 12aa235ecc..6e231e3ca0 100644 --- 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 @@ -6,13 +6,15 @@ */ #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/unit_test/built_ins/built_in_tests_shared.inl" #include "test.h" +#include "gtest/gtest.h" + +#include + using namespace NEO; TEST(BuiltInTestsL0, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPassedThenNameHasBindfulPrefix) { @@ -24,16 +26,21 @@ TEST(BuiltInTestsL0, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionPa 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())); } TEST(BuiltInTestsL0, givenUseBindlessBuiltinDisabledInL0ApiWhenBinExtensionPassedThenNameHasBindfulPrefix) { @@ -43,23 +50,3 @@ TEST(BuiltInTestsL0, givenUseBindlessBuiltinDisabledInL0ApiWhenBinExtensionPasse TEST(BuiltInTestsL0, givenUseBindlessBuiltinEnabledInL0ApiWhenBinExtensionPassedThenNameHasBindlessPrefix) { givenUseBindlessBuiltinEnabledWhenBinExtensionPassedThenNameHasBindlessPrefix(); } - -using BuiltInTestL0 = Test; - -TEST_F(BuiltInTestL0, GivenBuiltinTypeBinaryWhenGettingBuiltinResourceForNotRegisteredRevisionThenResourceSizeIsZero) { - pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.usRevId += 0xdead; - auto mockBuiltinsLib = std::unique_ptr(new MockBuiltinsLib()); - - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferRect, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillBuffer, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToImage3d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImage3dToBuffer, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage1d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage2d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage3d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage1d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage2d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage3d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::COUNT, BuiltinCode::ECodeType::Binary, *pDevice).size()); -} 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 a69e9ad92e..3233cfb96c 100644 --- a/opencl/test/unit_test/built_ins/built_in_tests.cpp +++ b/opencl/test/unit_test/built_ins/built_in_tests.cpp @@ -1268,9 +1268,11 @@ TEST_F(BuiltInTests, WhenCreatingBuiltinResourceNameThenCorrectStringIsReturned) 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())); } @@ -1436,45 +1438,6 @@ HWCMDTEST_F(IGFX_GEN8_CORE, BuiltInTests, GivenBuiltinTypeBinaryWhenGettingBuilt EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::COUNT, BuiltinCode::ECodeType::Binary, *pDevice).size()); } -TEST_F(BuiltInTests, GivenBuiltinTypeBinaryWhenGettingBuiltinResourceForNotRegisteredRevisionThenResourceSizeIsZero) { - pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.usRevId += 0xdead; - auto mockBuiltinsLib = std::unique_ptr(new MockBuiltinsLib()); - - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferRect, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillBuffer, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToImage3d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImage3dToBuffer, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage1d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage2d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage3d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage1d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage2d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage3d, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::VmeBlockMotionEstimateIntel, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::VmeBlockAdvancedMotionEstimateCheckIntel, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::VmeBlockAdvancedMotionEstimateBidirectionalCheckIntel, BuiltinCode::ECodeType::Binary, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::COUNT, BuiltinCode::ECodeType::Binary, *pDevice).size()); -} - -TEST_F(BuiltInTests, GivenBuiltinTypeSourceWhenGettingBuiltinResourceForNotRegisteredRevisionThenResourceSizeIsNonZero) { - pDevice->getRootDeviceEnvironment().getMutableHardwareInfo()->platform.usRevId += 0xdead; - auto mockBuiltinsLib = std::unique_ptr(new MockBuiltinsLib()); - - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferRect, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillBuffer, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyBufferToImage3d, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImage3dToBuffer, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage1d, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage2d, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::CopyImageToImage3d, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage1d, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage2d, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_NE(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::FillImage3d, BuiltinCode::ECodeType::Source, *pDevice).size()); - EXPECT_EQ(0u, mockBuiltinsLib->getBuiltinResource(EBuiltInOps::COUNT, BuiltinCode::ECodeType::Source, *pDevice).size()); -} - TEST_F(BuiltInTests, GivenTypeAnyWhenCreatingProgramFromCodeThenValidPointerIsReturned) { auto builtinsLib = std::unique_ptr(new BuiltinsLib()); const BuiltinCode bc = builtinsLib->getBuiltinCode(EBuiltInOps::CopyBufferToBuffer, BuiltinCode::ECodeType::Any, *pDevice); 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 index 254e50f4c1..510a78df69 100644 --- a/opencl/test/unit_test/built_ins/built_in_tests_ocl.cpp +++ b/opencl/test/unit_test/built_ins/built_in_tests_ocl.cpp @@ -26,16 +26,21 @@ TEST(BuiltInTestsOcl, givenUseBindlessBuiltinInApiDependentModeWhenBinExtensionP 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) { diff --git a/shared/source/built_ins/built_ins_storage.cpp b/shared/source/built_ins/built_ins_storage.cpp index 9f320462d5..39a0d1b43b 100644 --- a/shared/source/built_ins/built_ins_storage.cpp +++ b/shared/source/built_ins/built_ins_storage.cpp @@ -188,12 +188,16 @@ 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); - for (auto &rn : {resourceNameForPlatformTypeAndStepping, resourceNameGeneric}) { // first look for dedicated version, only fallback to generic one + for (auto &rn : {resourceNameForPlatformTypeAndStepping, resourceNameForPlatformType, resourceNameGeneric}) { // first look for dedicated version, only fallback to generic one for (auto &s : allStorages) { bc = s.get()->load(rn); if (bc.size() != 0) { diff --git a/shared/test/unit_test/built_ins/built_in_tests_shared.inl b/shared/test/unit_test/built_ins/built_in_tests_shared.inl index cbfb49910a..91d0577a1f 100644 --- a/shared/test/unit_test/built_ins/built_in_tests_shared.inl +++ b/shared/test/unit_test/built_ins/built_in_tests_shared.inl @@ -25,16 +25,21 @@ void givenUseBindlessBuiltinDisabledWhenBinExtensionPassedThenNameHasBindfulPref 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())); } @@ -47,16 +52,21 @@ void givenUseBindlessBuiltinEnabledWhenBinExtensionPassedThenNameHasBindlessPref 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 \ No newline at end of file