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 ®ion); 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 ©StorageToImagesMask); 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