134da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com//
234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be
434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com// found in the LICENSE file.
534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com//
634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com// TextureStorage9.h: Defines the abstract rx::TextureStorage9 class and its concrete derived
887705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com// classes TextureStorage9_2D and TextureStorage9_Cube, which act as the interface to the
934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com// D3D9 texture.
1034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
1134da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com#ifndef LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
1234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com#define LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
1334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
1434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com#include "libGLESv2/renderer/TextureStorage.h"
1534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com#include "common/debug.h"
1634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
1734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.comnamespace rx
1834da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com{
1934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.comclass Renderer9;
2034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.comclass SwapChain9;
2134da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.comclass RenderTarget;
2234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.comclass RenderTarget9;
2334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.comclass Blit;
2434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
2587705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.comclass TextureStorage9 : public TextureStorage
2634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com{
2734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com  public:
2834da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    TextureStorage9(Renderer *renderer, DWORD usage);
2934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual ~TextureStorage9();
3034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
3187705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    static TextureStorage9 *makeTextureStorage9(TextureStorage *storage);
3234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
3334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    static DWORD GetTextureUsage(D3DFORMAT d3dfmt, GLenum glusage, bool forceRenderable);
3434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    static bool IsTextureFormatRenderable(D3DFORMAT format);
3534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
3634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    D3DPOOL getPool() const;
3734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    DWORD getUsage() const;
3834da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
3934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0;
40858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com    virtual RenderTarget *getRenderTarget() { return NULL; }
41858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com    virtual RenderTarget *getRenderTarget(GLenum faceTarget) { return NULL; }
4234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual void generateMipmap(int level) {};
4334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual void generateMipmap(int face, int level) {};
4434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
4534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual int getLodOffset() const;
4634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual bool isRenderTarget() const;
4734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual bool isManaged() const;
4834da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual int levelCount();
4934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
5034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com  protected:
5134da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    int mLodOffset;
5234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    Renderer9 *mRenderer;
5334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
5434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com  private:
5534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    DISALLOW_COPY_AND_ASSIGN(TextureStorage9);
5634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
5734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    const DWORD mD3DUsage;
5834da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    const D3DPOOL mD3DPool;
5934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com};
6034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
6187705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.comclass TextureStorage9_2D : public TextureStorage9
6234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com{
6334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com  public:
6487705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    TextureStorage9_2D(Renderer *renderer, SwapChain9 *swapchain);
6587705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    TextureStorage9_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height);
6687705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    virtual ~TextureStorage9_2D();
6734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
6887705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
6934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
7034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty);
71858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com    virtual RenderTarget *getRenderTarget();
7234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual IDirect3DBaseTexture9 *getBaseTexture() const;
7334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual void generateMipmap(int level);
7434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
7534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com  private:
7687705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D);
7734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
7834da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    void initializeRenderTarget();
7934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
8034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    IDirect3DTexture9 *mTexture;
8134da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    RenderTarget9 *mRenderTarget;
8234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com};
8334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
8487705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.comclass TextureStorage9_Cube : public TextureStorage9
8534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com{
8634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com  public:
8787705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    TextureStorage9_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size);
8887705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    virtual ~TextureStorage9_Cube();
8934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
9087705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
9134da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
9234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty);
93858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com    virtual RenderTarget *getRenderTarget(GLenum faceTarget);
9434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual IDirect3DBaseTexture9 *getBaseTexture() const;
9534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    virtual void generateMipmap(int face, int level);
9634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
9734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com  private:
9887705f8292857d1446f0967c43b7fac66a70d9c2daniel@transgaming.com    DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube);
9934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
10034da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    void initializeRenderTarget();
10134da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
10234da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    IDirect3DCubeTexture9 *mTexture;
10334da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com    RenderTarget9 *mRenderTarget[6];
10434da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com};
10534da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
10634da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com}
10734da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
10834da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com#endif // LIBGLESV2_RENDERER_TEXTURESTORAGE9_H_
10934da397e13a101d6157619bfbd6c2f33efbd1a31daniel@transgaming.com
110