Refactoring Level Zero ULTs in order to use standalone spirv builtins

Signed-off-by: Kacper Nowak <kacper.nowak@intel.com>
This commit is contained in:
Kacper Nowak
2020-09-23 14:07:07 +02:00
committed by Compute-Runtime-Automation
parent c8d1e082dd
commit 4804eca86d
29 changed files with 529 additions and 44 deletions

View File

@ -67,6 +67,8 @@ add_library(compute_runtime_mockable_extra
${CMAKE_CURRENT_LIST_DIR}/l0_tests.cmake
${NEO_SHARED_TEST_DIRECTORY}/unit_test/utilities/cpuintrinsics.cpp
${NEO_SHARED_TEST_DIRECTORY}/unit_test/helpers/test_files.cpp
${NEO_SHARED_TEST_DIRECTORY}/unit_test/mocks/mock_compiler_interface_spirv.cpp
${NEO_SHARED_TEST_DIRECTORY}/unit_test/mocks/mock_compiler_interface_spirv.h
${NEO_SHARED_TEST_DIRECTORY}/unit_test/mocks/mock_command_stream_receiver.cpp
${NEO_SHARED_TEST_DIRECTORY}/unit_test/mocks/mock_device.cpp
${NEO_SOURCE_DIR}/opencl/test/unit_test/aub_stream_mocks/aub_stream_interface_mock.cpp

View File

@ -11,11 +11,6 @@
namespace L0 {
std::unique_ptr<BuiltinFunctionsLib> BuiltinFunctionsLib::create(Device *device,
NEO::BuiltIns *builtins) {
return std::unique_ptr<BuiltinFunctionsLib>(new BuiltinFunctionsLibImpl(device, builtins));
}
std::unique_lock<BuiltinFunctionsLib::MutexType> BuiltinFunctionsLib::obtainUniqueOwnership() {
return std::unique_lock<BuiltinFunctionsLib::MutexType>(this->ownershipMutex);
}

View File

@ -36,7 +36,7 @@ struct BuiltinFunctionsLibImpl : BuiltinFunctionsLib {
void initFunctions() override;
void initImageFunctions() override;
void initPageFaultFunction() override;
std::unique_ptr<BuiltinFunctionsLibImpl::BuiltinData> loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName);
MOCKABLE_VIRTUAL std::unique_ptr<BuiltinFunctionsLibImpl::BuiltinData> loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName);
protected:
std::unique_ptr<BuiltinData> builtins[static_cast<uint32_t>(Builtin::COUNT)];
@ -47,10 +47,15 @@ struct BuiltinFunctionsLibImpl : BuiltinFunctionsLib {
NEO::BuiltIns *builtInsLib;
};
struct BuiltinFunctionsLibImpl::BuiltinData {
~BuiltinData() {
MOCKABLE_VIRTUAL ~BuiltinData() {
func.reset();
module.reset();
}
BuiltinData() = default;
BuiltinData(std::unique_ptr<L0::Module> mod, std::unique_ptr<L0::Kernel> ker) {
module = std::move(mod);
func = std::move(ker);
}
std::unique_ptr<Module> module;
std::unique_ptr<Kernel> func;

View File

@ -7,6 +7,7 @@
set(L0_SRCS_DLL
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/disallow_deferred_deleter.cpp
${CMAKE_CURRENT_SOURCE_DIR}/create_builtin_functions_lib.cpp
)
add_subdirectories()
if(WIN32)

View File

@ -0,0 +1,19 @@
/*
* Copyright (C) 2019-2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/built_ins/built_ins.h"
#include "level_zero/core/source/builtin/builtin_functions_lib_impl.h"
namespace L0 {
std::unique_ptr<BuiltinFunctionsLib> BuiltinFunctionsLib::create(Device *device,
NEO::BuiltIns *builtins) {
return std::unique_ptr<BuiltinFunctionsLib>(new BuiltinFunctionsLibImpl(device, builtins));
}
} // namespace L0

View File

@ -29,6 +29,8 @@ add_executable(${TARGET_NAME}
${NEO_SOURCE_DIR}/shared/test/unit_test/mocks/ult_device_factory.cpp
${NEO_SOURCE_DIR}/shared/test/unit_test/mocks/ult_device_factory.h
${L0_CORE_ENABLERS}
${NEO_SOURCE_DIR}/opencl/test/unit_test/global_environment.cpp
${NEO_SOURCE_DIR}/opencl/test/unit_test/helpers/kernel_binary_helper_hash_value.cpp
)
target_sources(${TARGET_NAME} PRIVATE

View File

@ -26,7 +26,7 @@ struct ModuleFixture : public DeviceFixture {
void createModuleFromBinary(ModuleType type = ModuleType::User) {
std::string testFile;
retrieveBinaryKernelFilename(testFile, binaryFilename + "_", ".bin");
retrieveBinaryKernelFilenameNoRevision(testFile, binaryFilename + "_", ".bin");
size_t size = 0;
auto src = loadDataFromFile(
@ -74,7 +74,7 @@ struct MultiDeviceModuleFixture : public MultiDeviceFixture {
void createModuleFromBinary(uint32_t rootDeviceIndex) {
std::string testFile;
retrieveBinaryKernelFilename(testFile, binaryFilename + "_", ".bin");
retrieveBinaryKernelFilenameNoRevision(testFile, binaryFilename + "_", ".bin");
size_t size = 0;
auto src = loadDataFromFile(testFile.c_str(), size);

View File

@ -54,6 +54,7 @@ using namespace L0::ult;
PRODUCT_FAMILY productFamily = NEO::DEFAULT_TEST_PLATFORM::hwInfo.platform.eProductFamily;
GFXCORE_FAMILY renderCoreFamily = NEO::DEFAULT_TEST_PLATFORM::hwInfo.platform.eRenderCoreFamily;
int32_t revId = -1;
namespace NEO {
extern const HardwareInfo *hardwareInfoTable[IGFX_MAX_PRODUCT];
@ -187,6 +188,7 @@ int main(int argc, char **argv) {
}
productFamily = hwInfoForTests.platform.eProductFamily;
renderCoreFamily = hwInfoForTests.platform.eRenderCoreFamily;
revId = hwInfoForTests.platform.usRevId;
// Platforms with uninitialized factory are not supported
if (L0::commandListFactory[productFamily] == nullptr) {
@ -209,12 +211,17 @@ int main(int argc, char **argv) {
binaryNameSuffix.append(hwInfoForTests.capabilityTable.platformType);
std::string testBinaryFiles = getRunPath(argv[0]);
testBinaryFiles.append("/level_zero/");
testBinaryFiles.append(binaryNameSuffix);
std::string testBinaryFilesNoRev = testBinaryFiles;
testBinaryFilesNoRev.append("/level_zero/");
testBinaryFiles.append("/" + binaryNameSuffix + "/");
testBinaryFilesNoRev.append(binaryNameSuffix + "/");
testBinaryFiles.append(std::to_string(revId));
testBinaryFiles.append("/");
testBinaryFiles.append(testFiles);
testBinaryFilesNoRev.append(testFiles);
testFiles = testBinaryFiles;
testFilesNoRev = testBinaryFilesNoRev;
listeners.Append(new NEO::MemoryLeakListener);
NEO::GmmHelper::createGmmContextWrapperFunc =

View File

@ -11,6 +11,8 @@ set(L0_MOCKS_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/debugger_l0_create.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_built_ins.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_built_ins.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_builtin_functions_lib_impl.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_builtin_functions_lib_impl_timestamps.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_cmdlist.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_cmdlist.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_cmdqueue.h
@ -18,6 +20,9 @@ set(L0_MOCKS_SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/mock_context.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_device.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_device.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_device_for_spirv.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_device_for_spirv.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_device_recompile_built_ins.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_driver.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_driver.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_driver_handle.h

View File

@ -0,0 +1,59 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/core/test/unit_tests/mocks/mock_kernel.h"
#include "level_zero/core/test/unit_tests/mocks/mock_module.h"
namespace L0 {
namespace ult {
struct MockBuiltinFunctionsLibImpl : BuiltinFunctionsLibImpl {
using BuiltinFunctionsLibImpl::builtins;
using BuiltinFunctionsLibImpl::getFunction;
using BuiltinFunctionsLibImpl::imageBuiltins;
MockBuiltinFunctionsLibImpl(L0::Device *device, NEO::BuiltIns *builtInsLib) : BuiltinFunctionsLibImpl(device, builtInsLib) {
dummyKernel = std::unique_ptr<WhiteBox<::L0::Kernel>>(new Mock<::L0::Kernel>());
dummyModule = std::unique_ptr<Module>(new Mock<Module>(device, nullptr));
dummyKernel->module = dummyModule.get();
}
void initFunctions() override {
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(Builtin::COUNT); builtId++) {
builtins[builtId] = loadBuiltIn(NEO::EBuiltInOps::CopyBufferToBuffer, "copyBufferToBufferBytesSingle");
}
}
void initImageFunctions() override {
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(ImageBuiltin::COUNT); builtId++) {
imageBuiltins[builtId] = loadBuiltIn(NEO::EBuiltInOps::CopyImage3dToBuffer, "CopyImage3dToBuffer16Bytes");
}
}
void initPageFaultFunction() override {
pageFaultBuiltin = loadBuiltIn(NEO::EBuiltInOps::CopyBufferToBuffer, "CopyBufferToBufferSideRegion");
}
std::unique_ptr<WhiteBox<::L0::Kernel>> dummyKernel;
std::unique_ptr<Module> dummyModule;
Kernel *getFunction(Builtin func) override {
return dummyKernel.get();
}
Kernel *getImageFunction(ImageBuiltin func) override {
return dummyKernel.get();
}
Kernel *getPageFaultFunction() override {
return dummyKernel.get();
}
std::unique_ptr<BuiltinData> loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName) override {
std::unique_ptr<Kernel> mockKernel(new Mock<::L0::Kernel>());
std::unique_ptr<Module> mockModule(new Mock<Module>(device, nullptr));
return std::unique_ptr<BuiltinData>(new BuiltinData{std::move(mockModule), std::move(mockKernel)});
}
};
} // namespace ult
} // namespace L0

View File

@ -0,0 +1,67 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/core/source/builtin/builtin_functions_lib_impl.h"
namespace L0 {
namespace ult {
struct MockBuiltinDataTimestamp : BuiltinFunctionsLibImpl::BuiltinData {
using BuiltinFunctionsLibImpl::BuiltinData::BuiltinData;
~MockBuiltinDataTimestamp() {
module.release();
}
};
struct MockBuiltinFunctionsLibImplTimestamps : BuiltinFunctionsLibImpl {
using BuiltinFunctionsLibImpl::BuiltinFunctionsLibImpl;
void initFunctions() override {
builtins[0] = loadBuiltIn(NEO::EBuiltInOps::QueryKernelTimestamps, "QueryKernelTimestamps");
builtins[1] = loadBuiltIn(NEO::EBuiltInOps::QueryKernelTimestamps, "QueryKernelTimestampsWithOffsets");
}
void initImageFunctions() override {}
void initPageFaultFunction() override {}
Kernel *getFunction(Builtin func) override {
return func == Builtin::QueryKernelTimestampsWithOffsets ? builtins[1]->func.get() : builtins[0]->func.get();
}
std::unique_ptr<BuiltinFunctionsLibImpl::BuiltinData> loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName) override {
using BuiltInCodeType = NEO::BuiltinCode::ECodeType;
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> 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<uint8_t *>(&builtInCode.resource[0]);
moduleDesc.inputSize = builtInCode.resource.size();
res = device->createModule(&moduleDesc, &moduleHandle, nullptr, ModuleType::Builtin);
UNRECOVERABLE_IF(res != ZE_RESULT_SUCCESS);
module.reset(Module::fromHandle(moduleHandle));
std::unique_ptr<Kernel> kernel;
ze_kernel_handle_t kernelHandle;
ze_kernel_desc_t kernelDesc = {};
kernelDesc.pKernelName = builtInName;
res = module->createKernel(&kernelDesc, &kernelHandle);
DEBUG_BREAK_IF(res != ZE_RESULT_SUCCESS);
UNUSED_VARIABLE(res);
kernel.reset(Kernel::fromHandle(kernelHandle));
return std::unique_ptr<BuiltinData>(new MockBuiltinDataTimestamp{std::move(module), std::move(kernel)});
}
};
} // namespace ult
} // namespace L0

View File

@ -0,0 +1,47 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/core/test/unit_tests/mocks/mock_device_for_spirv.h"
#include "shared/source/helpers/file_io.h"
#include "shared/test/unit_test/helpers/test_files.h"
#include "opencl/test/unit_test/global_environment.h"
#include "opencl/test/unit_test/helpers/kernel_binary_helper.h"
namespace L0 {
namespace ult {
template <bool useImagesBuiltins>
ze_result_t MockDeviceForSpv<useImagesBuiltins>::createModule(const ze_module_desc_t *desc, ze_module_handle_t *module,
ze_module_build_log_handle_t *buildLog, ModuleType type) {
if (!wasModuleCreated) {
std::string kernelName;
retrieveBinaryKernelFilename(kernelName, (useImagesBuiltins ? KernelBinaryHelper::BUILT_INS_WITH_IMAGES : KernelBinaryHelper::BUILT_INS) + "_", ".gen");
size_t size = 0;
auto src = loadDataFromFile(
kernelName.c_str(),
size);
ze_module_desc_t moduleDesc = {};
moduleDesc.format = ZE_MODULE_FORMAT_NATIVE;
moduleDesc.pInputModule = reinterpret_cast<const uint8_t *>(src.get());
moduleDesc.inputSize = size;
ModuleBuildLog *moduleBuildLog = nullptr;
mockModulePtr.reset(Module::create(this, &moduleDesc, moduleBuildLog, ModuleType::Builtin));
wasModuleCreated = true;
}
*module = mockModulePtr.get();
return ZE_RESULT_SUCCESS;
}
template class MockDeviceForSpv<true>;
template class MockDeviceForSpv<false>;
}; // namespace ult
} // namespace L0

View File

@ -0,0 +1,33 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "level_zero/core/source/driver/driver_handle_imp.h"
#include "level_zero/core/source/module/module.h"
#include "level_zero/core/test/unit_tests/mocks/mock_device.h"
namespace L0 {
namespace ult {
template <bool useImagesBuiltins>
class MockDeviceForSpv : public Mock<DeviceImp> {
protected:
bool wasModuleCreated;
std::unique_ptr<L0::Module> mockModulePtr;
public:
MockDeviceForSpv(NEO::Device *device, NEO::ExecutionEnvironment *ex, L0::DriverHandleImp *driverHandle) : Mock<DeviceImp>(device, ex) {
this->driverHandle = driverHandle;
wasModuleCreated = false;
}
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;
~MockDeviceForSpv() {
}
};
} // namespace ult
} // namespace L0

View File

@ -0,0 +1,48 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#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"
namespace L0 {
namespace ult {
struct MockDeviceForRebuildBuilins : public Mock<DeviceImp> {
struct MockModuleForRebuildBuiltins : public ModuleImp {
MockModuleForRebuildBuiltins(Device *device) : ModuleImp(device, nullptr) {}
ze_result_t createKernel(const ze_kernel_desc_t *desc,
ze_kernel_handle_t *phFunction) override {
*phFunction = nullptr;
return ZE_RESULT_SUCCESS;
}
};
MockDeviceForRebuildBuilins(L0::Device *device) : Mock(device->getNEODevice(), static_cast<NEO::ExecutionEnvironment *>(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) override {
createModuleCalled = true;
*module = new MockModuleForRebuildBuiltins(this);
return ZE_RESULT_SUCCESS;
}
bool createModuleCalled = false;
};
} // namespace ult
} // namespace L0

View File

@ -102,6 +102,7 @@ struct Mock<::L0::Kernel> : public WhiteBox<::L0::Kernel> {
kernelTokens.header = &kernelHeader;
iOpenCL::SPatchExecutionEnvironment execEnv = {};
execEnv.LargestCompiledSIMDSize = 8;
kernelTokens.tokens.executionEnvironment = &execEnv;
this->kernelImmData = &immutableData;
@ -125,6 +126,9 @@ struct Mock<::L0::Kernel> : public WhiteBox<::L0::Kernel> {
std::unique_ptr<Kernel> clone() const override {
return nullptr;
}
ze_result_t setArgBufferWithAlloc(uint32_t argIndex, uintptr_t argVal, NEO::GraphicsAllocation *allocation) override {
return ZE_RESULT_SUCCESS;
}
void printPrintfOutput() override {
printPrintfOutputCalledTimes++;

View File

@ -6,6 +6,7 @@
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
)

View File

@ -8,7 +8,7 @@
#include "shared/source/built_ins/built_ins.h"
#include "shared/source/execution_environment/root_device_environment.h"
#include "shared/test/unit_test/helpers/debug_manager_state_restore.h"
#include "shared/test/unit_test/mocks/mock_compiler_interface.h"
#include "shared/test/unit_test/mocks/mock_compiler_interface_spirv.h"
#include "test.h"
@ -17,37 +17,78 @@
#include "level_zero/core/source/module/module.h"
#include "level_zero/core/source/module/module_imp.h"
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
#include "level_zero/core/test/unit_tests/mocks/mock_device_for_spirv.h"
#include "gtest/gtest.h"
namespace L0 {
namespace ult {
template <bool useImagesBuiltins>
class TestBuiltinFunctionsLibImpl : public DeviceFixture, public testing::Test {
public:
struct MockBuiltinFunctionsLibImpl : BuiltinFunctionsLibImpl {
using BuiltinFunctionsLibImpl::builtins;
using BuiltinFunctionsLibImpl::getFunction;
using BuiltinFunctionsLibImpl::imageBuiltins;
MockBuiltinFunctionsLibImpl(L0::Device *device, NEO::BuiltIns *builtInsLib) : BuiltinFunctionsLibImpl(device, builtInsLib) {}
};
std::unique_ptr<BuiltinData> loadBuiltIn(NEO::EBuiltInOps::Type builtin, const char *builtInName) override {
ze_result_t res;
std::unique_ptr<Module> module;
ze_module_handle_t moduleHandle;
ze_module_desc_t moduleDesc = {};
moduleDesc.format = ZE_MODULE_FORMAT_NATIVE;
moduleDesc.pInputModule = nullptr;
moduleDesc.inputSize = 0u;
res = device->createModule(&moduleDesc, &moduleHandle, nullptr, ModuleType::Builtin);
UNRECOVERABLE_IF(res != ZE_RESULT_SUCCESS);
module.reset(Module::fromHandle(moduleHandle));
std::unique_ptr<Kernel> kernel;
ze_kernel_handle_t kernelHandle;
ze_kernel_desc_t kernelDesc = {};
kernelDesc.pKernelName = builtInName;
res = module->createKernel(&kernelDesc, &kernelHandle);
DEBUG_BREAK_IF(res != ZE_RESULT_SUCCESS);
UNUSED_VARIABLE(res);
kernel.reset(Kernel::fromHandle(kernelHandle));
return std::unique_ptr<BuiltinData>(new MockBuiltinData{std::move(module), std::move(kernel)});
}
};
struct MockBuiltinData : BuiltinFunctionsLibImpl::BuiltinData {
using BuiltinFunctionsLibImpl::BuiltinData::func;
using BuiltinFunctionsLibImpl::BuiltinData::module;
MockBuiltinData(std::unique_ptr<L0::Module> mod, std::unique_ptr<L0::Kernel> ker) {
module = std::move(mod);
func = std::move(ker);
}
~MockBuiltinData() override {
module.release();
}
};
void SetUp() override {
DeviceFixture::SetUp();
mockBuiltinFunctionsLibImpl.reset(new MockBuiltinFunctionsLibImpl(device, neoDevice->getBuiltIns()));
mockDevicePtr = std::unique_ptr<MockDeviceForSpv<useImagesBuiltins>>(new MockDeviceForSpv<useImagesBuiltins>(device->getNEODevice(), device->getNEODevice()->getExecutionEnvironment(), driverHandle.get()));
mockBuiltinFunctionsLibImpl.reset(new MockBuiltinFunctionsLibImpl(mockDevicePtr.get(), neoDevice->getBuiltIns()));
}
void TearDown() override {
mockBuiltinFunctionsLibImpl.reset();
DeviceFixture::TearDown();
}
std::unique_ptr<MockBuiltinFunctionsLibImpl> mockBuiltinFunctionsLibImpl;
std::unique_ptr<MockDeviceForSpv<useImagesBuiltins>> mockDevicePtr;
};
HWTEST_F(TestBuiltinFunctionsLibImpl, givenInitImageFunctionWhenImageBultinsTableContainNullptrsAndImageSupportedThenBuiltinsImageFunctionsAreLoaded) {
class TestBuiltinFunctionsLibImplDefault : public TestBuiltinFunctionsLibImpl<false> {};
class TestBuiltinFunctionsLibImplImages : public TestBuiltinFunctionsLibImpl<true> {};
HWTEST_F(TestBuiltinFunctionsLibImplImages, givenInitImageFunctionWhenImageBultinsTableContainNullptrsAndImageSupportedThenBuiltinsImageFunctionsAreLoaded) {
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(ImageBuiltin::COUNT); builtId++) {
EXPECT_EQ(nullptr, mockBuiltinFunctionsLibImpl->imageBuiltins[builtId]);
}
if (device->getHwInfo().capabilityTable.supportsImages) {
if (mockDevicePtr.get()->getHwInfo().capabilityTable.supportsImages) {
mockBuiltinFunctionsLibImpl->initImageFunctions();
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(ImageBuiltin::COUNT); builtId++) {
EXPECT_NE(nullptr, mockBuiltinFunctionsLibImpl->imageBuiltins[builtId]);
@ -56,7 +97,7 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenInitImageFunctionWhenImageBultinsTabl
}
}
HWTEST_F(TestBuiltinFunctionsLibImpl, givenInitFunctionWhenBultinsTableContainNullptrsThenBuiltinsFunctionsAreLoaded) {
HWTEST_F(TestBuiltinFunctionsLibImplDefault, givenInitFunctionWhenBultinsTableContainNullptrsThenBuiltinsFunctionsAreLoaded) {
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(Builtin::COUNT); builtId++) {
EXPECT_EQ(nullptr, mockBuiltinFunctionsLibImpl->builtins[builtId]);
}
@ -67,8 +108,8 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenInitFunctionWhenBultinsTableContainNu
}
}
HWTEST_F(TestBuiltinFunctionsLibImpl, givenCompilerInterfaceWhenCreateDeviceAndImageSupportedThenBuiltinsImageFunctionsAreLoaded) {
neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[neoDevice->getRootDeviceIndex()]->compilerInterface.reset(new NEO::MockCompilerInterface());
HWTEST_F(TestBuiltinFunctionsLibImplDefault, givenCompilerInterfaceWhenCreateDeviceAndImageSupportedThenBuiltinsImageFunctionsAreLoaded) {
neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[neoDevice->getRootDeviceIndex()]->compilerInterface.reset(new NEO::MockCompilerInterfaceSpirv());
std::unique_ptr<L0::Device> testDevice(Device::create(device->getDriverHandle(), neoDevice, std::numeric_limits<uint32_t>::max(), false));
if (device->getHwInfo().capabilityTable.supportsImages) {
@ -78,8 +119,8 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenCompilerInterfaceWhenCreateDeviceAndI
}
}
HWTEST_F(TestBuiltinFunctionsLibImpl, givenCompilerInterfaceWhenCreateDeviceThenBuiltinsFunctionsAreLoaded) {
neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[neoDevice->getRootDeviceIndex()]->compilerInterface.reset(new NEO::MockCompilerInterface());
HWTEST_F(TestBuiltinFunctionsLibImplDefault, givenCompilerInterfaceWhenCreateDeviceThenBuiltinsFunctionsAreLoaded) {
neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[neoDevice->getRootDeviceIndex()]->compilerInterface.reset(new NEO::MockCompilerInterfaceSpirv());
std::unique_ptr<L0::Device> testDevice(Device::create(device->getDriverHandle(), neoDevice, std::numeric_limits<uint32_t>::max(), false));
for (uint32_t builtId = 0; builtId < static_cast<uint32_t>(Builtin::COUNT); builtId++) {
@ -87,7 +128,7 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenCompilerInterfaceWhenCreateDeviceThen
}
}
HWTEST_F(TestBuiltinFunctionsLibImpl, givenRebuildPrecompiledKernelsDebugFlagWhenInitFuctionsThenIntermediateCodeForBuiltinsIsRequested) {
HWTEST_F(TestBuiltinFunctionsLibImplDefault, givenRebuildPrecompiledKernelsDebugFlagWhenInitFuctionsThenIntermediateCodeForBuiltinsIsRequested) {
struct MockDeviceForRebuildBuilins : public Mock<DeviceImp> {
struct MockModuleForRebuildBuiltins : public ModuleImp {
MockModuleForRebuildBuiltins(Device *device) : ModuleImp(device, nullptr, ModuleType::Builtin) {}
@ -110,26 +151,26 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenRebuildPrecompiledKernelsDebugFlagWhe
EXPECT_EQ(desc->format, ZE_MODULE_FORMAT_IL_SPIRV);
EXPECT_GT(desc->inputSize, 0u);
EXPECT_NE(desc->pInputModule, nullptr);
wasCreatedModuleCalled = true;
createModuleCalled = true;
*module = new MockModuleForRebuildBuiltins(this);
return ZE_RESULT_SUCCESS;
}
bool wasCreatedModuleCalled = false;
bool createModuleCalled = false;
};
DebugManagerStateRestore dgbRestorer;
NEO::DebugManager.flags.RebuildPrecompiledKernels.set(true);
MockDeviceForRebuildBuilins testDevice(device);
testDevice.builtins.reset(new BuiltinFunctionsLibImpl(&testDevice, neoDevice->getBuiltIns()));
testDevice.getBuiltinFunctionsLib()->initFunctions();
EXPECT_TRUE(testDevice.wasCreatedModuleCalled);
EXPECT_TRUE(testDevice.createModuleCalled);
}
HWTEST_F(TestBuiltinFunctionsLibImpl, givenNotToRebuildPrecompiledKernelsDebugFlagWhenInitFuctionsThenNativeCodeForBuiltinsIsRequested) {
HWTEST_F(TestBuiltinFunctionsLibImplDefault, givenNotToRebuildPrecompiledKernelsDebugFlagWhenInitFuctionsThenNativeCodeForBuiltinsIsRequested) {
struct MockDeviceForRebuildBuilins : public Mock<DeviceImp> {
MockDeviceForRebuildBuilins(L0::Device *device) : Mock(device->getNEODevice(), static_cast<NEO::ExecutionEnvironment *>(device->getExecEnvironment())) {
driverHandle = device->getDriverHandle();
@ -142,24 +183,25 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, givenNotToRebuildPrecompiledKernelsDebugFl
EXPECT_EQ(desc->format, ZE_MODULE_FORMAT_NATIVE);
EXPECT_GT(desc->inputSize, 0u);
EXPECT_NE(desc->pInputModule, nullptr);
wasCreatedModuleCalled = true;
createModuleCalled = true;
return DeviceImp::createModule(desc, module, buildLog, type);
}
bool wasCreatedModuleCalled = false;
bool createModuleCalled = false;
};
DebugManagerStateRestore dgbRestorer;
NEO::DebugManager.flags.RebuildPrecompiledKernels.set(false);
MockDeviceForRebuildBuilins testDevice(device);
L0::Device *testDevicePtr = &testDevice;
testDevice.builtins.reset(new BuiltinFunctionsLibImpl(testDevicePtr, neoDevice->getBuiltIns()));
testDevice.getBuiltinFunctionsLib()->initFunctions();
EXPECT_TRUE(testDevice.wasCreatedModuleCalled);
EXPECT_TRUE(testDevice.createModuleCalled);
}
HWTEST_F(TestBuiltinFunctionsLibImpl, GivenBuiltinsWhenInitializingFunctionsThenModulesWithProperTypeAreCreated) {
HWTEST_F(TestBuiltinFunctionsLibImplDefault, GivenBuiltinsWhenInitializingFunctionsThenModulesWithProperTypeAreCreated) {
struct MockDeviceWithBuilins : public Mock<DeviceImp> {
MockDeviceWithBuilins(L0::Device *device) : Mock(device->getNEODevice(), static_cast<NEO::ExecutionEnvironment *>(device->getExecEnvironment())) {
driverHandle = device->getDriverHandle();
@ -180,6 +222,8 @@ HWTEST_F(TestBuiltinFunctionsLibImpl, GivenBuiltinsWhenInitializingFunctionsThen
};
MockDeviceWithBuilins testDevice(device);
L0::Device *testDevicePtr = &testDevice;
testDevice.builtins.reset(new BuiltinFunctionsLibImpl(testDevicePtr, neoDevice->getBuiltIns()));
testDevice.getBuiltinFunctionsLib()->initFunctions();
EXPECT_EQ(ModuleType::Builtin, testDevice.typeCreated);

View File

@ -0,0 +1,20 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/source/built_ins/built_ins.h"
#include "level_zero/core/source/builtin/builtin_functions_lib_impl.h"
#include "level_zero/core/test/unit_tests/mocks/mock_builtin_functions_lib_impl.h"
namespace L0 {
std::unique_ptr<BuiltinFunctionsLib> BuiltinFunctionsLib::create(Device *device,
NEO::BuiltIns *builtins) {
return std::unique_ptr<BuiltinFunctionsLib>(new ult::MockBuiltinFunctionsLibImpl(device, builtins));
}
} // namespace L0

View File

@ -17,7 +17,9 @@
#include "level_zero/core/source/cmdqueue/cmdqueue_imp.h"
#include "level_zero/core/source/kernel/kernel_imp.h"
#include "level_zero/core/test/unit_tests/fixtures/device_fixture.h"
#include "level_zero/core/test/unit_tests/mocks/mock_builtin_functions_lib_impl_timestamps.h"
#include "level_zero/core/test/unit_tests/mocks/mock_cmdlist.h"
#include "level_zero/core/test/unit_tests/mocks/mock_device_for_spirv.h"
#include "level_zero/core/test/unit_tests/mocks/mock_event.h"
namespace L0 {
@ -519,17 +521,24 @@ using AppendQueryKernelTimestamps = CommandListCreate;
using TestPlatforms = IsAtLeastProduct<IGFX_SKYLAKE>;
HWTEST2_F(AppendQueryKernelTimestamps, givenCommandListWhenAppendQueryKernelTimestampsWithoutOffsetsThenProperBuiltinWasAdded, TestPlatforms) {
std::unique_ptr<MockDeviceForSpv<false>> testDevice = std::unique_ptr<MockDeviceForSpv<false>>(new MockDeviceForSpv<false>(device->getNEODevice(), device->getNEODevice()->getExecutionEnvironment(), driverHandle.get()));
testDevice->builtins.reset(new MockBuiltinFunctionsLibImplTimestamps(testDevice.get(), testDevice->getNEODevice()->getBuiltIns()));
testDevice->getBuiltinFunctionsLib()->initFunctions();
device = testDevice.get();
MockCommandListForAppendLaunchKernel<gfxCoreFamily> commandList;
commandList.initialize(device, NEO::EngineGroupType::RenderCompute);
device->getBuiltinFunctionsLib()->initFunctions();
MockEvent event;
event.waitScope = ZE_EVENT_SCOPE_FLAG_HOST;
event.signalScope = ZE_EVENT_SCOPE_FLAG_HOST;
void *alloc;
ze_device_mem_alloc_desc_t deviceDesc = {};
auto result = driverHandle->allocDeviceMem(device, &deviceDesc, 128, 1, &alloc);
EXPECT_EQ(result, ZE_RESULT_SUCCESS);
ze_event_handle_t events[2] = {event.toHandle(), event.toHandle()};
@ -546,7 +555,7 @@ HWTEST2_F(AppendQueryKernelTimestamps, givenCommandListWhenAppendQueryKernelTime
EXPECT_TRUE(containsDstPtr);
EXPECT_EQ(device->getBuiltinFunctionsLib()->getFunction(Builtin::QueryKernelTimestamps)->getIsaAllocation()->getGpuAddress(), commandList.cmdListHelper.isaAllocation->getGpuAddress());
EXPECT_EQ(testDevice->getBuiltinFunctionsLib()->getFunction(Builtin::QueryKernelTimestamps)->getIsaAllocation()->getGpuAddress(), commandList.cmdListHelper.isaAllocation->getGpuAddress());
EXPECT_EQ(2u, commandList.cmdListHelper.groupSize[0]);
EXPECT_EQ(1u, commandList.cmdListHelper.groupSize[1]);
EXPECT_EQ(1u, commandList.cmdListHelper.groupSize[2]);
@ -561,10 +570,15 @@ HWTEST2_F(AppendQueryKernelTimestamps, givenCommandListWhenAppendQueryKernelTime
}
HWTEST2_F(AppendQueryKernelTimestamps, givenCommandListWhenAppendQueryKernelTimestampsWithOffsetsThenProperBuiltinWasAdded, TestPlatforms) {
std::unique_ptr<MockDeviceForSpv<false>> testDevice = std::unique_ptr<MockDeviceForSpv<false>>(new MockDeviceForSpv<false>(device->getNEODevice(), device->getNEODevice()->getExecutionEnvironment(), driverHandle.get()));
testDevice->builtins.reset(new MockBuiltinFunctionsLibImplTimestamps(testDevice.get(), testDevice->getNEODevice()->getBuiltIns()));
testDevice->getBuiltinFunctionsLib()->initFunctions();
device = testDevice.get();
MockCommandListForAppendLaunchKernel<gfxCoreFamily> commandList;
commandList.initialize(device, NEO::EngineGroupType::RenderCompute);
device->getBuiltinFunctionsLib()->initFunctions();
MockEvent event;
event.waitScope = ZE_EVENT_SCOPE_FLAG_HOST;
event.signalScope = ZE_EVENT_SCOPE_FLAG_HOST;
@ -618,10 +632,15 @@ HWTEST2_F(AppendQueryKernelTimestamps, givenCommandListWhenAppendQueryKernelTime
}
HWTEST2_F(AppendQueryKernelTimestamps, givenCommandListWhenAppendQueryKernelTimestampsWithEventsNumberBiggerThanMaxWorkItemSizeThenProperGroupSizeAndGroupCountIsSet, TestPlatforms) {
std::unique_ptr<MockDeviceForSpv<false>> testDevice = std::unique_ptr<MockDeviceForSpv<false>>(new MockDeviceForSpv<false>(device->getNEODevice(), device->getNEODevice()->getExecutionEnvironment(), driverHandle.get()));
testDevice->builtins.reset(new MockBuiltinFunctionsLibImplTimestamps(testDevice.get(), testDevice->getNEODevice()->getBuiltIns()));
testDevice->getBuiltinFunctionsLib()->initFunctions();
device = testDevice.get();
MockCommandListForAppendLaunchKernel<gfxCoreFamily> commandList;
commandList.initialize(device, NEO::EngineGroupType::RenderCompute);
device->getBuiltinFunctionsLib()->initFunctions();
MockEvent event;
event.waitScope = ZE_EVENT_SCOPE_FLAG_HOST;
event.signalScope = ZE_EVENT_SCOPE_FLAG_HOST;

View File

@ -607,6 +607,31 @@ TEST_F(KernelIsaTests, givenDebugONAndKernelDegugInfoWhenInitializingImmutableDa
EXPECT_EQ(kernelInfo.kernelDescriptor.external.debugData->vIsaSize, static_cast<uint32_t>(123));
}
TEST_F(KernelIsaTests, givenDebugONAndNoKernelDegugInfoWhenInitializingImmutableDataThenDoNotRegisterElf) {
uint32_t kernelHeap = 0;
KernelInfo kernelInfo;
kernelInfo.heapInfo.KernelHeapSize = 1;
kernelInfo.heapInfo.pKernelHeap = &kernelHeap;
kernelInfo.kernelDescriptor.external.debugData.reset(nullptr);
class MockDebugger : public DebuggerL0 {
public:
MockDebugger(NEO::Device *neodev) : DebuggerL0(neodev) {
}
void registerElf(NEO::DebugData *debugData, NEO::GraphicsAllocation *isaAllocation) override {
debugData->vIsaSize = 123;
};
size_t getSbaTrackingCommandsSize(size_t trackedAddressCount) override { return static_cast<size_t>(0); };
void programSbaTrackingCommands(NEO::LinearStream &cmdStream, const SbaAddresses &sba) override{};
};
MockDebugger *debugger = new MockDebugger(neoDevice);
neoDevice->getExecutionEnvironment()->rootDeviceEnvironments[0]->debugger.reset(static_cast<NEO::Debugger *>(debugger));
KernelImmutableData kernelImmutableData(device);
kernelImmutableData.initialize(&kernelInfo, device, 0, nullptr, nullptr, false);
EXPECT_EQ(kernelInfo.kernelDescriptor.external.debugData, nullptr);
}
using KernelImpPatchBindlessTest = Test<ModuleFixture>;
TEST_F(KernelImpPatchBindlessTest, GivenKernelImpWhenPatchBindlessOffsetCalledThenOffsetPatchedCorrectly) {
@ -700,9 +725,11 @@ struct MyMockKernel : public Mock<Kernel> {
void setBufferSurfaceState(uint32_t argIndex, void *address, NEO::GraphicsAllocation *alloc) override {
setSurfaceStateCalled = true;
}
ze_result_t setArgBufferWithAlloc(uint32_t argIndex, uintptr_t argVal, NEO::GraphicsAllocation *allocation) override {
return KernelImp::setArgBufferWithAlloc(argIndex, argVal, allocation);
}
bool setSurfaceStateCalled = false;
};
TEST_F(KernelImpPatchBindlessTest, GivenValidBindlessOffsetWhenSetArgBufferWithAllocThensetBufferSurfaceStateCalled) {
ze_kernel_desc_t desc = {};
desc.pKernelName = kernelName.c_str();

View File

@ -257,7 +257,7 @@ struct ModuleSpecConstantsTests : public DeviceFixture,
HWTEST_F(ModuleSpecConstantsTests, givenSpecializationConstantsSetInDescriptorTheModuleCorrectlyPassesThemToTheCompiler) {
std::string testFile;
retrieveBinaryKernelFilename(testFile, binaryFilename + "_", ".spv");
retrieveBinaryKernelFilenameNoRevision(testFile, binaryFilename + "_", ".spv");
size_t size = 0;
auto src = loadDataFromFile(testFile.c_str(), size);
@ -610,7 +610,7 @@ using ContextModuleCreateTest = Test<ContextFixture>;
HWTEST_F(ContextModuleCreateTest, givenCallToCreateModuleThenModuleIsReturned) {
std::string testFile;
retrieveBinaryKernelFilename(testFile, "test_kernel_", ".bin");
retrieveBinaryKernelFilenameNoRevision(testFile, "test_kernel_", ".bin");
size_t size = 0;
auto src = loadDataFromFile(testFile.c_str(), size);
@ -658,7 +658,8 @@ HWTEST_F(ModuleTranslationUnitTest, GivenRebuildPrecompiledKernelsFlagAndFileWit
NEO::DebugManager.flags.RebuildPrecompiledKernels.set(true);
std::string testFile;
retrieveBinaryKernelFilename(testFile, "test_kernel_", ".gen");
retrieveBinaryKernelFilenameNoRevision(testFile, "test_kernel_", ".gen");
size_t size = 0;
auto src = loadDataFromFile(testFile.c_str(), size);
@ -685,7 +686,8 @@ HWTEST_F(ModuleTranslationUnitTest, GivenRebuildPrecompiledKernelsFlagAndFileWit
NEO::DebugManager.flags.RebuildPrecompiledKernels.set(true);
std::string testFile;
retrieveBinaryKernelFilename(testFile, "test_kernel_", ".bin");
retrieveBinaryKernelFilenameNoRevision(testFile, "test_kernel_", ".bin");
size_t size = 0;
auto src = loadDataFromFile(testFile.c_str(), size);

View File

@ -32,6 +32,9 @@ add_executable(
${NEO_SOURCE_DIR}/shared/test/unit_test/mocks/ult_device_factory.cpp
${NEO_SOURCE_DIR}/shared/test/unit_test/mocks/ult_device_factory.h
${L0_CORE_ENABLERS}
${NEO_SOURCE_DIR}/opencl/test/unit_test/global_environment.cpp
${NEO_SOURCE_DIR}/opencl/test/unit_test/helpers/kernel_binary_helper_hash_value.cpp
${NEO_SOURCE_DIR}/level_zero/core/test/unit_tests/sources/builtin/create_ult_builtin_functions_lib.cpp
)
target_sources(

View File

@ -36,10 +36,12 @@ target_sources(${TARGET_NAME} PRIVATE
${NEO_SOURCE_DIR}/level_zero/core/test/unit_tests/test_mode.h
${NEO_SOURCE_DIR}/level_zero/core/test/unit_tests/ult_configuration.cpp
${NEO_SOURCE_DIR}/level_zero/core/test/unit_tests/white_box.h
${NEO_SOURCE_DIR}/level_zero/core/source/dll/create_builtin_functions_lib.cpp
${NEO_SHARED_TEST_DIRECTORY}/unit_test/tests_configuration.h
)
target_sources(${TARGET_NAME} PRIVATE
${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/helpers${BRANCH_DIR_SUFFIX}/kernel_binary_helper_hash_value.cpp
${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/libult/create_command_stream.cpp
${COMPUTE_RUNTIME_DIR}/opencl/test/unit_test/libult/io_functions.cpp
${NEO_SOURCE_DIR}/opencl/test/unit_test/global_environment.cpp

View File

@ -5,7 +5,7 @@
#
set(SHARED_TEST_PROJECTS_FOLDER "neo shared")
if(NOT SKIP_NEO_UNIT_TESTS AND NOT SKIP_UNIT_TESTS)
if(NOT SKIP_UNIT_TESTS)
set(TARGET_NAME neo_shared_tests)

View File

@ -12,6 +12,7 @@
#include "config.h"
std::string testFiles("test_files/" NEO_ARCH "/");
std::string testFilesNoRev("test_files/" NEO_ARCH "/");
std::string clFiles("test_files/");
std::string binaryNameSuffix("");
@ -30,3 +31,19 @@ void retrieveBinaryKernelFilename(std::string &outputFilename, const std::string
retrieveBinaryKernelFilename(outputFilename, kernelName, ".spv", options);
}
}
void retrieveBinaryKernelFilenameNoRevision(std::string &outputFilename, const std::string &kernelName, const std::string &extension, const std::string &options) {
if (outputFilename.length() > 0) {
outputFilename.clear();
}
outputFilename.reserve(2 * testFilesNoRev.length());
outputFilename.append(testFilesNoRev);
outputFilename.append(kernelName);
outputFilename.append(binaryNameSuffix);
outputFilename.append(extension);
outputFilename.append(options);
if (!fileExists(outputFilename) && (extension == ".bc")) {
retrieveBinaryKernelFilename(outputFilename, kernelName, ".spv", options);
}
}

View File

@ -9,7 +9,9 @@
#include <string>
extern std::string testFiles;
extern std::string testFilesNoRev;
extern std::string clFiles;
extern std::string binaryNameSuffix;
void retrieveBinaryKernelFilename(std::string &outputFilename, const std::string &kernelName, const std::string &extension, const std::string &options = "");
void retrieveBinaryKernelFilenameNoRevision(std::string &outputFilename, const std::string &kernelName, const std::string &extension, const std::string &options = "");

View File

@ -8,6 +8,8 @@ set(NEO_CORE_tests_mocks
${CMAKE_CURRENT_SOURCE_DIR}/CMakeLists.txt
${CMAKE_CURRENT_SOURCE_DIR}/mock_command_stream_receiver.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_command_stream_receiver.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_compiler_interface_spirv.cpp
${CMAKE_CURRENT_SOURCE_DIR}/mock_compiler_interface_spirv.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_direct_submission_hw.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_direct_submission_diagnostic_collector.h
${CMAKE_CURRENT_SOURCE_DIR}/mock_dispatch_kernel_encoder_interface.cpp

View File

@ -0,0 +1,34 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#include "shared/test/unit_test/mocks/mock_compiler_interface_spirv.h"
#include "shared/source/helpers/file_io.h"
#include "shared/test/unit_test/helpers/test_files.h"
#include "opencl/test/unit_test/global_environment.h"
#include "opencl/test/unit_test/helpers/kernel_binary_helper.h"
namespace NEO {
TranslationOutput::ErrorCode MockCompilerInterfaceSpirv::compile(const NEO::Device &device, const TranslationInput &input, TranslationOutput &output) {
std::string kernelName;
retrieveBinaryKernelFilename(kernelName, KernelBinaryHelper::BUILT_INS + "_", ".gen");
size_t size = 0;
auto src = loadDataFromFile(
kernelName.c_str(),
size);
output.deviceBinary.mem = std::move(src);
output.deviceBinary.size = size;
output.intermediateCodeType = IGC::CodeType::spirV;
return TranslationOutput::ErrorCode::Success;
}
TranslationOutput::ErrorCode MockCompilerInterfaceSpirv::build(const NEO::Device &device, const TranslationInput &input, TranslationOutput &out) {
return this->compile(device, input, out);
}
} // namespace NEO

View File

@ -0,0 +1,18 @@
/*
* Copyright (C) 2020 Intel Corporation
*
* SPDX-License-Identifier: MIT
*
*/
#pragma once
#include "shared/test/unit_test/mocks/mock_compiler_interface.h"
#include "cif/common/cif_main.h"
namespace NEO {
class MockCompilerInterfaceSpirv : public MockCompilerInterface {
TranslationOutput::ErrorCode compile(const NEO::Device &device, const TranslationInput &input, TranslationOutput &output) override;
TranslationOutput::ErrorCode build(const NEO::Device &device, const TranslationInput &input, TranslationOutput &out) override;
};
} // namespace NEO