Path: blob/main_old/src/libANGLE/CLCommandQueue.h
1693 views
//1// Copyright 2021 The ANGLE Project Authors. All rights reserved.2// Use of this source code is governed by a BSD-style license that can be3// found in the LICENSE file.4//5// CLCommandQueue.h: Defines the cl::CommandQueue class, which can be used to queue a set of OpenCL6// operations.78#ifndef LIBANGLE_CLCOMMANDQUEUE_H_9#define LIBANGLE_CLCOMMANDQUEUE_H_1011#include "libANGLE/CLObject.h"12#include "libANGLE/renderer/CLCommandQueueImpl.h"1314#include "common/SynchronizedValue.h"1516#include <limits>1718namespace cl19{2021class CommandQueue final : public _cl_command_queue, public Object22{23public:24// Front end entry functions, only called from OpenCL entry points2526cl_int getInfo(CommandQueueInfo name,27size_t valueSize,28void *value,29size_t *valueSizeRet) const;3031cl_int setProperty(CommandQueueProperties properties,32cl_bool enable,33cl_command_queue_properties *oldProperties);3435cl_int enqueueReadBuffer(cl_mem buffer,36cl_bool blockingRead,37size_t offset,38size_t size,39void *ptr,40cl_uint numEventsInWaitList,41const cl_event *eventWaitList,42cl_event *event);4344cl_int enqueueWriteBuffer(cl_mem buffer,45cl_bool blockingWrite,46size_t offset,47size_t size,48const void *ptr,49cl_uint numEventsInWaitList,50const cl_event *eventWaitList,51cl_event *event);5253cl_int enqueueReadBufferRect(cl_mem buffer,54cl_bool blockingRead,55const size_t *bufferOrigin,56const size_t *hostOrigin,57const size_t *region,58size_t bufferRowPitch,59size_t bufferSlicePitch,60size_t hostRowPitch,61size_t hostSlicePitch,62void *ptr,63cl_uint numEventsInWaitList,64const cl_event *eventWaitList,65cl_event *event);6667cl_int enqueueWriteBufferRect(cl_mem buffer,68cl_bool blockingWrite,69const size_t *bufferOrigin,70const size_t *hostOrigin,71const size_t *region,72size_t bufferRowPitch,73size_t bufferSlicePitch,74size_t hostRowPitch,75size_t hostSlicePitch,76const void *ptr,77cl_uint numEventsInWaitList,78const cl_event *eventWaitList,79cl_event *event);8081cl_int enqueueCopyBuffer(cl_mem srcBuffer,82cl_mem dstBuffer,83size_t srcOffset,84size_t dstOffset,85size_t size,86cl_uint numEventsInWaitList,87const cl_event *eventWaitList,88cl_event *event);8990cl_int enqueueCopyBufferRect(cl_mem srcBuffer,91cl_mem dstBuffer,92const size_t *srcOrigin,93const size_t *dstOrigin,94const size_t *region,95size_t srcRowPitch,96size_t srcSlicePitch,97size_t dstRowPitch,98size_t dstSlicePitch,99cl_uint numEventsInWaitList,100const cl_event *eventWaitList,101cl_event *event);102103cl_int enqueueFillBuffer(cl_mem buffer,104const void *pattern,105size_t patternSize,106size_t offset,107size_t size,108cl_uint numEventsInWaitList,109const cl_event *eventWaitList,110cl_event *event);111112void *enqueueMapBuffer(cl_mem buffer,113cl_bool blockingMap,114MapFlags mapFlags,115size_t offset,116size_t size,117cl_uint numEventsInWaitList,118const cl_event *eventWaitList,119cl_event *event,120cl_int &errorCode);121122cl_int enqueueReadImage(cl_mem image,123cl_bool blockingRead,124const size_t *origin,125const size_t *region,126size_t rowPitch,127size_t slicePitch,128void *ptr,129cl_uint numEventsInWaitList,130const cl_event *eventWaitList,131cl_event *event);132133cl_int enqueueWriteImage(cl_mem image,134cl_bool blockingWrite,135const size_t *origin,136const size_t *region,137size_t inputRowPitch,138size_t inputSlicePitch,139const void *ptr,140cl_uint numEventsInWaitList,141const cl_event *eventWaitList,142cl_event *event);143144cl_int enqueueCopyImage(cl_mem srcImage,145cl_mem dstImage,146const size_t *srcOrigin,147const size_t *dstOrigin,148const size_t *region,149cl_uint numEventsInWaitList,150const cl_event *eventWaitList,151cl_event *event);152153cl_int enqueueFillImage(cl_mem image,154const void *fillColor,155const size_t *origin,156const size_t *region,157cl_uint numEventsInWaitList,158const cl_event *eventWaitList,159cl_event *event);160161cl_int enqueueCopyImageToBuffer(cl_mem srcImage,162cl_mem dstBuffer,163const size_t *srcOrigin,164const size_t *region,165size_t dstOffset,166cl_uint numEventsInWaitList,167const cl_event *eventWaitList,168cl_event *event);169170cl_int enqueueCopyBufferToImage(cl_mem srcBuffer,171cl_mem dstImage,172size_t srcOffset,173const size_t *dstOrigin,174const size_t *region,175cl_uint numEventsInWaitList,176const cl_event *eventWaitList,177cl_event *event);178179void *enqueueMapImage(cl_mem image,180cl_bool blockingMap,181MapFlags mapFlags,182const size_t *origin,183const size_t *region,184size_t *imageRowPitch,185size_t *imageSlicePitch,186cl_uint numEventsInWaitList,187const cl_event *eventWaitList,188cl_event *event,189cl_int &errorCode);190191cl_int enqueueUnmapMemObject(cl_mem memobj,192void *mappedPtr,193cl_uint numEventsInWaitList,194const cl_event *eventWaitList,195cl_event *event);196197cl_int enqueueMigrateMemObjects(cl_uint numMemObjects,198const cl_mem *memObjects,199MemMigrationFlags flags,200cl_uint numEventsInWaitList,201const cl_event *eventWaitList,202cl_event *event);203204cl_int enqueueNDRangeKernel(cl_kernel kernel,205cl_uint workDim,206const size_t *globalWorkOffset,207const size_t *globalWorkSize,208const size_t *localWorkSize,209cl_uint numEventsInWaitList,210const cl_event *eventWaitList,211cl_event *event);212213cl_int enqueueTask(cl_kernel kernel,214cl_uint numEventsInWaitList,215const cl_event *eventWaitList,216cl_event *event);217218cl_int enqueueNativeKernel(UserFunc userFunc,219void *args,220size_t cbArgs,221cl_uint numMemObjects,222const cl_mem *memList,223const void **argsMemLoc,224cl_uint numEventsInWaitList,225const cl_event *eventWaitList,226cl_event *event);227228cl_int enqueueMarkerWithWaitList(cl_uint numEventsInWaitList,229const cl_event *eventWaitList,230cl_event *event);231232cl_int enqueueMarker(cl_event *event);233234cl_int enqueueWaitForEvents(cl_uint numEvents, const cl_event *eventList);235236cl_int enqueueBarrierWithWaitList(cl_uint numEventsInWaitList,237const cl_event *eventWaitList,238cl_event *event);239240cl_int enqueueBarrier();241242cl_int flush();243cl_int finish();244245public:246using PropArray = std::vector<cl_queue_properties>;247248static constexpr cl_uint kNoSize = std::numeric_limits<cl_uint>::max();249250~CommandQueue() override;251252Context &getContext();253const Context &getContext() const;254const Device &getDevice() const;255256// Get index of device in the context.257size_t getDeviceIndex() const;258259CommandQueueProperties getProperties() const;260bool isOnHost() const;261bool isOnDevice() const;262263bool hasSize() const;264cl_uint getSize() const;265266template <typename T = rx::CLCommandQueueImpl>267T &getImpl() const;268269private:270CommandQueue(Context &context,271Device &device,272PropArray &&propArray,273CommandQueueProperties properties,274cl_uint size,275cl_int &errorCode);276277CommandQueue(Context &context,278Device &device,279CommandQueueProperties properties,280cl_int &errorCode);281282const ContextPtr mContext;283const DevicePtr mDevice;284const PropArray mPropArray;285angle::SynchronizedValue<CommandQueueProperties> mProperties;286const cl_uint mSize = kNoSize;287const rx::CLCommandQueueImpl::Ptr mImpl;288289friend class Object;290};291292inline Context &CommandQueue::getContext()293{294return *mContext;295}296297inline const Context &CommandQueue::getContext() const298{299return *mContext;300}301302inline const Device &CommandQueue::getDevice() const303{304return *mDevice;305}306307inline CommandQueueProperties CommandQueue::getProperties() const308{309return *mProperties;310}311312inline bool CommandQueue::isOnHost() const313{314return mProperties->isNotSet(CL_QUEUE_ON_DEVICE);315}316317inline bool CommandQueue::isOnDevice() const318{319return mProperties->isSet(CL_QUEUE_ON_DEVICE);320}321322inline bool CommandQueue::hasSize() const323{324return mSize != kNoSize;325}326327inline cl_uint CommandQueue::getSize() const328{329return mSize;330}331332template <typename T>333inline T &CommandQueue::getImpl() const334{335return static_cast<T &>(*mImpl);336}337338} // namespace cl339340#endif // LIBANGLE_CLCOMMANDQUEUE_H_341342343