Commit 784371d0 by Geoff Lang

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/200123Reviewed-by: 's avatarNicolas Capens <nicolascapens@chromium.org> Reviewed-by: 's avatarJamie Madill <jmadill@chromium.org> Tested-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent b66feb31
...@@ -3942,14 +3942,14 @@ size_t Context::getBoundFramebufferTextureSerials(FramebufferTextureSerialArray ...@@ -3942,14 +3942,14 @@ size_t Context::getBoundFramebufferTextureSerials(FramebufferTextureSerialArray
for (unsigned int i = 0; i < IMPLEMENTATION_MAX_DRAW_BUFFERS; i++) for (unsigned int i = 0; i < IMPLEMENTATION_MAX_DRAW_BUFFERS; i++)
{ {
Renderbuffer *renderBuffer = drawFramebuffer->getColorbuffer(i); Renderbuffer *renderBuffer = drawFramebuffer->getColorbuffer(i);
if (renderBuffer && renderBuffer->getTextureSerial() != 0) if (renderBuffer && renderBuffer->isTexture())
{ {
(*outSerialArray)[serialCount++] = renderBuffer->getTextureSerial(); (*outSerialArray)[serialCount++] = renderBuffer->getTextureSerial();
} }
} }
Renderbuffer *depthStencilBuffer = drawFramebuffer->getDepthOrStencilbuffer(); Renderbuffer *depthStencilBuffer = drawFramebuffer->getDepthOrStencilbuffer();
if (depthStencilBuffer && depthStencilBuffer->getTextureSerial() != 0) if (depthStencilBuffer && depthStencilBuffer->isTexture())
{ {
(*outSerialArray)[serialCount++] = depthStencilBuffer->getTextureSerial(); (*outSerialArray)[serialCount++] = depthStencilBuffer->getTextureSerial();
} }
......
...@@ -106,6 +106,11 @@ unsigned int RenderbufferTexture2D::getSerial() const ...@@ -106,6 +106,11 @@ unsigned int RenderbufferTexture2D::getSerial() const
return mTexture2D->getRenderTargetSerial(mLevel); return mTexture2D->getRenderTargetSerial(mLevel);
} }
bool RenderbufferTexture2D::isTexture() const
{
return true;
}
unsigned int RenderbufferTexture2D::getTextureSerial() const unsigned int RenderbufferTexture2D::getTextureSerial() const
{ {
return mTexture2D->getTextureSerial(); return mTexture2D->getTextureSerial();
...@@ -181,6 +186,11 @@ unsigned int RenderbufferTextureCubeMap::getSerial() const ...@@ -181,6 +186,11 @@ unsigned int RenderbufferTextureCubeMap::getSerial() const
return mTextureCubeMap->getRenderTargetSerial(mFaceTarget, mLevel); return mTextureCubeMap->getRenderTargetSerial(mFaceTarget, mLevel);
} }
bool RenderbufferTextureCubeMap::isTexture() const
{
return true;
}
unsigned int RenderbufferTextureCubeMap::getTextureSerial() const unsigned int RenderbufferTextureCubeMap::getTextureSerial() const
{ {
return mTextureCubeMap->getTextureSerial(); return mTextureCubeMap->getTextureSerial();
...@@ -256,6 +266,11 @@ unsigned int RenderbufferTexture3DLayer::getSerial() const ...@@ -256,6 +266,11 @@ unsigned int RenderbufferTexture3DLayer::getSerial() const
return mTexture3D->getRenderTargetSerial(mLevel, mLayer); return mTexture3D->getRenderTargetSerial(mLevel, mLayer);
} }
bool RenderbufferTexture3DLayer::isTexture() const
{
return true;
}
unsigned int RenderbufferTexture3DLayer::getTextureSerial() const unsigned int RenderbufferTexture3DLayer::getTextureSerial() const
{ {
return mTexture3D->getTextureSerial(); return mTexture3D->getTextureSerial();
...@@ -329,6 +344,11 @@ unsigned int RenderbufferTexture2DArrayLayer::getSerial() const ...@@ -329,6 +344,11 @@ unsigned int RenderbufferTexture2DArrayLayer::getSerial() const
return mTexture2DArray->getRenderTargetSerial(mLevel, mLayer); return mTexture2DArray->getRenderTargetSerial(mLevel, mLayer);
} }
bool RenderbufferTexture2DArrayLayer::isTexture() const
{
return true;
}
unsigned int RenderbufferTexture2DArrayLayer::getTextureSerial() const unsigned int RenderbufferTexture2DArrayLayer::getTextureSerial() const
{ {
return mTexture2DArray->getTextureSerial(); return mTexture2DArray->getTextureSerial();
...@@ -451,6 +471,11 @@ unsigned int Renderbuffer::getSerial() const ...@@ -451,6 +471,11 @@ unsigned int Renderbuffer::getSerial() const
return mInstance->getSerial(); return mInstance->getSerial();
} }
bool Renderbuffer::isTexture() const
{
return mInstance->isTexture();
}
unsigned int Renderbuffer::getTextureSerial() const unsigned int Renderbuffer::getTextureSerial() const
{ {
return mInstance->getTextureSerial(); return mInstance->getTextureSerial();
...@@ -529,6 +554,16 @@ unsigned int RenderbufferStorage::issueSerials(GLuint count) ...@@ -529,6 +554,16 @@ unsigned int RenderbufferStorage::issueSerials(GLuint count)
return firstSerial; return firstSerial;
} }
bool RenderbufferStorage::isTexture() const
{
return false;
}
unsigned int RenderbufferStorage::getTextureSerial() const
{
return -1;
}
Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain) Colorbuffer::Colorbuffer(rx::Renderer *renderer, rx::SwapChain *swapChain)
{ {
mRenderTarget = renderer->createRenderTarget(swapChain, false); mRenderTarget = renderer->createRenderTarget(swapChain, false);
......
...@@ -58,6 +58,8 @@ class RenderbufferInterface ...@@ -58,6 +58,8 @@ class RenderbufferInterface
virtual GLsizei getSamples() const = 0; virtual GLsizei getSamples() const = 0;
virtual unsigned int getSerial() const = 0; virtual unsigned int getSerial() const = 0;
virtual bool isTexture() const = 0;
virtual unsigned int getTextureSerial() const = 0; virtual unsigned int getTextureSerial() const = 0;
private: private:
...@@ -85,6 +87,8 @@ class RenderbufferTexture2D : public RenderbufferInterface ...@@ -85,6 +87,8 @@ class RenderbufferTexture2D : public RenderbufferInterface
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const; virtual unsigned int getSerial() const;
virtual bool isTexture() const;
virtual unsigned int getTextureSerial() const; virtual unsigned int getTextureSerial() const;
private: private:
...@@ -115,6 +119,8 @@ class RenderbufferTextureCubeMap : public RenderbufferInterface ...@@ -115,6 +119,8 @@ class RenderbufferTextureCubeMap : public RenderbufferInterface
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const; virtual unsigned int getSerial() const;
virtual bool isTexture() const;
virtual unsigned int getTextureSerial() const; virtual unsigned int getTextureSerial() const;
private: private:
...@@ -146,6 +152,8 @@ public: ...@@ -146,6 +152,8 @@ public:
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const; virtual unsigned int getSerial() const;
virtual bool isTexture() const;
virtual unsigned int getTextureSerial() const; virtual unsigned int getTextureSerial() const;
private: private:
...@@ -177,6 +185,8 @@ public: ...@@ -177,6 +185,8 @@ public:
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const; virtual unsigned int getSerial() const;
virtual bool isTexture() const;
virtual unsigned int getTextureSerial() const; virtual unsigned int getTextureSerial() const;
private: private:
...@@ -208,7 +218,9 @@ class RenderbufferStorage : public RenderbufferInterface ...@@ -208,7 +218,9 @@ class RenderbufferStorage : public RenderbufferInterface
virtual GLsizei getSamples() const; virtual GLsizei getSamples() const;
virtual unsigned int getSerial() const; virtual unsigned int getSerial() const;
virtual unsigned int getTextureSerial() const { return 0; }
virtual bool isTexture() const;
virtual unsigned int getTextureSerial() const;
static unsigned int issueSerials(GLuint count); static unsigned int issueSerials(GLuint count);
...@@ -263,6 +275,8 @@ class Renderbuffer : public RefCountObject ...@@ -263,6 +275,8 @@ class Renderbuffer : public RefCountObject
GLsizei getSamples() const; GLsizei getSamples() const;
unsigned int getSerial() const; unsigned int getSerial() const;
bool isTexture() const;
unsigned int getTextureSerial() const; unsigned int getTextureSerial() const;
void setStorage(RenderbufferStorage *newStorage); void setStorage(RenderbufferStorage *newStorage);
......
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