Upstream version 9.38.198.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 IDirect3DBaseTexture9 *getBaseTexture() const = 0;
37     virtual RenderTarget *getRenderTarget(int level) { return NULL; }
38     virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level) { return NULL; }
39     virtual RenderTarget *getRenderTargetLayer(int mipLevel, int layer) { return NULL; }
40     virtual void generateMipmap(int level) {};
41     virtual void generateMipmap(int face, int level) {};
42
43     virtual int getTopLevel() const;
44     virtual bool isRenderTarget() const;
45     virtual bool isManaged() const;
46     virtual int getLevelCount() const;
47
48   protected:
49     int mTopLevel;
50     Renderer9 *mRenderer;
51
52     TextureStorage9(Renderer *renderer, DWORD usage);
53
54   private:
55     DISALLOW_COPY_AND_ASSIGN(TextureStorage9);
56
57     const DWORD mD3DUsage;
58     const D3DPOOL mD3DPool;
59 };
60
61 class TextureStorage9_2D : public TextureStorage9
62 {
63   public:
64     TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain);
65     TextureStorage9_2D(Renderer *renderer, GLenum internalformat, bool renderTarget, GLsizei width, GLsizei height, int levels);
66     virtual ~TextureStorage9_2D();
67
68     static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
69
70     IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty);
71     virtual RenderTarget *getRenderTarget(int level);
72     virtual IDirect3DBaseTexture9 *getBaseTexture() const;
73     virtual void generateMipmap(int level);
74
75   private:
76     DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D);
77
78     void initializeRenderTarget();
79
80     IDirect3DTexture9 *mTexture;
81     RenderTarget9 *mRenderTarget;
82 };
83
84 class TextureStorage9_Cube : public TextureStorage9
85 {
86   public:
87     TextureStorage9_Cube(Renderer *renderer, GLenum internalformat, bool renderTarget, int size, int levels);
88     virtual ~TextureStorage9_Cube();
89
90     static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
91
92     IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty);
93     virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level);
94     virtual IDirect3DBaseTexture9 *getBaseTexture() const;
95     virtual void generateMipmap(int faceIndex, int level);
96
97   private:
98     DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube);
99
100     void initializeRenderTarget();
101
102     IDirect3DCubeTexture9 *mTexture;
103     RenderTarget9 *mRenderTarget[6];
104 };
105
106 }
107
108 #endif // LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
109