1 //
2 // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // CLCommandQueueCL.h: Defines the class interface for CLCommandQueueCL,
7 // implementing CLCommandQueueImpl.
8
9 #ifndef LIBANGLE_RENDERER_CL_CLCOMMANDQUEUECL_H_
10 #define LIBANGLE_RENDERER_CL_CLCOMMANDQUEUECL_H_
11
12 #include "libANGLE/renderer/CLCommandQueueImpl.h"
13
14 namespace rx
15 {
16
17 class CLCommandQueueCL : public CLCommandQueueImpl
18 {
19 public:
20 CLCommandQueueCL(const cl::CommandQueue &commandQueue, cl_command_queue native);
21 ~CLCommandQueueCL() override;
22
23 cl_command_queue getNative() const;
24
25 angle::Result setProperty(cl::CommandQueueProperties properties, cl_bool enable) override;
26
27 angle::Result enqueueReadBuffer(const cl::Buffer &buffer,
28 bool blocking,
29 size_t offset,
30 size_t size,
31 void *ptr,
32 const cl::EventPtrs &waitEvents,
33 CLEventImpl::CreateFunc *eventCreateFunc) override;
34
35 angle::Result enqueueWriteBuffer(const cl::Buffer &buffer,
36 bool blocking,
37 size_t offset,
38 size_t size,
39 const void *ptr,
40 const cl::EventPtrs &waitEvents,
41 CLEventImpl::CreateFunc *eventCreateFunc) override;
42
43 angle::Result enqueueReadBufferRect(const cl::Buffer &buffer,
44 bool blocking,
45 const cl::MemOffsets &bufferOrigin,
46 const cl::MemOffsets &hostOrigin,
47 const cl::Coordinate ®ion,
48 size_t bufferRowPitch,
49 size_t bufferSlicePitch,
50 size_t hostRowPitch,
51 size_t hostSlicePitch,
52 void *ptr,
53 const cl::EventPtrs &waitEvents,
54 CLEventImpl::CreateFunc *eventCreateFunc) override;
55
56 angle::Result enqueueWriteBufferRect(const cl::Buffer &buffer,
57 bool blocking,
58 const cl::MemOffsets &bufferOrigin,
59 const cl::MemOffsets &hostOrigin,
60 const cl::Coordinate ®ion,
61 size_t bufferRowPitch,
62 size_t bufferSlicePitch,
63 size_t hostRowPitch,
64 size_t hostSlicePitch,
65 const void *ptr,
66 const cl::EventPtrs &waitEvents,
67 CLEventImpl::CreateFunc *eventCreateFunc) override;
68
69 angle::Result enqueueCopyBuffer(const cl::Buffer &srcBuffer,
70 const cl::Buffer &dstBuffer,
71 size_t srcOffset,
72 size_t dstOffset,
73 size_t size,
74 const cl::EventPtrs &waitEvents,
75 CLEventImpl::CreateFunc *eventCreateFunc) override;
76
77 angle::Result enqueueCopyBufferRect(const cl::Buffer &srcBuffer,
78 const cl::Buffer &dstBuffer,
79 const cl::MemOffsets &srcOrigin,
80 const cl::MemOffsets &dstOrigin,
81 const cl::Coordinate ®ion,
82 size_t srcRowPitch,
83 size_t srcSlicePitch,
84 size_t dstRowPitch,
85 size_t dstSlicePitch,
86 const cl::EventPtrs &waitEvents,
87 CLEventImpl::CreateFunc *eventCreateFunc) override;
88
89 angle::Result enqueueFillBuffer(const cl::Buffer &buffer,
90 const void *pattern,
91 size_t patternSize,
92 size_t offset,
93 size_t size,
94 const cl::EventPtrs &waitEvents,
95 CLEventImpl::CreateFunc *eventCreateFunc) override;
96
97 angle::Result enqueueMapBuffer(const cl::Buffer &buffer,
98 bool blocking,
99 cl::MapFlags mapFlags,
100 size_t offset,
101 size_t size,
102 const cl::EventPtrs &waitEvents,
103 CLEventImpl::CreateFunc *eventCreateFunc,
104 void *&mapPtr) override;
105
106 angle::Result enqueueReadImage(const cl::Image &image,
107 bool blocking,
108 const cl::MemOffsets &origin,
109 const cl::Coordinate ®ion,
110 size_t rowPitch,
111 size_t slicePitch,
112 void *ptr,
113 const cl::EventPtrs &waitEvents,
114 CLEventImpl::CreateFunc *eventCreateFunc) override;
115
116 angle::Result enqueueWriteImage(const cl::Image &image,
117 bool blocking,
118 const cl::MemOffsets &origin,
119 const cl::Coordinate ®ion,
120 size_t inputRowPitch,
121 size_t inputSlicePitch,
122 const void *ptr,
123 const cl::EventPtrs &waitEvents,
124 CLEventImpl::CreateFunc *eventCreateFunc) override;
125
126 angle::Result enqueueCopyImage(const cl::Image &srcImage,
127 const cl::Image &dstImage,
128 const cl::MemOffsets &srcOrigin,
129 const cl::MemOffsets &dstOrigin,
130 const cl::Coordinate ®ion,
131 const cl::EventPtrs &waitEvents,
132 CLEventImpl::CreateFunc *eventCreateFunc) override;
133
134 angle::Result enqueueFillImage(const cl::Image &image,
135 const void *fillColor,
136 const cl::MemOffsets &origin,
137 const cl::Coordinate ®ion,
138 const cl::EventPtrs &waitEvents,
139 CLEventImpl::CreateFunc *eventCreateFunc) override;
140
141 angle::Result enqueueCopyImageToBuffer(const cl::Image &srcImage,
142 const cl::Buffer &dstBuffer,
143 const cl::MemOffsets &srcOrigin,
144 const cl::Coordinate ®ion,
145 size_t dstOffset,
146 const cl::EventPtrs &waitEvents,
147 CLEventImpl::CreateFunc *eventCreateFunc) override;
148
149 angle::Result enqueueCopyBufferToImage(const cl::Buffer &srcBuffer,
150 const cl::Image &dstImage,
151 size_t srcOffset,
152 const cl::MemOffsets &dstOrigin,
153 const cl::Coordinate ®ion,
154 const cl::EventPtrs &waitEvents,
155 CLEventImpl::CreateFunc *eventCreateFunc) override;
156
157 angle::Result enqueueMapImage(const cl::Image &image,
158 bool blocking,
159 cl::MapFlags mapFlags,
160 const cl::MemOffsets &origin,
161 const cl::Coordinate ®ion,
162 size_t *imageRowPitch,
163 size_t *imageSlicePitch,
164 const cl::EventPtrs &waitEvents,
165 CLEventImpl::CreateFunc *eventCreateFunc,
166 void *&mapPtr) override;
167
168 angle::Result enqueueUnmapMemObject(const cl::Memory &memory,
169 void *mappedPtr,
170 const cl::EventPtrs &waitEvents,
171 CLEventImpl::CreateFunc *eventCreateFunc) override;
172
173 angle::Result enqueueMigrateMemObjects(const cl::MemoryPtrs &memObjects,
174 cl::MemMigrationFlags flags,
175 const cl::EventPtrs &waitEvents,
176 CLEventImpl::CreateFunc *eventCreateFunc) override;
177
178 angle::Result enqueueNDRangeKernel(const cl::Kernel &kernel,
179 const cl::NDRange &ndrange,
180 const cl::EventPtrs &waitEvents,
181 CLEventImpl::CreateFunc *eventCreateFunc) override;
182
183 angle::Result enqueueTask(const cl::Kernel &kernel,
184 const cl::EventPtrs &waitEvents,
185 CLEventImpl::CreateFunc *eventCreateFunc) override;
186
187 angle::Result enqueueNativeKernel(cl::UserFunc userFunc,
188 void *args,
189 size_t cbArgs,
190 const cl::BufferPtrs &buffers,
191 const std::vector<size_t> bufferPtrOffsets,
192 const cl::EventPtrs &waitEvents,
193 CLEventImpl::CreateFunc *eventCreateFunc) override;
194
195 angle::Result enqueueMarkerWithWaitList(const cl::EventPtrs &waitEvents,
196 CLEventImpl::CreateFunc *eventCreateFunc) override;
197
198 angle::Result enqueueMarker(CLEventImpl::CreateFunc &eventCreateFunc) override;
199
200 angle::Result enqueueWaitForEvents(const cl::EventPtrs &events) override;
201
202 angle::Result enqueueBarrierWithWaitList(const cl::EventPtrs &waitEvents,
203 CLEventImpl::CreateFunc *eventCreateFunc) override;
204
205 angle::Result enqueueBarrier() override;
206
207 angle::Result flush() override;
208 angle::Result finish() override;
209
210 private:
211 const cl_command_queue mNative;
212 };
213
getNative()214 inline cl_command_queue CLCommandQueueCL::getNative() const
215 {
216 return mNative;
217 }
218
219 } // namespace rx
220
221 #endif // LIBANGLE_RENDERER_CL_CLCOMMANDQUEUECL_H_
222