Home | History | Annotate | Download | only in d3d11
      1 //
      2 // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
      3 // Use of this source code is governed by a BSD-style license that can be
      4 // found in the LICENSE file.
      5 //
      6 
      7 // Image11.h: Defines the rx::Image11 class, which acts as the interface to
      8 // the actual underlying resources of a Texture
      9 
     10 #ifndef LIBGLESV2_RENDERER_IMAGE11_H_
     11 #define LIBGLESV2_RENDERER_IMAGE11_H_
     12 
     13 #include "libGLESv2/renderer/d3d/ImageD3D.h"
     14 
     15 #include "common/debug.h"
     16 
     17 namespace gl
     18 {
     19 class Framebuffer;
     20 }
     21 
     22 namespace rx
     23 {
     24 class Renderer;
     25 class Renderer11;
     26 class TextureStorage11;
     27 
     28 class Image11 : public ImageD3D
     29 {
     30   public:
     31     Image11();
     32     virtual ~Image11();
     33 
     34     static Image11 *makeImage11(Image *img);
     35 
     36     static void generateMipmap(Image11 *dest, Image11 *src);
     37 
     38     virtual bool isDirty() const;
     39 
     40     virtual bool copyToStorage2D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
     41     virtual bool copyToStorageCube(TextureStorage *storage, int face, int level, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
     42     virtual bool copyToStorage3D(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth);
     43     virtual bool copyToStorage2DArray(TextureStorage *storage, int level, GLint xoffset, GLint yoffset, GLint arrayLayer, GLsizei width, GLsizei height);
     44 
     45     virtual bool redefine(Renderer *renderer, GLenum target, GLenum internalformat, GLsizei width, GLsizei height, GLsizei depth, bool forceRelease);
     46 
     47     DXGI_FORMAT getDXGIFormat() const;
     48 
     49     virtual void loadData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
     50                           GLint unpackAlignment, GLenum type, const void *input);
     51     virtual void loadCompressedData(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth,
     52                                     const void *input);
     53 
     54     virtual void copy(GLint xoffset, GLint yoffset, GLint zoffset, GLint x, GLint y, GLsizei width, GLsizei height, gl::Framebuffer *source);
     55 
     56     bool recoverFromAssociatedStorage();
     57     bool isAssociatedStorageValid(TextureStorage11* textureStorage) const;
     58     void disassociateStorage();
     59 
     60   protected:
     61     HRESULT map(D3D11_MAP mapType, D3D11_MAPPED_SUBRESOURCE *map);
     62     void unmap();
     63 
     64   private:
     65     DISALLOW_COPY_AND_ASSIGN(Image11);
     66 
     67     bool copyToStorageImpl(TextureStorage11 *storage11, int level, int layerTarget, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
     68 
     69     ID3D11Resource *getStagingTexture();
     70     unsigned int getStagingSubresource();
     71     void createStagingTexture();
     72     void releaseStagingTexture();
     73 
     74     Renderer11 *mRenderer;
     75 
     76     DXGI_FORMAT mDXGIFormat;
     77     ID3D11Resource *mStagingTexture;
     78     unsigned int mStagingSubresource;
     79 
     80     bool mRecoverFromStorage;
     81     TextureStorage11 *mAssociatedStorage;
     82     int mAssociatedStorageLevel;
     83     int mAssociatedStorageLayerTarget;
     84     unsigned int mRecoveredFromStorageCount;
     85 };
     86 
     87 }
     88 
     89 #endif // LIBGLESV2_RENDERER_IMAGE11_H_
     90