10
10
11
11
#include < CL/sycl/accessor.hpp>
12
12
#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>
13
19
#include < CL/sycl/exception.hpp>
20
+ #include < CL/sycl/platform.hpp>
21
+ #include < CL/sycl/queue.hpp>
22
+
23
+ #include < type_traits>
14
24
15
25
__SYCL_INLINE_NAMESPACE (cl) {
16
26
namespace sycl {
@@ -34,5 +44,77 @@ auto get_native(const accessor<DataT, Dimensions, AccessMode, AccessTarget,
34
44
AccessTarget, IsPlaceholder>>::type =
35
45
delete;
36
46
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
+ }
37
119
} // namespace sycl
38
120
} // __SYCL_INLINE_NAMESPACE(cl)
0 commit comments