Don't discard serials of zero from the set of bound framebuffer serials.
A serial of zero is a valid texture serial but it was used by
RenderbufferStorage to denote a non-texture binding. Added a isTexture
method to Renderbuffers and RenderbufferStorage
has been updated to return -1 as the current texture serial to avoid
collisions.
BUG=angle:633
Change-Id: Ie27e4b185ac09b48b593ae0dea02aeff5950a44f
Reviewed-on: https://chromium-review.googlesource.com/200123
Reviewed-by: Nicolas Capens <nicolascapens@chromium.org>
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/Renderbuffer.cpp b/src/libGLESv2/Renderbuffer.cpp
index 2e05f38..2851908 100644
--- a/src/libGLESv2/Renderbuffer.cpp
+++ b/src/libGLESv2/Renderbuffer.cpp
@@ -106,6 +106,11 @@
return mTexture2D->getRenderTargetSerial(mLevel);
}
+bool RenderbufferTexture2D::isTexture() const
+{
+ return true;
+}
+
unsigned int RenderbufferTexture2D::getTextureSerial() const
{
return mTexture2D->getTextureSerial();
@@ -181,6 +186,11 @@
return mTextureCubeMap->getRenderTargetSerial(mFaceTarget, mLevel);
}
+bool RenderbufferTextureCubeMap::isTexture() const
+{
+ return true;
+}
+
unsigned int RenderbufferTextureCubeMap::getTextureSerial() const
{
return mTextureCubeMap->getTextureSerial();
@@ -256,6 +266,11 @@
return mTexture3D->getRenderTargetSerial(mLevel, mLayer);
}
+bool RenderbufferTexture3DLayer::isTexture() const
+{
+ return true;
+}
+
unsigned int RenderbufferTexture3DLayer::getTextureSerial() const
{
return mTexture3D->getTextureSerial();
@@ -329,6 +344,11 @@
return mTexture2DArray->getRenderTargetSerial(mLevel, mLayer);
}
+bool RenderbufferTexture2DArrayLayer::isTexture() const
+{
+ return true;
+}
+
unsigned int RenderbufferTexture2DArrayLayer::getTextureSerial() const
{
return mTexture2DArray->getTextureSerial();
@@ -451,6 +471,11 @@
return mInstance->getSerial();
}
+bool Renderbuffer::isTexture() const
+{
+ return mInstance->isTexture();
+}
+
unsigned int Renderbuffer::getTextureSerial() const
{
return mInstance->getTextureSerial();
@@ -529,6 +554,16 @@
return firstSerial;
}
+bool RenderbufferStorage::isTexture() const
+{
+ return false;
+}
+
+unsigned int RenderbufferStorage::getTextureSerial() const
+{
+ return -1;
+}
+
Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
{
mRenderTarget = renderer->createRenderTarget(swapChain, false);