Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / third_party / angle / src / libGLESv2 / renderer / d3d / d3d9 / TextureStorage9.h
1 //
2 // Copyright (c) 2012-2013 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 // TextureStorage9.h: Defines the abstract rx::TextureStorage9 class and its concrete derived
8 // classes TextureStorage9_2D and TextureStorage9_Cube, which act as the interface to the
9 // D3D9 texture.
10
11 #ifndef LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
12 #define LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
13
14 #include "libGLESv2/renderer/d3d/TextureStorage.h"
15 #include "common/debug.h"
16
17 namespace rx
18 {
19 class Renderer9;
20 class SwapChain9;
21 class RenderTarget;
22 class RenderTarget9;
23
24 class TextureStorage9 : public TextureStorage
25 {
26   public:
27     virtual ~TextureStorage9();
28
29     static TextureStorage9 *makeTextureStorage9(TextureStorage *storage);
30
31     static DWORD GetTextureUsage(GLenum internalformat, bool renderTarget);
32
33     D3DPOOL getPool() const;
34     DWORD getUsage() const;
35
36     virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture) = 0;
37     virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT) = 0;
38
39     virtual int getTopLevel() const;
40     virtual bool isRenderTarget() const;
41     virtual bool isManaged() const;
42     virtual int getLevelCount() const;
43
44     virtual gl::Error setData(const gl::ImageIndex &index, Image *image, const gl::Box *destBox, GLenum type,
45                               const gl::PixelUnpackState &unpack, const uint8_t *pixelData);
46
47   protected:
48     int mTopLevel;
49     size_t mMipLevels;
50     size_t mTextureWidth;
51     size_t mTextureHeight;
52     D3DFORMAT mTextureFormat;
53
54     Renderer9 *mRenderer;
55
56     TextureStorage9(Renderer *renderer, DWORD usage);
57
58   private:
59     DISALLOW_COPY_AND_ASSIGN(TextureStorage9);
60
61     const DWORD mD3DUsage;
62     const D3DPOOL mD3DPool;
63 };
64
65 class TextureStorage9_2D : public TextureStorage9
66 {
67   public:
68     TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain);
69     TextureStorage9_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels);
70     virtual ~TextureStorage9_2D();
71
72     static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
73
74     gl::Error getSurfaceLevel(int level, bool dirty, IDirect3DSurface9 **outSurface);
75     virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT);
76     virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture);
77     virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex);
78     virtual gl::Error copyToStorage(TextureStorage *destStorage);
79
80   private:
81     DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D);
82
83     IDirect3DTexture9 *mTexture;
84     RenderTarget9 *mRenderTarget;
85 };
86
87 class TextureStorage9_Cube : public TextureStorage9
88 {
89   public:
90     TextureStorage9_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels);
91     virtual ~TextureStorage9_Cube();
92
93     static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
94
95     gl::Error getCubeMapSurface(GLenum faceTarget, int level, bool dirty, IDirect3DSurface9 **outSurface);
96     virtual gl::Error getRenderTarget(const gl::ImageIndex &index, RenderTarget **outRT);
97     virtual gl::Error getBaseTexture(IDirect3DBaseTexture9 **outTexture);
98     virtual gl::Error generateMipmap(const gl::ImageIndex &sourceIndex, const gl::ImageIndex &destIndex);
99     virtual gl::Error copyToStorage(TextureStorage *destStorage);
100
101   private:
102     DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube);
103
104     static const size_t CUBE_FACE_COUNT = 6;
105
106     IDirect3DCubeTexture9 *mTexture;
107     RenderTarget9 *mRenderTarget[CUBE_FACE_COUNT];
108 };
109
110 }
111
112 #endif // LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
113