Fix floating-point color buffer support.

- Implemented GL_EXT_color_buffer_float.
- Removed duplicate glRenderbufferStorageMultisample implementation.
- Refactored internalformat validation.
- Removed GL_R11F_G11F_B10F as renderable format. OpenGL ES 3.0 only supports
  this as a texture format.

Change-Id: I83ce8225c1b310006f5ce983349ea8cb8b2f7c29
Reviewed-on: https://swiftshader-review.googlesource.com/9048
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Alexis Hétu <sugoi@google.com>
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index 8452dae..d45702c 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -1038,12 +1038,13 @@
 		return true;
 	}
 
-	bool IsColorRenderable(GLenum internalformat, GLint clientVersion)
+	bool IsColorRenderable(GLenum internalformat, GLint clientVersion, bool isTexture)
 	{
 		switch(internalformat)
 		{
 		case GL_RGB:
 		case GL_RGBA:
+			return isTexture;
 		case GL_RGBA4:
 		case GL_RGB5_A1:
 		case GL_RGB565:
@@ -1053,6 +1054,10 @@
 		case GL_RG16F:
 		case GL_RGB16F:
 		case GL_RGBA16F:
+		case GL_R32F:
+		case GL_RG32F:
+		case GL_RGB32F:
+		case GL_RGBA32F:
 		case GL_BGRA8_EXT:
 			return true;
 		case GL_R8:
@@ -1078,11 +1083,6 @@
 		case GL_RGBA16I:
 		case GL_RGBA32I:
 		case GL_RGBA32UI:
-		case GL_R11F_G11F_B10F:
-		case GL_R32F:
-		case GL_RG32F:
-		case GL_RGB32F:
-		case GL_RGBA32F:
 			return clientVersion >= 3;
 		case GL_DEPTH_COMPONENT24:
 		case GL_DEPTH_COMPONENT32_OES:
@@ -1099,17 +1099,18 @@
 		return false;
 	}
 
-	bool IsDepthRenderable(GLenum internalformat)
+	bool IsDepthRenderable(GLenum internalformat, GLint clientVersion)
 	{
 		switch(internalformat)
 		{
 		case GL_DEPTH_COMPONENT24:
-		case GL_DEPTH_COMPONENT32_OES:
-		case GL_DEPTH_COMPONENT32F:
-		case GL_DEPTH32F_STENCIL8:
 		case GL_DEPTH_COMPONENT16:
-		case GL_DEPTH24_STENCIL8_OES:
+		case GL_DEPTH24_STENCIL8_OES:    // GL_OES_packed_depth_stencil
+		case GL_DEPTH_COMPONENT32_OES:   // GL_OES_depth32
 			return true;
+		case GL_DEPTH32F_STENCIL8:
+		case GL_DEPTH_COMPONENT32F:
+			return clientVersion >= 3;
 		case GL_STENCIL_INDEX8:
 		case GL_R8:
 		case GL_R8UI:
@@ -1158,14 +1159,15 @@
 		return false;
 	}
 
-	bool IsStencilRenderable(GLenum internalformat)
+	bool IsStencilRenderable(GLenum internalformat, GLint clientVersion)
 	{
 		switch(internalformat)
 		{
-		case GL_DEPTH32F_STENCIL8:
 		case GL_STENCIL_INDEX8:
 		case GL_DEPTH24_STENCIL8_OES:
 			return true;
+		case GL_DEPTH32F_STENCIL8:
+			return clientVersion >= 3;
 		case GL_R8:
 		case GL_R8UI:
 		case GL_R8I: