Commit 135570a4 by Jamie Madill

Clean up ensureRenderTarget().

We can use the same code for this method, with the only difference being in when we determine a texture image holds no pixels. BUG=angle:729 Change-Id: I3356f5deb900c24b1a5c739ce8de99e9ce1371c0 Reviewed-on: https://chromium-review.googlesource.com/219861Tested-by: 's avatarJamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent 716915d7
...@@ -4,7 +4,7 @@ ...@@ -4,7 +4,7 @@
// found in the LICENSE file. // found in the LICENSE file.
// //
// Image.h: Implements the rx::Image class, an abstract base class for the // Image.h: Implements the rx::Image class, an abstract base class for the
// renderer-specific classes which will define the interface to the underlying // renderer-specific classes which will define the interface to the underlying
// surfaces or resources. // surfaces or resources.
...@@ -15,7 +15,7 @@ namespace rx ...@@ -15,7 +15,7 @@ namespace rx
Image::Image() Image::Image()
{ {
mWidth = 0; mWidth = 0;
mHeight = 0; mHeight = 0;
mDepth = 0; mDepth = 0;
mInternalFormat = GL_NONE; mInternalFormat = GL_NONE;
......
...@@ -284,6 +284,57 @@ void TextureD3D::generateMipmaps() ...@@ -284,6 +284,57 @@ void TextureD3D::generateMipmaps()
} }
} }
bool TextureD3D::isBaseImageZeroSize() const
{
Image *baseImage = getImage(getImageIndex(0, 0));
if (!baseImage || baseImage->getWidth() <= 0)
{
return true;
}
if (!gl::IsCubemapTextureTarget(baseImage->getTarget()) && baseImage->getHeight() <= 0)
{
return true;
}
if (baseImage->getTarget() == GL_TEXTURE_3D && baseImage->getDepth() <= 0)
{
return true;
}
if (baseImage->getTarget() == GL_TEXTURE_2D_ARRAY && getLayerCount(0) <= 0)
{
return true;
}
return false;
}
bool TextureD3D::ensureRenderTarget()
{
initializeStorage(true);
if (!isBaseImageZeroSize())
{
ASSERT(mTexStorage);
if (!mTexStorage->isRenderTarget())
{
TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (mTexStorage->copyToStorage(newRenderTargetStorage).isError())
{
delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false);
}
setCompleteTexStorage(newRenderTargetStorage);
}
}
return (mTexStorage && mTexStorage->isRenderTarget());
}
TextureD3D_2D::TextureD3D_2D(Renderer *renderer) TextureD3D_2D::TextureD3D_2D(Renderer *renderer)
: TextureD3D(renderer) : TextureD3D(renderer)
{ {
...@@ -758,30 +809,6 @@ void TextureD3D_2D::updateStorage() ...@@ -758,30 +809,6 @@ void TextureD3D_2D::updateStorage()
} }
} }
bool TextureD3D_2D::ensureRenderTarget()
{
initializeStorage(true);
if (getBaseLevelWidth() > 0 && getBaseLevelHeight() > 0)
{
ASSERT(mTexStorage);
if (!mTexStorage->isRenderTarget())
{
TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (mTexStorage->copyToStorage(newRenderTargetStorage).isError())
{
delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false);
}
setCompleteTexStorage(newRenderTargetStorage);
}
}
return (mTexStorage && mTexStorage->isRenderTarget());
}
const ImageD3D *TextureD3D_2D::getBaseLevelImage() const const ImageD3D *TextureD3D_2D::getBaseLevelImage() const
{ {
return mImageArray[0]; return mImageArray[0];
...@@ -1228,30 +1255,6 @@ void TextureD3D_Cube::updateStorage() ...@@ -1228,30 +1255,6 @@ void TextureD3D_Cube::updateStorage()
} }
} }
bool TextureD3D_Cube::ensureRenderTarget()
{
initializeStorage(true);
if (getBaseLevelWidth() > 0)
{
ASSERT(mTexStorage);
if (!mTexStorage->isRenderTarget())
{
TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (mTexStorage->copyToStorage(newRenderTargetStorage).isError())
{
delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false);
}
setCompleteTexStorage(newRenderTargetStorage);
}
}
return (mTexStorage && mTexStorage->isRenderTarget());
}
const ImageD3D *TextureD3D_Cube::getBaseLevelImage() const const ImageD3D *TextureD3D_Cube::getBaseLevelImage() const
{ {
// Note: if we are not cube-complete, there is no single base level image that can describe all // Note: if we are not cube-complete, there is no single base level image that can describe all
...@@ -1760,30 +1763,6 @@ void TextureD3D_3D::updateStorage() ...@@ -1760,30 +1763,6 @@ void TextureD3D_3D::updateStorage()
} }
} }
bool TextureD3D_3D::ensureRenderTarget()
{
initializeStorage(true);
if (getBaseLevelWidth() > 0 && getBaseLevelHeight() > 0 && getBaseLevelDepth() > 0)
{
ASSERT(mTexStorage);
if (!mTexStorage->isRenderTarget())
{
TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (mTexStorage->copyToStorage(newRenderTargetStorage).isError())
{
delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false);
}
setCompleteTexStorage(newRenderTargetStorage);
}
}
return (mTexStorage && mTexStorage->isRenderTarget());
}
const ImageD3D *TextureD3D_3D::getBaseLevelImage() const const ImageD3D *TextureD3D_3D::getBaseLevelImage() const
{ {
return mImageArray[0]; return mImageArray[0];
...@@ -2267,30 +2246,6 @@ void TextureD3D_2DArray::updateStorage() ...@@ -2267,30 +2246,6 @@ void TextureD3D_2DArray::updateStorage()
} }
} }
bool TextureD3D_2DArray::ensureRenderTarget()
{
initializeStorage(true);
if (getBaseLevelWidth() > 0 && getBaseLevelHeight() > 0 && getLayers(0) > 0)
{
ASSERT(mTexStorage);
if (!mTexStorage->isRenderTarget())
{
TextureStorage *newRenderTargetStorage = createCompleteStorage(true);
if (mTexStorage->copyToStorage(newRenderTargetStorage).isError())
{
delete newRenderTargetStorage;
return gl::error(GL_OUT_OF_MEMORY, false);
}
setCompleteTexStorage(newRenderTargetStorage);
}
}
return (mTexStorage && mTexStorage->isRenderTarget());
}
const ImageD3D *TextureD3D_2DArray::getBaseLevelImage() const const ImageD3D *TextureD3D_2DArray::getBaseLevelImage() const
{ {
return (mLayerCounts[0] > 0 ? mImageArray[0][0] : NULL); return (mLayerCounts[0] > 0 ? mImageArray[0][0] : NULL);
......
...@@ -75,6 +75,12 @@ class TextureD3D : public TextureImpl ...@@ -75,6 +75,12 @@ class TextureD3D : public TextureImpl
GLint creationLevels(GLsizei width, GLsizei height, GLsizei depth) const; GLint creationLevels(GLsizei width, GLsizei height, GLsizei depth) const;
int mipLevels() const; int mipLevels() const;
virtual void initMipmapsImages() = 0; virtual void initMipmapsImages() = 0;
bool isBaseImageZeroSize() const;
virtual bool ensureRenderTarget();
virtual TextureStorage *createCompleteStorage(bool renderTarget) const = 0;
virtual void setCompleteTexStorage(TextureStorage *newCompleteTexStorage) = 0;
Renderer *mRenderer; Renderer *mRenderer;
...@@ -131,11 +137,10 @@ class TextureD3D_2D : public TextureD3D ...@@ -131,11 +137,10 @@ class TextureD3D_2D : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2D);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorage *createCompleteStorage(bool renderTarget) const; virtual TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorage *newCompleteTexStorage); virtual void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
virtual void initMipmapsImages(); virtual void initMipmapsImages();
...@@ -188,11 +193,10 @@ class TextureD3D_Cube : public TextureD3D ...@@ -188,11 +193,10 @@ class TextureD3D_Cube : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube); DISALLOW_COPY_AND_ASSIGN(TextureD3D_Cube);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorage *createCompleteStorage(bool renderTarget) const; virtual TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorage *newCompleteTexStorage); virtual void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
virtual void initMipmapsImages(); virtual void initMipmapsImages();
...@@ -244,11 +248,10 @@ class TextureD3D_3D : public TextureD3D ...@@ -244,11 +248,10 @@ class TextureD3D_3D : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D); DISALLOW_COPY_AND_ASSIGN(TextureD3D_3D);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorage *createCompleteStorage(bool renderTarget) const; virtual TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorage *newCompleteTexStorage); virtual void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
virtual void initMipmapsImages(); virtual void initMipmapsImages();
...@@ -299,11 +302,10 @@ class TextureD3D_2DArray : public TextureD3D ...@@ -299,11 +302,10 @@ class TextureD3D_2DArray : public TextureD3D
DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray); DISALLOW_COPY_AND_ASSIGN(TextureD3D_2DArray);
virtual void initializeStorage(bool renderTarget); virtual void initializeStorage(bool renderTarget);
TextureStorage *createCompleteStorage(bool renderTarget) const; virtual TextureStorage *createCompleteStorage(bool renderTarget) const;
void setCompleteTexStorage(TextureStorage *newCompleteTexStorage); virtual void setCompleteTexStorage(TextureStorage *newCompleteTexStorage);
virtual void updateStorage(); virtual void updateStorage();
bool ensureRenderTarget();
virtual const ImageD3D *getBaseLevelImage() const; virtual const ImageD3D *getBaseLevelImage() const;
virtual void initMipmapsImages(); virtual void initMipmapsImages();
......
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