xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/gl/TextureGL.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2015 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 
7*8975f5c5SAndroid Build Coastguard Worker // TextureGL.h: Defines the class interface for TextureGL.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_GL_TEXTUREGL_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_GL_TEXTUREGL_H_
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Texture.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/TextureImpl.h"
15*8975f5c5SAndroid Build Coastguard Worker 
16*8975f5c5SAndroid Build Coastguard Worker namespace rx
17*8975f5c5SAndroid Build Coastguard Worker {
18*8975f5c5SAndroid Build Coastguard Worker 
19*8975f5c5SAndroid Build Coastguard Worker class BlitGL;
20*8975f5c5SAndroid Build Coastguard Worker class FunctionsGL;
21*8975f5c5SAndroid Build Coastguard Worker class StateManagerGL;
22*8975f5c5SAndroid Build Coastguard Worker 
23*8975f5c5SAndroid Build Coastguard Worker struct LUMAWorkaroundGL
24*8975f5c5SAndroid Build Coastguard Worker {
25*8975f5c5SAndroid Build Coastguard Worker     bool enabled;
26*8975f5c5SAndroid Build Coastguard Worker     GLenum workaroundFormat;
27*8975f5c5SAndroid Build Coastguard Worker 
28*8975f5c5SAndroid Build Coastguard Worker     LUMAWorkaroundGL();
29*8975f5c5SAndroid Build Coastguard Worker     LUMAWorkaroundGL(bool enabled, GLenum workaroundFormat);
30*8975f5c5SAndroid Build Coastguard Worker };
31*8975f5c5SAndroid Build Coastguard Worker 
32*8975f5c5SAndroid Build Coastguard Worker // Structure containing information about format and workarounds for each mip level of the
33*8975f5c5SAndroid Build Coastguard Worker // TextureGL.
34*8975f5c5SAndroid Build Coastguard Worker struct LevelInfoGL
35*8975f5c5SAndroid Build Coastguard Worker {
36*8975f5c5SAndroid Build Coastguard Worker     // Format of the data used in this mip level.
37*8975f5c5SAndroid Build Coastguard Worker     GLenum sourceFormat;
38*8975f5c5SAndroid Build Coastguard Worker 
39*8975f5c5SAndroid Build Coastguard Worker     // Internal format used for the native call to define this texture
40*8975f5c5SAndroid Build Coastguard Worker     GLenum nativeInternalFormat;
41*8975f5c5SAndroid Build Coastguard Worker 
42*8975f5c5SAndroid Build Coastguard Worker     // If this mip level requires sampler-state re-writing so that only a red channel is exposed.
43*8975f5c5SAndroid Build Coastguard Worker     // In GLES 2.0, depth textures are treated as luminance, so we check the
44*8975f5c5SAndroid Build Coastguard Worker     // context's major version when applying the depth swizzle.
45*8975f5c5SAndroid Build Coastguard Worker     bool depthStencilWorkaround;
46*8975f5c5SAndroid Build Coastguard Worker 
47*8975f5c5SAndroid Build Coastguard Worker     // Information about luminance alpha texture workarounds in the core profile.
48*8975f5c5SAndroid Build Coastguard Worker     LUMAWorkaroundGL lumaWorkaround;
49*8975f5c5SAndroid Build Coastguard Worker 
50*8975f5c5SAndroid Build Coastguard Worker     // If this texture level hides the fact that it has an alpha channel by setting the sampler
51*8975f5c5SAndroid Build Coastguard Worker     // parameters to always sample 1.0.
52*8975f5c5SAndroid Build Coastguard Worker     bool emulatedAlphaChannel;
53*8975f5c5SAndroid Build Coastguard Worker 
54*8975f5c5SAndroid Build Coastguard Worker     LevelInfoGL();
55*8975f5c5SAndroid Build Coastguard Worker     LevelInfoGL(GLenum sourceFormat,
56*8975f5c5SAndroid Build Coastguard Worker                 GLenum nativeInternalFormat,
57*8975f5c5SAndroid Build Coastguard Worker                 bool depthStencilWorkaround,
58*8975f5c5SAndroid Build Coastguard Worker                 const LUMAWorkaroundGL &lumaWorkaround,
59*8975f5c5SAndroid Build Coastguard Worker                 bool emulatedAlphaChannel);
60*8975f5c5SAndroid Build Coastguard Worker };
61*8975f5c5SAndroid Build Coastguard Worker 
62*8975f5c5SAndroid Build Coastguard Worker class TextureGL : public TextureImpl
63*8975f5c5SAndroid Build Coastguard Worker {
64*8975f5c5SAndroid Build Coastguard Worker   public:
65*8975f5c5SAndroid Build Coastguard Worker     TextureGL(const gl::TextureState &state, GLuint id);
66*8975f5c5SAndroid Build Coastguard Worker     ~TextureGL() override;
67*8975f5c5SAndroid Build Coastguard Worker 
68*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const gl::Context *context) override;
69*8975f5c5SAndroid Build Coastguard Worker 
70*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImage(const gl::Context *context,
71*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
72*8975f5c5SAndroid Build Coastguard Worker                            GLenum internalFormat,
73*8975f5c5SAndroid Build Coastguard Worker                            const gl::Extents &size,
74*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
75*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
76*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
77*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
78*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels) override;
79*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImage(const gl::Context *context,
80*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
81*8975f5c5SAndroid Build Coastguard Worker                               const gl::Box &area,
82*8975f5c5SAndroid Build Coastguard Worker                               GLenum format,
83*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
84*8975f5c5SAndroid Build Coastguard Worker                               const gl::PixelUnpackState &unpack,
85*8975f5c5SAndroid Build Coastguard Worker                               gl::Buffer *unpackBuffer,
86*8975f5c5SAndroid Build Coastguard Worker                               const uint8_t *pixels) override;
87*8975f5c5SAndroid Build Coastguard Worker 
88*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImage(const gl::Context *context,
89*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
90*8975f5c5SAndroid Build Coastguard Worker                                      GLenum internalFormat,
91*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Extents &size,
92*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
93*8975f5c5SAndroid Build Coastguard Worker                                      size_t imageSize,
94*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels) override;
95*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedSubImage(const gl::Context *context,
96*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ImageIndex &index,
97*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Box &area,
98*8975f5c5SAndroid Build Coastguard Worker                                         GLenum format,
99*8975f5c5SAndroid Build Coastguard Worker                                         const gl::PixelUnpackState &unpack,
100*8975f5c5SAndroid Build Coastguard Worker                                         size_t imageSize,
101*8975f5c5SAndroid Build Coastguard Worker                                         const uint8_t *pixels) override;
102*8975f5c5SAndroid Build Coastguard Worker 
103*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyImage(const gl::Context *context,
104*8975f5c5SAndroid Build Coastguard Worker                             const gl::ImageIndex &index,
105*8975f5c5SAndroid Build Coastguard Worker                             const gl::Rectangle &sourceArea,
106*8975f5c5SAndroid Build Coastguard Worker                             GLenum internalFormat,
107*8975f5c5SAndroid Build Coastguard Worker                             gl::Framebuffer *source) override;
108*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubImage(const gl::Context *context,
109*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
110*8975f5c5SAndroid Build Coastguard Worker                                const gl::Offset &destOffset,
111*8975f5c5SAndroid Build Coastguard Worker                                const gl::Rectangle &sourceArea,
112*8975f5c5SAndroid Build Coastguard Worker                                gl::Framebuffer *source) override;
113*8975f5c5SAndroid Build Coastguard Worker 
114*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyTexture(const gl::Context *context,
115*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
116*8975f5c5SAndroid Build Coastguard Worker                               GLenum internalFormat,
117*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
118*8975f5c5SAndroid Build Coastguard Worker                               GLint sourceLevel,
119*8975f5c5SAndroid Build Coastguard Worker                               bool unpackFlipY,
120*8975f5c5SAndroid Build Coastguard Worker                               bool unpackPremultiplyAlpha,
121*8975f5c5SAndroid Build Coastguard Worker                               bool unpackUnmultiplyAlpha,
122*8975f5c5SAndroid Build Coastguard Worker                               const gl::Texture *source) override;
123*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubTexture(const gl::Context *context,
124*8975f5c5SAndroid Build Coastguard Worker                                  const gl::ImageIndex &index,
125*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Offset &destOffset,
126*8975f5c5SAndroid Build Coastguard Worker                                  GLint sourceLevel,
127*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Box &sourceBox,
128*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackFlipY,
129*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackPremultiplyAlpha,
130*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackUnmultiplyAlpha,
131*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Texture *source) override;
132*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubTextureHelper(const gl::Context *context,
133*8975f5c5SAndroid Build Coastguard Worker                                        gl::TextureTarget target,
134*8975f5c5SAndroid Build Coastguard Worker                                        size_t level,
135*8975f5c5SAndroid Build Coastguard Worker                                        const gl::Offset &destOffset,
136*8975f5c5SAndroid Build Coastguard Worker                                        GLint sourceLevel,
137*8975f5c5SAndroid Build Coastguard Worker                                        const gl::Rectangle &sourceArea,
138*8975f5c5SAndroid Build Coastguard Worker                                        const gl::InternalFormat &destFormat,
139*8975f5c5SAndroid Build Coastguard Worker                                        bool unpackFlipY,
140*8975f5c5SAndroid Build Coastguard Worker                                        bool unpackPremultiplyAlpha,
141*8975f5c5SAndroid Build Coastguard Worker                                        bool unpackUnmultiplyAlpha,
142*8975f5c5SAndroid Build Coastguard Worker                                        const gl::Texture *source);
143*8975f5c5SAndroid Build Coastguard Worker 
144*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorage(const gl::Context *context,
145*8975f5c5SAndroid Build Coastguard Worker                              gl::TextureType type,
146*8975f5c5SAndroid Build Coastguard Worker                              size_t levels,
147*8975f5c5SAndroid Build Coastguard Worker                              GLenum internalFormat,
148*8975f5c5SAndroid Build Coastguard Worker                              const gl::Extents &size) override;
149*8975f5c5SAndroid Build Coastguard Worker 
150*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorageMultisample(const gl::Context *context,
151*8975f5c5SAndroid Build Coastguard Worker                                         gl::TextureType type,
152*8975f5c5SAndroid Build Coastguard Worker                                         GLsizei samples,
153*8975f5c5SAndroid Build Coastguard Worker                                         GLint internalformat,
154*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Extents &size,
155*8975f5c5SAndroid Build Coastguard Worker                                         bool fixedSampleLocations) override;
156*8975f5c5SAndroid Build Coastguard Worker 
157*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorageExternalMemory(const gl::Context *context,
158*8975f5c5SAndroid Build Coastguard Worker                                            gl::TextureType type,
159*8975f5c5SAndroid Build Coastguard Worker                                            size_t levels,
160*8975f5c5SAndroid Build Coastguard Worker                                            GLenum internalFormat,
161*8975f5c5SAndroid Build Coastguard Worker                                            const gl::Extents &size,
162*8975f5c5SAndroid Build Coastguard Worker                                            gl::MemoryObject *memoryObject,
163*8975f5c5SAndroid Build Coastguard Worker                                            GLuint64 offset,
164*8975f5c5SAndroid Build Coastguard Worker                                            GLbitfield createFlags,
165*8975f5c5SAndroid Build Coastguard Worker                                            GLbitfield usageFlags,
166*8975f5c5SAndroid Build Coastguard Worker                                            const void *imageCreateInfoPNext) override;
167*8975f5c5SAndroid Build Coastguard Worker 
168*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImageExternal(const gl::Context *context,
169*8975f5c5SAndroid Build Coastguard Worker                                    const gl::ImageIndex &index,
170*8975f5c5SAndroid Build Coastguard Worker                                    GLenum internalFormat,
171*8975f5c5SAndroid Build Coastguard Worker                                    const gl::Extents &size,
172*8975f5c5SAndroid Build Coastguard Worker                                    GLenum format,
173*8975f5c5SAndroid Build Coastguard Worker                                    GLenum type) override;
174*8975f5c5SAndroid Build Coastguard Worker 
175*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImageExternal(const gl::Context *context,
176*8975f5c5SAndroid Build Coastguard Worker                                    gl::TextureType type,
177*8975f5c5SAndroid Build Coastguard Worker                                    egl::Stream *stream,
178*8975f5c5SAndroid Build Coastguard Worker                                    const egl::Stream::GLTextureDescription &desc) override;
179*8975f5c5SAndroid Build Coastguard Worker 
180*8975f5c5SAndroid Build Coastguard Worker     angle::Result generateMipmap(const gl::Context *context) override;
181*8975f5c5SAndroid Build Coastguard Worker 
182*8975f5c5SAndroid Build Coastguard Worker     angle::Result clearImage(const gl::Context *context,
183*8975f5c5SAndroid Build Coastguard Worker                              GLint level,
184*8975f5c5SAndroid Build Coastguard Worker                              GLenum format,
185*8975f5c5SAndroid Build Coastguard Worker                              GLenum type,
186*8975f5c5SAndroid Build Coastguard Worker                              const uint8_t *data) override;
187*8975f5c5SAndroid Build Coastguard Worker     angle::Result clearSubImage(const gl::Context *context,
188*8975f5c5SAndroid Build Coastguard Worker                                 GLint level,
189*8975f5c5SAndroid Build Coastguard Worker                                 const gl::Box &area,
190*8975f5c5SAndroid Build Coastguard Worker                                 GLenum format,
191*8975f5c5SAndroid Build Coastguard Worker                                 GLenum type,
192*8975f5c5SAndroid Build Coastguard Worker                                 const uint8_t *data) override;
193*8975f5c5SAndroid Build Coastguard Worker 
194*8975f5c5SAndroid Build Coastguard Worker     angle::Result bindTexImage(const gl::Context *context, egl::Surface *surface) override;
195*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexImage(const gl::Context *context) override;
196*8975f5c5SAndroid Build Coastguard Worker 
197*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
198*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
199*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
200*8975f5c5SAndroid Build Coastguard Worker 
201*8975f5c5SAndroid Build Coastguard Worker     GLint getNativeID() const override;
202*8975f5c5SAndroid Build Coastguard Worker 
getTextureID()203*8975f5c5SAndroid Build Coastguard Worker     GLuint getTextureID() const { return mTextureID; }
204*8975f5c5SAndroid Build Coastguard Worker 
205*8975f5c5SAndroid Build Coastguard Worker     gl::TextureType getType() const;
206*8975f5c5SAndroid Build Coastguard Worker 
207*8975f5c5SAndroid Build Coastguard Worker     angle::Result syncState(const gl::Context *context,
208*8975f5c5SAndroid Build Coastguard Worker                             const gl::Texture::DirtyBits &dirtyBits,
209*8975f5c5SAndroid Build Coastguard Worker                             gl::Command source) override;
210*8975f5c5SAndroid Build Coastguard Worker     bool hasAnyDirtyBit() const;
211*8975f5c5SAndroid Build Coastguard Worker 
212*8975f5c5SAndroid Build Coastguard Worker     angle::Result setBaseLevel(const gl::Context *context, GLuint baseLevel) override;
213*8975f5c5SAndroid Build Coastguard Worker     angle::Result setMaxLevel(const gl::Context *context, GLuint maxLevel);
214*8975f5c5SAndroid Build Coastguard Worker 
215*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeContents(const gl::Context *context,
216*8975f5c5SAndroid Build Coastguard Worker                                      GLenum binding,
217*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &imageIndex) override;
218*8975f5c5SAndroid Build Coastguard Worker 
219*8975f5c5SAndroid Build Coastguard Worker     GLint getRequiredExternalTextureImageUnits(const gl::Context *context) override;
220*8975f5c5SAndroid Build Coastguard Worker 
221*8975f5c5SAndroid Build Coastguard Worker     angle::Result setMinFilter(const gl::Context *context, GLenum filter);
222*8975f5c5SAndroid Build Coastguard Worker     angle::Result setMagFilter(const gl::Context *context, GLenum filter);
223*8975f5c5SAndroid Build Coastguard Worker 
224*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSwizzle(const gl::Context *context, GLint swizzle[4]);
225*8975f5c5SAndroid Build Coastguard Worker 
226*8975f5c5SAndroid Build Coastguard Worker     angle::Result setBuffer(const gl::Context *context, GLenum internalFormat) override;
227*8975f5c5SAndroid Build Coastguard Worker 
228*8975f5c5SAndroid Build Coastguard Worker     GLenum getNativeInternalFormat(const gl::ImageIndex &index) const;
229*8975f5c5SAndroid Build Coastguard Worker     bool hasEmulatedAlphaChannel(const gl::ImageIndex &index) const;
230*8975f5c5SAndroid Build Coastguard Worker 
231*8975f5c5SAndroid Build Coastguard Worker   private:
232*8975f5c5SAndroid Build Coastguard Worker     angle::Result recreateTexture(const gl::Context *context);
233*8975f5c5SAndroid Build Coastguard Worker 
234*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImageHelper(const gl::Context *context,
235*8975f5c5SAndroid Build Coastguard Worker                                  gl::TextureTarget target,
236*8975f5c5SAndroid Build Coastguard Worker                                  size_t level,
237*8975f5c5SAndroid Build Coastguard Worker                                  GLenum internalFormat,
238*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Extents &size,
239*8975f5c5SAndroid Build Coastguard Worker                                  GLenum format,
240*8975f5c5SAndroid Build Coastguard Worker                                  GLenum type,
241*8975f5c5SAndroid Build Coastguard Worker                                  const uint8_t *pixels);
242*8975f5c5SAndroid Build Coastguard Worker     // This changes the current pixel unpack state that will have to be reapplied.
243*8975f5c5SAndroid Build Coastguard Worker     angle::Result reserveTexImageToBeFilled(const gl::Context *context,
244*8975f5c5SAndroid Build Coastguard Worker                                             gl::TextureTarget target,
245*8975f5c5SAndroid Build Coastguard Worker                                             size_t level,
246*8975f5c5SAndroid Build Coastguard Worker                                             GLenum internalFormat,
247*8975f5c5SAndroid Build Coastguard Worker                                             const gl::Extents &size,
248*8975f5c5SAndroid Build Coastguard Worker                                             GLenum format,
249*8975f5c5SAndroid Build Coastguard Worker                                             GLenum type);
250*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImageRowByRowWorkaround(const gl::Context *context,
251*8975f5c5SAndroid Build Coastguard Worker                                                 gl::TextureTarget target,
252*8975f5c5SAndroid Build Coastguard Worker                                                 size_t level,
253*8975f5c5SAndroid Build Coastguard Worker                                                 const gl::Box &area,
254*8975f5c5SAndroid Build Coastguard Worker                                                 GLenum format,
255*8975f5c5SAndroid Build Coastguard Worker                                                 GLenum type,
256*8975f5c5SAndroid Build Coastguard Worker                                                 const gl::PixelUnpackState &unpack,
257*8975f5c5SAndroid Build Coastguard Worker                                                 const gl::Buffer *unpackBuffer,
258*8975f5c5SAndroid Build Coastguard Worker                                                 size_t maxBytesUploadedPerChunk,
259*8975f5c5SAndroid Build Coastguard Worker                                                 const uint8_t *pixels);
260*8975f5c5SAndroid Build Coastguard Worker 
261*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImagePaddingWorkaround(const gl::Context *context,
262*8975f5c5SAndroid Build Coastguard Worker                                                gl::TextureTarget target,
263*8975f5c5SAndroid Build Coastguard Worker                                                size_t level,
264*8975f5c5SAndroid Build Coastguard Worker                                                const gl::Box &area,
265*8975f5c5SAndroid Build Coastguard Worker                                                GLenum format,
266*8975f5c5SAndroid Build Coastguard Worker                                                GLenum type,
267*8975f5c5SAndroid Build Coastguard Worker                                                const gl::PixelUnpackState &unpack,
268*8975f5c5SAndroid Build Coastguard Worker                                                const gl::Buffer *unpackBuffer,
269*8975f5c5SAndroid Build Coastguard Worker                                                const uint8_t *pixels);
270*8975f5c5SAndroid Build Coastguard Worker 
271*8975f5c5SAndroid Build Coastguard Worker     angle::Result syncTextureStateSwizzle(const gl::Context *context,
272*8975f5c5SAndroid Build Coastguard Worker                                           const FunctionsGL *functions,
273*8975f5c5SAndroid Build Coastguard Worker                                           GLenum name,
274*8975f5c5SAndroid Build Coastguard Worker                                           GLenum value,
275*8975f5c5SAndroid Build Coastguard Worker                                           GLenum *currentlyAppliedValue);
276*8975f5c5SAndroid Build Coastguard Worker 
277*8975f5c5SAndroid Build Coastguard Worker     void setLevelInfo(const gl::Context *context,
278*8975f5c5SAndroid Build Coastguard Worker                       gl::TextureTarget target,
279*8975f5c5SAndroid Build Coastguard Worker                       size_t level,
280*8975f5c5SAndroid Build Coastguard Worker                       size_t levelCount,
281*8975f5c5SAndroid Build Coastguard Worker                       const LevelInfoGL &levelInfo);
282*8975f5c5SAndroid Build Coastguard Worker     void setLevelInfo(const gl::Context *context,
283*8975f5c5SAndroid Build Coastguard Worker                       gl::TextureType type,
284*8975f5c5SAndroid Build Coastguard Worker                       size_t level,
285*8975f5c5SAndroid Build Coastguard Worker                       size_t levelCount,
286*8975f5c5SAndroid Build Coastguard Worker                       const LevelInfoGL &levelInfo);
287*8975f5c5SAndroid Build Coastguard Worker     const LevelInfoGL &getLevelInfo(gl::TextureTarget target, size_t level) const;
288*8975f5c5SAndroid Build Coastguard Worker     const LevelInfoGL &getBaseLevelInfo() const;
289*8975f5c5SAndroid Build Coastguard Worker 
290*8975f5c5SAndroid Build Coastguard Worker     std::vector<LevelInfoGL> mLevelInfo;
291*8975f5c5SAndroid Build Coastguard Worker     gl::Texture::DirtyBits mLocalDirtyBits;
292*8975f5c5SAndroid Build Coastguard Worker 
293*8975f5c5SAndroid Build Coastguard Worker     // All dirty bits ever sychronized by this texture OR'd together. Used to know what state needs
294*8975f5c5SAndroid Build Coastguard Worker     // to be resynced if the texture is ever recreated without needing extension checks or state
295*8975f5c5SAndroid Build Coastguard Worker     // comparisons.
296*8975f5c5SAndroid Build Coastguard Worker     gl::Texture::DirtyBits mAllModifiedDirtyBits;
297*8975f5c5SAndroid Build Coastguard Worker 
298*8975f5c5SAndroid Build Coastguard Worker     gl::SwizzleState mAppliedSwizzle;
299*8975f5c5SAndroid Build Coastguard Worker     gl::SamplerState mAppliedSampler;
300*8975f5c5SAndroid Build Coastguard Worker     GLuint mAppliedBaseLevel;
301*8975f5c5SAndroid Build Coastguard Worker     GLuint mAppliedMaxLevel;
302*8975f5c5SAndroid Build Coastguard Worker     GLenum mAppliedDepthStencilTextureMode;
303*8975f5c5SAndroid Build Coastguard Worker 
304*8975f5c5SAndroid Build Coastguard Worker     GLuint mTextureID;
305*8975f5c5SAndroid Build Coastguard Worker };
306*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
307*8975f5c5SAndroid Build Coastguard Worker 
308*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_GL_TEXTUREGL_H_
309