Texture storage now has deferred creation of all render targets and shader resources.

TRAC #22358 Signed-off-by: Nicolas Capens Signed-off-by: Shannon Woods Author: Geoff Lang git-svn-id: https://angleproject.googlecode.com/svn/branches/dx11proto@1743 736b8ea6-26fd-11df-bfd4-992fa37f6226
parent 5c25ed2f
...@@ -35,8 +35,8 @@ class TextureStorage ...@@ -35,8 +35,8 @@ class TextureStorage
virtual bool isManaged() const = 0; virtual bool isManaged() const = 0;
virtual int levelCount() = 0; virtual int levelCount() = 0;
virtual RenderTarget *getRenderTarget() const = 0; virtual RenderTarget *getRenderTarget() = 0;
virtual RenderTarget *getRenderTarget(GLenum faceTarget) const = 0; virtual RenderTarget *getRenderTarget(GLenum faceTarget) = 0;
virtual void generateMipmap(int level) = 0; virtual void generateMipmap(int level) = 0;
virtual void generateMipmap(int face, int level) = 0; virtual void generateMipmap(int face, int level) = 0;
......
...@@ -12,6 +12,7 @@ ...@@ -12,6 +12,7 @@
#include <d3d11.h> #include <d3d11.h>
#include "libGLESv2/Texture.h"
#include "libGLESv2/renderer/TextureStorage.h" #include "libGLESv2/renderer/TextureStorage.h"
namespace rx namespace rx
...@@ -36,11 +37,12 @@ class TextureStorage11 : public TextureStorage ...@@ -36,11 +37,12 @@ class TextureStorage11 : public TextureStorage
UINT getBindFlags() const; UINT getBindFlags() const;
virtual ID3D11Texture2D *getBaseTexture() const = 0; virtual ID3D11Texture2D *getBaseTexture() const = 0;
virtual ID3D11ShaderResourceView *getSRV() const = 0; virtual ID3D11ShaderResourceView *getSRV() = 0;
virtual RenderTarget *getRenderTarget() const { return getRenderTarget(0); } virtual RenderTarget *getRenderTarget() { return getRenderTarget(0); }
virtual RenderTarget *getRenderTarget(int level) const { return NULL; } virtual RenderTarget *getRenderTarget(int level) { return NULL; }
virtual RenderTarget *getRenderTarget(GLenum faceTarget) const { return getRenderTarget(faceTarget, 0); } virtual RenderTarget *getRenderTarget(GLenum faceTarget) { return getRenderTarget(faceTarget, 0); }
virtual RenderTarget *getRenderTarget(GLenum faceTarget, int level) const { return NULL; } virtual RenderTarget *getRenderTarget(GLenum faceTarget, int level) { return NULL; }
virtual void generateMipmap(int level) {}; virtual void generateMipmap(int level) {};
virtual void generateMipmap(int face, int level) {}; virtual void generateMipmap(int face, int level) {};
...@@ -49,7 +51,7 @@ class TextureStorage11 : public TextureStorage ...@@ -49,7 +51,7 @@ class TextureStorage11 : public TextureStorage
virtual bool isManaged() const; virtual bool isManaged() const;
virtual int levelCount(); virtual int levelCount();
UINT getSubresourceIndex(int level, int faceTarget); UINT getSubresourceIndex(int level, int faceTarget);
bool updateSubresourceLevel(ID3D11Texture2D *texture, int level, int faceTarget, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height); bool updateSubresourceLevel(ID3D11Texture2D *texture, int level, int faceTarget, GLint xoffset, GLint yoffset, GLsizei width, GLsizei height);
protected: protected:
...@@ -72,20 +74,22 @@ class TextureStorage11_2D : public TextureStorage11 ...@@ -72,20 +74,22 @@ class TextureStorage11_2D : public TextureStorage11
static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage); static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage);
virtual RenderTarget *getRenderTarget(int level) const;
virtual ID3D11Texture2D *getBaseTexture() const; virtual ID3D11Texture2D *getBaseTexture() const;
virtual ID3D11ShaderResourceView *getSRV() const; virtual ID3D11ShaderResourceView *getSRV();
virtual RenderTarget *getRenderTarget(int level);
virtual void generateMipmap(int level); virtual void generateMipmap(int level);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D);
void initializeRenderTarget(DXGI_FORMAT format, int width, int height);
void initializeSRV(DXGI_FORMAT format);
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
DXGI_FORMAT mTextureFormat;
unsigned int mTextureWidth;
unsigned int mTextureHeight;
ID3D11ShaderResourceView *mSRV; ID3D11ShaderResourceView *mSRV;
RenderTarget11 **mRenderTarget; RenderTarget11 *mRenderTarget[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
class TextureStorage11_Cube : public TextureStorage11 class TextureStorage11_Cube : public TextureStorage11
...@@ -96,20 +100,22 @@ class TextureStorage11_Cube : public TextureStorage11 ...@@ -96,20 +100,22 @@ class TextureStorage11_Cube : public TextureStorage11
static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage); static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage);
virtual RenderTarget *getRenderTarget(GLenum faceTarget, int level) const;
virtual ID3D11Texture2D *getBaseTexture() const; virtual ID3D11Texture2D *getBaseTexture() const;
virtual ID3D11ShaderResourceView *getSRV() const; virtual ID3D11ShaderResourceView *getSRV();
virtual RenderTarget *getRenderTarget(GLenum faceTarget, int level);
virtual void generateMipmap(int face, int level); virtual void generateMipmap(int face, int level);
private: private:
DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube); DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube);
void initializeRenderTarget(DXGI_FORMAT format, int size);
void initializeSRV(DXGI_FORMAT format);
ID3D11Texture2D *mTexture; ID3D11Texture2D *mTexture;
DXGI_FORMAT mTextureFormat;
unsigned int mTextureWidth;
unsigned int mTextureHeight;
ID3D11ShaderResourceView *mSRV; ID3D11ShaderResourceView *mSRV;
RenderTarget11 **mRenderTarget[6]; RenderTarget11 *mRenderTarget[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS];
}; };
} }
......
...@@ -178,7 +178,7 @@ IDirect3DSurface9 *TextureStorage9_2D::getSurfaceLevel(int level, bool dirty) ...@@ -178,7 +178,7 @@ IDirect3DSurface9 *TextureStorage9_2D::getSurfaceLevel(int level, bool dirty)
return surface; return surface;
} }
RenderTarget *TextureStorage9_2D::getRenderTarget() const RenderTarget *TextureStorage9_2D::getRenderTarget()
{ {
return mRenderTarget; return mRenderTarget;
} }
...@@ -284,7 +284,7 @@ IDirect3DSurface9 *TextureStorage9_Cube::getCubeMapSurface(GLenum faceTarget, in ...@@ -284,7 +284,7 @@ IDirect3DSurface9 *TextureStorage9_Cube::getCubeMapSurface(GLenum faceTarget, in
return surface; return surface;
} }
RenderTarget *TextureStorage9_Cube::getRenderTarget(GLenum faceTarget) const RenderTarget *TextureStorage9_Cube::getRenderTarget(GLenum faceTarget)
{ {
return mRenderTarget[gl::TextureCubeMap::faceIndex(faceTarget)]; return mRenderTarget[gl::TextureCubeMap::faceIndex(faceTarget)];
} }
......
...@@ -41,8 +41,8 @@ class TextureStorage9 : public TextureStorage ...@@ -41,8 +41,8 @@ class TextureStorage9 : public TextureStorage
DWORD getUsage() const; DWORD getUsage() const;
virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0; virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0;
virtual RenderTarget *getRenderTarget() const { return NULL; } virtual RenderTarget *getRenderTarget() { return NULL; }
virtual RenderTarget *getRenderTarget(GLenum faceTarget) const { return NULL; } virtual RenderTarget *getRenderTarget(GLenum faceTarget) { return NULL; }
virtual void generateMipmap(int level) {}; virtual void generateMipmap(int level) {};
virtual void generateMipmap(int face, int level) {}; virtual void generateMipmap(int face, int level) {};
...@@ -72,7 +72,7 @@ class TextureStorage9_2D : public TextureStorage9 ...@@ -72,7 +72,7 @@ class TextureStorage9_2D : public TextureStorage9
static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage); static TextureStorage9_2D *makeTextureStorage9_2D(TextureStorage *storage);
IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty); IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty);
virtual RenderTarget *getRenderTarget() const; virtual RenderTarget *getRenderTarget();
virtual IDirect3DBaseTexture9 *getBaseTexture() const; virtual IDirect3DBaseTexture9 *getBaseTexture() const;
virtual void generateMipmap(int level); virtual void generateMipmap(int level);
...@@ -94,7 +94,7 @@ class TextureStorage9_Cube : public TextureStorage9 ...@@ -94,7 +94,7 @@ class TextureStorage9_Cube : public TextureStorage9
static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage); static TextureStorage9_Cube *makeTextureStorage9_Cube(TextureStorage *storage);
IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty); IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty);
virtual RenderTarget *getRenderTarget(GLenum faceTarget) const; virtual RenderTarget *getRenderTarget(GLenum faceTarget);
virtual IDirect3DBaseTexture9 *getBaseTexture() const; virtual IDirect3DBaseTexture9 *getBaseTexture() const;
virtual void generateMipmap(int face, int level); virtual void generateMipmap(int face, int level);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment