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