Upstream version 10.39.225.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / d3d11 / Image11.h
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_