1010
1111#include < CL/sycl/accessor.hpp>
1212#include < CL/sycl/backend_types.hpp>
13+ #include < CL/sycl/buffer.hpp>
14+ #include < CL/sycl/context.hpp>
15+ #include < CL/sycl/detail/backend_traits.hpp>
16+ #include < CL/sycl/detail/pi.hpp>
17+ #include < CL/sycl/device.hpp>
18+ #include < CL/sycl/event.hpp>
1319#include < CL/sycl/exception.hpp>
20+ #include < CL/sycl/platform.hpp>
21+ #include < CL/sycl/queue.hpp>
22+
23+ #include < type_traits>
1424
1525__SYCL_INLINE_NAMESPACE (cl) {
1626namespace sycl {
@@ -34,5 +44,77 @@ auto get_native(const accessor<DataT, Dimensions, AccessMode, AccessTarget,
3444 AccessTarget, IsPlaceholder>>::type =
3545 delete;
3646
47+ namespace detail {
48+ __SYCL_EXPORT platform make_platform (pi_native_handle NativeHandle,
49+ backend Backend);
50+ __SYCL_EXPORT device make_device (pi_native_handle NativeHandle,
51+ backend Backend);
52+ __SYCL_EXPORT context make_context (pi_native_handle NativeHandle,
53+ const async_handler &Handler,
54+ backend Backend);
55+ __SYCL_EXPORT queue make_queue (pi_native_handle NativeHandle,
56+ const context &TargetContext,
57+ const async_handler &Handler, backend Backend);
58+ __SYCL_EXPORT event make_event (pi_native_handle NativeHandle,
59+ const context &TargetContext, backend Backend);
60+ } // namespace detail
61+
62+ template <backend Backend>
63+ typename std::enable_if<
64+ detail::InteropFeatureSupportMap<Backend>::MakePlatform == true ,
65+ platform>::type
66+ make_platform (const typename interop<Backend, platform>::type &BackendObject) {
67+ return detail::make_platform (
68+ detail::pi::cast<pi_native_handle>(BackendObject), Backend);
69+ }
70+
71+ template <backend Backend>
72+ typename std::enable_if<
73+ detail::InteropFeatureSupportMap<Backend>::MakeDevice == true , device>::type
74+ make_device (const typename interop<Backend, device>::type &BackendObject) {
75+ return detail::make_device (detail::pi::cast<pi_native_handle>(BackendObject),
76+ Backend);
77+ }
78+
79+ template <backend Backend>
80+ typename std::enable_if<
81+ detail::InteropFeatureSupportMap<Backend>::MakeContext == true ,
82+ context>::type
83+ make_context (const typename interop<Backend, context>::type &BackendObject,
84+ const async_handler &Handler = {}) {
85+ return detail::make_context (detail::pi::cast<pi_native_handle>(BackendObject),
86+ Handler, Backend);
87+ }
88+
89+ template <backend Backend>
90+ typename std::enable_if<
91+ detail::InteropFeatureSupportMap<Backend>::MakeQueue == true , queue>::type
92+ make_queue (const typename interop<Backend, queue>::type &BackendObject,
93+ const context &TargetContext, const async_handler Handler = {}) {
94+ return detail::make_queue (detail::pi::cast<pi_native_handle>(BackendObject),
95+ TargetContext, Handler, Backend);
96+ }
97+
98+ template <backend Backend>
99+ typename std::enable_if<
100+ detail::InteropFeatureSupportMap<Backend>::MakeEvent == true , event>::type
101+ make_event (const typename interop<Backend, event>::type &BackendObject,
102+ const context &TargetContext) {
103+ return detail::make_event (detail::pi::cast<pi_native_handle>(BackendObject),
104+ TargetContext, Backend);
105+ }
106+
107+ template <backend Backend, typename T, int Dimensions = 1 ,
108+ typename AllocatorT = buffer_allocator>
109+ typename std::enable_if<detail::InteropFeatureSupportMap<Backend>::MakeBuffer ==
110+ true ,
111+ buffer<T, Dimensions, AllocatorT>>::type
112+ make_buffer (
113+ const typename interop<Backend, buffer<T, Dimensions, AllocatorT>>::type
114+ &BackendObject,
115+ const context &TargetContext, event AvailableEvent = {}) {
116+ return buffer<T, Dimensions, AllocatorT>(
117+ reinterpret_cast <cl_mem>(BackendObject), TargetContext, AvailableEvent);
118+ }
37119} // namespace sycl
38120} // __SYCL_INLINE_NAMESPACE(cl)
0 commit comments