|
10 | 10 | #include <CL/sycl/detail/memory_manager.hpp>
|
11 | 11 | #include <CL/sycl/detail/pi.hpp>
|
12 | 12 | #include <CL/sycl/device.hpp>
|
| 13 | +#include <detail/event_impl.hpp> |
13 | 14 | #include <detail/queue_impl.hpp>
|
14 | 15 |
|
15 | 16 | #include <cstring>
|
@@ -39,48 +40,59 @@ template <> device queue_impl::get_info<info::queue::device>() const {
|
39 | 40 | return get_device();
|
40 | 41 | }
|
41 | 42 |
|
| 43 | +static event prepareUSMEvent(shared_ptr_class<detail::queue_impl> QueueImpl, |
| 44 | + RT::PiEvent NativeEvent) { |
| 45 | + auto EventImpl = std::make_shared<detail::event_impl>(QueueImpl); |
| 46 | + EventImpl->getHandleRef() = NativeEvent; |
| 47 | + EventImpl->setContextImpl(detail::getSyclObjImpl(QueueImpl->get_context())); |
| 48 | + return detail::createSyclObjFromImpl<event>(EventImpl); |
| 49 | +} |
| 50 | + |
42 | 51 | event queue_impl::memset(shared_ptr_class<detail::queue_impl> Impl, void *Ptr,
|
43 | 52 | int Value, size_t Count) {
|
44 | 53 | context Context = get_context();
|
45 |
| - RT::PiEvent Event = nullptr; |
46 |
| - MemoryManager::fill_usm(Ptr, Impl, Count, Value, /*DepEvents*/ {}, Event); |
| 54 | + RT::PiEvent NativeEvent = nullptr; |
| 55 | + MemoryManager::fill_usm(Ptr, Impl, Count, Value, /*DepEvents*/ {}, |
| 56 | + NativeEvent); |
47 | 57 |
|
48 | 58 | if (Context.is_host())
|
49 | 59 | return event();
|
50 | 60 |
|
51 |
| - event ResEvent{pi::cast<cl_event>(Event), Context}; |
| 61 | + event ResEvent = prepareUSMEvent(Impl, NativeEvent); |
52 | 62 | addUSMEvent(ResEvent);
|
53 | 63 | return ResEvent;
|
54 | 64 | }
|
55 | 65 |
|
56 | 66 | event queue_impl::memcpy(shared_ptr_class<detail::queue_impl> Impl, void *Dest,
|
57 | 67 | const void *Src, size_t Count) {
|
58 | 68 | context Context = get_context();
|
59 |
| - RT::PiEvent Event = nullptr; |
60 |
| - MemoryManager::copy_usm(Src, Impl, Count, Dest, /*DepEvents*/ {}, Event); |
| 69 | + RT::PiEvent NativeEvent = nullptr; |
| 70 | + MemoryManager::copy_usm(Src, Impl, Count, Dest, /*DepEvents*/ {}, |
| 71 | + NativeEvent); |
61 | 72 |
|
62 | 73 | if (Context.is_host())
|
63 | 74 | return event();
|
64 | 75 |
|
65 |
| - event ResEvent{pi::cast<cl_event>(Event), Context}; |
| 76 | + event ResEvent = prepareUSMEvent(Impl, NativeEvent); |
66 | 77 | addUSMEvent(ResEvent);
|
67 | 78 | return ResEvent;
|
68 | 79 | }
|
69 | 80 |
|
70 |
| -event queue_impl::mem_advise(const void *Ptr, size_t Length, |
| 81 | +event queue_impl::mem_advise(shared_ptr_class<detail::queue_impl> Impl, |
| 82 | + const void *Ptr, size_t Length, |
71 | 83 | pi_mem_advice Advice) {
|
72 | 84 | context Context = get_context();
|
73 | 85 | if (Context.is_host()) {
|
74 | 86 | return event();
|
75 | 87 | }
|
76 | 88 |
|
77 | 89 | // non-Host device
|
78 |
| - RT::PiEvent Event = nullptr; |
| 90 | + RT::PiEvent NativeEvent = nullptr; |
79 | 91 | const detail::plugin &Plugin = getPlugin();
|
80 | 92 | Plugin.call<PiApiKind::piextUSMEnqueueMemAdvise>(getHandleRef(), Ptr, Length,
|
81 |
| - Advice, &Event); |
| 93 | + Advice, &NativeEvent); |
82 | 94 |
|
83 |
| - event ResEvent{pi::cast<cl_event>(Event), Context}; |
| 95 | + event ResEvent = prepareUSMEvent(Impl, NativeEvent); |
84 | 96 | addUSMEvent(ResEvent);
|
85 | 97 | return ResEvent;
|
86 | 98 | }
|
|
0 commit comments