Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / TextureD3D.h
index 626316a..41c7318 100644 (file)
@@ -24,20 +24,23 @@ namespace rx
 class Image;
 class ImageD3D;
 class Renderer;
-class TextureStorageInterface;
-class TextureStorageInterface2D;
-class TextureStorageInterfaceCube;
-class TextureStorageInterface3D;
-class TextureStorageInterface2DArray;
+class RenderTarget;
+class TextureStorage;
 
-bool IsMipmapFiltered(const gl::SamplerState &samplerState);
-
-class TextureD3D
+class TextureD3D : public TextureImpl
 {
   public:
     TextureD3D(Renderer *renderer);
     virtual ~TextureD3D();
 
+    static TextureD3D *makeTextureD3D(TextureImpl *texture);
+
+    virtual TextureStorage *getNativeTexture();
+
+    virtual void setUsage(GLenum usage) { mUsage = usage; }
+    bool hasDirtyImages() const { return mDirtyImages; }
+    void resetDirty() { mDirtyImages = false; }
+
     GLint getBaseLevelWidth() const;
     GLint getBaseLevelHeight() const;
     GLint getBaseLevelDepth() const;
@@ -45,16 +48,19 @@ class TextureD3D
 
     bool isImmutable() const { return mImmutable; }
 
+    virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index) = 0;
+    virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index) = 0;
+
   protected:
     void setImage(const gl::PixelUnpackState &unpack, GLenum type, const void *pixels, Image *image);
     bool subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
-                  GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels, Image *image);
+                  GLenum format, GLenum type, const gl::PixelUnpackState &unpack, const void *pixels, const gl::ImageIndex &index);
     void setCompressedImage(GLsizei imageSize, const void *pixels, Image *image);
     bool subImageCompressed(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
                             GLenum format, GLsizei imageSize, const void *pixels, Image *image);
     bool isFastUnpackable(const gl::PixelUnpackState &unpack, GLenum sizedInternalFormat);
     bool fastUnpackPixels(const gl::PixelUnpackState &unpack, const void *pixels, const gl::Box &destArea,
-                                  GLenum sizedInternalFormat, GLenum type, RenderTarget *destRenderTarget);
+                          GLenum sizedInternalFormat, GLenum type, RenderTarget *destRenderTarget);
 
     GLint creationLevels(GLsizei width, GLsizei height, GLsizei depth) const;
     int mipLevels() const;
@@ -70,27 +76,23 @@ class TextureD3D
   private:
     DISALLOW_COPY_AND_ASSIGN(TextureD3D);
 
-    virtual TextureStorageInterface *getBaseLevelStorage() = 0;
+    virtual void initializeStorage(bool renderTarget) = 0;
+
+    virtual void updateStorage() = 0;
+    virtual TextureStorage *getBaseLevelStorage() = 0;
     virtual const ImageD3D *getBaseLevelImage() const = 0;
 };
 
-class TextureD3D_2D : public Texture2DImpl, public TextureD3D
+class TextureD3D_2D : public TextureD3D
 {
   public:
     TextureD3D_2D(Renderer *renderer);
     virtual ~TextureD3D_2D();
 
-    static TextureD3D_2D *makeTextureD3D_2D(Texture2DImpl *texture);
-
-    virtual TextureStorageInterface *getNativeTexture();
-
     virtual Image *getImage(int level, int layer) const;
+    virtual Image *getImage(const gl::ImageIndex &index) const;
     virtual GLsizei getLayerCount(int level) const;
 
-    virtual bool hasDirtyImages() const { return mDirtyImages; }
-    virtual void resetDirty() { mDirtyImages = false; }
-    virtual void setUsage(GLenum usage) { mUsage = usage; }
-
     GLsizei getWidth(GLint level) const;
     GLsizei getHeight(GLint level) const;
     GLenum getInternalFormat(GLint level) const;
@@ -105,30 +107,26 @@ class TextureD3D_2D : public Texture2DImpl, public TextureD3D
     virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source);
     virtual void storage(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
 
-    virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const;
     virtual void bindTexImage(egl::Surface *surface);
     virtual void releaseTexImage();
 
     virtual void generateMipmaps();
 
-    virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
-    virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
-    virtual RenderTarget *getDepthStencil(GLint level, GLint layer);
+    virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index);
+    virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
 
   private:
     DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D);
 
-    void initializeStorage(bool renderTarget);
-    TextureStorageInterface2D *createCompleteStorage(bool renderTarget) const;
-    void setCompleteTexStorage(TextureStorageInterface2D *newCompleteTexStorage);
+    virtual void initializeStorage(bool renderTarget);
+    TextureStorage *createCompleteStorage(bool renderTarget) const;
+    void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
 
-    void updateStorage();
+    virtual void updateStorage();
     bool ensureRenderTarget();
-    virtual TextureStorageInterface *getBaseLevelStorage();
+    virtual TextureStorage *getBaseLevelStorage();
     virtual const ImageD3D *getBaseLevelImage() const;
 
-    bool isMipmapComplete() const;
     bool isValidLevel(int level) const;
     bool isLevelComplete(int level) const;
 
@@ -137,21 +135,18 @@ class TextureD3D_2D : public Texture2DImpl, public TextureD3D
     void redefineImage(GLint level, GLenum internalformat, GLsizei width, GLsizei height);
     void commitRect(GLint level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
 
-    TextureStorageInterface2D *mTexStorage;
+    TextureStorage *mTexStorage;
     ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
 };
 
-class TextureD3D_Cube : public TextureCubeImpl, public TextureD3D
+class TextureD3D_Cube : public TextureD3D
 {
   public:
     TextureD3D_Cube(Renderer *renderer);
     virtual ~TextureD3D_Cube();
 
-    static TextureD3D_Cube *makeTextureD3D_Cube(TextureCubeImpl *texture);
-
-    virtual TextureStorageInterface *getNativeTexture();
-
     virtual Image *getImage(int level, int layer) const;
+    virtual Image *getImage(const gl::ImageIndex &index) const;
     virtual GLsizei getLayerCount(int level) const;
 
     virtual bool hasDirtyImages() const { return mDirtyImages; }
@@ -169,31 +164,29 @@ class TextureD3D_Cube : public TextureCubeImpl, public TextureD3D
     virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source);
     virtual void storage(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
 
-    virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const;
-    virtual bool isCubeComplete() const;
+    virtual void bindTexImage(egl::Surface *surface);
+    virtual void releaseTexImage();
 
     virtual void generateMipmaps();
 
-    virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
-    virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
-    virtual RenderTarget *getDepthStencil(GLint level, GLint layer);
+    virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index);
+    virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
 
   private:
     DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube);
 
-    void initializeStorage(bool renderTarget);
-    TextureStorageInterfaceCube *createCompleteStorage(bool renderTarget) const;
-    void setCompleteTexStorage(TextureStorageInterfaceCube *newCompleteTexStorage);
+    virtual void initializeStorage(bool renderTarget);
+    TextureStorage *createCompleteStorage(bool renderTarget) const;
+    void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
 
-    void updateStorage();
+    virtual void updateStorage();
     bool ensureRenderTarget();
-    virtual TextureStorageInterface *getBaseLevelStorage();
+    virtual TextureStorage *getBaseLevelStorage();
     virtual const ImageD3D *getBaseLevelImage() const;
 
-    bool isMipmapCubeComplete() const;
     bool isValidFaceLevel(int faceIndex, int level) const;
     bool isFaceLevelComplete(int faceIndex, int level) const;
+    bool isCubeComplete() const;
     void updateStorageFaceLevel(int faceIndex, int level);
 
     void redefineImage(int faceIndex, GLint level, GLenum internalformat, GLsizei width, GLsizei height);
@@ -201,26 +194,19 @@ class TextureD3D_Cube : public TextureCubeImpl, public TextureD3D
 
     ImageD3D *mImageArray[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
 
-    TextureStorageInterfaceCube *mTexStorage;
+    TextureStorage *mTexStorage;
 };
 
-class TextureD3D_3D : public Texture3DImpl, public TextureD3D
+class TextureD3D_3D : public TextureD3D
 {
   public:
     TextureD3D_3D(Renderer *renderer);
     virtual ~TextureD3D_3D();
 
-    static TextureD3D_3D *makeTextureD3D_3D(Texture3DImpl *texture);
-
-    virtual TextureStorageInterface *getNativeTexture();
-
     virtual Image *getImage(int level, int layer) const;
+    virtual Image *getImage(const gl::ImageIndex &index) const;
     virtual GLsizei getLayerCount(int level) const;
 
-    virtual bool hasDirtyImages() const { return mDirtyImages; }
-    virtual void resetDirty() { mDirtyImages = false; }
-    virtual void setUsage(GLenum usage) { mUsage = usage; }
-
     GLsizei getWidth(GLint level) const;
     GLsizei getHeight(GLint level) const;
     GLsizei getDepth(GLint level) const;
@@ -235,29 +221,26 @@ class TextureD3D_3D : public Texture3DImpl, public TextureD3D
     virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source);
     virtual void storage(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
 
-    virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const;
+    virtual void bindTexImage(egl::Surface *surface);
+    virtual void releaseTexImage();
 
     virtual void generateMipmaps();
 
-    virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
-    virtual RenderTarget *getRenderTarget(GLint level);
-    virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
-    virtual RenderTarget *getDepthStencil(GLint level, GLint layer);
+    virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index);
+    virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
 
   private:
     DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D);
 
     virtual void initializeStorage(bool renderTarget);
-    TextureStorageInterface3D *createCompleteStorage(bool renderTarget) const;
-    void setCompleteTexStorage(TextureStorageInterface3D *newCompleteTexStorage);
+    TextureStorage *createCompleteStorage(bool renderTarget) const;
+    void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
 
-    void updateStorage();
+    virtual void updateStorage();
     bool ensureRenderTarget();
-    virtual TextureStorageInterface *getBaseLevelStorage();
+    virtual TextureStorage *getBaseLevelStorage();
     virtual const ImageD3D *getBaseLevelImage() const;
 
-    bool isMipmapComplete() const;
     bool isValidLevel(int level) const;
     bool isLevelComplete(int level) const;
     void updateStorageLevel(int level);
@@ -267,26 +250,19 @@ class TextureD3D_3D : public Texture3DImpl, public TextureD3D
 
     ImageD3D *mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
 
-    TextureStorageInterface3D *mTexStorage;
+    TextureStorage *mTexStorage;
 };
 
-class TextureD3D_2DArray : public Texture2DArrayImpl, public TextureD3D
+class TextureD3D_2DArray : public TextureD3D
 {
   public:
     TextureD3D_2DArray(Renderer *renderer);
     virtual ~TextureD3D_2DArray();
 
-    static TextureD3D_2DArray *makeTextureD3D_2DArray(Texture2DArrayImpl *texture);
-
-    virtual TextureStorageInterface *getNativeTexture();
-
     virtual Image *getImage(int level, int layer) const;
+    virtual Image *getImage(const gl::ImageIndex &index) const;
     virtual GLsizei getLayerCount(int level) const;
 
-    virtual bool hasDirtyImages() const { return mDirtyImages; }
-    virtual void resetDirty() { mDirtyImages = false; }
-    virtual void setUsage(GLenum usage) { mUsage = usage; }
-
     GLsizei getWidth(GLint level) const;
     GLsizei getHeight(GLint level) const;
     GLsizei getLayers(GLint level) const;
@@ -301,28 +277,26 @@ class TextureD3D_2DArray : public Texture2DArrayImpl, public TextureD3D
     virtual void copySubImage(GLenum target, GLint level, GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source);
     virtual void storage(GLenum target, GLsizei levels, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth);
 
-    virtual bool isSamplerComplete(const gl::SamplerState &samplerState) const;
+    virtual void bindTexImage(egl::Surface *surface);
+    virtual void releaseTexImage();
 
     virtual void generateMipmaps();
 
-    virtual unsigned int getRenderTargetSerial(GLint level, GLint layer);
-
-    virtual RenderTarget *getRenderTarget(GLint level, GLint layer);
-    virtual RenderTarget *getDepthStencil(GLint level, GLint layer);
+    virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index);
+    virtual unsigned int getRenderTargetSerial(const gl::ImageIndex &index);
 
   private:
     DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray);
 
     virtual void initializeStorage(bool renderTarget);
-    TextureStorageInterface2DArray *createCompleteStorage(bool renderTarget) const;
-    void setCompleteTexStorage(TextureStorageInterface2DArray *newCompleteTexStorage);
+    TextureStorage *createCompleteStorage(bool renderTarget) const;
+    void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
 
-    void updateStorage();
+    virtual void updateStorage();
     bool ensureRenderTarget();
-    virtual TextureStorageInterface *getBaseLevelStorage();
+    virtual TextureStorage *getBaseLevelStorage();
     virtual const ImageD3D *getBaseLevelImage() const;
 
-    bool isMipmapComplete() const;
     bool isValidLevel(int level) const;
     bool isLevelComplete(int level) const;
     void updateStorageLevel(int level);
@@ -338,7 +312,7 @@ class TextureD3D_2DArray : public Texture2DArrayImpl, public TextureD3D
     GLsizei mLayerCounts[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
     ImageD3D **mImageArray[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
 
-    TextureStorageInterface2DArray *mTexStorage;
+    TextureStorage *mTexStorage;
 };
 
 }