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 // CLImage.h: Defines the cl::Image class, which stores a texture, frame-buffer or image.
7
8 #ifndef LIBANGLE_CLIMAGE_H_
9 #define LIBANGLE_CLIMAGE_H_
10
11 #include "libANGLE/CLMemory.h"
12
13 #include "libANGLE/cl_utils.h"
14
15 namespace cl
16 {
17
18 class Image final : public Memory
19 {
20 public:
21 // Front end entry functions, only called from OpenCL entry points
22
23 static bool IsTypeValid(MemObjectType imageType);
24 static bool IsValid(const _cl_mem *image);
25
26 cl_int getInfo(ImageInfo name, size_t valueSize, void *value, size_t *valueSizeRet) const;
27
28 public:
29 ~Image() override;
30
31 MemObjectType getType() const final;
32
33 const cl_image_format &getFormat() const;
34 const ImageDescriptor &getDescriptor() const;
35
36 bool isRegionValid(const size_t origin[3], const size_t region[3]) const;
37
38 size_t getElementSize() const;
39 size_t getRowSize() const;
40 size_t getSliceSize() const;
41
42 private:
43 Image(Context &context,
44 PropArray &&properties,
45 MemFlags flags,
46 const cl_image_format &format,
47 const ImageDescriptor &desc,
48 Memory *parent,
49 void *hostPtr,
50 cl_int &errorCode);
51
52 const cl_image_format mFormat;
53 const ImageDescriptor mDesc;
54
55 friend class Object;
56 };
57
IsValid(const _cl_mem * image)58 inline bool Image::IsValid(const _cl_mem *image)
59 {
60 return Memory::IsValid(image) && IsTypeValid(image->cast<Memory>().getType());
61 }
62
getType()63 inline MemObjectType Image::getType() const
64 {
65 return mDesc.type;
66 }
67
getFormat()68 inline const cl_image_format &Image::getFormat() const
69 {
70 return mFormat;
71 }
72
getDescriptor()73 inline const ImageDescriptor &Image::getDescriptor() const
74 {
75 return mDesc;
76 }
77
getElementSize()78 inline size_t Image::getElementSize() const
79 {
80 return GetElementSize(mFormat);
81 }
82
getRowSize()83 inline size_t Image::getRowSize() const
84 {
85 return GetElementSize(mFormat) * mDesc.width;
86 }
87
getSliceSize()88 inline size_t Image::getSliceSize() const
89 {
90 return GetElementSize(mFormat) * mDesc.width * mDesc.height;
91 }
92
93 } // namespace cl
94
95 #endif // LIBANGLE_CLIMAGE_H_
96