Refactor HAL to GL format conversions.

Bug 25390254

Change-Id: I434e6d319335be00204eff88f09c98b2dd4f2acc
Reviewed-on: https://swiftshader-review.googlesource.com/4188
Reviewed-by: Alexis Hétu <sugoi@google.com>
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/src/OpenGL/common/AndroidCommon.cpp b/src/OpenGL/common/AndroidCommon.cpp
index ff91c7b..861cf91 100644
--- a/src/OpenGL/common/AndroidCommon.cpp
+++ b/src/OpenGL/common/AndroidCommon.cpp
@@ -1,60 +1,58 @@
-#include <system/window.h>
-#include "GL/glcorearb.h"
-#include "GL/glext.h"
-#include "EGL/egl.h"
+#include "AndroidCommon.hpp"
+
+#include "../../Common/DebugAndroid.hpp"
+
+#include <GLES/glext.h>
+#include <system/graphics.h>
 
 #define GL_RGB565     0x8D62
 #define SW_YV12_BT601 0x32315659   // YCrCb 4:2:0 Planar, 16-byte aligned, BT.601 color space, studio swing
 #define SW_YV12_BT709 0x48315659   // YCrCb 4:2:0 Planar, 16-byte aligned, BT.709 color space, studio swing
 #define SW_YV12_JFIF  0x4A315659   // YCrCb 4:2:0 Planar, 16-byte aligned, BT.601 color space, full swing
 
-#include "AndroidCommon.hpp"
-
-#include "../../Common/DebugAndroid.hpp"
-#include "../../Common/GrallocAndroid.hpp"
-
-GLenum getColorFormatFromAndroid(int format)
+GLenum GLPixelFormatFromAndroid(int halFormat)
 {
-    switch(format)
-    {
-        case HAL_PIXEL_FORMAT_RGBA_8888:
-            return GL_RGBA;
-        case HAL_PIXEL_FORMAT_RGBX_8888:
-            return GL_RGB;
-        case HAL_PIXEL_FORMAT_RGB_888:
-            return GL_RGB;
-        case HAL_PIXEL_FORMAT_BGRA_8888:
-            return GL_BGRA_EXT;
-        case HAL_PIXEL_FORMAT_RGB_565:
-            return GL_RGB565;
-        case HAL_PIXEL_FORMAT_YV12:
-			return SW_YV12_BT601;
-        case HAL_PIXEL_FORMAT_BLOB:
-        case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
-        default:
-			ALOGE("%s badness unsupported format=%x", __FUNCTION__, format);
-    }
-    return GL_RGBA;
+	switch(halFormat)
+	{
+	case HAL_PIXEL_FORMAT_RGBA_8888:
+		return GL_RGBA;
+	case HAL_PIXEL_FORMAT_RGBX_8888:
+		return GL_RGB;
+	case HAL_PIXEL_FORMAT_RGB_888:
+		return GL_RGB;
+	case HAL_PIXEL_FORMAT_BGRA_8888:
+		return GL_BGRA_EXT;
+	case HAL_PIXEL_FORMAT_RGB_565:
+		return GL_RGB565;
+	case HAL_PIXEL_FORMAT_YV12:
+		return SW_YV12_BT601;
+	case HAL_PIXEL_FORMAT_BLOB:
+	case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
+	default:
+		ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);
+	}
+
+	return GL_RGBA;
 }
 
-// Used internally
-GLenum getPixelFormatFromAndroid(int format)
+GLenum GLPixelTypeFromAndroid(int halFormat)
 {
-    switch(format)
-    {
-        case HAL_PIXEL_FORMAT_RGBA_8888:
-        case HAL_PIXEL_FORMAT_RGBX_8888:
-        case HAL_PIXEL_FORMAT_RGB_888:
-        case HAL_PIXEL_FORMAT_BGRA_8888:
-            return GL_UNSIGNED_BYTE;
-        case HAL_PIXEL_FORMAT_RGB_565:
-            return GL_UNSIGNED_SHORT_5_6_5;
-        case HAL_PIXEL_FORMAT_YV12:
-			return GL_UNSIGNED_BYTE;
-        case HAL_PIXEL_FORMAT_BLOB:
-        case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
-        default:
-			ALOGE("%s badness unsupported format=%x", __FUNCTION__, format);
-    }
-    return GL_UNSIGNED_BYTE;
+	switch(halFormat)
+	{
+	case HAL_PIXEL_FORMAT_RGBA_8888:
+	case HAL_PIXEL_FORMAT_RGBX_8888:
+	case HAL_PIXEL_FORMAT_RGB_888:
+	case HAL_PIXEL_FORMAT_BGRA_8888:
+		return GL_UNSIGNED_BYTE;
+	case HAL_PIXEL_FORMAT_RGB_565:
+		return GL_UNSIGNED_SHORT_5_6_5;
+	case HAL_PIXEL_FORMAT_YV12:
+		return GL_UNSIGNED_BYTE;
+	case HAL_PIXEL_FORMAT_BLOB:
+	case HAL_PIXEL_FORMAT_IMPLEMENTATION_DEFINED:
+	default:
+		ALOGE("%s badness unsupported HAL format=%x", __FUNCTION__, halFormat);
+	}
+
+	return GL_UNSIGNED_BYTE;
 }
diff --git a/src/OpenGL/common/AndroidCommon.hpp b/src/OpenGL/common/AndroidCommon.hpp
index 15c6224..6112970 100644
--- a/src/OpenGL/common/AndroidCommon.hpp
+++ b/src/OpenGL/common/AndroidCommon.hpp
@@ -1,10 +1,9 @@
 #ifndef ANDROID_COMMON
 #define ANDROID_COMMON
 
-// Used internally
-GLenum getColorFormatFromAndroid(int format);
+#include <GLES/gl.h>
 
-// Used internally
-GLenum getPixelFormatFromAndroid(int format);
+GLenum GLPixelFormatFromAndroid(int format);
+GLenum GLPixelTypeFromAndroid(int format);
 
 #endif  // ANDROID_COMMON
diff --git a/src/OpenGL/common/Image.hpp b/src/OpenGL/common/Image.hpp
index 3b09bc7..f2fc2af 100644
--- a/src/OpenGL/common/Image.hpp
+++ b/src/OpenGL/common/Image.hpp
@@ -181,8 +181,8 @@
 public:

 	explicit AndroidNativeImage(ANativeWindowBuffer *nativeBuffer)

 		: egl::Image(0, nativeBuffer->width, nativeBuffer->height, 1,

-					getColorFormatFromAndroid(nativeBuffer->format),

-					getPixelFormatFromAndroid(nativeBuffer->format)),

+		             GLPixelFormatFromAndroid(nativeBuffer->format),

+		             GLPixelTypeFromAndroid(nativeBuffer->format)),

 		  nativeBuffer(nativeBuffer)

 {

     nativeBuffer->common.incRef(&nativeBuffer->common);

@@ -204,25 +204,30 @@
 	virtual void *lockInternal(int x, int y, int z, sw::Lock lock, sw::Accessor client)

 	{

 		LOGLOCK("image=%p op=%s.swsurface lock=%d", this, __FUNCTION__, lock);

+

 		// Always do this for reference counting.

 		void *data = sw::Surface::lockInternal(x, y, z, lock, client);

+

 		if(nativeBuffer)

 		{

-			if (x || y || z)

+			if(x != 0 || y != 0 || z != 0)

 			{

 				ALOGI("badness: %s called with unsupported parms: image=%p x=%d y=%d z=%d", __FUNCTION__, this, x, y, z);

 			}

+

 			LOGLOCK("image=%p op=%s.ani lock=%d", this, __FUNCTION__, lock);

+

 			// Lock the ANativeWindowBuffer and use its address.

-			data = lockNativeBuffer(

-				GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN);

-			if (lock == sw::LOCK_UNLOCKED)

+			data = lockNativeBuffer(GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN);

+

+			if(lock == sw::LOCK_UNLOCKED)

 			{

 				// We're never going to get a corresponding unlock, so unlock

 				// immediately. This keeps the gralloc reference counts sane.

 				unlockNativeBuffer();

 			}

 		}

+

 		return data;

 	}

 

@@ -233,6 +238,7 @@
 			LOGLOCK("image=%p op=%s.ani", this, __FUNCTION__);

 			unlockNativeBuffer();

 		}

+

 		LOGLOCK("image=%p op=%s.swsurface", this, __FUNCTION__);

 		sw::Surface::unlockInternal();

 	}

@@ -241,6 +247,7 @@
 	{

 		LOGLOCK("image=%p op=%s lock=%d", this, __FUNCTION__, lock);

 		(void)sw::Surface::lockExternal(left, top, 0, lock, sw::PUBLIC);

+

 		return lockNativeBuffer(GRALLOC_USAGE_SW_READ_OFTEN | GRALLOC_USAGE_SW_WRITE_OFTEN);

 	}

 

@@ -248,16 +255,16 @@
 	{

 		LOGLOCK("image=%p op=%s.ani", this, __FUNCTION__);

 		unlockNativeBuffer();

+

 		LOGLOCK("image=%p op=%s.swsurface", this, __FUNCTION__);

 		sw::Surface::unlockExternal();

 	}

 

 	void* lockNativeBuffer(int usage)

 	{

-		void *buffer = 0;

-		GrallocModule::getInstance()->lock(

-			nativeBuffer->handle, usage, 0, 0,

-			nativeBuffer->width, nativeBuffer->height, &buffer);

+		void *buffer = nullptr;

+		GrallocModule::getInstance()->lock(nativeBuffer->handle, usage, 0, 0, nativeBuffer->width, nativeBuffer->height, &buffer);

+

 		return buffer;

 	}