#if __has_include(<sycl/backend/opencl.hpp>)
#include <sycl/backend/opencl.hpp>
#elif __has_include(<CL/sycl/backend/opencl.hpp>)
#include <CL/sycl/backend/opencl.hpp>
#else
#error "Unsupported compiler"
#endif
#include <sycl/ext/oneapi/backend/level_zero.hpp>
#include "xpu/sycl/compat.hpp"
#include "xpu/sycl/utils.hpp"
namespace dnnl {
namespace impl {
namespace xpu {
namespace sycl {
namespace {
template <typename sycl_object_t>
void *get_native_impl(backend_t backend, const sycl_object_t &sycl_object) {
if (backend == backend_t::opencl) {
return ::sycl::get_native<::sycl::backend::opencl>(sycl_object);
} else if (backend == backend_t::ze) {
return ::sycl::get_native<::sycl::backend::ext_oneapi_level_zero>(
sycl_object);
} else {
assert(!"unexpected");
return nullptr;
}
return nullptr;
}
}
namespace compat {
void *get_native(const ::sycl::device &dev) {
auto backend = get_backend(dev);
return get_native_impl(backend, dev);
}
void *get_native(const ::sycl::context &ctx) {
auto devices = ctx.get_devices();
assert(!devices.empty());
if (devices.empty()) return nullptr;
auto backend = get_backend(devices[0]);
return get_native_impl(backend, ctx);
}
} } } } }