14834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com// 24834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 34834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com// Use of this source code is governed by a BSD-style license that can be 44834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com// found in the LICENSE file. 54834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com// 64834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 74834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com// TextureStorage11.h: Defines the abstract rx::TextureStorage11 class and its concrete derived 84834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com// classes TextureStorage11_2D and TextureStorage11_Cube, which act as the interface to the D3D11 texture. 94834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 104834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com#ifndef LIBGLESV2_RENDERER_TEXTURESTORAGE11_H_ 114834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com#define LIBGLESV2_RENDERER_TEXTURESTORAGE11_H_ 124834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 13858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com#include "libGLESv2/Texture.h" 144834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com#include "libGLESv2/renderer/TextureStorage.h" 154834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 164834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comnamespace rx 174834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com{ 184834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comclass RenderTarget; 194834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comclass RenderTarget11; 204834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comclass Renderer; 214834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comclass Renderer11; 224834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comclass SwapChain11; 234834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 244834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comclass TextureStorage11 : public TextureStorage 254834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com{ 264834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com public: 274834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com TextureStorage11(Renderer *renderer, UINT bindFlags); 284834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual ~TextureStorage11(); 294834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 304834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com static TextureStorage11 *makeTextureStorage11(TextureStorage *storage); 314834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 324834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com static DWORD GetTextureBindFlags(DXGI_FORMAT d3dfmt, GLenum glusage, bool forceRenderable); 334834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com static bool IsTextureFormatRenderable(DXGI_FORMAT format); 344834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 354834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com UINT getBindFlags() const; 364834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 3753b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com virtual ID3D11Texture2D *getBaseTexture() const; 38858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual ID3D11ShaderResourceView *getSRV() = 0; 39858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual RenderTarget *getRenderTarget() { return getRenderTarget(0); } 40858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual RenderTarget *getRenderTarget(int level) { return NULL; } 41858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual RenderTarget *getRenderTarget(GLenum faceTarget) { return getRenderTarget(faceTarget, 0); } 42858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual RenderTarget *getRenderTarget(GLenum faceTarget, int level) { return NULL; } 43858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com 444834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual void generateMipmap(int level) {}; 454834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual void generateMipmap(int face, int level) {}; 464834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 474834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual int getLodOffset() const; 484834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual bool isRenderTarget() const; 494834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual bool isManaged() const; 504834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual int levelCount(); 519a2f54dbdda14e3a72d1de41ddfdd6e817a29325daniel@transgaming.com UINT getSubresourceIndex(int level, int faceTarget); 52858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com 5381ae58ac5438ed6059529115ea694f5ae1b649cashannon.woods@transgaming.com bool updateSubresourceLevel(ID3D11Texture2D *texture, unsigned int sourceSubresource, int level, 5481ae58ac5438ed6059529115ea694f5ae1b649cashannon.woods@transgaming.com int faceTarget, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); 554834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 564834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com protected: 5785bdfce9f7a1774c7e1a984a6f26c7f15b1fac78shannon.woods@transgaming.com void generateMipmapLayer(RenderTarget11 *source, RenderTarget11 *dest); 5885bdfce9f7a1774c7e1a984a6f26c7f15b1fac78shannon.woods@transgaming.com 594834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com Renderer11 *mRenderer; 604834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com int mLodOffset; 61b115455104f6d20ad1bad11ceddf68e7ce6c8052daniel@transgaming.com unsigned int mMipLevels; 624834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 6353b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com ID3D11Texture2D *mTexture; 6453b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com DXGI_FORMAT mTextureFormat; 6553b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com DXGI_FORMAT mShaderResourceFormat; 6653b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com DXGI_FORMAT mRenderTargetFormat; 6753b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com DXGI_FORMAT mDepthStencilFormat; 6853b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com unsigned int mTextureWidth; 6953b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com unsigned int mTextureHeight; 7053b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com 7153b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com ID3D11ShaderResourceView *mSRV; 7253b0ecb848cd17a0e72a0b2813c196386e8cf3b1shannon.woods@transgaming.com 734834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com private: 744834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(TextureStorage11); 754834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 764834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com const UINT mBindFlags; 774834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com}; 784834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 794834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.comclass TextureStorage11_2D : public TextureStorage11 804834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com{ 814834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com public: 824834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapchain); 834834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com TextureStorage11_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height); 844834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual ~TextureStorage11_2D(); 854834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 864834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage); 874834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 88858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual ID3D11ShaderResourceView *getSRV(); 89858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual RenderTarget *getRenderTarget(int level); 90858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com 914834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com virtual void generateMipmap(int level); 924834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 934834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com private: 944834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D); 954834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 96858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; 974834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com}; 984834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 99b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.comclass TextureStorage11_Cube : public TextureStorage11 100b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com{ 101b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com public: 102b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com TextureStorage11_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size); 103b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com virtual ~TextureStorage11_Cube(); 104b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com 105b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage); 106b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com 107858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual ID3D11ShaderResourceView *getSRV(); 108858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com virtual RenderTarget *getRenderTarget(GLenum faceTarget, int level); 109858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com 110b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com virtual void generateMipmap(int face, int level); 111b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com 112b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com private: 113b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube); 114b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com 115858d32fa8bc0298a7d78954f5340d5019d718d11shannon.woods@transgaming.com RenderTarget11 *mRenderTarget[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; 116b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com}; 117b2151e5597bd5ed69cb8e0a55c8ad727efee1e04daniel@transgaming.com 1184834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com} 1194834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com 1204834ee2ccfe4b0a89083daeb42607dc6e21da2e6daniel@transgaming.com#endif // LIBGLESV2_RENDERER_TEXTURESTORAGE11_H_ 121