blob: 1f1be69e8913989fe789bb65f710fb118c87ae58 [file] [edit]
//===----------------------------------------------------------------------===//
//
// 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
//
//===----------------------------------------------------------------------===//
#include <sycl/__impl/context.hpp>
#include <sycl/__impl/device.hpp>
#include <sycl/__impl/exception.hpp>
#include <detail/context_impl.hpp>
#include <detail/platform_impl.hpp>
#include <algorithm>
#include <cassert>
#include <vector>
_LIBSYCL_BEGIN_NAMESPACE_SYCL
context::context(const std::vector<device> &deviceList,
async_handler asyncHandler, const property_list &propList) {
auto deviceImpls = detail::getSyclObjImpls(deviceList);
impl = detail::ContextImpl::create(std::move(deviceImpls), asyncHandler,
propList);
}
backend context::get_backend() const noexcept { return impl->getBackend(); }
platform context::get_platform() const {
return detail::createSyclObjFromImpl<platform>(impl->getPlatformImpl());
}
std::vector<device> context::get_devices() const {
std::vector<device> Devices;
impl->iterateDevices([&Devices](detail::DeviceImpl *DevImpl) {
assert(DevImpl && "Device impl can't be nullptr");
Devices.push_back(detail::createSyclObjFromImpl<device>(*DevImpl));
});
return Devices;
}
_LIBSYCL_END_NAMESPACE_SYCL