xref: /aosp_15_r20/external/angle/src/libANGLE/renderer/d3d/TextureD3D.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2014 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 // TextureD3D.h: Implementations of the Texture interfaces shared betweeen the D3D backends.
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker #ifndef LIBANGLE_RENDERER_D3D_TEXTURED3D_H_
10*8975f5c5SAndroid Build Coastguard Worker #define LIBANGLE_RENDERER_D3D_TEXTURED3D_H_
11*8975f5c5SAndroid Build Coastguard Worker 
12*8975f5c5SAndroid Build Coastguard Worker #include "common/Color.h"
13*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Constants.h"
14*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/Stream.h"
15*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/angletypes.h"
16*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/TextureImpl.h"
17*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/d3d/RendererD3D.h"
18*8975f5c5SAndroid Build Coastguard Worker #include "libANGLE/renderer/d3d/TextureStorage.h"
19*8975f5c5SAndroid Build Coastguard Worker 
20*8975f5c5SAndroid Build Coastguard Worker namespace gl
21*8975f5c5SAndroid Build Coastguard Worker {
22*8975f5c5SAndroid Build Coastguard Worker class Framebuffer;
23*8975f5c5SAndroid Build Coastguard Worker }
24*8975f5c5SAndroid Build Coastguard Worker 
25*8975f5c5SAndroid Build Coastguard Worker namespace rx
26*8975f5c5SAndroid Build Coastguard Worker {
27*8975f5c5SAndroid Build Coastguard Worker class EGLImageD3D;
28*8975f5c5SAndroid Build Coastguard Worker class ImageD3D;
29*8975f5c5SAndroid Build Coastguard Worker class RendererD3D;
30*8975f5c5SAndroid Build Coastguard Worker class RenderTargetD3D;
31*8975f5c5SAndroid Build Coastguard Worker class TextureStorage;
32*8975f5c5SAndroid Build Coastguard Worker 
33*8975f5c5SAndroid Build Coastguard Worker class TextureD3D : public TextureImpl, public angle::ObserverInterface
34*8975f5c5SAndroid Build Coastguard Worker {
35*8975f5c5SAndroid Build Coastguard Worker   public:
36*8975f5c5SAndroid Build Coastguard Worker     TextureD3D(const gl::TextureState &data, RendererD3D *renderer);
37*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D() override;
38*8975f5c5SAndroid Build Coastguard Worker 
39*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const gl::Context *context) override;
40*8975f5c5SAndroid Build Coastguard Worker 
41*8975f5c5SAndroid Build Coastguard Worker     angle::Result getNativeTexture(const gl::Context *context, TextureStorage **outStorage);
42*8975f5c5SAndroid Build Coastguard Worker 
hasDirtyImages()43*8975f5c5SAndroid Build Coastguard Worker     bool hasDirtyImages() const { return mDirtyImages; }
resetDirty()44*8975f5c5SAndroid Build Coastguard Worker     void resetDirty() { mDirtyImages = false; }
45*8975f5c5SAndroid Build Coastguard Worker 
46*8975f5c5SAndroid Build Coastguard Worker     virtual ImageD3D *getImage(const gl::ImageIndex &index) const = 0;
47*8975f5c5SAndroid Build Coastguard Worker     virtual GLsizei getLayerCount(int level) const                = 0;
48*8975f5c5SAndroid Build Coastguard Worker 
49*8975f5c5SAndroid Build Coastguard Worker     angle::Result getImageAndSyncFromStorage(const gl::Context *context,
50*8975f5c5SAndroid Build Coastguard Worker                                              const gl::ImageIndex &index,
51*8975f5c5SAndroid Build Coastguard Worker                                              ImageD3D **outImage);
52*8975f5c5SAndroid Build Coastguard Worker 
53*8975f5c5SAndroid Build Coastguard Worker     GLint getBaseLevelWidth() const;
54*8975f5c5SAndroid Build Coastguard Worker     GLint getBaseLevelHeight() const;
55*8975f5c5SAndroid Build Coastguard Worker     GLenum getBaseLevelInternalFormat() const;
56*8975f5c5SAndroid Build Coastguard Worker 
57*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorage(const gl::Context *context,
58*8975f5c5SAndroid Build Coastguard Worker                              gl::TextureType type,
59*8975f5c5SAndroid Build Coastguard Worker                              size_t levels,
60*8975f5c5SAndroid Build Coastguard Worker                              GLenum internalFormat,
61*8975f5c5SAndroid Build Coastguard Worker                              const gl::Extents &size) override;
62*8975f5c5SAndroid Build Coastguard Worker 
63*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorageMultisample(const gl::Context *context,
64*8975f5c5SAndroid Build Coastguard Worker                                         gl::TextureType type,
65*8975f5c5SAndroid Build Coastguard Worker                                         GLsizei samples,
66*8975f5c5SAndroid Build Coastguard Worker                                         GLint internalformat,
67*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Extents &size,
68*8975f5c5SAndroid Build Coastguard Worker                                         bool fixedSampleLocations) override;
69*8975f5c5SAndroid Build Coastguard Worker 
70*8975f5c5SAndroid Build Coastguard Worker     angle::Result setBuffer(const gl::Context *context, GLenum internalFormat) override;
71*8975f5c5SAndroid Build Coastguard Worker 
72*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorageExternalMemory(const gl::Context *context,
73*8975f5c5SAndroid Build Coastguard Worker                                            gl::TextureType type,
74*8975f5c5SAndroid Build Coastguard Worker                                            size_t levels,
75*8975f5c5SAndroid Build Coastguard Worker                                            GLenum internalFormat,
76*8975f5c5SAndroid Build Coastguard Worker                                            const gl::Extents &size,
77*8975f5c5SAndroid Build Coastguard Worker                                            gl::MemoryObject *memoryObject,
78*8975f5c5SAndroid Build Coastguard Worker                                            GLuint64 offset,
79*8975f5c5SAndroid Build Coastguard Worker                                            GLbitfield createFlags,
80*8975f5c5SAndroid Build Coastguard Worker                                            GLbitfield usageFlags,
81*8975f5c5SAndroid Build Coastguard Worker                                            const void *imageCreateInfoPNext) override;
82*8975f5c5SAndroid Build Coastguard Worker 
isImmutable()83*8975f5c5SAndroid Build Coastguard Worker     bool isImmutable() const { return mImmutable; }
84*8975f5c5SAndroid Build Coastguard Worker 
85*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result getRenderTarget(const gl::Context *context,
86*8975f5c5SAndroid Build Coastguard Worker                                           const gl::ImageIndex &index,
87*8975f5c5SAndroid Build Coastguard Worker                                           GLsizei samples,
88*8975f5c5SAndroid Build Coastguard Worker                                           RenderTargetD3D **outRT) = 0;
89*8975f5c5SAndroid Build Coastguard Worker 
90*8975f5c5SAndroid Build Coastguard Worker     // Returns an iterator over all "Images" for this particular Texture.
91*8975f5c5SAndroid Build Coastguard Worker     virtual gl::ImageIndexIterator imageIterator() const = 0;
92*8975f5c5SAndroid Build Coastguard Worker 
93*8975f5c5SAndroid Build Coastguard Worker     // Returns an ImageIndex for a particular "Image". 3D Textures do not have images for
94*8975f5c5SAndroid Build Coastguard Worker     // slices of their depth texures, so 3D textures ignore the layer parameter.
95*8975f5c5SAndroid Build Coastguard Worker     virtual gl::ImageIndex getImageIndex(GLint mip, GLint layer) const = 0;
96*8975f5c5SAndroid Build Coastguard Worker     virtual bool isValidIndex(const gl::ImageIndex &index) const       = 0;
97*8975f5c5SAndroid Build Coastguard Worker 
98*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImageExternal(const gl::Context *context,
99*8975f5c5SAndroid Build Coastguard Worker                                    gl::TextureType type,
100*8975f5c5SAndroid Build Coastguard Worker                                    egl::Stream *stream,
101*8975f5c5SAndroid Build Coastguard Worker                                    const egl::Stream::GLTextureDescription &desc) override;
102*8975f5c5SAndroid Build Coastguard Worker     angle::Result generateMipmap(const gl::Context *context) override;
hasStorage()103*8975f5c5SAndroid Build Coastguard Worker     bool hasStorage() const { return mTexStorage != nullptr; }
104*8975f5c5SAndroid Build Coastguard Worker     TextureStorage *getStorage();
105*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getBaseLevelImage() const;
106*8975f5c5SAndroid Build Coastguard Worker 
107*8975f5c5SAndroid Build Coastguard Worker     angle::Result getAttachmentRenderTarget(const gl::Context *context,
108*8975f5c5SAndroid Build Coastguard Worker                                             GLenum binding,
109*8975f5c5SAndroid Build Coastguard Worker                                             const gl::ImageIndex &imageIndex,
110*8975f5c5SAndroid Build Coastguard Worker                                             GLsizei samples,
111*8975f5c5SAndroid Build Coastguard Worker                                             FramebufferAttachmentRenderTarget **rtOut) override;
112*8975f5c5SAndroid Build Coastguard Worker 
113*8975f5c5SAndroid Build Coastguard Worker     angle::Result setBaseLevel(const gl::Context *context, GLuint baseLevel) override;
114*8975f5c5SAndroid Build Coastguard Worker 
115*8975f5c5SAndroid Build Coastguard Worker     angle::Result syncState(const gl::Context *context,
116*8975f5c5SAndroid Build Coastguard Worker                             const gl::Texture::DirtyBits &dirtyBits,
117*8975f5c5SAndroid Build Coastguard Worker                             gl::Command source) override;
118*8975f5c5SAndroid Build Coastguard Worker 
119*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeContents(const gl::Context *context,
120*8975f5c5SAndroid Build Coastguard Worker                                      GLenum binding,
121*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &imageIndex) override;
122*8975f5c5SAndroid Build Coastguard Worker 
123*8975f5c5SAndroid Build Coastguard Worker     GLsizei getRenderToTextureSamples();
124*8975f5c5SAndroid Build Coastguard Worker 
125*8975f5c5SAndroid Build Coastguard Worker     angle::Result ensureUnorderedAccess(const gl::Context *context);
126*8975f5c5SAndroid Build Coastguard Worker     angle::Result onLabelUpdate(const gl::Context *context) override;
127*8975f5c5SAndroid Build Coastguard Worker 
128*8975f5c5SAndroid Build Coastguard Worker     // ObserverInterface implementation.
129*8975f5c5SAndroid Build Coastguard Worker     void onSubjectStateChange(angle::SubjectIndex index, angle::SubjectMessage message) override;
130*8975f5c5SAndroid Build Coastguard Worker 
131*8975f5c5SAndroid Build Coastguard Worker   protected:
132*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImageImpl(const gl::Context *context,
133*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
134*8975f5c5SAndroid Build Coastguard Worker                                GLenum type,
135*8975f5c5SAndroid Build Coastguard Worker                                const gl::PixelUnpackState &unpack,
136*8975f5c5SAndroid Build Coastguard Worker                                gl::Buffer *unpackBuffer,
137*8975f5c5SAndroid Build Coastguard Worker                                const uint8_t *pixels,
138*8975f5c5SAndroid Build Coastguard Worker                                ptrdiff_t layerOffset);
139*8975f5c5SAndroid Build Coastguard Worker     angle::Result subImage(const gl::Context *context,
140*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
141*8975f5c5SAndroid Build Coastguard Worker                            const gl::Box &area,
142*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
143*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
144*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
145*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
146*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels,
147*8975f5c5SAndroid Build Coastguard Worker                            ptrdiff_t layerOffset);
148*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImageImpl(const gl::Context *context,
149*8975f5c5SAndroid Build Coastguard Worker                                          const gl::ImageIndex &index,
150*8975f5c5SAndroid Build Coastguard Worker                                          const gl::PixelUnpackState &unpack,
151*8975f5c5SAndroid Build Coastguard Worker                                          const uint8_t *pixels,
152*8975f5c5SAndroid Build Coastguard Worker                                          ptrdiff_t layerOffset);
153*8975f5c5SAndroid Build Coastguard Worker     angle::Result subImageCompressed(const gl::Context *context,
154*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
155*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Box &area,
156*8975f5c5SAndroid Build Coastguard Worker                                      GLenum format,
157*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
158*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels,
159*8975f5c5SAndroid Build Coastguard Worker                                      ptrdiff_t layerOffset);
160*8975f5c5SAndroid Build Coastguard Worker     bool isFastUnpackable(const gl::Buffer *unpackBuffer,
161*8975f5c5SAndroid Build Coastguard Worker                           const gl::PixelUnpackState &unpack,
162*8975f5c5SAndroid Build Coastguard Worker                           GLenum sizedInternalFormat);
163*8975f5c5SAndroid Build Coastguard Worker     angle::Result fastUnpackPixels(const gl::Context *context,
164*8975f5c5SAndroid Build Coastguard Worker                                    const gl::PixelUnpackState &unpack,
165*8975f5c5SAndroid Build Coastguard Worker                                    gl::Buffer *unpackBuffer,
166*8975f5c5SAndroid Build Coastguard Worker                                    const uint8_t *pixels,
167*8975f5c5SAndroid Build Coastguard Worker                                    const gl::Box &destArea,
168*8975f5c5SAndroid Build Coastguard Worker                                    GLenum sizedInternalFormat,
169*8975f5c5SAndroid Build Coastguard Worker                                    GLenum type,
170*8975f5c5SAndroid Build Coastguard Worker                                    RenderTargetD3D *destRenderTarget);
171*8975f5c5SAndroid Build Coastguard Worker 
172*8975f5c5SAndroid Build Coastguard Worker     GLint getLevelZeroWidth() const;
173*8975f5c5SAndroid Build Coastguard Worker     GLint getLevelZeroHeight() const;
174*8975f5c5SAndroid Build Coastguard Worker     virtual GLint getLevelZeroDepth() const;
175*8975f5c5SAndroid Build Coastguard Worker 
176*8975f5c5SAndroid Build Coastguard Worker     GLint creationLevels(GLsizei width, GLsizei height, GLsizei depth) const;
177*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result initMipmapImages(const gl::Context *context) = 0;
178*8975f5c5SAndroid Build Coastguard Worker     bool isBaseImageZeroSize() const;
179*8975f5c5SAndroid Build Coastguard Worker     virtual bool isImageComplete(const gl::ImageIndex &index) const = 0;
180*8975f5c5SAndroid Build Coastguard Worker 
181*8975f5c5SAndroid Build Coastguard Worker     bool canCreateRenderTargetForImage(const gl::ImageIndex &index) const;
182*8975f5c5SAndroid Build Coastguard Worker     angle::Result ensureBindFlags(const gl::Context *context, BindFlags bindFlags);
183*8975f5c5SAndroid Build Coastguard Worker     angle::Result ensureRenderTarget(const gl::Context *context);
184*8975f5c5SAndroid Build Coastguard Worker 
185*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result createCompleteStorage(const gl::Context *context,
186*8975f5c5SAndroid Build Coastguard Worker                                                 BindFlags bindFlags,
187*8975f5c5SAndroid Build Coastguard Worker                                                 TexStoragePointer *outTexStorage) const = 0;
188*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result setCompleteTexStorage(const gl::Context *context,
189*8975f5c5SAndroid Build Coastguard Worker                                                 TextureStorage *newCompleteTexStorage)  = 0;
190*8975f5c5SAndroid Build Coastguard Worker     angle::Result commitRegion(const gl::Context *context,
191*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
192*8975f5c5SAndroid Build Coastguard Worker                                const gl::Box &region);
193*8975f5c5SAndroid Build Coastguard Worker 
194*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexStorage(const gl::Context *context,
195*8975f5c5SAndroid Build Coastguard Worker                                     const gl::TexLevelMask &copyStorageToImagesMask);
196*8975f5c5SAndroid Build Coastguard Worker 
getBaseLevel()197*8975f5c5SAndroid Build Coastguard Worker     GLuint getBaseLevel() const { return mBaseLevel; }
198*8975f5c5SAndroid Build Coastguard Worker 
199*8975f5c5SAndroid Build Coastguard Worker     virtual void markAllImagesDirty() = 0;
200*8975f5c5SAndroid Build Coastguard Worker 
201*8975f5c5SAndroid Build Coastguard Worker     GLint getBaseLevelDepth() const;
202*8975f5c5SAndroid Build Coastguard Worker 
203*8975f5c5SAndroid Build Coastguard Worker     RendererD3D *mRenderer;
204*8975f5c5SAndroid Build Coastguard Worker 
205*8975f5c5SAndroid Build Coastguard Worker     bool mDirtyImages;
206*8975f5c5SAndroid Build Coastguard Worker 
207*8975f5c5SAndroid Build Coastguard Worker     bool mImmutable;
208*8975f5c5SAndroid Build Coastguard Worker     TextureStorage *mTexStorage;
209*8975f5c5SAndroid Build Coastguard Worker     angle::ObserverBinding mTexStorageObserverBinding;
210*8975f5c5SAndroid Build Coastguard Worker 
211*8975f5c5SAndroid Build Coastguard Worker   private:
212*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) = 0;
213*8975f5c5SAndroid Build Coastguard Worker 
214*8975f5c5SAndroid Build Coastguard Worker     virtual angle::Result updateStorage(const gl::Context *context) = 0;
215*8975f5c5SAndroid Build Coastguard Worker 
216*8975f5c5SAndroid Build Coastguard Worker     bool shouldUseSetData(const ImageD3D *image) const;
217*8975f5c5SAndroid Build Coastguard Worker 
218*8975f5c5SAndroid Build Coastguard Worker     angle::Result generateMipmapUsingImages(const gl::Context *context, const GLuint maxLevel);
219*8975f5c5SAndroid Build Coastguard Worker 
220*8975f5c5SAndroid Build Coastguard Worker     GLuint mBaseLevel;
221*8975f5c5SAndroid Build Coastguard Worker };
222*8975f5c5SAndroid Build Coastguard Worker 
223*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_2D : public TextureD3D
224*8975f5c5SAndroid Build Coastguard Worker {
225*8975f5c5SAndroid Build Coastguard Worker   public:
226*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_2D(const gl::TextureState &data, RendererD3D *renderer);
227*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_2D() override;
228*8975f5c5SAndroid Build Coastguard Worker 
229*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const gl::Context *context) override;
230*8975f5c5SAndroid Build Coastguard Worker 
231*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(int level, int layer) const;
232*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(const gl::ImageIndex &index) const override;
233*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
234*8975f5c5SAndroid Build Coastguard Worker 
235*8975f5c5SAndroid Build Coastguard Worker     GLsizei getWidth(GLint level) const;
236*8975f5c5SAndroid Build Coastguard Worker     GLsizei getHeight(GLint level) const;
237*8975f5c5SAndroid Build Coastguard Worker     GLenum getInternalFormat(GLint level) const;
238*8975f5c5SAndroid Build Coastguard Worker     bool isDepth(GLint level) const;
239*8975f5c5SAndroid Build Coastguard Worker     bool isSRGB(GLint level) const;
240*8975f5c5SAndroid Build Coastguard Worker 
241*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImage(const gl::Context *context,
242*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
243*8975f5c5SAndroid Build Coastguard Worker                            GLenum internalFormat,
244*8975f5c5SAndroid Build Coastguard Worker                            const gl::Extents &size,
245*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
246*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
247*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
248*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
249*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels) override;
250*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImage(const gl::Context *context,
251*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
252*8975f5c5SAndroid Build Coastguard Worker                               const gl::Box &area,
253*8975f5c5SAndroid Build Coastguard Worker                               GLenum format,
254*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
255*8975f5c5SAndroid Build Coastguard Worker                               const gl::PixelUnpackState &unpack,
256*8975f5c5SAndroid Build Coastguard Worker                               gl::Buffer *unpackBuffer,
257*8975f5c5SAndroid Build Coastguard Worker                               const uint8_t *pixels) override;
258*8975f5c5SAndroid Build Coastguard Worker 
259*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImage(const gl::Context *context,
260*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
261*8975f5c5SAndroid Build Coastguard Worker                                      GLenum internalFormat,
262*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Extents &size,
263*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
264*8975f5c5SAndroid Build Coastguard Worker                                      size_t imageSize,
265*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels) override;
266*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedSubImage(const gl::Context *context,
267*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ImageIndex &index,
268*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Box &area,
269*8975f5c5SAndroid Build Coastguard Worker                                         GLenum format,
270*8975f5c5SAndroid Build Coastguard Worker                                         const gl::PixelUnpackState &unpack,
271*8975f5c5SAndroid Build Coastguard Worker                                         size_t imageSize,
272*8975f5c5SAndroid Build Coastguard Worker                                         const uint8_t *pixels) override;
273*8975f5c5SAndroid Build Coastguard Worker 
274*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyImage(const gl::Context *context,
275*8975f5c5SAndroid Build Coastguard Worker                             const gl::ImageIndex &index,
276*8975f5c5SAndroid Build Coastguard Worker                             const gl::Rectangle &sourceArea,
277*8975f5c5SAndroid Build Coastguard Worker                             GLenum internalFormat,
278*8975f5c5SAndroid Build Coastguard Worker                             gl::Framebuffer *source) override;
279*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubImage(const gl::Context *context,
280*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
281*8975f5c5SAndroid Build Coastguard Worker                                const gl::Offset &destOffset,
282*8975f5c5SAndroid Build Coastguard Worker                                const gl::Rectangle &sourceArea,
283*8975f5c5SAndroid Build Coastguard Worker                                gl::Framebuffer *source) override;
284*8975f5c5SAndroid Build Coastguard Worker 
285*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyTexture(const gl::Context *context,
286*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
287*8975f5c5SAndroid Build Coastguard Worker                               GLenum internalFormat,
288*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
289*8975f5c5SAndroid Build Coastguard Worker                               GLint sourceLevel,
290*8975f5c5SAndroid Build Coastguard Worker                               bool unpackFlipY,
291*8975f5c5SAndroid Build Coastguard Worker                               bool unpackPremultiplyAlpha,
292*8975f5c5SAndroid Build Coastguard Worker                               bool unpackUnmultiplyAlpha,
293*8975f5c5SAndroid Build Coastguard Worker                               const gl::Texture *source) override;
294*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubTexture(const gl::Context *context,
295*8975f5c5SAndroid Build Coastguard Worker                                  const gl::ImageIndex &index,
296*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Offset &destOffset,
297*8975f5c5SAndroid Build Coastguard Worker                                  GLint sourceLevel,
298*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Box &sourceBox,
299*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackFlipY,
300*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackPremultiplyAlpha,
301*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackUnmultiplyAlpha,
302*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Texture *source) override;
303*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyCompressedTexture(const gl::Context *context,
304*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Texture *source) override;
305*8975f5c5SAndroid Build Coastguard Worker 
306*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorage(const gl::Context *context,
307*8975f5c5SAndroid Build Coastguard Worker                              gl::TextureType type,
308*8975f5c5SAndroid Build Coastguard Worker                              size_t levels,
309*8975f5c5SAndroid Build Coastguard Worker                              GLenum internalFormat,
310*8975f5c5SAndroid Build Coastguard Worker                              const gl::Extents &size) override;
311*8975f5c5SAndroid Build Coastguard Worker 
312*8975f5c5SAndroid Build Coastguard Worker     angle::Result bindTexImage(const gl::Context *context, egl::Surface *surface) override;
313*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexImage(const gl::Context *context) override;
314*8975f5c5SAndroid Build Coastguard Worker 
315*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
316*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
317*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
318*8975f5c5SAndroid Build Coastguard Worker 
319*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
320*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
321*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
322*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
323*8975f5c5SAndroid Build Coastguard Worker 
324*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
325*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
326*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
327*8975f5c5SAndroid Build Coastguard Worker 
328*8975f5c5SAndroid Build Coastguard Worker   protected:
329*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
330*8975f5c5SAndroid Build Coastguard Worker 
331*8975f5c5SAndroid Build Coastguard Worker   private:
332*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
333*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
334*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
335*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outTexStorage) const override;
336*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
337*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
338*8975f5c5SAndroid Build Coastguard Worker 
339*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
340*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
341*8975f5c5SAndroid Build Coastguard Worker 
342*8975f5c5SAndroid Build Coastguard Worker     bool isValidLevel(int level) const;
343*8975f5c5SAndroid Build Coastguard Worker     bool isLevelComplete(int level) const;
344*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
345*8975f5c5SAndroid Build Coastguard Worker 
346*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorageLevel(const gl::Context *context, int level);
347*8975f5c5SAndroid Build Coastguard Worker 
348*8975f5c5SAndroid Build Coastguard Worker     angle::Result redefineImage(const gl::Context *context,
349*8975f5c5SAndroid Build Coastguard Worker                                 size_t level,
350*8975f5c5SAndroid Build Coastguard Worker                                 GLenum internalformat,
351*8975f5c5SAndroid Build Coastguard Worker                                 const gl::Extents &size,
352*8975f5c5SAndroid Build Coastguard Worker                                 bool forceRelease);
353*8975f5c5SAndroid Build Coastguard Worker 
354*8975f5c5SAndroid Build Coastguard Worker     bool mEGLImageTarget;
355*8975f5c5SAndroid Build Coastguard Worker     gl::TexLevelArray<std::unique_ptr<ImageD3D>> mImageArray;
356*8975f5c5SAndroid Build Coastguard Worker };
357*8975f5c5SAndroid Build Coastguard Worker 
358*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_Cube : public TextureD3D
359*8975f5c5SAndroid Build Coastguard Worker {
360*8975f5c5SAndroid Build Coastguard Worker   public:
361*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_Cube(const gl::TextureState &data, RendererD3D *renderer);
362*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_Cube() override;
363*8975f5c5SAndroid Build Coastguard Worker 
364*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const gl::Context *context) override;
365*8975f5c5SAndroid Build Coastguard Worker 
366*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(int level, int layer) const;
367*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(const gl::ImageIndex &index) const override;
368*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
369*8975f5c5SAndroid Build Coastguard Worker 
370*8975f5c5SAndroid Build Coastguard Worker     GLenum getInternalFormat(GLint level, GLint layer) const;
371*8975f5c5SAndroid Build Coastguard Worker     bool isDepth(GLint level, GLint layer) const;
372*8975f5c5SAndroid Build Coastguard Worker     bool isSRGB(GLint level, GLint layer) const;
373*8975f5c5SAndroid Build Coastguard Worker 
374*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImage(const gl::Context *context,
375*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
376*8975f5c5SAndroid Build Coastguard Worker                            GLenum internalFormat,
377*8975f5c5SAndroid Build Coastguard Worker                            const gl::Extents &size,
378*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
379*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
380*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
381*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
382*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels) override;
383*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImage(const gl::Context *context,
384*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
385*8975f5c5SAndroid Build Coastguard Worker                               const gl::Box &area,
386*8975f5c5SAndroid Build Coastguard Worker                               GLenum format,
387*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
388*8975f5c5SAndroid Build Coastguard Worker                               const gl::PixelUnpackState &unpack,
389*8975f5c5SAndroid Build Coastguard Worker                               gl::Buffer *unpackBuffer,
390*8975f5c5SAndroid Build Coastguard Worker                               const uint8_t *pixels) override;
391*8975f5c5SAndroid Build Coastguard Worker 
392*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImage(const gl::Context *context,
393*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
394*8975f5c5SAndroid Build Coastguard Worker                                      GLenum internalFormat,
395*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Extents &size,
396*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
397*8975f5c5SAndroid Build Coastguard Worker                                      size_t imageSize,
398*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels) override;
399*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedSubImage(const gl::Context *context,
400*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ImageIndex &index,
401*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Box &area,
402*8975f5c5SAndroid Build Coastguard Worker                                         GLenum format,
403*8975f5c5SAndroid Build Coastguard Worker                                         const gl::PixelUnpackState &unpack,
404*8975f5c5SAndroid Build Coastguard Worker                                         size_t imageSize,
405*8975f5c5SAndroid Build Coastguard Worker                                         const uint8_t *pixels) override;
406*8975f5c5SAndroid Build Coastguard Worker 
407*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyImage(const gl::Context *context,
408*8975f5c5SAndroid Build Coastguard Worker                             const gl::ImageIndex &index,
409*8975f5c5SAndroid Build Coastguard Worker                             const gl::Rectangle &sourceArea,
410*8975f5c5SAndroid Build Coastguard Worker                             GLenum internalFormat,
411*8975f5c5SAndroid Build Coastguard Worker                             gl::Framebuffer *source) override;
412*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubImage(const gl::Context *context,
413*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
414*8975f5c5SAndroid Build Coastguard Worker                                const gl::Offset &destOffset,
415*8975f5c5SAndroid Build Coastguard Worker                                const gl::Rectangle &sourceArea,
416*8975f5c5SAndroid Build Coastguard Worker                                gl::Framebuffer *source) override;
417*8975f5c5SAndroid Build Coastguard Worker 
418*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyTexture(const gl::Context *context,
419*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
420*8975f5c5SAndroid Build Coastguard Worker                               GLenum internalFormat,
421*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
422*8975f5c5SAndroid Build Coastguard Worker                               GLint sourceLevel,
423*8975f5c5SAndroid Build Coastguard Worker                               bool unpackFlipY,
424*8975f5c5SAndroid Build Coastguard Worker                               bool unpackPremultiplyAlpha,
425*8975f5c5SAndroid Build Coastguard Worker                               bool unpackUnmultiplyAlpha,
426*8975f5c5SAndroid Build Coastguard Worker                               const gl::Texture *source) override;
427*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubTexture(const gl::Context *context,
428*8975f5c5SAndroid Build Coastguard Worker                                  const gl::ImageIndex &index,
429*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Offset &destOffset,
430*8975f5c5SAndroid Build Coastguard Worker                                  GLint sourceLevel,
431*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Box &sourceBox,
432*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackFlipY,
433*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackPremultiplyAlpha,
434*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackUnmultiplyAlpha,
435*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Texture *source) override;
436*8975f5c5SAndroid Build Coastguard Worker 
437*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorage(const gl::Context *context,
438*8975f5c5SAndroid Build Coastguard Worker                              gl::TextureType type,
439*8975f5c5SAndroid Build Coastguard Worker                              size_t levels,
440*8975f5c5SAndroid Build Coastguard Worker                              GLenum internalFormat,
441*8975f5c5SAndroid Build Coastguard Worker                              const gl::Extents &size) override;
442*8975f5c5SAndroid Build Coastguard Worker 
443*8975f5c5SAndroid Build Coastguard Worker     angle::Result bindTexImage(const gl::Context *context, egl::Surface *surface) override;
444*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexImage(const gl::Context *context) override;
445*8975f5c5SAndroid Build Coastguard Worker 
446*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
447*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
448*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
449*8975f5c5SAndroid Build Coastguard Worker 
450*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
451*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
452*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
453*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
454*8975f5c5SAndroid Build Coastguard Worker 
455*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
456*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
457*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
458*8975f5c5SAndroid Build Coastguard Worker 
459*8975f5c5SAndroid Build Coastguard Worker   protected:
460*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
461*8975f5c5SAndroid Build Coastguard Worker 
462*8975f5c5SAndroid Build Coastguard Worker   private:
463*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
464*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
465*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
466*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outTexStorage) const override;
467*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
468*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
469*8975f5c5SAndroid Build Coastguard Worker 
470*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
471*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
472*8975f5c5SAndroid Build Coastguard Worker 
473*8975f5c5SAndroid Build Coastguard Worker     bool isValidFaceLevel(int faceIndex, int level) const;
474*8975f5c5SAndroid Build Coastguard Worker     bool isFaceLevelComplete(int faceIndex, int level) const;
475*8975f5c5SAndroid Build Coastguard Worker     bool isCubeComplete() const;
476*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
477*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorageFaceLevel(const gl::Context *context, int faceIndex, int level);
478*8975f5c5SAndroid Build Coastguard Worker 
479*8975f5c5SAndroid Build Coastguard Worker     angle::Result redefineImage(const gl::Context *context,
480*8975f5c5SAndroid Build Coastguard Worker                                 int faceIndex,
481*8975f5c5SAndroid Build Coastguard Worker                                 GLint level,
482*8975f5c5SAndroid Build Coastguard Worker                                 GLenum internalformat,
483*8975f5c5SAndroid Build Coastguard Worker                                 const gl::Extents &size,
484*8975f5c5SAndroid Build Coastguard Worker                                 bool forceRelease);
485*8975f5c5SAndroid Build Coastguard Worker 
486*8975f5c5SAndroid Build Coastguard Worker     std::array<gl::TexLevelArray<std::unique_ptr<ImageD3D>>, 6> mImageArray;
487*8975f5c5SAndroid Build Coastguard Worker };
488*8975f5c5SAndroid Build Coastguard Worker 
489*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_3D : public TextureD3D
490*8975f5c5SAndroid Build Coastguard Worker {
491*8975f5c5SAndroid Build Coastguard Worker   public:
492*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_3D(const gl::TextureState &data, RendererD3D *renderer);
493*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_3D() override;
494*8975f5c5SAndroid Build Coastguard Worker 
495*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const gl::Context *context) override;
496*8975f5c5SAndroid Build Coastguard Worker 
497*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(int level, int layer) const;
498*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(const gl::ImageIndex &index) const override;
499*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
500*8975f5c5SAndroid Build Coastguard Worker 
501*8975f5c5SAndroid Build Coastguard Worker     GLsizei getWidth(GLint level) const;
502*8975f5c5SAndroid Build Coastguard Worker     GLsizei getHeight(GLint level) const;
503*8975f5c5SAndroid Build Coastguard Worker     GLsizei getDepth(GLint level) const;
504*8975f5c5SAndroid Build Coastguard Worker     GLenum getInternalFormat(GLint level) const;
505*8975f5c5SAndroid Build Coastguard Worker     bool isDepth(GLint level) const;
506*8975f5c5SAndroid Build Coastguard Worker     bool isSRGB(GLint level) const;
507*8975f5c5SAndroid Build Coastguard Worker 
508*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImage(const gl::Context *context,
509*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
510*8975f5c5SAndroid Build Coastguard Worker                            GLenum internalFormat,
511*8975f5c5SAndroid Build Coastguard Worker                            const gl::Extents &size,
512*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
513*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
514*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
515*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
516*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels) override;
517*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImage(const gl::Context *context,
518*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
519*8975f5c5SAndroid Build Coastguard Worker                               const gl::Box &area,
520*8975f5c5SAndroid Build Coastguard Worker                               GLenum format,
521*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
522*8975f5c5SAndroid Build Coastguard Worker                               const gl::PixelUnpackState &unpack,
523*8975f5c5SAndroid Build Coastguard Worker                               gl::Buffer *unpackBuffer,
524*8975f5c5SAndroid Build Coastguard Worker                               const uint8_t *pixels) override;
525*8975f5c5SAndroid Build Coastguard Worker 
526*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImage(const gl::Context *context,
527*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
528*8975f5c5SAndroid Build Coastguard Worker                                      GLenum internalFormat,
529*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Extents &size,
530*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
531*8975f5c5SAndroid Build Coastguard Worker                                      size_t imageSize,
532*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels) override;
533*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedSubImage(const gl::Context *context,
534*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ImageIndex &index,
535*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Box &area,
536*8975f5c5SAndroid Build Coastguard Worker                                         GLenum format,
537*8975f5c5SAndroid Build Coastguard Worker                                         const gl::PixelUnpackState &unpack,
538*8975f5c5SAndroid Build Coastguard Worker                                         size_t imageSize,
539*8975f5c5SAndroid Build Coastguard Worker                                         const uint8_t *pixels) override;
540*8975f5c5SAndroid Build Coastguard Worker 
541*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyImage(const gl::Context *context,
542*8975f5c5SAndroid Build Coastguard Worker                             const gl::ImageIndex &index,
543*8975f5c5SAndroid Build Coastguard Worker                             const gl::Rectangle &sourceArea,
544*8975f5c5SAndroid Build Coastguard Worker                             GLenum internalFormat,
545*8975f5c5SAndroid Build Coastguard Worker                             gl::Framebuffer *source) override;
546*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubImage(const gl::Context *context,
547*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
548*8975f5c5SAndroid Build Coastguard Worker                                const gl::Offset &destOffset,
549*8975f5c5SAndroid Build Coastguard Worker                                const gl::Rectangle &sourceArea,
550*8975f5c5SAndroid Build Coastguard Worker                                gl::Framebuffer *source) override;
551*8975f5c5SAndroid Build Coastguard Worker 
552*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyTexture(const gl::Context *context,
553*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
554*8975f5c5SAndroid Build Coastguard Worker                               GLenum internalFormat,
555*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
556*8975f5c5SAndroid Build Coastguard Worker                               GLint sourceLevel,
557*8975f5c5SAndroid Build Coastguard Worker                               bool unpackFlipY,
558*8975f5c5SAndroid Build Coastguard Worker                               bool unpackPremultiplyAlpha,
559*8975f5c5SAndroid Build Coastguard Worker                               bool unpackUnmultiplyAlpha,
560*8975f5c5SAndroid Build Coastguard Worker                               const gl::Texture *source) override;
561*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubTexture(const gl::Context *context,
562*8975f5c5SAndroid Build Coastguard Worker                                  const gl::ImageIndex &index,
563*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Offset &destOffset,
564*8975f5c5SAndroid Build Coastguard Worker                                  GLint sourceLevel,
565*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Box &sourceBox,
566*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackFlipY,
567*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackPremultiplyAlpha,
568*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackUnmultiplyAlpha,
569*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Texture *source) override;
570*8975f5c5SAndroid Build Coastguard Worker 
571*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorage(const gl::Context *context,
572*8975f5c5SAndroid Build Coastguard Worker                              gl::TextureType type,
573*8975f5c5SAndroid Build Coastguard Worker                              size_t levels,
574*8975f5c5SAndroid Build Coastguard Worker                              GLenum internalFormat,
575*8975f5c5SAndroid Build Coastguard Worker                              const gl::Extents &size) override;
576*8975f5c5SAndroid Build Coastguard Worker 
577*8975f5c5SAndroid Build Coastguard Worker     angle::Result bindTexImage(const gl::Context *context, egl::Surface *surface) override;
578*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexImage(const gl::Context *context) override;
579*8975f5c5SAndroid Build Coastguard Worker 
580*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
581*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
582*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
583*8975f5c5SAndroid Build Coastguard Worker 
584*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
585*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
586*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
587*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
588*8975f5c5SAndroid Build Coastguard Worker 
589*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
590*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
591*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
592*8975f5c5SAndroid Build Coastguard Worker 
593*8975f5c5SAndroid Build Coastguard Worker   protected:
594*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
595*8975f5c5SAndroid Build Coastguard Worker     GLint getLevelZeroDepth() const override;
596*8975f5c5SAndroid Build Coastguard Worker 
597*8975f5c5SAndroid Build Coastguard Worker   private:
598*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
599*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
600*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
601*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outStorage) const override;
602*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
603*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
604*8975f5c5SAndroid Build Coastguard Worker 
605*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
606*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
607*8975f5c5SAndroid Build Coastguard Worker 
608*8975f5c5SAndroid Build Coastguard Worker     bool isValidLevel(int level) const;
609*8975f5c5SAndroid Build Coastguard Worker     bool isLevelComplete(int level) const;
610*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
611*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorageLevel(const gl::Context *context, int level);
612*8975f5c5SAndroid Build Coastguard Worker 
613*8975f5c5SAndroid Build Coastguard Worker     angle::Result redefineImage(const gl::Context *context,
614*8975f5c5SAndroid Build Coastguard Worker                                 GLint level,
615*8975f5c5SAndroid Build Coastguard Worker                                 GLenum internalformat,
616*8975f5c5SAndroid Build Coastguard Worker                                 const gl::Extents &size,
617*8975f5c5SAndroid Build Coastguard Worker                                 bool forceRelease);
618*8975f5c5SAndroid Build Coastguard Worker 
619*8975f5c5SAndroid Build Coastguard Worker     gl::TexLevelArray<std::unique_ptr<ImageD3D>> mImageArray;
620*8975f5c5SAndroid Build Coastguard Worker };
621*8975f5c5SAndroid Build Coastguard Worker 
622*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_2DArray : public TextureD3D
623*8975f5c5SAndroid Build Coastguard Worker {
624*8975f5c5SAndroid Build Coastguard Worker   public:
625*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_2DArray(const gl::TextureState &data, RendererD3D *renderer);
626*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_2DArray() override;
627*8975f5c5SAndroid Build Coastguard Worker 
628*8975f5c5SAndroid Build Coastguard Worker     void onDestroy(const gl::Context *context) override;
629*8975f5c5SAndroid Build Coastguard Worker 
630*8975f5c5SAndroid Build Coastguard Worker     virtual ImageD3D *getImage(int level, int layer) const;
631*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(const gl::ImageIndex &index) const override;
632*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
633*8975f5c5SAndroid Build Coastguard Worker 
634*8975f5c5SAndroid Build Coastguard Worker     GLsizei getWidth(GLint level) const;
635*8975f5c5SAndroid Build Coastguard Worker     GLsizei getHeight(GLint level) const;
636*8975f5c5SAndroid Build Coastguard Worker     GLenum getInternalFormat(GLint level) const;
637*8975f5c5SAndroid Build Coastguard Worker     bool isDepth(GLint level) const;
638*8975f5c5SAndroid Build Coastguard Worker 
639*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImage(const gl::Context *context,
640*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
641*8975f5c5SAndroid Build Coastguard Worker                            GLenum internalFormat,
642*8975f5c5SAndroid Build Coastguard Worker                            const gl::Extents &size,
643*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
644*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
645*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
646*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
647*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels) override;
648*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImage(const gl::Context *context,
649*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
650*8975f5c5SAndroid Build Coastguard Worker                               const gl::Box &area,
651*8975f5c5SAndroid Build Coastguard Worker                               GLenum format,
652*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
653*8975f5c5SAndroid Build Coastguard Worker                               const gl::PixelUnpackState &unpack,
654*8975f5c5SAndroid Build Coastguard Worker                               gl::Buffer *unpackBuffer,
655*8975f5c5SAndroid Build Coastguard Worker                               const uint8_t *pixels) override;
656*8975f5c5SAndroid Build Coastguard Worker 
657*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImage(const gl::Context *context,
658*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
659*8975f5c5SAndroid Build Coastguard Worker                                      GLenum internalFormat,
660*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Extents &size,
661*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
662*8975f5c5SAndroid Build Coastguard Worker                                      size_t imageSize,
663*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels) override;
664*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedSubImage(const gl::Context *context,
665*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ImageIndex &index,
666*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Box &area,
667*8975f5c5SAndroid Build Coastguard Worker                                         GLenum format,
668*8975f5c5SAndroid Build Coastguard Worker                                         const gl::PixelUnpackState &unpack,
669*8975f5c5SAndroid Build Coastguard Worker                                         size_t imageSize,
670*8975f5c5SAndroid Build Coastguard Worker                                         const uint8_t *pixels) override;
671*8975f5c5SAndroid Build Coastguard Worker 
672*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyImage(const gl::Context *context,
673*8975f5c5SAndroid Build Coastguard Worker                             const gl::ImageIndex &index,
674*8975f5c5SAndroid Build Coastguard Worker                             const gl::Rectangle &sourceArea,
675*8975f5c5SAndroid Build Coastguard Worker                             GLenum internalFormat,
676*8975f5c5SAndroid Build Coastguard Worker                             gl::Framebuffer *source) override;
677*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubImage(const gl::Context *context,
678*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
679*8975f5c5SAndroid Build Coastguard Worker                                const gl::Offset &destOffset,
680*8975f5c5SAndroid Build Coastguard Worker                                const gl::Rectangle &sourceArea,
681*8975f5c5SAndroid Build Coastguard Worker                                gl::Framebuffer *source) override;
682*8975f5c5SAndroid Build Coastguard Worker 
683*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyTexture(const gl::Context *context,
684*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
685*8975f5c5SAndroid Build Coastguard Worker                               GLenum internalFormat,
686*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
687*8975f5c5SAndroid Build Coastguard Worker                               GLint sourceLevel,
688*8975f5c5SAndroid Build Coastguard Worker                               bool unpackFlipY,
689*8975f5c5SAndroid Build Coastguard Worker                               bool unpackPremultiplyAlpha,
690*8975f5c5SAndroid Build Coastguard Worker                               bool unpackUnmultiplyAlpha,
691*8975f5c5SAndroid Build Coastguard Worker                               const gl::Texture *source) override;
692*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubTexture(const gl::Context *context,
693*8975f5c5SAndroid Build Coastguard Worker                                  const gl::ImageIndex &index,
694*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Offset &destOffset,
695*8975f5c5SAndroid Build Coastguard Worker                                  GLint sourceLevel,
696*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Box &sourceBox,
697*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackFlipY,
698*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackPremultiplyAlpha,
699*8975f5c5SAndroid Build Coastguard Worker                                  bool unpackUnmultiplyAlpha,
700*8975f5c5SAndroid Build Coastguard Worker                                  const gl::Texture *source) override;
701*8975f5c5SAndroid Build Coastguard Worker 
702*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorage(const gl::Context *context,
703*8975f5c5SAndroid Build Coastguard Worker                              gl::TextureType type,
704*8975f5c5SAndroid Build Coastguard Worker                              size_t levels,
705*8975f5c5SAndroid Build Coastguard Worker                              GLenum internalFormat,
706*8975f5c5SAndroid Build Coastguard Worker                              const gl::Extents &size) override;
707*8975f5c5SAndroid Build Coastguard Worker 
708*8975f5c5SAndroid Build Coastguard Worker     angle::Result bindTexImage(const gl::Context *context, egl::Surface *surface) override;
709*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexImage(const gl::Context *context) override;
710*8975f5c5SAndroid Build Coastguard Worker 
711*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
712*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
713*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
714*8975f5c5SAndroid Build Coastguard Worker 
715*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
716*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
717*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
718*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
719*8975f5c5SAndroid Build Coastguard Worker 
720*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
721*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
722*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
723*8975f5c5SAndroid Build Coastguard Worker 
724*8975f5c5SAndroid Build Coastguard Worker   protected:
725*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
726*8975f5c5SAndroid Build Coastguard Worker 
727*8975f5c5SAndroid Build Coastguard Worker   private:
728*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
729*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
730*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
731*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outStorage) const override;
732*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
733*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
734*8975f5c5SAndroid Build Coastguard Worker 
735*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
736*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
737*8975f5c5SAndroid Build Coastguard Worker 
738*8975f5c5SAndroid Build Coastguard Worker     bool isValidLevel(int level) const;
739*8975f5c5SAndroid Build Coastguard Worker     bool isLevelComplete(int level) const;
740*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
741*8975f5c5SAndroid Build Coastguard Worker     bool isSRGB(GLint level) const;
742*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorageLevel(const gl::Context *context, int level);
743*8975f5c5SAndroid Build Coastguard Worker 
744*8975f5c5SAndroid Build Coastguard Worker     void deleteImages();
745*8975f5c5SAndroid Build Coastguard Worker     angle::Result redefineImage(const gl::Context *context,
746*8975f5c5SAndroid Build Coastguard Worker                                 GLint level,
747*8975f5c5SAndroid Build Coastguard Worker                                 GLenum internalformat,
748*8975f5c5SAndroid Build Coastguard Worker                                 const gl::Extents &size,
749*8975f5c5SAndroid Build Coastguard Worker                                 bool forceRelease);
750*8975f5c5SAndroid Build Coastguard Worker 
751*8975f5c5SAndroid Build Coastguard Worker     // Storing images as an array of single depth textures since D3D11 treats each array level of a
752*8975f5c5SAndroid Build Coastguard Worker     // Texture2D object as a separate subresource.  Each layer would have to be looped over
753*8975f5c5SAndroid Build Coastguard Worker     // to update all the texture layers since they cannot all be updated at once and it makes the
754*8975f5c5SAndroid Build Coastguard Worker     // most sense for the Image class to not have to worry about layer subresource as well as mip
755*8975f5c5SAndroid Build Coastguard Worker     // subresources.
756*8975f5c5SAndroid Build Coastguard Worker     GLsizei mLayerCounts[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
757*8975f5c5SAndroid Build Coastguard Worker     ImageD3D **mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
758*8975f5c5SAndroid Build Coastguard Worker };
759*8975f5c5SAndroid Build Coastguard Worker 
760*8975f5c5SAndroid Build Coastguard Worker // Base class for immutable textures. These don't support manipulation of individual texture images.
761*8975f5c5SAndroid Build Coastguard Worker class TextureD3DImmutableBase : public TextureD3D
762*8975f5c5SAndroid Build Coastguard Worker {
763*8975f5c5SAndroid Build Coastguard Worker   public:
764*8975f5c5SAndroid Build Coastguard Worker     TextureD3DImmutableBase(const gl::TextureState &data, RendererD3D *renderer);
765*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3DImmutableBase() override;
766*8975f5c5SAndroid Build Coastguard Worker 
767*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(const gl::ImageIndex &index) const override;
768*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImage(const gl::Context *context,
769*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
770*8975f5c5SAndroid Build Coastguard Worker                            GLenum internalFormat,
771*8975f5c5SAndroid Build Coastguard Worker                            const gl::Extents &size,
772*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
773*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
774*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
775*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
776*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels) override;
777*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImage(const gl::Context *context,
778*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
779*8975f5c5SAndroid Build Coastguard Worker                               const gl::Box &area,
780*8975f5c5SAndroid Build Coastguard Worker                               GLenum format,
781*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
782*8975f5c5SAndroid Build Coastguard Worker                               const gl::PixelUnpackState &unpack,
783*8975f5c5SAndroid Build Coastguard Worker                               gl::Buffer *unpackBuffer,
784*8975f5c5SAndroid Build Coastguard Worker                               const uint8_t *pixels) override;
785*8975f5c5SAndroid Build Coastguard Worker 
786*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImage(const gl::Context *context,
787*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
788*8975f5c5SAndroid Build Coastguard Worker                                      GLenum internalFormat,
789*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Extents &size,
790*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
791*8975f5c5SAndroid Build Coastguard Worker                                      size_t imageSize,
792*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels) override;
793*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedSubImage(const gl::Context *context,
794*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ImageIndex &index,
795*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Box &area,
796*8975f5c5SAndroid Build Coastguard Worker                                         GLenum format,
797*8975f5c5SAndroid Build Coastguard Worker                                         const gl::PixelUnpackState &unpack,
798*8975f5c5SAndroid Build Coastguard Worker                                         size_t imageSize,
799*8975f5c5SAndroid Build Coastguard Worker                                         const uint8_t *pixels) override;
800*8975f5c5SAndroid Build Coastguard Worker 
801*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyImage(const gl::Context *context,
802*8975f5c5SAndroid Build Coastguard Worker                             const gl::ImageIndex &index,
803*8975f5c5SAndroid Build Coastguard Worker                             const gl::Rectangle &sourceArea,
804*8975f5c5SAndroid Build Coastguard Worker                             GLenum internalFormat,
805*8975f5c5SAndroid Build Coastguard Worker                             gl::Framebuffer *source) override;
806*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubImage(const gl::Context *context,
807*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
808*8975f5c5SAndroid Build Coastguard Worker                                const gl::Offset &destOffset,
809*8975f5c5SAndroid Build Coastguard Worker                                const gl::Rectangle &sourceArea,
810*8975f5c5SAndroid Build Coastguard Worker                                gl::Framebuffer *source) override;
811*8975f5c5SAndroid Build Coastguard Worker 
812*8975f5c5SAndroid Build Coastguard Worker     angle::Result bindTexImage(const gl::Context *context, egl::Surface *surface) override;
813*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexImage(const gl::Context *context) override;
814*8975f5c5SAndroid Build Coastguard Worker };
815*8975f5c5SAndroid Build Coastguard Worker 
816*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_External : public TextureD3DImmutableBase
817*8975f5c5SAndroid Build Coastguard Worker {
818*8975f5c5SAndroid Build Coastguard Worker   public:
819*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_External(const gl::TextureState &data, RendererD3D *renderer);
820*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_External() override;
821*8975f5c5SAndroid Build Coastguard Worker 
822*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
823*8975f5c5SAndroid Build Coastguard Worker 
824*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImageExternal(const gl::Context *context,
825*8975f5c5SAndroid Build Coastguard Worker                                    gl::TextureType type,
826*8975f5c5SAndroid Build Coastguard Worker                                    egl::Stream *stream,
827*8975f5c5SAndroid Build Coastguard Worker                                    const egl::Stream::GLTextureDescription &desc) override;
828*8975f5c5SAndroid Build Coastguard Worker 
829*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
830*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
831*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
832*8975f5c5SAndroid Build Coastguard Worker 
833*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
834*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
835*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
836*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
837*8975f5c5SAndroid Build Coastguard Worker 
838*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
839*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
840*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
841*8975f5c5SAndroid Build Coastguard Worker 
842*8975f5c5SAndroid Build Coastguard Worker   protected:
843*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
844*8975f5c5SAndroid Build Coastguard Worker 
845*8975f5c5SAndroid Build Coastguard Worker   private:
846*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
847*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
848*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
849*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outTexStorage) const override;
850*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
851*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
852*8975f5c5SAndroid Build Coastguard Worker 
853*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
854*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
855*8975f5c5SAndroid Build Coastguard Worker 
856*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
857*8975f5c5SAndroid Build Coastguard Worker };
858*8975f5c5SAndroid Build Coastguard Worker 
859*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_2DMultisample : public TextureD3DImmutableBase
860*8975f5c5SAndroid Build Coastguard Worker {
861*8975f5c5SAndroid Build Coastguard Worker   public:
862*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_2DMultisample(const gl::TextureState &data, RendererD3D *renderer);
863*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_2DMultisample() override;
864*8975f5c5SAndroid Build Coastguard Worker 
865*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorageMultisample(const gl::Context *context,
866*8975f5c5SAndroid Build Coastguard Worker                                         gl::TextureType type,
867*8975f5c5SAndroid Build Coastguard Worker                                         GLsizei samples,
868*8975f5c5SAndroid Build Coastguard Worker                                         GLint internalformat,
869*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Extents &size,
870*8975f5c5SAndroid Build Coastguard Worker                                         bool fixedSampleLocations) override;
871*8975f5c5SAndroid Build Coastguard Worker 
872*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
873*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
874*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
875*8975f5c5SAndroid Build Coastguard Worker 
876*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
877*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
878*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
879*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
880*8975f5c5SAndroid Build Coastguard Worker 
881*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
882*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
883*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
884*8975f5c5SAndroid Build Coastguard Worker 
885*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
886*8975f5c5SAndroid Build Coastguard Worker 
887*8975f5c5SAndroid Build Coastguard Worker   protected:
888*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
889*8975f5c5SAndroid Build Coastguard Worker 
890*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
891*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
892*8975f5c5SAndroid Build Coastguard Worker 
893*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
894*8975f5c5SAndroid Build Coastguard Worker 
895*8975f5c5SAndroid Build Coastguard Worker   private:
896*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
897*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
898*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
899*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outTexStorage) const override;
900*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
901*8975f5c5SAndroid Build Coastguard Worker 
902*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
903*8975f5c5SAndroid Build Coastguard Worker };
904*8975f5c5SAndroid Build Coastguard Worker 
905*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_2DMultisampleArray : public TextureD3DImmutableBase
906*8975f5c5SAndroid Build Coastguard Worker {
907*8975f5c5SAndroid Build Coastguard Worker   public:
908*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_2DMultisampleArray(const gl::TextureState &data, RendererD3D *renderer);
909*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_2DMultisampleArray() override;
910*8975f5c5SAndroid Build Coastguard Worker 
911*8975f5c5SAndroid Build Coastguard Worker     angle::Result setStorageMultisample(const gl::Context *context,
912*8975f5c5SAndroid Build Coastguard Worker                                         gl::TextureType type,
913*8975f5c5SAndroid Build Coastguard Worker                                         GLsizei samples,
914*8975f5c5SAndroid Build Coastguard Worker                                         GLint internalformat,
915*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Extents &size,
916*8975f5c5SAndroid Build Coastguard Worker                                         bool fixedSampleLocations) override;
917*8975f5c5SAndroid Build Coastguard Worker 
918*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
919*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
920*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
921*8975f5c5SAndroid Build Coastguard Worker 
922*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
923*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
924*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
925*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
926*8975f5c5SAndroid Build Coastguard Worker 
927*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
928*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
929*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
930*8975f5c5SAndroid Build Coastguard Worker 
931*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
932*8975f5c5SAndroid Build Coastguard Worker 
933*8975f5c5SAndroid Build Coastguard Worker   protected:
934*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
935*8975f5c5SAndroid Build Coastguard Worker 
936*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
937*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
938*8975f5c5SAndroid Build Coastguard Worker 
939*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
940*8975f5c5SAndroid Build Coastguard Worker 
941*8975f5c5SAndroid Build Coastguard Worker   private:
942*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
943*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
944*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
945*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outTexStorage) const override;
946*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
947*8975f5c5SAndroid Build Coastguard Worker 
948*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
949*8975f5c5SAndroid Build Coastguard Worker 
950*8975f5c5SAndroid Build Coastguard Worker     GLsizei mLayerCount;
951*8975f5c5SAndroid Build Coastguard Worker };
952*8975f5c5SAndroid Build Coastguard Worker 
953*8975f5c5SAndroid Build Coastguard Worker class TextureD3D_Buffer : public TextureD3D
954*8975f5c5SAndroid Build Coastguard Worker {
955*8975f5c5SAndroid Build Coastguard Worker   public:
956*8975f5c5SAndroid Build Coastguard Worker     TextureD3D_Buffer(const gl::TextureState &data, RendererD3D *renderer);
957*8975f5c5SAndroid Build Coastguard Worker     ~TextureD3D_Buffer() override;
958*8975f5c5SAndroid Build Coastguard Worker 
959*8975f5c5SAndroid Build Coastguard Worker     ImageD3D *getImage(const gl::ImageIndex &index) const override;
960*8975f5c5SAndroid Build Coastguard Worker 
961*8975f5c5SAndroid Build Coastguard Worker     angle::Result setBuffer(const gl::Context *context, GLenum internalFormat) override;
962*8975f5c5SAndroid Build Coastguard Worker 
963*8975f5c5SAndroid Build Coastguard Worker     angle::Result setImage(const gl::Context *context,
964*8975f5c5SAndroid Build Coastguard Worker                            const gl::ImageIndex &index,
965*8975f5c5SAndroid Build Coastguard Worker                            GLenum internalFormat,
966*8975f5c5SAndroid Build Coastguard Worker                            const gl::Extents &size,
967*8975f5c5SAndroid Build Coastguard Worker                            GLenum format,
968*8975f5c5SAndroid Build Coastguard Worker                            GLenum type,
969*8975f5c5SAndroid Build Coastguard Worker                            const gl::PixelUnpackState &unpack,
970*8975f5c5SAndroid Build Coastguard Worker                            gl::Buffer *unpackBuffer,
971*8975f5c5SAndroid Build Coastguard Worker                            const uint8_t *pixels) override;
972*8975f5c5SAndroid Build Coastguard Worker     angle::Result setSubImage(const gl::Context *context,
973*8975f5c5SAndroid Build Coastguard Worker                               const gl::ImageIndex &index,
974*8975f5c5SAndroid Build Coastguard Worker                               const gl::Box &area,
975*8975f5c5SAndroid Build Coastguard Worker                               GLenum format,
976*8975f5c5SAndroid Build Coastguard Worker                               GLenum type,
977*8975f5c5SAndroid Build Coastguard Worker                               const gl::PixelUnpackState &unpack,
978*8975f5c5SAndroid Build Coastguard Worker                               gl::Buffer *unpackBuffer,
979*8975f5c5SAndroid Build Coastguard Worker                               const uint8_t *pixels) override;
980*8975f5c5SAndroid Build Coastguard Worker 
981*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedImage(const gl::Context *context,
982*8975f5c5SAndroid Build Coastguard Worker                                      const gl::ImageIndex &index,
983*8975f5c5SAndroid Build Coastguard Worker                                      GLenum internalFormat,
984*8975f5c5SAndroid Build Coastguard Worker                                      const gl::Extents &size,
985*8975f5c5SAndroid Build Coastguard Worker                                      const gl::PixelUnpackState &unpack,
986*8975f5c5SAndroid Build Coastguard Worker                                      size_t imageSize,
987*8975f5c5SAndroid Build Coastguard Worker                                      const uint8_t *pixels) override;
988*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompressedSubImage(const gl::Context *context,
989*8975f5c5SAndroid Build Coastguard Worker                                         const gl::ImageIndex &index,
990*8975f5c5SAndroid Build Coastguard Worker                                         const gl::Box &area,
991*8975f5c5SAndroid Build Coastguard Worker                                         GLenum format,
992*8975f5c5SAndroid Build Coastguard Worker                                         const gl::PixelUnpackState &unpack,
993*8975f5c5SAndroid Build Coastguard Worker                                         size_t imageSize,
994*8975f5c5SAndroid Build Coastguard Worker                                         const uint8_t *pixels) override;
995*8975f5c5SAndroid Build Coastguard Worker 
996*8975f5c5SAndroid Build Coastguard Worker     angle::Result copyImage(const gl::Context *context,
997*8975f5c5SAndroid Build Coastguard Worker                             const gl::ImageIndex &index,
998*8975f5c5SAndroid Build Coastguard Worker                             const gl::Rectangle &sourceArea,
999*8975f5c5SAndroid Build Coastguard Worker                             GLenum internalFormat,
1000*8975f5c5SAndroid Build Coastguard Worker                             gl::Framebuffer *source) override;
1001*8975f5c5SAndroid Build Coastguard Worker     angle::Result copySubImage(const gl::Context *context,
1002*8975f5c5SAndroid Build Coastguard Worker                                const gl::ImageIndex &index,
1003*8975f5c5SAndroid Build Coastguard Worker                                const gl::Offset &destOffset,
1004*8975f5c5SAndroid Build Coastguard Worker                                const gl::Rectangle &sourceArea,
1005*8975f5c5SAndroid Build Coastguard Worker                                gl::Framebuffer *source) override;
1006*8975f5c5SAndroid Build Coastguard Worker 
1007*8975f5c5SAndroid Build Coastguard Worker     angle::Result bindTexImage(const gl::Context *context, egl::Surface *surface) override;
1008*8975f5c5SAndroid Build Coastguard Worker     angle::Result releaseTexImage(const gl::Context *context) override;
1009*8975f5c5SAndroid Build Coastguard Worker 
1010*8975f5c5SAndroid Build Coastguard Worker     angle::Result setEGLImageTarget(const gl::Context *context,
1011*8975f5c5SAndroid Build Coastguard Worker                                     gl::TextureType type,
1012*8975f5c5SAndroid Build Coastguard Worker                                     egl::Image *image) override;
1013*8975f5c5SAndroid Build Coastguard Worker 
1014*8975f5c5SAndroid Build Coastguard Worker     angle::Result getRenderTarget(const gl::Context *context,
1015*8975f5c5SAndroid Build Coastguard Worker                                   const gl::ImageIndex &index,
1016*8975f5c5SAndroid Build Coastguard Worker                                   GLsizei samples,
1017*8975f5c5SAndroid Build Coastguard Worker                                   RenderTargetD3D **outRT) override;
1018*8975f5c5SAndroid Build Coastguard Worker 
1019*8975f5c5SAndroid Build Coastguard Worker     GLsizei getLayerCount(int level) const override;
1020*8975f5c5SAndroid Build Coastguard Worker 
1021*8975f5c5SAndroid Build Coastguard Worker     angle::Result syncState(const gl::Context *context,
1022*8975f5c5SAndroid Build Coastguard Worker                             const gl::Texture::DirtyBits &dirtyBits,
1023*8975f5c5SAndroid Build Coastguard Worker                             gl::Command source) override;
1024*8975f5c5SAndroid Build Coastguard Worker 
1025*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndexIterator imageIterator() const override;
1026*8975f5c5SAndroid Build Coastguard Worker     gl::ImageIndex getImageIndex(GLint mip, GLint layer) const override;
1027*8975f5c5SAndroid Build Coastguard Worker     bool isValidIndex(const gl::ImageIndex &index) const override;
1028*8975f5c5SAndroid Build Coastguard Worker 
1029*8975f5c5SAndroid Build Coastguard Worker   protected:
1030*8975f5c5SAndroid Build Coastguard Worker     void markAllImagesDirty() override;
1031*8975f5c5SAndroid Build Coastguard Worker 
1032*8975f5c5SAndroid Build Coastguard Worker   private:
1033*8975f5c5SAndroid Build Coastguard Worker     angle::Result initializeStorage(const gl::Context *context, BindFlags bindFlags) override;
1034*8975f5c5SAndroid Build Coastguard Worker     angle::Result createCompleteStorage(const gl::Context *context,
1035*8975f5c5SAndroid Build Coastguard Worker                                         BindFlags bindFlags,
1036*8975f5c5SAndroid Build Coastguard Worker                                         TexStoragePointer *outTexStorage) const override;
1037*8975f5c5SAndroid Build Coastguard Worker     angle::Result setCompleteTexStorage(const gl::Context *context,
1038*8975f5c5SAndroid Build Coastguard Worker                                         TextureStorage *newCompleteTexStorage) override;
1039*8975f5c5SAndroid Build Coastguard Worker 
1040*8975f5c5SAndroid Build Coastguard Worker     angle::Result updateStorage(const gl::Context *context) override;
1041*8975f5c5SAndroid Build Coastguard Worker     angle::Result initMipmapImages(const gl::Context *context) override;
1042*8975f5c5SAndroid Build Coastguard Worker 
1043*8975f5c5SAndroid Build Coastguard Worker     bool isImageComplete(const gl::ImageIndex &index) const override;
1044*8975f5c5SAndroid Build Coastguard Worker 
1045*8975f5c5SAndroid Build Coastguard Worker     GLenum mInternalFormat;
1046*8975f5c5SAndroid Build Coastguard Worker };
1047*8975f5c5SAndroid Build Coastguard Worker }  // namespace rx
1048*8975f5c5SAndroid Build Coastguard Worker 
1049*8975f5c5SAndroid Build Coastguard Worker #endif  // LIBANGLE_RENDERER_D3D_TEXTURED3D_H_
1050