Skip to content

Commit 282e774

Browse files
[SYCL] Drop get_native class functions (#6483)
Drop deprecated get_native class methods in favor of get_native free functions.
1 parent 6485ec4 commit 282e774

File tree

13 files changed

+74
-135
lines changed

13 files changed

+74
-135
lines changed

sycl/include/sycl/backend.hpp

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,19 @@ auto get_native(const SyclObjectT &Obj)
127127
throw sycl::runtime_error(errc::backend_mismatch, "Backends mismatch",
128128
PI_ERROR_INVALID_OPERATION);
129129
}
130-
return Obj.template get_native<BackendName>();
130+
return reinterpret_cast<backend_return_t<BackendName, SyclObjectT>>(
131+
Obj.getNative());
132+
}
133+
134+
template <backend BackendName, bundle_state State>
135+
auto get_native(const kernel_bundle<State> &Obj)
136+
-> backend_return_t<BackendName, kernel_bundle<State>> {
137+
// TODO use SYCL 2020 exception when implemented
138+
if (Obj.get_backend() != BackendName) {
139+
throw sycl::runtime_error(errc::backend_mismatch, "Backends mismatch",
140+
PI_ERROR_INVALID_OPERATION);
141+
}
142+
return Obj.template getNative<BackendName>();
131143
}
132144

133145
template <backend BackendName, typename DataT, int Dimensions,

sycl/include/sycl/context.hpp

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -217,15 +217,6 @@ class __SYCL_EXPORT context {
217217
/// \return a vector of valid SYCL device instances.
218218
std::vector<device> get_devices() const;
219219

220-
/// Gets the native handle of the SYCL context.
221-
///
222-
/// \return a native handle, the type of which defined by the backend.
223-
template <backend Backend>
224-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
225-
backend_return_t<Backend, context> get_native() const {
226-
return reinterpret_cast<backend_return_t<Backend, context>>(getNative());
227-
}
228-
229220
private:
230221
/// Constructs a SYCL context object from a valid context_impl instance.
231222
context(std::shared_ptr<detail::context_impl> Impl);

sycl/include/sycl/device.hpp

Lines changed: 7 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ __SYCL_INLINE_NAMESPACE(cl) {
2424
namespace sycl {
2525
// Forward declarations
2626
class device_selector;
27+
template <backend BackendName, class SyclObjectT>
28+
auto get_native(const SyclObjectT &Obj)
29+
-> backend_return_t<BackendName, SyclObjectT>;
2730
namespace detail {
2831
class device_impl;
2932
auto getDeviceComparisonLambda();
@@ -184,19 +187,6 @@ class __SYCL_EXPORT device {
184187
/// \return the backend associated with this device.
185188
backend get_backend() const noexcept;
186189

187-
/// Gets the native handle of the SYCL device.
188-
///
189-
/// \return a native handle, the type of which defined by the backend.
190-
template <backend Backend>
191-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
192-
backend_return_t<Backend, device> get_native() const {
193-
// In CUDA CUdevice isn't an opaque pointer, unlike a lot of the others,
194-
// but instead a 32-bit int (on all relevant systems). Different
195-
// backends use the same function for this purpose so static_cast is
196-
// needed in some cases but not others, so a C-style cast was chosen.
197-
return (backend_return_t<Backend, device>)getNative();
198-
}
199-
200190
/// Indicates if the SYCL device has the given feature.
201191
///
202192
/// \param Aspect is one of the values in Table 4.20 of the SYCL 2020
@@ -223,6 +213,10 @@ class __SYCL_EXPORT device {
223213
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
224214

225215
friend auto detail::getDeviceComparisonLambda();
216+
217+
template <backend BackendName, class SyclObjectT>
218+
friend auto get_native(const SyclObjectT &Obj)
219+
-> backend_return_t<BackendName, SyclObjectT>;
226220
};
227221

228222
} // namespace sycl

sycl/include/sycl/event.hpp

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,11 @@ __SYCL_INLINE_NAMESPACE(cl) {
2121
namespace sycl {
2222
// Forward declaration
2323
class context;
24+
25+
template <backend BackendName, class SyclObjectT>
26+
auto get_native(const SyclObjectT &Obj)
27+
-> backend_return_t<BackendName, SyclObjectT>;
28+
2429
namespace detail {
2530
class event_impl;
2631
}
@@ -128,15 +133,6 @@ class __SYCL_EXPORT event {
128133
/// \return the backend associated with this platform
129134
backend get_backend() const noexcept;
130135

131-
/// Gets the native handle of the SYCL event.
132-
///
133-
/// \return a native handle, the type of which defined by the backend.
134-
template <backend Backend>
135-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
136-
backend_return_t<Backend, event> get_native() const {
137-
return reinterpret_cast<backend_return_t<Backend, event>>(getNative());
138-
}
139-
140136
private:
141137
event(std::shared_ptr<detail::event_impl> EventImpl);
142138

sycl/include/sycl/ext/oneapi/backend/level_zero.hpp

Lines changed: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -221,21 +221,6 @@ make_buffer(
221221
!(BackendObject.Ownership == ext::oneapi::level_zero::ownership::keep));
222222
}
223223

224-
// TODO: remove this specialization when generic is changed to call
225-
// .GetNative() instead of .get_native() member of kernel_bundle.
226-
template <>
227-
inline auto get_native<backend::ext_oneapi_level_zero>(
228-
const kernel_bundle<bundle_state::executable> &Obj)
229-
-> backend_return_t<backend::ext_oneapi_level_zero,
230-
kernel_bundle<bundle_state::executable>> {
231-
// TODO use SYCL 2020 exception when implemented
232-
if (Obj.get_backend() != backend::ext_oneapi_level_zero)
233-
throw runtime_error(errc::backend_mismatch, "Backends mismatch",
234-
PI_ERROR_INVALID_OPERATION);
235-
236-
return Obj.template getNative<backend::ext_oneapi_level_zero>();
237-
}
238-
239224
namespace __SYCL2020_DEPRECATED("use 'ext::oneapi::level_zero' instead")
240225
level_zero {
241226
using namespace ext::oneapi::level_zero;

sycl/include/sycl/ext/oneapi/experimental/backend/cuda.hpp

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
#include <sycl/backend.hpp>
1212
#include <sycl/context.hpp>
13+
#include <sycl/ext/oneapi/experimental/backend/backend_traits_cuda.hpp>
1314

1415
#include <vector>
1516

@@ -52,13 +53,6 @@ inline auto get_native<backend::ext_oneapi_cuda, context>(const context &C)
5253
return ret;
5354
}
5455

55-
// Specialisation of non-free context get_native
56-
template <>
57-
inline backend_return_t<backend::ext_oneapi_cuda, context>
58-
context::get_native<backend::ext_oneapi_cuda>() const {
59-
return sycl::get_native<backend::ext_oneapi_cuda, context>(*this);
60-
}
61-
6256
// Specialisation of interop_handles get_native_context
6357
template <>
6458
inline backend_return_t<backend::ext_oneapi_cuda, context>
@@ -79,6 +73,20 @@ inline device make_device<backend::ext_oneapi_cuda>(
7973
return ext::oneapi::cuda::make_device(NativeHandle);
8074
}
8175

76+
template <>
77+
backend_return_t<backend::ext_oneapi_cuda, device>
78+
get_native<backend::ext_oneapi_cuda, device>(const device &Obj) {
79+
// TODO use SYCL 2020 exception when implemented
80+
if (Obj.get_backend() != backend::ext_oneapi_cuda) {
81+
throw sycl::runtime_error(errc::backend_mismatch, "Backends mismatch",
82+
PI_ERROR_INVALID_OPERATION);
83+
}
84+
// CUDA uses a 32-bit int instead of an opaque pointer like other backends,
85+
// so we need a specialization with static_cast instead of reinterpret_cast.
86+
return static_cast<backend_return_t<backend::ext_oneapi_cuda, device>>(
87+
Obj.getNative());
88+
}
89+
8290
// CUDA event specialization
8391
template <>
8492
inline event make_event<backend::ext_oneapi_cuda>(

sycl/include/sycl/kernel.hpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,9 @@ class program;
2727
class context;
2828
template <backend Backend> class backend_traits;
2929
template <bundle_state State> class kernel_bundle;
30+
template <backend BackendName, class SyclObjectT>
31+
auto get_native(const SyclObjectT &Obj)
32+
-> backend_return_t<BackendName, SyclObjectT>;
3033

3134
namespace detail {
3235
class kernel_impl;
@@ -190,12 +193,6 @@ class __SYCL_EXPORT kernel {
190193
param>::input_type Value) const;
191194
// clang-format on
192195

193-
template <backend Backend>
194-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
195-
backend_return_t<Backend, kernel> get_native() const {
196-
return detail::pi::cast<backend_return_t<Backend, kernel>>(getNative());
197-
}
198-
199196
private:
200197
/// Constructs a SYCL kernel object from a valid kernel_impl instance.
201198
kernel(std::shared_ptr<detail::kernel_impl> Impl);
@@ -211,6 +208,9 @@ class __SYCL_EXPORT kernel {
211208
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
212209
template <class T>
213210
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
211+
template <backend BackendName, class SyclObjectT>
212+
friend auto get_native(const SyclObjectT &Obj)
213+
-> backend_return_t<BackendName, SyclObjectT>;
214214
};
215215
} // namespace sycl
216216
} // __SYCL_INLINE_NAMESPACE(cl)

sycl/include/sycl/kernel_bundle.hpp

Lines changed: 6 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,9 @@ __SYCL_INLINE_NAMESPACE(cl) {
2626
namespace sycl {
2727
// Forward declaration
2828
template <backend Backend> class backend_traits;
29-
template <backend Backend, class SyclT>
30-
auto get_native(const SyclT &Obj) -> backend_return_t<Backend, SyclT>;
29+
template <backend Backend, bundle_state State>
30+
auto get_native(const kernel_bundle<State> &Obj)
31+
-> backend_return_t<Backend, kernel_bundle<State>>;
3132

3233
namespace detail {
3334
class kernel_id_impl;
@@ -310,12 +311,6 @@ class kernel_bundle : public detail::kernel_bundle_plain {
310311
return reinterpret_cast<device_image_iterator>(kernel_bundle_plain::end());
311312
}
312313

313-
template <backend Backend>
314-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
315-
backend_return_t<Backend, kernel_bundle<State>> get_native() const {
316-
return getNative<Backend>();
317-
}
318-
319314
private:
320315
kernel_bundle(detail::KernelBundleImplPtr Impl)
321316
: kernel_bundle_plain(std::move(Impl)) {}
@@ -326,8 +321,9 @@ class kernel_bundle : public detail::kernel_bundle_plain {
326321
template <class T>
327322
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
328323

329-
template <backend Backend, class SyclT>
330-
friend auto get_native(const SyclT &Obj) -> backend_return_t<Backend, SyclT>;
324+
template <backend Backend, bundle_state StateB>
325+
friend auto get_native(const kernel_bundle<StateB> &Obj)
326+
-> backend_return_t<Backend, kernel_bundle<StateB>>;
331327

332328
template <backend Backend>
333329
backend_return_t<Backend, kernel_bundle<State>> getNative() const {

sycl/include/sycl/platform.hpp

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@ namespace sycl {
2424
// Forward declaration
2525
class device_selector;
2626
class device;
27+
template <backend BackendName, class SyclObjectT>
28+
auto get_native(const SyclObjectT &Obj)
29+
-> backend_return_t<BackendName, SyclObjectT>;
2730
namespace detail {
2831
class platform_impl;
2932
}
@@ -117,15 +120,6 @@ class __SYCL_EXPORT platform {
117120
/// \return the backend associated with this platform
118121
backend get_backend() const noexcept;
119122

120-
/// Gets the native handle of the SYCL platform.
121-
///
122-
/// \return a native handle, the type of which defined by the backend.
123-
template <backend Backend>
124-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
125-
backend_return_t<Backend, platform> get_native() const {
126-
return reinterpret_cast<backend_return_t<Backend, platform>>(getNative());
127-
}
128-
129123
/// Indicates if all of the SYCL devices on this platform have the
130124
/// given feature.
131125
///
@@ -152,6 +146,9 @@ class __SYCL_EXPORT platform {
152146
template <class Obj>
153147
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
154148

149+
template <backend BackendName, class SyclObjectT>
150+
friend auto get_native(const SyclObjectT &Obj)
151+
-> backend_return_t<BackendName, SyclObjectT>;
155152
}; // class platform
156153
} // namespace sycl
157154
} // __SYCL_INLINE_NAMESPACE(cl)

sycl/include/sycl/program.hpp

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,10 @@ namespace sycl {
2828
// Forward declarations
2929
class context;
3030
class device;
31+
template <backend BackendName, class SyclObjectT>
32+
auto get_native(const SyclObjectT &Obj)
33+
-> backend_return_t<BackendName, SyclObjectT>;
34+
3135
namespace detail {
3236
class program_impl;
3337
}
@@ -365,15 +369,6 @@ class __SYCL_EXPORT __SYCL2020_DEPRECATED(
365369
/// \return the backend associated with this program.
366370
backend get_backend() const noexcept;
367371

368-
/// Gets the native handle of the SYCL platform.
369-
///
370-
/// \return a native handle, the type of which defined by the backend.
371-
template <backend Backend>
372-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
373-
backend_return_t<Backend, program> get_native() const {
374-
return reinterpret_cast<backend_return_t<Backend, program>>(getNative());
375-
}
376-
377372
private:
378373
pi_native_handle getNative() const;
379374
program(std::shared_ptr<detail::program_impl> impl);
@@ -419,6 +414,9 @@ class __SYCL_EXPORT __SYCL2020_DEPRECATED(
419414
friend decltype(Obj::impl) detail::getSyclObjImpl(const Obj &SyclObject);
420415
template <class T>
421416
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
417+
template <backend BackendName, class SyclObjectT>
418+
friend auto get_native(const SyclObjectT &Obj)
419+
-> backend_return_t<BackendName, SyclObjectT>;
422420
};
423421
} // namespace sycl
424422
} // __SYCL_INLINE_NAMESPACE(cl)

sycl/include/sycl/queue.hpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -81,8 +81,13 @@ class context;
8181
class device;
8282
class queue;
8383

84+
template <backend BackendName, class SyclObjectT>
85+
auto get_native(const SyclObjectT &Obj)
86+
-> backend_return_t<BackendName, SyclObjectT>;
87+
8488
namespace detail {
8589
class queue_impl;
90+
8691
#if __SYCL_USE_FALLBACK_ASSERT
8792
static event submitAssertCapture(queue &, event &, queue *,
8893
const detail::code_location &);
@@ -1033,15 +1038,6 @@ class __SYCL_EXPORT queue {
10331038
/// \return the backend associated with this queue.
10341039
backend get_backend() const noexcept;
10351040

1036-
/// Gets the native handle of the SYCL queue.
1037-
///
1038-
/// \return a native handle, the type of which defined by the backend.
1039-
template <backend Backend>
1040-
__SYCL_DEPRECATED("Use SYCL 2020 sycl::get_native free function")
1041-
backend_return_t<Backend, queue> get_native() const {
1042-
return reinterpret_cast<backend_return_t<Backend, queue>>(getNative());
1043-
}
1044-
10451041
private:
10461042
pi_native_handle getNative() const;
10471043

@@ -1053,6 +1049,10 @@ class __SYCL_EXPORT queue {
10531049
template <class T>
10541050
friend T detail::createSyclObjFromImpl(decltype(T::impl) ImplObj);
10551051

1052+
template <backend BackendName, class SyclObjectT>
1053+
friend auto get_native(const SyclObjectT &Obj)
1054+
-> backend_return_t<BackendName, SyclObjectT>;
1055+
10561056
#if __SYCL_USE_FALLBACK_ASSERT
10571057
friend event detail::submitAssertCapture(queue &, event &, queue *,
10581058
const detail::code_location &);

sycl/test/basic_tests/interop-cuda-experimental.cpp

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -56,20 +56,6 @@ int main() {
5656
cu_event = get_native<backend::ext_oneapi_cuda>(Event);
5757
cu_queue = get_native<backend::ext_oneapi_cuda>(Queue);
5858

59-
// Check deprecated
60-
// expected-warning@+2 {{'get_native' is deprecated: Use SYCL 2020 sycl::get_native free function}}
61-
// expected-warning@+1 {{'get_native<sycl::backend::ext_oneapi_cuda>' is deprecated: Use SYCL 2020 sycl::get_native free function}}
62-
cu_device = Device.get_native<backend::ext_oneapi_cuda>();
63-
// expected-warning@+2 {{'get_native' is deprecated: Use SYCL 2020 sycl::get_native free function}}
64-
// expected-warning@+1 {{'get_native<sycl::backend::ext_oneapi_cuda>' is deprecated: Use SYCL 2020 sycl::get_native free function}}
65-
cu_context = Context.get_native<backend::ext_oneapi_cuda>();
66-
// expected-warning@+2 {{'get_native' is deprecated: Use SYCL 2020 sycl::get_native free function}}
67-
// expected-warning@+1 {{'get_native<sycl::backend::ext_oneapi_cuda>' is deprecated: Use SYCL 2020 sycl::get_native free function}}
68-
cu_event = Event.get_native<backend::ext_oneapi_cuda>();
69-
// expected-warning@+2 {{'get_native' is deprecated: Use SYCL 2020 sycl::get_native free function}}
70-
// expected-warning@+1 {{'get_native<sycl::backend::ext_oneapi_cuda>' is deprecated: Use SYCL 2020 sycl::get_native free function}}
71-
cu_queue = Queue.get_native<backend::ext_oneapi_cuda>();
72-
7359
// 4.5.1.1 For each SYCL runtime class T which supports SYCL application
7460
// interoperability with the SYCL backend, a specialization of input_type must
7561
// be defined as the type of SYCL application interoperability native backend

0 commit comments

Comments
 (0)