diff options
author | Jamie Madill <jmadill@chromium.org> | 2014-09-18 15:08:47 -0400 |
---|---|---|
committer | Jamie Madill <jmadill@chromium.org> | 2014-09-19 15:34:16 +0000 |
commit | 5e48c034daedc48a998fa5eca094d0a0ed247725 (patch) | |
tree | 8a6c13776381f249796a5f3e0a9642696fc11acf | |
parent | c483326b7164e1c96a714db86167647c41e8f65b (diff) | |
download | angle-5e48c034daedc48a998fa5eca094d0a0ed247725.tar.gz |
Move generateMipmap to storage interface base class.
Using a little bit more of code repetition allows us to move the
implementation of the mipmaps to a simple virtual interface in
TextureStorage.
BUG=angle:741
Change-Id: I7661d0cc3bdb02b646da0802cba285650d7832b2
Reviewed-on: https://chromium-review.googlesource.com/218314
Reviewed-by: Brandon Jones <bajones@chromium.org>
Tested-by: Jamie Madill <jmadill@chromium.org>
-rw-r--r-- | src/libGLESv2/renderer/d3d/TextureD3D.cpp | 15 | ||||
-rw-r--r-- | src/libGLESv2/renderer/d3d/TextureStorage.cpp | 20 | ||||
-rw-r--r-- | src/libGLESv2/renderer/d3d/TextureStorage.h | 11 | ||||
-rw-r--r-- | src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp | 81 | ||||
-rw-r--r-- | src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h | 11 | ||||
-rw-r--r-- | src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.cpp | 45 | ||||
-rw-r--r-- | src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.h | 7 |
7 files changed, 97 insertions, 93 deletions
diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.cpp b/src/libGLESv2/renderer/d3d/TextureD3D.cpp index f0a1bf56..f18eecaa 100644 --- a/src/libGLESv2/renderer/d3d/TextureD3D.cpp +++ b/src/libGLESv2/renderer/d3d/TextureD3D.cpp @@ -501,10 +501,9 @@ void TextureD3D_2D::generateMipmaps() if (mTexStorage && mTexStorage->isRenderTarget()) { + mTexStorage->getStorageInstance()->generateMipmaps(); for (int level = 1; level < levelCount; level++) { - mTexStorage->generateMipmap(level); - mImageArray[level]->markClean(); } } @@ -1000,12 +999,12 @@ void TextureD3D_Cube::generateMipmaps() if (mTexStorage && mTexStorage->isRenderTarget()) { + mTexStorage->getStorageInstance()->generateMipmaps(); + for (int faceIndex = 0; faceIndex < 6; faceIndex++) { for (int level = 1; level < levelCount; level++) { - mTexStorage->generateMipmap(faceIndex, level); - mImageArray[faceIndex][level]->markClean(); } } @@ -1498,10 +1497,10 @@ void TextureD3D_3D::generateMipmaps() if (mTexStorage && mTexStorage->isRenderTarget()) { + mTexStorage->getStorageInstance()->generateMipmaps(); + for (int level = 1; level < levelCount; level++) { - mTexStorage->generateMipmap(level); - mImageArray[level]->markClean(); } } @@ -1982,10 +1981,10 @@ void TextureD3D_2DArray::generateMipmaps() if (mTexStorage && mTexStorage->isRenderTarget()) { + mTexStorage->getStorageInstance()->generateMipmaps(); + for (int level = 1; level < levelCount; level++) { - mTexStorage->generateMipmap(level); - for (int layer = 0; layer < mLayerCounts[level]; layer++) { mImageArray[level][layer]->markClean(); diff --git a/src/libGLESv2/renderer/d3d/TextureStorage.cpp b/src/libGLESv2/renderer/d3d/TextureStorage.cpp index fa3aafe2..8005efb1 100644 --- a/src/libGLESv2/renderer/d3d/TextureStorage.cpp +++ b/src/libGLESv2/renderer/d3d/TextureStorage.cpp @@ -80,11 +80,6 @@ TextureStorageInterface2D::TextureStorageInterface2D(TextureStorage *storageInst TextureStorageInterface2D::~TextureStorageInterface2D() {} -void TextureStorageInterface2D::generateMipmap(int level) -{ - mInstance->generateMipmap(level); -} - TextureStorageInterfaceCube::TextureStorageInterfaceCube(TextureStorage *storageInstance) : TextureStorageInterface(storageInstance, 6) {} @@ -92,11 +87,6 @@ TextureStorageInterfaceCube::TextureStorageInterfaceCube(TextureStorage *storage TextureStorageInterfaceCube::~TextureStorageInterfaceCube() {} -void TextureStorageInterfaceCube::generateMipmap(int faceIndex, int level) -{ - mInstance->generateMipmap(faceIndex, level); -} - TextureStorageInterface3D::TextureStorageInterface3D(TextureStorage *storageInstance, unsigned int depth) : TextureStorageInterface(storageInstance, depth) {} @@ -104,11 +94,6 @@ TextureStorageInterface3D::TextureStorageInterface3D(TextureStorage *storageInst TextureStorageInterface3D::~TextureStorageInterface3D() {} -void TextureStorageInterface3D::generateMipmap(int level) -{ - mInstance->generateMipmap(level); -} - TextureStorageInterface2DArray::TextureStorageInterface2DArray(TextureStorage *storageInstance, unsigned int depth) : TextureStorageInterface(storageInstance, depth) {} @@ -116,9 +101,4 @@ TextureStorageInterface2DArray::TextureStorageInterface2DArray(TextureStorage *s TextureStorageInterface2DArray::~TextureStorageInterface2DArray() {} -void TextureStorageInterface2DArray::generateMipmap(int level) -{ - mInstance->generateMipmap(level); -} - } diff --git a/src/libGLESv2/renderer/d3d/TextureStorage.h b/src/libGLESv2/renderer/d3d/TextureStorage.h index b20d7f0d..a57a7348 100644 --- a/src/libGLESv2/renderer/d3d/TextureStorage.h +++ b/src/libGLESv2/renderer/d3d/TextureStorage.h @@ -38,8 +38,7 @@ class TextureStorage virtual int getLevelCount() const = 0; virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index) = 0; - virtual void generateMipmap(int level) = 0; - virtual void generateMipmap(int face, int level) = 0; + virtual void generateMipmaps() = 0; private: DISALLOW_COPY_AND_ASSIGN(TextureStorage); @@ -85,8 +84,6 @@ class TextureStorageInterface2D : public TextureStorageInterface TextureStorageInterface2D(TextureStorage *storageInstance); virtual ~TextureStorageInterface2D(); - void generateMipmap(int level); - private: DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface2D); }; @@ -97,8 +94,6 @@ class TextureStorageInterfaceCube : public TextureStorageInterface TextureStorageInterfaceCube(TextureStorage *storageInstance); virtual ~TextureStorageInterfaceCube(); - void generateMipmap(int faceIndex, int level); - private: DISALLOW_COPY_AND_ASSIGN(TextureStorageInterfaceCube); }; @@ -109,8 +104,6 @@ class TextureStorageInterface3D : public TextureStorageInterface TextureStorageInterface3D(TextureStorage *storageInstance, unsigned int depth); virtual ~TextureStorageInterface3D(); - void generateMipmap(int level); - private: DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface3D); }; @@ -121,8 +114,6 @@ class TextureStorageInterface2DArray : public TextureStorageInterface TextureStorageInterface2DArray(TextureStorage *storageInstance, unsigned int depth); virtual ~TextureStorageInterface2DArray(); - void generateMipmap(int level); - private: DISALLOW_COPY_AND_ASSIGN(TextureStorageInterface2DArray); }; diff --git a/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp b/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp index 9b630d7e..55366019 100644 --- a/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp +++ b/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp @@ -706,17 +706,22 @@ ID3D11ShaderResourceView *TextureStorage11_2D::createSRV(int baseLevel, int mipL return SRV; } -void TextureStorage11_2D::generateMipmap(int level) +void TextureStorage11_2D::generateMipmaps() { - invalidateSwizzleCacheLevel(level); + // Base level must already be defined - gl::ImageIndex srcIndex = gl::ImageIndex::Make2D(level - 1); - gl::ImageIndex destIndex = gl::ImageIndex::Make2D(level); + for (int level = 1; level < getLevelCount(); level++) + { + invalidateSwizzleCacheLevel(level); + + gl::ImageIndex srcIndex = gl::ImageIndex::Make2D(level - 1); + gl::ImageIndex destIndex = gl::ImageIndex::Make2D(level); - RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(srcIndex)); - RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); + RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(srcIndex)); + RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); - generateMipmapLayer(source, dest); + generateMipmapLayer(source, dest); + } } ID3D11Resource *TextureStorage11_2D::getSwizzleTexture() @@ -1109,17 +1114,25 @@ ID3D11ShaderResourceView *TextureStorage11_Cube::createSRV(int baseLevel, int mi return SRV; } -void TextureStorage11_Cube::generateMipmap(int faceIndex, int level) +void TextureStorage11_Cube::generateMipmaps() { - invalidateSwizzleCacheLevel(level); + // Base level must already be defined - gl::ImageIndex srcIndex = gl::ImageIndex::MakeCube(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level - 1); - gl::ImageIndex destIndex = gl::ImageIndex::MakeCube(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level); + for (int faceIndex = 0; faceIndex < 6; faceIndex++) + { + for (int level = 1; level < getLevelCount(); level++) + { + invalidateSwizzleCacheLevel(level); + + gl::ImageIndex srcIndex = gl::ImageIndex::MakeCube(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level - 1); + gl::ImageIndex destIndex = gl::ImageIndex::MakeCube(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level); - RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(srcIndex)); - RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); + RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(srcIndex)); + RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); - generateMipmapLayer(source, dest); + generateMipmapLayer(source, dest); + } + } } ID3D11Resource *TextureStorage11_Cube::getSwizzleTexture() @@ -1482,17 +1495,22 @@ RenderTarget *TextureStorage11_3D::getRenderTarget(const gl::ImageIndex &index) return NULL; } -void TextureStorage11_3D::generateMipmap(int level) +void TextureStorage11_3D::generateMipmaps() { - invalidateSwizzleCacheLevel(level); + // Base level must already be defined + + for (int level = 1; level < getLevelCount(); level++) + { + invalidateSwizzleCacheLevel(level); - gl::ImageIndex srcIndex = gl::ImageIndex::Make3D(level - 1); - gl::ImageIndex destIndex = gl::ImageIndex::Make3D(level); + gl::ImageIndex srcIndex = gl::ImageIndex::Make3D(level - 1); + gl::ImageIndex destIndex = gl::ImageIndex::Make3D(level); - RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(srcIndex)); - RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); + RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(srcIndex)); + RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); - generateMipmapLayer(source, dest); + generateMipmapLayer(source, dest); + } } ID3D11Resource *TextureStorage11_3D::getSwizzleTexture() @@ -1832,18 +1850,23 @@ RenderTarget *TextureStorage11_2DArray::getRenderTarget(const gl::ImageIndex &in } } -void TextureStorage11_2DArray::generateMipmap(int level) +void TextureStorage11_2DArray::generateMipmaps() { - invalidateSwizzleCacheLevel(level); - for (unsigned int layer = 0; layer < mTextureDepth; layer++) + // Base level must already be defined + + for (int level = 0; level < getLevelCount(); level++) { - gl::ImageIndex sourceIndex = gl::ImageIndex::Make2DArray(level - 1, layer); - gl::ImageIndex destIndex = gl::ImageIndex::Make2DArray(level, layer); + invalidateSwizzleCacheLevel(level); + for (unsigned int layer = 0; layer < mTextureDepth; layer++) + { + gl::ImageIndex sourceIndex = gl::ImageIndex::Make2DArray(level - 1, layer); + gl::ImageIndex destIndex = gl::ImageIndex::Make2DArray(level, layer); - RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(sourceIndex)); - RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); + RenderTarget11 *source = RenderTarget11::makeRenderTarget11(getRenderTarget(sourceIndex)); + RenderTarget11 *dest = RenderTarget11::makeRenderTarget11(getRenderTarget(destIndex)); - generateMipmapLayer(source, dest); + generateMipmapLayer(source, dest); + } } } diff --git a/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h b/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h index 133790b2..913ffb2d 100644 --- a/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h +++ b/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.h @@ -44,8 +44,7 @@ class TextureStorage11 : public TextureStorage virtual ID3D11ShaderResourceView *getSRV(const gl::SamplerState &samplerState); 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; @@ -165,7 +164,7 @@ class TextureStorage11_2D : public TextureStorage11 virtual ID3D11Resource *getResource() const; virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); - virtual void generateMipmap(int level); + virtual void generateMipmaps(); virtual void associateImage(Image11* image, int level, int layerTarget); virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage); @@ -203,7 +202,7 @@ class TextureStorage11_Cube : public TextureStorage11 virtual ID3D11Resource *getResource() const; 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); @@ -244,7 +243,7 @@ class TextureStorage11_3D : public TextureStorage11 // Handles both layer and non-layer RTs virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); - virtual void generateMipmap(int level); + virtual void generateMipmaps(); virtual void associateImage(Image11* image, int level, int layerTarget); virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage); @@ -287,7 +286,7 @@ class TextureStorage11_2DArray : public TextureStorage11 virtual ID3D11Resource *getResource() const; virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); - virtual void generateMipmap(int level); + virtual void generateMipmaps(); virtual void associateImage(Image11* image, int level, int layerTarget); virtual void disassociateImage(int level, int layerTarget, Image11* expectedImage); diff --git a/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.cpp b/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.cpp index b328369e..f18544c5 100644 --- a/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.cpp +++ b/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.cpp @@ -162,18 +162,23 @@ RenderTarget *TextureStorage9_2D::getRenderTarget(const gl::ImageIndex &/*index* return mRenderTarget; } -void TextureStorage9_2D::generateMipmap(int level) +void TextureStorage9_2D::generateMipmaps() { - IDirect3DSurface9 *upper = getSurfaceLevel(level - 1, false); - IDirect3DSurface9 *lower = getSurfaceLevel(level, true); + // Base level must already be defined - if (upper != NULL && lower != NULL) + for (int level = 1; level < getLevelCount(); level++) { - mRenderer->boxFilter(upper, lower); - } + IDirect3DSurface9 *upper = getSurfaceLevel(level - 1, false); + IDirect3DSurface9 *lower = getSurfaceLevel(level, true); - SafeRelease(upper); - SafeRelease(lower); + if (upper != NULL && lower != NULL) + { + mRenderer->boxFilter(upper, lower); + } + + SafeRelease(upper); + SafeRelease(lower); + } } IDirect3DBaseTexture9 *TextureStorage9_2D::getBaseTexture() const @@ -268,18 +273,26 @@ RenderTarget *TextureStorage9_Cube::getRenderTarget(const gl::ImageIndex &index) return mRenderTarget[index.layerIndex]; } -void TextureStorage9_Cube::generateMipmap(int faceIndex, int level) +void TextureStorage9_Cube::generateMipmaps() { - IDirect3DSurface9 *upper = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level - 1, false); - IDirect3DSurface9 *lower = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level, true); + // Base level must already be defined - if (upper != NULL && lower != NULL) + for (int faceIndex = 0; faceIndex < 6; faceIndex++) { - mRenderer->boxFilter(upper, lower); - } + for (int level = 1; level < getLevelCount(); level++) + { + IDirect3DSurface9 *upper = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level - 1, false); + IDirect3DSurface9 *lower = getCubeMapSurface(GL_TEXTURE_CUBE_MAP_POSITIVE_X + faceIndex, level, true); + + if (upper != NULL && lower != NULL) + { + mRenderer->boxFilter(upper, lower); + } - SafeRelease(upper); - SafeRelease(lower); + SafeRelease(upper); + SafeRelease(lower); + } + } } IDirect3DBaseTexture9 *TextureStorage9_Cube::getBaseTexture() const diff --git a/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.h b/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.h index 11cbdf4d..e698c7dd 100644 --- a/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.h +++ b/src/libGLESv2/renderer/d3d/d3d9/TextureStorage9.h @@ -35,8 +35,7 @@ class TextureStorage9 : public TextureStorage virtual IDirect3DBaseTexture9 *getBaseTexture() const = 0; 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; @@ -68,7 +67,7 @@ class TextureStorage9_2D : public TextureStorage9 IDirect3DSurface9 *getSurfaceLevel(int level, bool dirty); virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); virtual IDirect3DBaseTexture9 *getBaseTexture() const; - virtual void generateMipmap(int level); + virtual void generateMipmaps(); private: DISALLOW_COPY_AND_ASSIGN(TextureStorage9_2D); @@ -90,7 +89,7 @@ class TextureStorage9_Cube : public TextureStorage9 IDirect3DSurface9 *getCubeMapSurface(GLenum faceTarget, int level, bool dirty); virtual RenderTarget *getRenderTarget(const gl::ImageIndex &index); virtual IDirect3DBaseTexture9 *getBaseTexture() const; - virtual void generateMipmap(int faceIndex, int level); + virtual void generateMipmaps(); private: DISALLOW_COPY_AND_ASSIGN(TextureStorage9_Cube); |