diff options
Diffstat (limited to 'src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h')
-rw-r--r-- | src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h | 85 |
1 files changed, 60 insertions, 25 deletions
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h index 6be7bac8e2..9d63b2699d 100644 --- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h +++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h @@ -11,8 +11,16 @@ #define LIBGLESV2_RENDERER_TEXTURESTORAGE11_H_ #include "libGLESv2/Texture.h" +#include "libGLESv2/Error.h" #include "libGLESv2/renderer/d3d/TextureStorage.h" +#include <map> + +namespace gl +{ +struct ImageIndex; +} + namespace rx { class RenderTarget; @@ -20,6 +28,7 @@ class RenderTarget11; class Renderer; class Renderer11; class SwapChain11; +class Image11; class TextureStorage11 : public TextureStorage { @@ -34,12 +43,9 @@ class TextureStorage11 : public TextureStorage virtual ID3D11Resource *getResource() const = 0; virtual ID3D11ShaderResourceView *getSRV(const gl::SamplerState &samplerState); - virtual RenderTarget *getRenderTarget(int level) { return NULL; } - virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level) { return NULL; } - virtual RenderTarget *getRenderTargetLayer(int mipLevel, int layer) { return NULL; } + virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index) = 0; - virtual void generateMipmap(int level) {}; - virtual void generateMipmap(int face, int level) {}; + virtual void generateMipmaps() = 0; virtual int getTopLevel() const; virtual bool isRenderTarget() const; @@ -47,7 +53,7 @@ class TextureStorage11 : public TextureStorage virtual int getLevelCount() const; UINT getSubresourceIndex(int mipLevel, int layerTarget) const; - void generateSwizzles(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha); + gl::Error generateSwizzles(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha); void invalidateSwizzleCacheLevel(int mipLevel); void invalidateSwizzleCache(); @@ -55,6 +61,15 @@ class TextureStorage11 : public TextureStorage int layerTarget, GLint xoffset, GLint yoffset, GLint zoffset, GLsizei width, GLsizei height, GLsizei depth); + bool copySubresourceLevel(ID3D11Resource* dstTexture, unsigned int dstSubresource, int level, + int layerTarget, GLint xoffset, GLint yoffset, GLint zoffset, + GLsizei width, GLsizei height, GLsizei depth); + + virtual void associateImage(Image11* image, int level, int layerTarget) = 0; + virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage) = 0; + virtual bool isAssociatedImageValid(int level, int layerTarget, Image11* expectedImage) = 0; + virtual void releaseAssociatedImage(int level, int layerTarget, Image11* incomingImage) = 0; + protected: TextureStorage11(Renderer *renderer, UINT bindFlags); void generateMipmapLayer(RenderTarget11 *source, RenderTarget11 *dest); @@ -70,8 +85,6 @@ class TextureStorage11 : public TextureStorage void verifySwizzleExists(GLenum swizzleRed, GLenum swizzleGreen, GLenum swizzleBlue, GLenum swizzleAlpha); - virtual unsigned int getTextureLevelDepth(int mipLevel) const = 0; - Renderer11 *mRenderer; int mTopLevel; unsigned int mMipLevels; @@ -148,16 +161,19 @@ class TextureStorage11_2D : public TextureStorage11 static TextureStorage11_2D *makeTextureStorage11_2D(TextureStorage *storage); virtual ID3D11Resource *getResource() const; - virtual RenderTarget *getRenderTarget(int level); + virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); + + virtual void generateMipmaps(); - virtual void generateMipmap(int level); + virtual void associateImage(Image11* image, int level, int layerTarget); + virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage); + virtual bool isAssociatedImageValid(int level, int layerTarget, Image11* expectedImage); + virtual void releaseAssociatedImage(int level, int layerTarget, Image11* incomingImage); protected: virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); - virtual unsigned int getTextureLevelDepth(int mipLevel) const; - private: DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2D); @@ -168,6 +184,8 @@ class TextureStorage11_2D : public TextureStorage11 ID3D11Texture2D *mSwizzleTexture; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; + + Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; }; class TextureStorage11_Cube : public TextureStorage11 @@ -179,16 +197,19 @@ class TextureStorage11_Cube : public TextureStorage11 static TextureStorage11_Cube *makeTextureStorage11_Cube(TextureStorage *storage); virtual ID3D11Resource *getResource() const; - virtual RenderTarget *getRenderTargetFace(GLenum faceTarget, int level); + virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); - virtual void generateMipmap(int faceIndex, int level); + virtual void generateMipmaps(); + + virtual void associateImage(Image11* image, int level, int layerTarget); + virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage); + virtual bool isAssociatedImageValid(int level, int layerTarget, Image11* expectedImage); + virtual void releaseAssociatedImage(int level, int layerTarget, Image11* incomingImage); protected: virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); - virtual unsigned int getTextureLevelDepth(int mipLevel) const; - private: DISALLOW_COPY_AND_ASSIGN(TextureStorage11_Cube); @@ -199,6 +220,8 @@ class TextureStorage11_Cube : public TextureStorage11 ID3D11Texture2D *mSwizzleTexture; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; + + Image11 *mAssociatedImages[6][gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; }; class TextureStorage11_3D : public TextureStorage11 @@ -211,17 +234,21 @@ class TextureStorage11_3D : public TextureStorage11 static TextureStorage11_3D *makeTextureStorage11_3D(TextureStorage *storage); virtual ID3D11Resource *getResource() const; - virtual RenderTarget *getRenderTarget(int mipLevel); - virtual RenderTarget *getRenderTargetLayer(int mipLevel, int layer); - virtual void generateMipmap(int level); + // Handles both layer and non-layer RTs + virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); + + virtual void generateMipmaps(); + + virtual void associateImage(Image11* image, int level, int layerTarget); + virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage); + virtual bool isAssociatedImageValid(int level, int layerTarget, Image11* expectedImage); + virtual void releaseAssociatedImage(int level, int layerTarget, Image11* incomingImage); protected: virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); - virtual unsigned int getTextureLevelDepth(int mipLevel) const; - private: DISALLOW_COPY_AND_ASSIGN(TextureStorage11_3D); @@ -236,6 +263,8 @@ class TextureStorage11_3D : public TextureStorage11 ID3D11Texture3D *mTexture; ID3D11Texture3D *mSwizzleTexture; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; + + Image11 *mAssociatedImages[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; }; class TextureStorage11_2DArray : public TextureStorage11 @@ -248,16 +277,19 @@ class TextureStorage11_2DArray : public TextureStorage11 static TextureStorage11_2DArray *makeTextureStorage11_2DArray(TextureStorage *storage); virtual ID3D11Resource *getResource() const; - virtual RenderTarget *getRenderTargetLayer(int mipLevel, int layer); + virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); + + virtual void generateMipmaps(); - virtual void generateMipmap(int level); + virtual void associateImage(Image11* image, int level, int layerTarget); + virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage); + virtual bool isAssociatedImageValid(int level, int layerTarget, Image11* expectedImage); + virtual void releaseAssociatedImage(int level, int layerTarget, Image11* incomingImage); protected: virtual ID3D11Resource *getSwizzleTexture(); virtual ID3D11RenderTargetView *getSwizzleRenderTarget(int mipLevel); - virtual unsigned int getTextureLevelDepth(int mipLevel) const; - private: DISALLOW_COPY_AND_ASSIGN(TextureStorage11_2DArray); @@ -271,6 +303,9 @@ class TextureStorage11_2DArray : public TextureStorage11 ID3D11Texture2D *mSwizzleTexture; ID3D11RenderTargetView *mSwizzleRenderTargets[gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS]; + + typedef std::map<LevelLayerKey, Image11*> ImageMap; + ImageMap mAssociatedImages; }; } |