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/219861
Tested-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/renderer/d3d/TextureD3D.cpp b/src/libGLESv2/renderer/d3d/TextureD3D.cpp
index 5554e80..7323767 100644
--- a/src/libGLESv2/renderer/d3d/TextureD3D.cpp
+++ b/src/libGLESv2/renderer/d3d/TextureD3D.cpp
@@ -284,6 +284,57 @@
}
}
+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(renderer)
{
@@ -758,30 +809,6 @@
}
}
-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
{
return mImageArray[0];
@@ -1228,30 +1255,6 @@
}
}
-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
{
// Note: if we are not cube-complete, there is no single base level image that can describe all
@@ -1760,30 +1763,6 @@
}
}
-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
{
return mImageArray[0];
@@ -2267,30 +2246,6 @@
}
}
-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
{
return (mLayerCounts[0] > 0 ? mImageArray[0][0] : NULL);