// // Copyright 2021 The ANGLE Project Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. // // CLImage.h: Defines the cl::Image class, which stores a texture, frame-buffer or image. #ifndef LIBANGLE_CLIMAGE_H_ #define LIBANGLE_CLIMAGE_H_ #include "libANGLE/CLMemory.h" #include "libANGLE/cl_utils.h" namespace cl { class Image final : public Memory { public: // Front end entry functions, only called from OpenCL entry points static bool IsTypeValid(MemObjectType imageType); static bool IsValid(const _cl_mem *image); cl_int getInfo(ImageInfo name, size_t valueSize, void *value, size_t *valueSizeRet) const; public: ~Image() override; MemObjectType getType() const final; const cl_image_format &getFormat() const; const ImageDescriptor &getDescriptor() const; bool isRegionValid(const size_t origin[3], const size_t region[3]) const; size_t getElementSize() const; size_t getRowSize() const; size_t getSliceSize() const; private: Image(Context &context, PropArray &&properties, MemFlags flags, const cl_image_format &format, const ImageDescriptor &desc, Memory *parent, void *hostPtr, cl_int &errorCode); const cl_image_format mFormat; const ImageDescriptor mDesc; friend class Object; }; inline bool Image::IsValid(const _cl_mem *image) { return Memory::IsValid(image) && IsTypeValid(image->cast().getType()); } inline MemObjectType Image::getType() const { return mDesc.type; } inline const cl_image_format &Image::getFormat() const { return mFormat; } inline const ImageDescriptor &Image::getDescriptor() const { return mDesc; } inline size_t Image::getElementSize() const { return GetElementSize(mFormat); } inline size_t Image::getRowSize() const { return GetElementSize(mFormat) * mDesc.width; } inline size_t Image::getSliceSize() const { return GetElementSize(mFormat) * mDesc.width * mDesc.height; } } // namespace cl #endif // LIBANGLE_CLIMAGE_H_