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