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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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 ®ion, 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