Report zero bit sizes for channels that shouldn't exist.
If the actual format has more channels than the internal format of a
framebuffer, bits counts greater than zero will be returned for channels
that should not exist. While it is not against the spec to return more
bits than exist in the format, it can be confusing for users or break
tests. get*Bits will now only return greater than zero bit counts when
the format should have the given channel.
Since this is the only location that we return information about the
"real" internal format we're using, it's safe to only make the
modifications here.
BUG=angle:653
Change-Id: I43ef4c6290c8c70737d579d7e9a2dd30d653330b
Reviewed-on: https://chromium-review.googlesource.com/202594
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2/FramebufferAttachment.cpp b/src/libGLESv2/FramebufferAttachment.cpp
index 574ce7e..fa90f28 100644
--- a/src/libGLESv2/FramebufferAttachment.cpp
+++ b/src/libGLESv2/FramebufferAttachment.cpp
@@ -422,32 +422,74 @@
GLuint FramebufferAttachment::getRedSize() const
{
- return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ if (gl::GetRedBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0)
+ {
+ return gl::GetRedBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ }
+ else
+ {
+ return 0;
+ }
}
GLuint FramebufferAttachment::getGreenSize() const
{
- return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ if (gl::GetGreenBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0)
+ {
+ return gl::GetGreenBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ }
+ else
+ {
+ return 0;
+ }
}
GLuint FramebufferAttachment::getBlueSize() const
{
- return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ if (gl::GetBlueBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0)
+ {
+ return gl::GetBlueBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ }
+ else
+ {
+ return 0;
+ }
}
GLuint FramebufferAttachment::getAlphaSize() const
{
- return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ if (gl::GetAlphaBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0)
+ {
+ return gl::GetAlphaBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ }
+ else
+ {
+ return 0;
+ }
}
GLuint FramebufferAttachment::getDepthSize() const
{
- return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ if (gl::GetDepthBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0)
+ {
+ return gl::GetDepthBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ }
+ else
+ {
+ return 0;
+ }
}
GLuint FramebufferAttachment::getStencilSize() const
{
- return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ if (gl::GetStencilBits(getInternalFormat(), mRenderer->getCurrentClientVersion()) > 0)
+ {
+ return gl::GetStencilBits(getActualFormat(), mRenderer->getCurrentClientVersion());
+ }
+ else
+ {
+ return 0;
+ }
}
GLenum FramebufferAttachment::getComponentType() const