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