| //===--- Level Zero Target RTL Implementation -----------------------------===// | |
| // | |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. | |
| // See https://llvm.org/LICENSE.txt for license information. | |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception | |
| // | |
| //===----------------------------------------------------------------------===// | |
| // | |
| // Level Zero Context abstraction. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "L0Context.h" | |
| #include "L0Plugin.h" | |
| namespace llvm::omp::target::plugin { | |
| Error L0ContextTy::init() { | |
| CALL_ZE_RET_ERROR(zeDriverGetApiVersion, zeDriver, &APIVersion); | |
| ODBG(OLDT_Init) << "Driver API version is " | |
| << llvm::format(PRIx32, APIVersion); | |
| ze_context_desc_t Desc{ZE_STRUCTURE_TYPE_CONTEXT_DESC, nullptr, 0}; | |
| CALL_ZE_RET_ERROR(zeContextCreate, zeDriver, &Desc, &zeContext); | |
| if (auto Err = EventPool.init(zeContext, 0)) | |
| return Err; | |
| if (auto Err = HostMemAllocator.initHostPool(*this, Plugin.getOptions())) | |
| return Err; | |
| return Plugin::success(); | |
| } | |
| Error L0ContextTy::deinit() { | |
| if (auto Err = EventPool.deinit()) | |
| return Err; | |
| if (auto Err = HostMemAllocator.deinit()) | |
| return Err; | |
| if (zeContext) | |
| CALL_ZE_RET_ERROR(zeContextDestroy, zeContext); | |
| return Plugin::success(); | |
| } | |
| StagingBufferTy &L0ContextTy::getStagingBuffer() { | |
| auto &TLS = Plugin.getContextTLS(getZeContext()); | |
| auto &Buffer = TLS.getStagingBuffer(); | |
| const auto &Options = Plugin.getOptions(); | |
| if (!Buffer.initialized()) | |
| Buffer.init(getZeContext(), Options.StagingBufferSize, | |
| Options.StagingBufferCount); | |
| return Buffer; | |
| } | |
| } // namespace llvm::omp::target::plugin |