//===----------------------------------------------------------------------===// // // 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 // //===----------------------------------------------------------------------===// /// /// \file /// This file contains the declaration of the SYCL context class, which /// represents the runtime data structures and state required by a SYCL backend /// API to interact with a group of devices associated with a platform. /// //===----------------------------------------------------------------------===// #ifndef _LIBSYCL___IMPL_CONTEXT_HPP #define _LIBSYCL___IMPL_CONTEXT_HPP #include #include #include #include #include #include _LIBSYCL_BEGIN_NAMESPACE_SYCL class context; class device; class platform; namespace detail { class ContextImpl; template using is_context_info_desc_t = typename is_info_desc::return_type; } // namespace detail // SYCL 2020 4.6.3. Context class class _LIBSYCL_EXPORT context { public: context(const context &rhs) = default; context(context &&rhs) = default; context &operator=(const context &rhs) = default; context &operator=(context &&rhs) = default; friend bool operator==(const context &lhs, const context &rhs) { return lhs.impl == rhs.impl; } friend bool operator!=(const context &lhs, const context &rhs) { return !(lhs == rhs); } /// \return the backend associated with this context. backend get_backend() const noexcept; /// \return the platform associated with this SYCL context. platform get_platform() const; /// \return a vector of valid SYCL devices associated with this SYCL context. std::vector get_devices() const; /// Queries this SYCL context for information. /// /// The return type depends on information being queried. template detail::is_context_info_desc_t get_info() const; /// Queries this SYCL context for SYCL backend-specific information. /// /// The return type depends on information being queried. template typename Param::return_type get_backend_info() const; private: context(const std::shared_ptr &Impl) : impl(Impl) {} std::shared_ptr impl; friend sycl::detail::ImplUtils; }; // class context _LIBSYCL_END_NAMESPACE_SYCL template <> struct std::hash : public sycl::detail::HashBase { }; #endif // _LIBSYCL___IMPL_CONTEXT_HPP