xref: /aosp_15_r20/external/angle/src/libANGLE/CLImage.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2021 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker // CLImage.h: Defines the cl::Image class, which stores a texture, frame-buffer or image.
7*8975f5c5SAndroid Build Coastguard Worker 
8*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_CLIMAGE_H_
9*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_CLIMAGE_H_
10*8975f5c5SAndroid Build Coastguard Worker 
11*8975f5c5SAndroid Build Coastguard Worker #include "common/PackedCLEnums_autogen.h"
12*8975f5c5SAndroid Build Coastguard Worker 
13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/CLMemory.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/cl_utils.h"
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker namespace cl
17*8975f5c5SAndroid Build Coastguard Worker {
18*8975f5c5SAndroid Build Coastguard Worker 
19*8975f5c5SAndroid Build Coastguard Worker class Image final : public Memory
20*8975f5c5SAndroid Build Coastguard Worker {
21*8975f5c5SAndroid Build Coastguard Worker   public:
22*8975f5c5SAndroid Build Coastguard Worker     // Front end entry functions, only called from OpenCL entry points
23*8975f5c5SAndroid Build Coastguard Worker 
24*8975f5c5SAndroid Build Coastguard Worker     static bool IsTypeValid(MemObjectType imageType);
25*8975f5c5SAndroid Build Coastguard Worker     static bool IsValid(const _cl_mem *image);
26*8975f5c5SAndroid Build Coastguard Worker 
27*8975f5c5SAndroid Build Coastguard Worker     angle::Result getInfo(ImageInfo name,
28*8975f5c5SAndroid Build Coastguard Worker                           size_t valueSize,
29*8975f5c5SAndroid Build Coastguard Worker                           void *value,
30*8975f5c5SAndroid Build Coastguard Worker                           size_t *valueSizeRet) const;
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker   public:
33*8975f5c5SAndroid Build Coastguard Worker     ~Image() override;
34*8975f5c5SAndroid Build Coastguard Worker 
35*8975f5c5SAndroid Build Coastguard Worker     MemObjectType getType() const final;
36*8975f5c5SAndroid Build Coastguard Worker 
37*8975f5c5SAndroid Build Coastguard Worker     const cl_image_format &getFormat() const;
38*8975f5c5SAndroid Build Coastguard Worker     const ImageDescriptor &getDescriptor() const;
39*8975f5c5SAndroid Build Coastguard Worker 
40*8975f5c5SAndroid Build Coastguard Worker     bool isRegionValid(const cl::MemOffsets &origin, const cl::Coordinate &region) const;
41*8975f5c5SAndroid Build Coastguard Worker 
42*8975f5c5SAndroid Build Coastguard Worker     size_t getElementSize() const;
43*8975f5c5SAndroid Build Coastguard Worker     size_t getRowSize() const;
44*8975f5c5SAndroid Build Coastguard Worker     size_t getSliceSize() const;
getArraySize()45*8975f5c5SAndroid Build Coastguard Worker     size_t getArraySize() const { return mDesc.arraySize; }
getWidth()46*8975f5c5SAndroid Build Coastguard Worker     size_t getWidth() const { return mDesc.width; }
getHeight()47*8975f5c5SAndroid Build Coastguard Worker     size_t getHeight() const { return mDesc.height; }
getDepth()48*8975f5c5SAndroid Build Coastguard Worker     size_t getDepth() const { return mDesc.depth; }
49*8975f5c5SAndroid Build Coastguard Worker 
50*8975f5c5SAndroid Build Coastguard Worker   private:
51*8975f5c5SAndroid Build Coastguard Worker     Image(Context &context,
52*8975f5c5SAndroid Build Coastguard Worker           PropArray &&properties,
53*8975f5c5SAndroid Build Coastguard Worker           MemFlags flags,
54*8975f5c5SAndroid Build Coastguard Worker           const cl_image_format &format,
55*8975f5c5SAndroid Build Coastguard Worker           const ImageDescriptor &desc,
56*8975f5c5SAndroid Build Coastguard Worker           Memory *parent,
57*8975f5c5SAndroid Build Coastguard Worker           void *hostPtr);
58*8975f5c5SAndroid Build Coastguard Worker 
59*8975f5c5SAndroid Build Coastguard Worker     const cl_image_format mFormat;
60*8975f5c5SAndroid Build Coastguard Worker     const ImageDescriptor mDesc;
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker     friend class Object;
63*8975f5c5SAndroid Build Coastguard Worker };
64*8975f5c5SAndroid Build Coastguard Worker 
IsValid(const _cl_mem * image)65*8975f5c5SAndroid Build Coastguard Worker inline bool Image::IsValid(const _cl_mem *image)
66*8975f5c5SAndroid Build Coastguard Worker {
67*8975f5c5SAndroid Build Coastguard Worker     return Memory::IsValid(image) && IsTypeValid(image->cast<Memory>().getType());
68*8975f5c5SAndroid Build Coastguard Worker }
69*8975f5c5SAndroid Build Coastguard Worker 
getType()70*8975f5c5SAndroid Build Coastguard Worker inline MemObjectType Image::getType() const
71*8975f5c5SAndroid Build Coastguard Worker {
72*8975f5c5SAndroid Build Coastguard Worker     return mDesc.type;
73*8975f5c5SAndroid Build Coastguard Worker }
74*8975f5c5SAndroid Build Coastguard Worker 
getFormat()75*8975f5c5SAndroid Build Coastguard Worker inline const cl_image_format &Image::getFormat() const
76*8975f5c5SAndroid Build Coastguard Worker {
77*8975f5c5SAndroid Build Coastguard Worker     return mFormat;
78*8975f5c5SAndroid Build Coastguard Worker }
79*8975f5c5SAndroid Build Coastguard Worker 
getDescriptor()80*8975f5c5SAndroid Build Coastguard Worker inline const ImageDescriptor &Image::getDescriptor() const
81*8975f5c5SAndroid Build Coastguard Worker {
82*8975f5c5SAndroid Build Coastguard Worker     return mDesc;
83*8975f5c5SAndroid Build Coastguard Worker }
84*8975f5c5SAndroid Build Coastguard Worker 
getElementSize()85*8975f5c5SAndroid Build Coastguard Worker inline size_t Image::getElementSize() const
86*8975f5c5SAndroid Build Coastguard Worker {
87*8975f5c5SAndroid Build Coastguard Worker     return GetElementSize(mFormat);
88*8975f5c5SAndroid Build Coastguard Worker }
89*8975f5c5SAndroid Build Coastguard Worker 
getRowSize()90*8975f5c5SAndroid Build Coastguard Worker inline size_t Image::getRowSize() const
91*8975f5c5SAndroid Build Coastguard Worker {
92*8975f5c5SAndroid Build Coastguard Worker     return mDesc.rowPitch != 0u ? mDesc.rowPitch : GetElementSize(mFormat) * getWidth();
93*8975f5c5SAndroid Build Coastguard Worker }
94*8975f5c5SAndroid Build Coastguard Worker 
getSliceSize()95*8975f5c5SAndroid Build Coastguard Worker inline size_t Image::getSliceSize() const
96*8975f5c5SAndroid Build Coastguard Worker {
97*8975f5c5SAndroid Build Coastguard Worker     return mDesc.slicePitch != 0u ? mDesc.slicePitch : getRowSize() * getHeight();
98*8975f5c5SAndroid Build Coastguard Worker }
99*8975f5c5SAndroid Build Coastguard Worker 
100*8975f5c5SAndroid Build Coastguard Worker }  // namespace cl
101*8975f5c5SAndroid Build Coastguard Worker 
102*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_CLIMAGE_H_
103