1 /* 2 * Copyright (C) 2020-2021 Intel Corporation 3 * 4 * SPDX-License-Identifier: MIT 5 * 6 */ 7 8 #pragma once 9 10 #include "level_zero/core/source/context/context.h" 11 #include "level_zero/core/source/kernel/kernel.h" 12 #include "level_zero/core/source/module/module_build_log.h" 13 #include <level_zero/ze_api.h> 14 15 #include <set> 16 #include <vector> 17 18 struct _ze_module_handle_t {}; 19 20 namespace L0 { 21 struct Device; 22 23 enum class ModuleType { 24 Builtin, 25 User 26 }; 27 28 struct Module : _ze_module_handle_t { 29 30 static Module *create(Device *device, const ze_module_desc_t *desc, ModuleBuildLog *moduleBuildLog, ModuleType type); 31 32 virtual ~Module() = default; 33 34 virtual Device *getDevice() const = 0; 35 36 virtual ze_result_t createKernel(const ze_kernel_desc_t *desc, 37 ze_kernel_handle_t *phFunction) = 0; 38 virtual ze_result_t destroy() = 0; 39 virtual ze_result_t getNativeBinary(size_t *pSize, uint8_t *pModuleNativeBinary) = 0; 40 virtual ze_result_t getFunctionPointer(const char *pKernelName, void **pfnFunction) = 0; 41 virtual ze_result_t getGlobalPointer(const char *pGlobalName, size_t *pSize, void **pPtr) = 0; 42 virtual ze_result_t getDebugInfo(size_t *pDebugDataSize, uint8_t *pDebugData) = 0; 43 virtual ze_result_t getKernelNames(uint32_t *pCount, const char **pNames) = 0; 44 virtual ze_result_t getProperties(ze_module_properties_t *pModuleProperties) = 0; 45 virtual ze_result_t performDynamicLink(uint32_t numModules, 46 ze_module_handle_t *phModules, 47 ze_module_build_log_handle_t *phLinkLog) = 0; 48 49 virtual const KernelImmutableData *getKernelImmutableData(const char *functionName) const = 0; 50 virtual const std::vector<std::unique_ptr<KernelImmutableData>> &getKernelImmutableDataVector() const = 0; 51 virtual uint32_t getMaxGroupSize() const = 0; 52 virtual bool isDebugEnabled() const = 0; 53 virtual bool shouldAllocatePrivateMemoryPerDispatch() const = 0; 54 virtual void checkIfPrivateMemoryPerDispatchIsNeeded() = 0; 55 56 Module() = default; 57 Module(const Module &) = delete; 58 Module(Module &&) = delete; 59 Module &operator=(const Module &) = delete; 60 Module &operator=(Module &&) = delete; 61 fromHandleModule62 static Module *fromHandle(ze_module_handle_t handle) { return static_cast<Module *>(handle); } 63 toHandleModule64 inline ze_module_handle_t toHandle() { return this; } 65 }; 66 67 } // namespace L0 68