Check GL_EXT_texture_format_BGRA8888 before GL_APPLE_texture_format_BGRA8888
When both GL_EXT_texture_format_BGRA8888 and GL_APPLE_texture_format_BGRA8888
extensions are present, the presence of GL_APPLE_texture_format_BGRA8888 was
preventing GL_EXT_texture_format_BGRA8888 from allowing BGRA8888 to be used
as a render target. By checking for GL_EXT_texture_format_BGRA8888 first,
this solves the issue.
The issue was encountered trying to run vr_pixeltests on top of SwiftShader
on the bots with a version of SwiftShader exposing both extension strings.
Cherry-pick of 0e90f9849a7ba4c745478694f0b2c99736561830 to skqp/dev
No-Tree-Checks: true
No-Try: true
No-Presubmit: true
Bug: skia:7790
Change-Id: I4408c983af74c73cd9866dcef871a7c3ac4e103e
Reviewed-on: https://skia-review.googlesource.com/122041
Auto-Submit: Brian Osman <brianosman@google.com>
Reviewed-by: Hal Canary <halcanary@google.com>
Commit-Queue: Hal Canary <halcanary@google.com>
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
index a261da9..e3c4092 100644
--- a/src/gpu/gl/GrGLCaps.cpp
+++ b/src/gpu/gl/GrGLCaps.cpp
@@ -1468,7 +1468,19 @@
} else {
fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fBaseInternalFormat = GR_GL_BGRA;
fConfigTable[kBGRA_8888_GrPixelConfig].fFormats.fSizedInternalFormat = GR_GL_BGRA8;
- if (ctxInfo.hasExtension("GL_APPLE_texture_format_BGRA8888")) {
+ if (ctxInfo.hasExtension("GL_EXT_texture_format_BGRA8888")) {
+ fConfigTable[kBGRA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag |
+ nonMSAARenderFlags;
+
+ if (ctxInfo.hasExtension("GL_EXT_texture_storage")) {
+ supportsBGRATexStorage = true;
+ }
+ if (ctxInfo.hasExtension("GL_CHROMIUM_renderbuffer_format_BGRA8888") &&
+ (this->usesMSAARenderBuffers() || this->fMSFBOType == kMixedSamples_MSFBOType)) {
+ fConfigTable[kBGRA_8888_GrPixelConfig].fFlags |=
+ ConfigInfo::kRenderableWithMSAA_Flag;
+ }
+ } else if (ctxInfo.hasExtension("GL_APPLE_texture_format_BGRA8888")) {
// This APPLE extension introduces complexity on ES2. It leaves the internal format
// as RGBA, but allows BGRA as the external format. From testing, it appears that the
// driver remembers the external format when the texture is created (with TexImage).
@@ -1481,18 +1493,6 @@
fConfigTable[kBGRA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag;
supportsBGRATexStorage = true;
}
- } else if (ctxInfo.hasExtension("GL_EXT_texture_format_BGRA8888")) {
- fConfigTable[kBGRA_8888_GrPixelConfig].fFlags = ConfigInfo::kTextureable_Flag |
- nonMSAARenderFlags;
-
- if (ctxInfo.hasExtension("GL_EXT_texture_storage")) {
- supportsBGRATexStorage = true;
- }
- if (ctxInfo.hasExtension("GL_CHROMIUM_renderbuffer_format_BGRA8888") &&
- (this->usesMSAARenderBuffers() || this->fMSFBOType == kMixedSamples_MSFBOType)) {
- fConfigTable[kBGRA_8888_GrPixelConfig].fFlags |=
- ConfigInfo::kRenderableWithMSAA_Flag;
- }
}
}