Commit e4ac2ff3 by Geoff Lang Committed by Commit Bot

GL: Make GL_EXT_texture_format_BGRA8888 enableable.

Disable returning BGRA as an implementation read format unless GL_EXT_texture_format_BGRA8888 is exposed. WebGL doesn't support this extension and returning BGRA as an implementation read format is invalid. TEST=functional/gles3/negativebufferapi.html TEST=functional/gles3/integerstatequery.html BUG=angleproject:4179 Change-Id: I313721f09da0e455128b88b129bd34338d47af73 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/1943407Reviewed-by: 's avatarJames Darpinian <jdarpinian@chromium.org> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Commit-Queue: Geoff Lang <geofflang@chromium.org>
parent c4faeb79
......@@ -776,7 +776,7 @@ const ExtensionInfoMap &GetExtensionInfoMap()
map["GL_OES_rgb8_rgba8"] = enableableExtension(&Extensions::rgb8rgba8);
map["GL_EXT_texture_format_BGRA8888"] = enableableExtension(&Extensions::textureFormatBGRA8888);
map["GL_EXT_texture_type_2_10_10_10_REV"] = enableableExtension(&Extensions::textureFormat2101010REV);
map["GL_EXT_read_format_bgra"] = esOnlyExtension(&Extensions::readFormatBGRA);
map["GL_EXT_read_format_bgra"] = enableableExtension(&Extensions::readFormatBGRA);
map["GL_NV_pixel_buffer_object"] = enableableExtension(&Extensions::pixelBufferObject);
map["GL_OES_mapbuffer"] = enableableExtension(&Extensions::mapBuffer);
map["GL_EXT_map_buffer_range"] = enableableExtension(&Extensions::mapBufferRange);
......
......@@ -360,9 +360,26 @@ bool InternalFormat::isLUMA() const
(luminanceBits + alphaBits) > 0);
}
GLenum InternalFormat::getReadPixelsFormat() const
GLenum InternalFormat::getReadPixelsFormat(const Extensions &extensions) const
{
return format;
switch (format)
{
case GL_BGRA_EXT:
// BGRA textures may be enabled but calling glReadPixels with BGRA is disallowed without
// GL_EXT_texture_format_BGRA8888. Read as RGBA instead.
if (!extensions.readFormatBGRA)
{
return GL_RGBA;
}
else
{
return GL_BGRA_EXT;
}
break;
default:
return format;
}
}
GLenum InternalFormat::getReadPixelsType(const Version &version) const
......
......@@ -117,7 +117,7 @@ struct InternalFormat
GLuint *resultOut) const;
bool isLUMA() const;
GLenum getReadPixelsFormat() const;
GLenum getReadPixelsFormat(const Extensions &extensions) const;
GLenum getReadPixelsType(const Version &version) const;
// Support upload a portion of image?
......
......@@ -212,7 +212,7 @@ GLenum FramebufferD3D::getImplementationColorReadFormat(const gl::Context *conte
const gl::InternalFormat &implementationFormatInfo =
gl::GetSizedInternalFormatInfo(implementationFormat);
return implementationFormatInfo.getReadPixelsFormat();
return implementationFormatInfo.getReadPixelsFormat(context->getExtensions());
}
GLenum FramebufferD3D::getImplementationColorReadType(const gl::Context *context) const
......
......@@ -461,7 +461,7 @@ GLenum FramebufferGL::getImplementationColorReadFormat(const gl::Context *contex
{
const auto *readAttachment = mState.getReadAttachment();
const Format &format = readAttachment->getFormat();
return format.info->getReadPixelsFormat();
return format.info->getReadPixelsFormat(context->getExtensions());
}
GLenum FramebufferGL::getImplementationColorReadType(const gl::Context *context) const
......
......@@ -92,7 +92,7 @@ GLenum FramebufferNULL::getImplementationColorReadFormat(const gl::Context *cont
const gl::Format &format = readAttachment->getFormat();
ASSERT(format.info != nullptr);
return format.info->getReadPixelsFormat();
return format.info->getReadPixelsFormat(context->getExtensions());
}
GLenum FramebufferNULL::getImplementationColorReadType(const gl::Context *context) const
......
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