Expose GL_APPLE_texture_format_BGRA8888.

GL_APPLE_texture_format_BGRA8888 is similar to
GL_EXT_texture_format_BGRA8888 but explicitly mentions texture storage
support for OpenGL ES 3.0. It adds the format as texture-only (i.e.
non-renderable), but GL_EXT_texture_format_BGRA8888 makes it color-
renderable.

Also allow a sized internalformat of GL_BGRA8_EXT. Previously we were
only allowing unsized internalformat GL_BGRA.

Change-Id: Ieb3a4f85847035392445d0a924591f5531e424d9
Reviewed-on: https://swiftshader-review.googlesource.com/16069
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
Reviewed-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 7b8a666..6f16f82 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -4404,6 +4404,7 @@
 		"GL_ANGLE_texture_compression_dxt3",
 		"GL_ANGLE_texture_compression_dxt5",
 #endif
+		"GL_APPLE_texture_format_BGRA8888",
 		"GL_CHROMIUM_texture_filtering_hint",
 		"GL_NV_fence",
 		"GL_NV_framebuffer_blit",
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index 27b1b5b..2f13d3f 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -997,7 +997,7 @@
 				}
 				break;
 			case GL_BGRA_EXT:
-				if(type != GL_UNSIGNED_BYTE)   // GL_APPLE_texture_format_BGRA8888
+				if(type != GL_UNSIGNED_BYTE)   // GL_APPLE_texture_format_BGRA8888 / GL_EXT_texture_format_BGRA8888
 				{
 					return GL_INVALID_OPERATION;
 				}
@@ -1136,9 +1136,8 @@
 			switch(type)
 			{
 			case GL_UNSIGNED_BYTE:  VALIDATE_INTERNALFORMAT(GL_LUMINANCE8_ALPHA8_EXT)
-			case GL_HALF_FLOAT_OES:
-			case GL_FLOAT:
-				break;
+			case GL_HALF_FLOAT_OES: // Invalid, only exists as unsized.
+			case GL_FLOAT:          // Invalid, only exists as unsized.
 			default:
 				return GL_INVALID_OPERATION;
 			}
@@ -1147,9 +1146,8 @@
 			switch(type)
 			{
 			case GL_UNSIGNED_BYTE:  VALIDATE_INTERNALFORMAT(GL_LUMINANCE8_EXT)
-			case GL_HALF_FLOAT_OES:
-			case GL_FLOAT:
-				break;
+			case GL_HALF_FLOAT_OES: // Invalid, only exists as unsized.
+			case GL_FLOAT:          // Invalid, only exists as unsized.
 			default:
 				return GL_INVALID_OPERATION;
 			}
@@ -1158,17 +1156,17 @@
 			switch(type)
 			{
 			case GL_UNSIGNED_BYTE:  VALIDATE_INTERNALFORMAT(GL_ALPHA8_EXT)
-			case GL_HALF_FLOAT_OES:
-			case GL_FLOAT:
-				break;
+			case GL_HALF_FLOAT_OES: // Invalid, only exists as unsized.
+			case GL_FLOAT:          // Invalid, only exists as unsized.
 			default:
 				return GL_INVALID_OPERATION;
 			}
 			break;
-		case GL_BGRA_EXT:
-			if(type != GL_UNSIGNED_BYTE)
+		case GL_BGRA_EXT:   // GL_APPLE_texture_format_BGRA8888
+			switch(type)
 			{
-				return GL_INVALID_OPERATION;
+			case GL_UNSIGNED_BYTE: VALIDATE_INTERNALFORMAT(GL_BGRA8_EXT)
+			default:               return GL_INVALID_OPERATION;
 			}
 			break;
 		default:
@@ -1242,7 +1240,7 @@
 		case GL_RG32F:
 		case GL_RGB32F:
 		case GL_RGBA32F:
-		case GL_BGRA8_EXT:
+		case GL_BGRA8_EXT:   // GL_EXT_texture_format_BGRA8888
 			return true;
 		case GL_R8UI:
 		case GL_R8I: