| //===--- 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); |
| DP("Driver API version is %" PRIx32 "\n", 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 |