Move ConvertReadFormatType to utilities.

Bug swiftshader:104

Change-Id: Ifcdffd3f960d7bb4982495381465da15ef671c3f
Reviewed-on: https://swiftshader-review.googlesource.com/18429
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <nicolascapens@google.com>
diff --git a/src/OpenGL/common/Image.cpp b/src/OpenGL/common/Image.cpp
index d169fc9..67de762 100644
--- a/src/OpenGL/common/Image.cpp
+++ b/src/OpenGL/common/Image.cpp
@@ -31,151 +31,6 @@
 
 namespace gl
 {
-	sw::Format ConvertReadFormatType(GLenum format, GLenum type)
-	{
-		switch(format)
-		{
-		case GL_LUMINANCE:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:  return sw::FORMAT_L8;
-			case GL_HALF_FLOAT:     return sw::FORMAT_L16F;
-			case GL_HALF_FLOAT_OES: return sw::FORMAT_L16F;
-			case GL_FLOAT:          return sw::FORMAT_L32F;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_LUMINANCE_ALPHA:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:  return sw::FORMAT_A8L8;
-			case GL_HALF_FLOAT:     return sw::FORMAT_A16L16F;
-			case GL_HALF_FLOAT_OES: return sw::FORMAT_A16L16F;
-			case GL_FLOAT:          return sw::FORMAT_A32L32F;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RGBA:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:          return sw::FORMAT_A8B8G8R8;
-			case GL_UNSIGNED_SHORT_4_4_4_4: return sw::FORMAT_R4G4B4A4;
-			case GL_UNSIGNED_SHORT_5_5_5_1: return sw::FORMAT_R5G5B5A1;
-			case GL_HALF_FLOAT:             return sw::FORMAT_A16B16G16R16F;
-			case GL_HALF_FLOAT_OES:         return sw::FORMAT_A16B16G16R16F;
-			case GL_FLOAT:                  return sw::FORMAT_A32B32G32R32F;
-			case GL_UNSIGNED_INT_2_10_10_10_REV_EXT: return sw::FORMAT_A2B10G10R10;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_BGRA_EXT:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:                  return sw::FORMAT_A8R8G8B8;
-			case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT: return sw::FORMAT_A4R4G4B4;
-			case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT: return sw::FORMAT_A1R5G5B5;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RGB:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:          return sw::FORMAT_B8G8R8;
-			case GL_UNSIGNED_SHORT_5_6_5:   return sw::FORMAT_R5G6B5;
-			case GL_HALF_FLOAT:             return sw::FORMAT_B16G16R16F;
-			case GL_HALF_FLOAT_OES:         return sw::FORMAT_B16G16R16F;
-			case GL_FLOAT:                  return sw::FORMAT_B32G32R32F;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RG:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:          return sw::FORMAT_G8R8;
-			case GL_HALF_FLOAT:             return sw::FORMAT_G16R16F;
-			case GL_HALF_FLOAT_OES:         return sw::FORMAT_G16R16F;
-			case GL_FLOAT:                  return sw::FORMAT_G32R32F;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RED:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:          return sw::FORMAT_R8;
-			case GL_HALF_FLOAT:             return sw::FORMAT_R16F;
-			case GL_HALF_FLOAT_OES:         return sw::FORMAT_R16F;
-			case GL_FLOAT:                  return sw::FORMAT_R32F;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_ALPHA:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE:          return sw::FORMAT_A8;
-			case GL_HALF_FLOAT:             return sw::FORMAT_A16F;
-			case GL_HALF_FLOAT_OES:         return sw::FORMAT_A16F;
-			case GL_FLOAT:                  return sw::FORMAT_A32F;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RED_INTEGER:
-			switch(type)
-			{
-			case GL_INT:          return sw::FORMAT_R32I;
-			case GL_UNSIGNED_INT: return sw::FORMAT_R32UI;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RG_INTEGER:
-			switch(type)
-			{
-			case GL_INT:          return sw::FORMAT_G32R32I;
-			case GL_UNSIGNED_INT: return sw::FORMAT_G32R32UI;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RGB_INTEGER:
-			switch(type)
-			{
-			case GL_INT:          return sw::FORMAT_X32B32G32R32I;
-			case GL_UNSIGNED_INT: return sw::FORMAT_X32B32G32R32UI;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_RGBA_INTEGER:
-			switch(type)
-			{
-			case GL_INT:          return sw::FORMAT_A32B32G32R32I;
-			case GL_UNSIGNED_INT: return sw::FORMAT_A32B32G32R32UI;
-			case GL_UNSIGNED_INT_2_10_10_10_REV: return sw::FORMAT_A2B10G10R10UI;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_DEPTH_COMPONENT:
-			switch(type)
-			{
-			case GL_UNSIGNED_SHORT:        return sw::FORMAT_D16;
-			case GL_UNSIGNED_INT_24_8_OES: return sw::FORMAT_D24X8;
-			case GL_FLOAT:                 return sw::FORMAT_D32F_LOCKABLE;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_STENCIL_INDEX_OES:
-			switch(type)
-			{
-			case GL_UNSIGNED_BYTE: return sw::FORMAT_S8;
-			default: UNREACHABLE(type);
-			}
-			break;
-		case GL_DEPTH_STENCIL_OES:   // Cannot be read as one format. Handled separately.
-		default:
-			UNREACHABLE(format);
-			break;
-		}
-
-		return sw::FORMAT_NULL;
-	}
-
 	bool IsUnsizedInternalFormat(GLint internalformat)
 	{
 		switch(internalformat)
diff --git a/src/OpenGL/common/Image.hpp b/src/OpenGL/common/Image.hpp
index f115a63..1a1dfd7 100644
--- a/src/OpenGL/common/Image.hpp
+++ b/src/OpenGL/common/Image.hpp
@@ -53,7 +53,6 @@
 };
 
 GLint GetSizedInternalFormat(GLint internalFormat, GLenum type);
-sw::Format ConvertReadFormatType(GLenum format, GLenum type);
 sw::Format SelectInternalFormat(GLint format);
 bool IsUnsizedInternalFormat(GLint internalformat);
 GLenum GetBaseInternalFormat(GLint internalformat);
diff --git a/src/OpenGL/libGLESv2/Context.cpp b/src/OpenGL/libGLESv2/Context.cpp
index 612ee2a..2273e65 100644
--- a/src/OpenGL/libGLESv2/Context.cpp
+++ b/src/OpenGL/libGLESv2/Context.cpp
@@ -3345,7 +3345,7 @@
 
 	if(format != GL_DEPTH_STENCIL_OES)   // The blitter only handles reading either depth or stencil.
 	{
-		sw::Surface *externalSurface = sw::Surface::create(width, height, 1, gl::ConvertReadFormatType(format, type), pixels, outputPitch, outputPitch  *  outputHeight);
+		sw::Surface *externalSurface = sw::Surface::create(width, height, 1, es2::ConvertReadFormatType(format, type), pixels, outputPitch, outputPitch  *  outputHeight);
 		device->blit(renderTarget, srcRect, externalSurface, dstRect, false, false, false);
 		externalSurface->lockExternal(0, 0, 0, sw::LOCK_READONLY, sw::PUBLIC);
 		externalSurface->unlockExternal();
diff --git a/src/OpenGL/libGLESv2/utilities.cpp b/src/OpenGL/libGLESv2/utilities.cpp
index 6ae091e..9dfe434 100644
--- a/src/OpenGL/libGLESv2/utilities.cpp
+++ b/src/OpenGL/libGLESv2/utilities.cpp
@@ -1245,6 +1245,151 @@
 		return 1;
 	}
 
+	sw::Format ConvertReadFormatType(GLenum format, GLenum type)
+	{
+		switch(format)
+		{
+		case GL_LUMINANCE:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:  return sw::FORMAT_L8;
+			case GL_HALF_FLOAT:     return sw::FORMAT_L16F;
+			case GL_HALF_FLOAT_OES: return sw::FORMAT_L16F;
+			case GL_FLOAT:          return sw::FORMAT_L32F;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_LUMINANCE_ALPHA:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:  return sw::FORMAT_A8L8;
+			case GL_HALF_FLOAT:     return sw::FORMAT_A16L16F;
+			case GL_HALF_FLOAT_OES: return sw::FORMAT_A16L16F;
+			case GL_FLOAT:          return sw::FORMAT_A32L32F;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RGBA:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:          return sw::FORMAT_A8B8G8R8;
+			case GL_UNSIGNED_SHORT_4_4_4_4: return sw::FORMAT_R4G4B4A4;
+			case GL_UNSIGNED_SHORT_5_5_5_1: return sw::FORMAT_R5G5B5A1;
+			case GL_HALF_FLOAT:             return sw::FORMAT_A16B16G16R16F;
+			case GL_HALF_FLOAT_OES:         return sw::FORMAT_A16B16G16R16F;
+			case GL_FLOAT:                  return sw::FORMAT_A32B32G32R32F;
+			case GL_UNSIGNED_INT_2_10_10_10_REV_EXT: return sw::FORMAT_A2B10G10R10;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_BGRA_EXT:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:                  return sw::FORMAT_A8R8G8B8;
+			case GL_UNSIGNED_SHORT_4_4_4_4_REV_EXT: return sw::FORMAT_A4R4G4B4;
+			case GL_UNSIGNED_SHORT_1_5_5_5_REV_EXT: return sw::FORMAT_A1R5G5B5;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RGB:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:          return sw::FORMAT_B8G8R8;
+			case GL_UNSIGNED_SHORT_5_6_5:   return sw::FORMAT_R5G6B5;
+			case GL_HALF_FLOAT:             return sw::FORMAT_B16G16R16F;
+			case GL_HALF_FLOAT_OES:         return sw::FORMAT_B16G16R16F;
+			case GL_FLOAT:                  return sw::FORMAT_B32G32R32F;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RG:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:          return sw::FORMAT_G8R8;
+			case GL_HALF_FLOAT:             return sw::FORMAT_G16R16F;
+			case GL_HALF_FLOAT_OES:         return sw::FORMAT_G16R16F;
+			case GL_FLOAT:                  return sw::FORMAT_G32R32F;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RED:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:          return sw::FORMAT_R8;
+			case GL_HALF_FLOAT:             return sw::FORMAT_R16F;
+			case GL_HALF_FLOAT_OES:         return sw::FORMAT_R16F;
+			case GL_FLOAT:                  return sw::FORMAT_R32F;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_ALPHA:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE:          return sw::FORMAT_A8;
+			case GL_HALF_FLOAT:             return sw::FORMAT_A16F;
+			case GL_HALF_FLOAT_OES:         return sw::FORMAT_A16F;
+			case GL_FLOAT:                  return sw::FORMAT_A32F;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RED_INTEGER:
+			switch(type)
+			{
+			case GL_INT:          return sw::FORMAT_R32I;
+			case GL_UNSIGNED_INT: return sw::FORMAT_R32UI;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RG_INTEGER:
+			switch(type)
+			{
+			case GL_INT:          return sw::FORMAT_G32R32I;
+			case GL_UNSIGNED_INT: return sw::FORMAT_G32R32UI;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RGB_INTEGER:
+			switch(type)
+			{
+			case GL_INT:          return sw::FORMAT_X32B32G32R32I;
+			case GL_UNSIGNED_INT: return sw::FORMAT_X32B32G32R32UI;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_RGBA_INTEGER:
+			switch(type)
+			{
+			case GL_INT:          return sw::FORMAT_A32B32G32R32I;
+			case GL_UNSIGNED_INT: return sw::FORMAT_A32B32G32R32UI;
+			case GL_UNSIGNED_INT_2_10_10_10_REV: return sw::FORMAT_A2B10G10R10UI;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_DEPTH_COMPONENT:
+			switch(type)
+			{
+			case GL_UNSIGNED_SHORT:        return sw::FORMAT_D16;
+			case GL_UNSIGNED_INT_24_8_OES: return sw::FORMAT_D24X8;
+			case GL_FLOAT:                 return sw::FORMAT_D32F_LOCKABLE;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_STENCIL_INDEX_OES:
+			switch(type)
+			{
+			case GL_UNSIGNED_BYTE: return sw::FORMAT_S8;
+			default: UNREACHABLE(type);
+			}
+			break;
+		case GL_DEPTH_STENCIL_OES:   // Cannot be read as one format. Handled separately.
+		default:
+			UNREACHABLE(format);
+			break;
+		}
+
+		return sw::FORMAT_NULL;
+	}
+
 	bool IsColorRenderable(GLint internalformat)
 	{
 		if(IsCompressed(internalformat))
diff --git a/src/OpenGL/libGLESv2/utilities.h b/src/OpenGL/libGLESv2/utilities.h
index 3b2704e..a698d20 100644
--- a/src/OpenGL/libGLESv2/utilities.h
+++ b/src/OpenGL/libGLESv2/utilities.h
@@ -59,6 +59,7 @@
 	bool IsTextureTarget(GLenum target);
 	GLenum ValidateTextureFormatType(GLenum format, GLenum type, GLint internalformat, GLenum target);
 	size_t GetTypeSize(GLenum type);
+	sw::Format ConvertReadFormatType(GLenum format, GLenum type);
 
 	bool IsColorRenderable(GLint internalformat);
 	bool IsDepthRenderable(GLint internalformat);