Restore support for BGRA formats.

Change-Id: I3a239325ed802e9188839c1c743d45930643c273
Reviewed-on: https://swiftshader-review.googlesource.com/14608
Tested-by: Nicolas Capens <nicolascapens@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libGLESv2/Framebuffer.cpp b/src/OpenGL/libGLESv2/Framebuffer.cpp
index 810771b..9b9c78b 100644
--- a/src/OpenGL/libGLESv2/Framebuffer.cpp
+++ b/src/OpenGL/libGLESv2/Framebuffer.cpp
@@ -499,6 +499,9 @@
 	{
 		switch(colorbuffer->getFormat())
 		{
+		case GL_BGRA8_EXT:      return GL_BGRA_EXT;
+		case GL_BGRA4_ANGLE:    return GL_BGRA_EXT;
+		case GL_BGR5_A1_ANGLE:  return GL_BGRA_EXT;
 		case GL_RGBA4:          return GL_RGBA;
 		case GL_RGB5_A1:        return GL_RGBA;
 		case GL_RGBA8:          return GL_RGBA;
@@ -559,8 +562,11 @@
 	{
 		switch(colorbuffer->getFormat())
 		{
-		case GL_RGBA4:          return GL_UNSIGNED_BYTE;
-		case GL_RGB5_A1:        return GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT;
+		case GL_BGRA8_EXT:      return GL_UNSIGNED_BYTE;
+		case GL_BGRA4_ANGLE:    return GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT;
+		case GL_BGR5_A1_ANGLE:  return GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT;
+		case GL_RGBA4:          return GL_UNSIGNED_SHORT_4_4_4_4;
+		case GL_RGB5_A1:        return GL_UNSIGNED_SHORT_5_5_5_1;
 		case GL_RGBA8:          return GL_UNSIGNED_BYTE;
 		case GL_RGB565:         return GL_UNSIGNED_SHORT_5_6_5;
 		case GL_RGB8:           return GL_UNSIGNED_BYTE;
diff --git a/src/OpenGL/libGLESv2/Renderbuffer.h b/src/OpenGL/libGLESv2/Renderbuffer.h
index feb8f9e..c7719b5 100644
--- a/src/OpenGL/libGLESv2/Renderbuffer.h
+++ b/src/OpenGL/libGLESv2/Renderbuffer.h
@@ -27,6 +27,11 @@
 
 namespace es2
 {
+// Sized internal formats corresponding to GL_BGRA_EXT/GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT and
+// GL_BGRA_EXT/GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT format/type combinations, respectively.
+const GLint GL_BGRA4_ANGLE = 0x6ABC;
+const GLint GL_BGR5_A1_ANGLE = 0x6ABD;
+
 class Texture2D;
 class Texture3D;
 class TextureCubeMap;
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index f612a63..f2f6410 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -2280,11 +2280,6 @@
 			return error(GL_INVALID_ENUM);
 		}
 
-		if(texture->isCompressed(target, 0) || texture->isDepth(target, 0))
-		{
-			return error(GL_INVALID_OPERATION);
-		}
-
 		if(!IsMipmappable(texture->getFormat(target, 0), clientVersion))
 		{
 			return error(GL_INVALID_OPERATION);
@@ -4690,7 +4685,7 @@
 	}
 
 	if(samples > es2::IMPLEMENTATION_MAX_SAMPLES ||
-	   (sw::Surface::isNonNormalizedInteger(es2sw::ConvertRenderbufferFormat(internalformat)) && samples > 0))
+	   (IsNonNormalizedInteger(internalformat) && samples > 0))
 	{
 		return error(GL_INVALID_OPERATION);
 	}
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index a26edce..1903e3d 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -44,9 +44,6 @@
 
 	FormatMap BuildFormatMap()
 	{
-		static const GLint GL_BGRA4_ANGLEX = 0x6ABC;
-		static const GLint GL_BGR5_A1_ANGLEX = 0x6ABD;
-
 		FormatMap map;
 
 		//                       | Format | Type | Internal format |
@@ -123,8 +120,8 @@
 		InsertFormatMapping(&map, GL_ALPHA, GL_HALF_FLOAT_OES, GL_ALPHA16F_EXT);
 
 		InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_BYTE, GL_BGRA8_EXT);
-		InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT, GL_BGRA4_ANGLEX);
-		InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT, GL_BGR5_A1_ANGLEX);
+		InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT, GL_BGRA4_ANGLE);
+		InsertFormatMapping(&map, GL_BGRA_EXT, GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT, GL_BGR5_A1_ANGLE);
 
 		InsertFormatMapping(&map, GL_SRGB_EXT, GL_UNSIGNED_BYTE, GL_SRGB8);
 		InsertFormatMapping(&map, GL_SRGB_ALPHA_EXT, GL_UNSIGNED_BYTE, GL_SRGB8_ALPHA8);