@@ -257,27 +257,65 @@ namespace cms::alpakatools {
257257 using device_view = typename detail::view_type<TDev, T>::type;
258258
259259 template <typename T, typename TDev>
260- std::enable_if_t <not std::is_array_v<T>, device_view<TDev, T>> make_device_view (TDev const & device, T& data) {
260+ std::enable_if_t <alpaka::isDevice<TDev> and not std::is_array_v<T>, device_view<TDev, T>> make_device_view (
261+ TDev const & device, T& data) {
261262 return alpaka::ViewPlainPtr<TDev, T, Dim0D, Idx>(&data, device, Scalar{});
262263 }
263264
264265 template <typename T, typename TDev>
265- device_view<TDev, T[]> make_device_view (TDev const & device, T* data, Extent extent) {
266+ std::enable_if_t <alpaka::isDevice<TDev>, device_view<TDev, T[]>> make_device_view (TDev const & device,
267+ T* data,
268+ Extent extent) {
266269 return alpaka::ViewPlainPtr<TDev, T, Dim1D, Idx>(data, device, Vec1D{extent});
267270 }
268271
269272 template <typename T, typename TDev>
270- std::enable_if_t <cms::is_unbounded_array_v<T> and not std::is_array_v<std::remove_extent_t <T>>, device_view<TDev, T>>
273+ std::enable_if_t <alpaka::isDevice<TDev> and cms::is_unbounded_array_v<T> and
274+ not std::is_array_v<std::remove_extent_t <T>>,
275+ device_view<TDev, T>>
271276 make_device_view (TDev const & device, T& data, Extent extent) {
272277 return alpaka::ViewPlainPtr<TDev, std::remove_extent_t <T>, Dim1D, Idx>(data, device, Vec1D{extent});
273278 }
274279
275280 template <typename T, typename TDev>
276- std::enable_if_t <cms::is_bounded_array_v<T> and not std::is_array_v<std::remove_extent_t <T>>, device_view<TDev, T>>
281+ std::enable_if_t <alpaka::isDevice<TDev> and cms::is_bounded_array_v<T> and
282+ not std::is_array_v<std::remove_extent_t <T>>,
283+ device_view<TDev, T>>
277284 make_device_view (TDev const & device, T& data) {
278285 return alpaka::ViewPlainPtr<TDev, std::remove_extent_t <T>, Dim1D, Idx>(data, device, Vec1D{std::extent_v<T>});
279286 }
280287
288+ template <typename T, typename TQueue>
289+ std::enable_if_t <alpaka::isQueue<TQueue> and not std::is_array_v<T>, device_view<alpaka::Dev<TQueue>, T>>
290+ make_device_view (TQueue const & queue, T& data) {
291+ return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, T, Dim0D, Idx>(&data, alpaka::getDev (queue), Scalar{});
292+ }
293+
294+ template <typename T, typename TQueue>
295+ std::enable_if_t <alpaka::isQueue<TQueue>, device_view<alpaka::Dev<TQueue>, T[]>> make_device_view (TQueue const & queue,
296+ T* data,
297+ Extent extent) {
298+ return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, T, Dim1D, Idx>(data, alpaka::getDev (queue), Vec1D{extent});
299+ }
300+
301+ template <typename T, typename TQueue>
302+ std::enable_if_t <alpaka::isQueue<TQueue> and cms::is_unbounded_array_v<T> and
303+ not std::is_array_v<std::remove_extent_t <T>>,
304+ device_view<alpaka::Dev<TQueue>, T>>
305+ make_device_view (TQueue const & queue, T& data, Extent extent) {
306+ return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, std::remove_extent_t <T>, Dim1D, Idx>(
307+ data, alpaka::getDev (queue), Vec1D{extent});
308+ }
309+
310+ template <typename T, typename TQueue>
311+ std::enable_if_t <alpaka::isQueue<TQueue> and cms::is_bounded_array_v<T> and
312+ not std::is_array_v<std::remove_extent_t <T>>,
313+ device_view<alpaka::Dev<TQueue>, T>>
314+ make_device_view (TQueue const & queue, T& data) {
315+ return alpaka::ViewPlainPtr<alpaka::Dev<TQueue>, std::remove_extent_t <T>, Dim1D, Idx>(
316+ data, alpaka::getDev (queue), Vec1D{std::extent_v<T>});
317+ }
318+
281319} // namespace cms::alpakatools
282320
283321#endif // HeterogeneousCore_AlpakaInterface_interface_memory_h
0 commit comments