26 #include <sycl/feature_test.hpp>
36 #if SYCL_BACKEND_OPENCL
39 #if SYCL_EXT_ONEAPI_BACKEND_CUDA
40 #ifdef SYCL_EXT_ONEAPI_BACKEND_CUDA_EXPERIMENTAL
46 #if SYCL_EXT_ONEAPI_BACKEND_HIP
49 #if SYCL_EXT_ONEAPI_BACKEND_LEVEL_ZERO
55 #include <type_traits>
59 inline namespace _V1 {
81 template <backend Backend,
typename SyclType>
85 template <backend Backend,
typename SyclType>
90 template <backend Backend,
typename DataT,
int Dimensions,
typename AllocatorT>
98 ReturnValue = detail::pi::cast<ReturnType>(Handle[0]);
104 template <
typename DataT,
int Dimensions,
typename AllocatorT>
111 for (
auto &Obj : Handle) {
112 ReturnValue.push_back(
119 #if SYCL_EXT_ONEAPI_BACKEND_LEVEL_ZERO
129 "Buffer interop is not supported by level zero yet");
130 return Obj.template getNative<BackendName>();
135 template <backend BackendName,
class SyclObjectT>
138 if (Obj.get_backend() != BackendName) {
140 "Backends mismatch");
146 template <backend BackendName>
148 if (Obj.get_backend() != BackendName) {
150 "Backends mismatch");
152 int32_t IsImmCmdList;
156 RetVal = IsImmCmdList
167 template <backend BackendName, bundle_state State>
170 if (Obj.get_backend() != BackendName) {
172 "Backends mismatch");
174 return Obj.template getNative<BackendName>();
181 return detail::get_native_buffer<BackendName>(Obj);
184 #if SYCL_BACKEND_OPENCL
186 inline backend_return_t<backend::opencl, event>
187 get_native<backend::opencl, event>(
const event &Obj) {
190 "Backends mismatch");
192 backend_return_t<backend::opencl, event> ReturnValue;
193 for (
auto const &element : Obj.getNativeVector()) {
194 ReturnValue.push_back(
203 #if SYCL_EXT_ONEAPI_BACKEND_CUDA
205 inline backend_return_t<backend::ext_oneapi_cuda, device>
206 get_native<backend::ext_oneapi_cuda, device>(
const device &Obj) {
209 "Backends mismatch");
213 return static_cast<backend_return_t<backend::ext_oneapi_cuda, device>
>(
217 #ifndef SYCL_EXT_ONEAPI_BACKEND_CUDA_EXPERIMENTAL
220 "Context interop is deprecated for CUDA. If a native context is required,"
221 " use cuDevicePrimaryCtxRetain with a native device")
223 backend::ext_oneapi_cuda, context>(const context &Obj) {
226 "Backends mismatch");
228 return reinterpret_cast<backend_return_t<backend::ext_oneapi_cuda, context>
>(
235 #if SYCL_EXT_ONEAPI_BACKEND_HIP
239 "Context interop is deprecated for HIP. If a native context is required,"
240 " use hipDevicePrimaryCtxRetain with a native device")
242 backend::ext_oneapi_hip, context>(const context &Obj) {
245 "Backends mismatch");
247 return reinterpret_cast<backend_return_t<backend::ext_oneapi_hip, context>
>(
258 typename detail::interop<
274 int32_t nativeHandleDesc,
276 const device *TargetDevice,
bool KeepOwnership,
282 const context &TargetContext,
bool KeepOwnership,
292 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
295 __SYCL_EXPORT std::shared_ptr<detail::kernel_bundle_impl>
300 template <backend Backend>
307 detail::pi::cast<pi_native_handle>(BackendObject), Backend);
310 template <backend Backend>
311 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeDevice ==
true,
319 template <backend Backend>
320 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeContext ==
true,
330 template <backend Backend>
331 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeQueue ==
true,
339 false, TargetContext,
nullptr, KeepOwnership, {},
343 template <backend Backend>
344 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeEvent ==
true,
348 const context &TargetContext) {
350 TargetContext, Backend);
353 template <backend Backend>
355 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeEvent == true,
357 template input_type<
event>
360 bool KeepOwnership) {
362 TargetContext, KeepOwnership, Backend);
366 typename AllocatorT = buffer_allocator<std::remove_const_t<T>>>
367 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeBuffer ==
370 buffer<T, Dimensions, AllocatorT>>
373 const context &TargetContext,
event AvailableEvent = {}) {
374 return detail::make_buffer_helper<T, Dimensions, AllocatorT>(
375 detail::pi::cast<pi_native_handle>(BackendObject), TargetContext,
381 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeImage ==
true &&
383 image<Dimensions, AllocatorT>>
386 const context &TargetContext,
event AvailableEvent = {}) {
387 return image<Dimensions, AllocatorT>(
388 detail::pi::cast<pi_native_handle>(BackendObject), TargetContext,
392 template <backend Backend>
396 const context &TargetContext) {
398 TargetContext, Backend);
401 template <backend Backend, bundle_state State>
402 std::enable_if_t<detail::InteropFeatureSupportMap<Backend>::MakeKernelBundle ==
404 kernel_bundle<State>>
407 const context &TargetContext) {
408 std::shared_ptr<detail::kernel_bundle_impl> KBImpl =
410 detail::pi::cast<pi_native_handle>(BackendObject), TargetContext,
411 false, State, Backend);
412 return detail::createSyclObjFromImpl<kernel_bundle<State>>(KBImpl);
The file contains implementations of accessor class.
struct _ze_command_queue_handle_t * ze_command_queue_handle_t
struct _ze_command_list_handle_t * ze_command_list_handle_t
typename detail::BackendReturn< Backend, T >::type return_type
typename detail::BackendInput< Backend, T >::type input_type
Defines a shared array that can be used by kernels in queues.
The context class represents a SYCL context on which kernel functions may be executed.
The SYCL device class encapsulates a single SYCL device on which kernels may be executed.
An event object can be used to synchronize memory transfers, enqueues of kernels and signaling barrie...
Defines a shared image data.
The kernel_bundle class represents collection of device images in a particular state.
Provides an abstraction of a SYCL kernel.
Objects of the property_list class are containers for the SYCL properties.
Encapsulates a single SYCL queue which schedules kernels on a SYCL device.
PiProgram cast(cl_program)=delete
backend convertBackend(pi_platform_backend PiBackend)
context make_context(pi_native_handle NativeHandle, const async_handler &Handler, backend Backend)
kernel make_kernel(pi_native_handle NativeHandle, const context &TargetContext, backend Backend)
queue make_queue(pi_native_handle NativeHandle, int32_t nativeHandleDesc, const context &TargetContext, const device *TargetDevice, bool KeepOwnership, const property_list &PropList, const async_handler &Handler, backend Backend)
auto get_native_buffer(const buffer< DataT, Dimensions, Allocator, void > &Obj) -> backend_return_t< BackendName, buffer< DataT, Dimensions, Allocator, void >>
platform make_platform(pi_native_handle NativeHandle, backend Backend)
device make_device(pi_native_handle NativeHandle, backend Backend)
event make_event(pi_native_handle NativeHandle, const context &TargetContext, backend Backend)
std::shared_ptr< detail::kernel_bundle_impl > make_kernel_bundle(pi_native_handle NativeHandle, const context &TargetContext, bundle_state State, backend Backend)
sycl::detail::kernel_bundle_impl kernel_bundle_impl
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeQueue==true, queue > make_queue(const typename backend_traits< Backend >::template input_type< queue > &BackendObject, const context &TargetContext, const async_handler Handler={})
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeDevice==true, device > make_device(const typename backend_traits< Backend >::template input_type< device > &BackendObject)
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeKernelBundle==true, kernel_bundle< State > > make_kernel_bundle(const typename backend_traits< Backend >::template input_type< kernel_bundle< State >> &BackendObject, const context &TargetContext)
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS Dimensions
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeEvent==true, event > make_event(const typename backend_traits< Backend >::template input_type< event > &BackendObject, const context &TargetContext)
auto get_native(const SyclObjectT &Obj) -> backend_return_t< BackendName, SyclObjectT >
typename backend_traits< Backend >::template return_type< SyclType > backend_return_t
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeImage==true &&Backend !=backend::ext_oneapi_level_zero, image< Dimensions, AllocatorT > > make_image(const typename backend_traits< Backend >::template input_type< image< Dimensions, AllocatorT >> &BackendObject, const context &TargetContext, event AvailableEvent={})
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS IsPlaceholder
kernel make_kernel(const typename backend_traits< Backend >::template input_type< kernel > &BackendObject, const context &TargetContext)
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakePlatform==true, platform > make_platform(const typename backend_traits< Backend >::template input_type< platform > &BackendObject)
std::function< void(sycl::exception_list)> async_handler
__SYCL_DEPRECATED("This is a deprecated argument type for SYCL nan built-in function.") std
class __SYCL_EBO __SYCL_SPECIAL_CLASS __SYCL_TYPE(local_accessor) local_accessor class __SYCL_EBO __SYCL_SPECIAL_CLASS AccessMode
detail::aligned_allocator< byte > image_allocator
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeContext==true, context > make_context(const typename backend_traits< Backend >::template input_type< context > &BackendObject, const async_handler &Handler={})
std::error_code make_error_code(sycl::errc E) noexcept
Constructs an error code using e and sycl_category()
std::enable_if_t< detail::InteropFeatureSupportMap< Backend >::MakeBuffer==true &&Backend !=backend::ext_oneapi_level_zero, buffer< T, Dimensions, AllocatorT > > make_buffer(const typename backend_traits< Backend >::template input_type< buffer< T, Dimensions, AllocatorT >> &BackendObject, const context &TargetContext, event AvailableEvent={})
typename backend_traits< Backend >::template input_type< SyclType > backend_input_t
uintptr_t pi_native_handle
backend_return_t< backend::opencl, buffer< DataT, Dimensions, AllocatorT > > ReturnType
static ReturnType GetNativeObjs(const std::vector< pi_native_handle > &Handle)
static ReturnType GetNativeObjs(const std::vector< pi_native_handle > &Handle)
backend_return_t< Backend, buffer< DataT, Dimensions, AllocatorT > > ReturnType
static constexpr bool MakePlatform