Add support for Android window size.

Change-Id: Ib96c227367fe10890e576bf99a654b50fa9e06c4
Reviewed-on: https://swiftshader-review.googlesource.com/2671
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Greg Hartman <ghartman@google.com>
diff --git a/src/OpenGL/libEGL/Display.cpp b/src/OpenGL/libEGL/Display.cpp
index 2013e7b..e9be15e 100644
--- a/src/OpenGL/libEGL/Display.cpp
+++ b/src/OpenGL/libEGL/Display.cpp
@@ -20,6 +20,11 @@
 #include "libEGL/Context.hpp"
 #include "common/debug.h"
 
+#ifdef __ANDROID__
+#include <system/window.h>
+#include <GceFrameBufferConfig.h>
+#endif
+
 #include <algorithm>
 #include <vector>
 #include <map>
@@ -31,28 +36,30 @@
 
 egl::Display *Display::getPlatformDisplay(EGLenum platform, EGLNativeDisplayType displayId)
 {
-    if(platform == EGL_UNKNOWN)   // Default
-    {
-        #if defined(__unix__)
-            platform = EGL_PLATFORM_X11_EXT;
-        #endif
-    }
-
-    if(displayId == EGL_DEFAULT_DISPLAY)
-    {
-        if(platform == EGL_PLATFORM_X11_EXT)
+    #ifndef __ANDROID__
+        if(platform == EGL_UNKNOWN)   // Default
         {
             #if defined(__unix__)
-                displayId = XOpenDisplay(NULL);
-            #else
-                return error(EGL_BAD_PARAMETER, (egl::Display*)EGL_NO_DISPLAY);
+                platform = EGL_PLATFORM_X11_EXT;
             #endif
         }
-    }
-    else
-    {
-        // FIXME: Check if displayId is a valid display device context for <platform>
-    }
+
+        if(displayId == EGL_DEFAULT_DISPLAY)
+        {
+            if(platform == EGL_PLATFORM_X11_EXT)
+            {
+                #if defined(__unix__)
+                    displayId = XOpenDisplay(NULL);
+                #else
+                    return error(EGL_BAD_PARAMETER, (egl::Display*)EGL_NO_DISPLAY);
+                #endif
+            }
+        }
+        else
+        {
+            // FIXME: Check if displayId is a valid display device context for <platform>
+        }
+    #endif
 
     if(displays.find(displayId) != displays.end())
     {
@@ -459,6 +466,18 @@
 {
     #if defined(_WIN32)
         return IsWindow(window) == TRUE;
+    #elif defined(__ANDROID__)
+		if(!window)
+		{
+			ALOGE("%s called with window==NULL %s:%d", __FUNCTION__, __FILE__, __LINE__);
+			return false;
+		}
+		if(static_cast<ANativeWindow*>(window)->common.magic != ANDROID_NATIVE_WINDOW_MAGIC)
+		{
+			ALOGE("%s called with window==%p bad magic %s:%d", __FUNCTION__, window, __FILE__, __LINE__);
+			return false;
+		}
+		return true;
     #else
         if(platform == EGL_PLATFORM_X11_EXT)
         {
@@ -467,7 +486,7 @@
 
             return status == True;
         }
-	#endif
+    #endif
 
     return false;
 }
@@ -521,7 +540,12 @@
 		}
 
 		ReleaseDC(0, deviceContext);
-	#else
+	#elif defined(__ANDROID__)
+		displayMode.width = GceFrameBufferConfig::getInstance()->x_res();
+		displayMode.height = GceFrameBufferConfig::getInstance()->y_res();
+		displayMode.format = sw::FORMAT_X8R8G8B8;
+		ALOGI("Returning framebuffer config width=%d height=%d, format=%d", displayMode.width, displayMode.height, displayMode.format);
+    #else
         if(platform == EGL_PLATFORM_X11_EXT)
         {
             Screen *screen = XDefaultScreenOfDisplay(displayId);
diff --git a/src/OpenGL/libEGL/Surface.cpp b/src/OpenGL/libEGL/Surface.cpp
index 7a152aa..7d99988 100644
--- a/src/OpenGL/libEGL/Surface.cpp
+++ b/src/OpenGL/libEGL/Surface.cpp
@@ -118,6 +118,8 @@
 		GetClientRect(mWindow, &windowRect);

 

 		return reset(windowRect.right - windowRect.left, windowRect.bottom - windowRect.top);

+	#elif defined(__ANDROID__)

+		return reset(ANativeWindow_getWidth(mWindow), ANativeWindow_getHeight(mWindow));

 	#else

 		XWindowAttributes windowAttributes;

 		XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes);

@@ -285,6 +287,9 @@
 

 		int clientWidth = client.right - client.left;

 		int clientHeight = client.bottom - client.top;

+	#elif defined(__ANDROID__)

+		int clientWidth = ANativeWindow_getWidth(mWindow);

+		int clientHeight = ANativeWindow_getHeight(mWindow);

 	#else

 		XWindowAttributes windowAttributes;

 		XGetWindowAttributes(mDisplay->getNativeDisplay(), mWindow, &windowAttributes);