Enable x86-64 builds for Android.

Change-Id: Ief54422c0c0d82c773f96f4491bfebb7ee717ba8
Reviewed-on: https://swiftshader-review.googlesource.com/4351
Reviewed-by: Greg Hartman <ghartman@google.com>
Tested-by: Nicolas Capens <capn@google.com>
Reviewed-on: https://swiftshader-review.googlesource.com/4353
Reviewed-by: Nicolas Capens <capn@google.com>
diff --git a/Android.mk b/Android.mk
index 575c18f..1c72393 100644
--- a/Android.mk
+++ b/Android.mk
@@ -20,7 +20,7 @@
 SWIFTSHADER_OPTIM := release
 endif
 
-ifneq ($(filter x86, $(TARGET_ARCH)),)
+ifeq ($(TARGET_ARCH),$(filter $(TARGET_ARCH),x86 x86_64))
 ifneq ($(filter gce_x86 gce calypso, $(TARGET_DEVICE))$(filter sdk_google_%, $(TARGET_PRODUCT)),)
 include $(call all-makefiles-under,$(LOCAL_PATH))
 endif
diff --git a/src/OpenGL/libEGL/Android.mk b/src/OpenGL/libEGL/Android.mk
index ff48bbd..73faaed 100644
--- a/src/OpenGL/libEGL/Android.mk
+++ b/src/OpenGL/libEGL/Android.mk
@@ -70,8 +70,13 @@
 include $(BUILD_SHARED_LIBRARY)
 
 include $(CLEAR_VARS)
-LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/egl
 LOCAL_MODULE := libEGL_swiftshader
+ifdef TARGET_2ND_ARCH
+LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib/egl
+LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64/egl
+else
+LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/egl
+endif
 LOCAL_MODULE_TAGS := optional
 LOCAL_CLANG := true
 LOCAL_SRC_FILES := $(COMMON_SRC_FILES)
diff --git a/src/OpenGL/libEGL/libEGL.cpp b/src/OpenGL/libEGL/libEGL.cpp
index bdf99c3..1aff963 100644
--- a/src/OpenGL/libEGL/libEGL.cpp
+++ b/src/OpenGL/libEGL/libEGL.cpp
@@ -886,6 +886,13 @@
 		}

 	}

 

+	#if defined(__ANDROID__)

+		if(target == EGL_NATIVE_BUFFER_ANDROID)

+		{

+			return new AndroidNativeImage(reinterpret_cast<ANativeWindowBuffer*>(buffer));

+		}

+	#endif

+

 	GLuint name = reinterpret_cast<intptr_t>(buffer);

 

 	if(name == 0)

@@ -893,13 +900,6 @@
 		return error(EGL_BAD_PARAMETER, EGL_NO_IMAGE_KHR);

 	}

 

-	#if defined(__ANDROID__)

-		if(target == EGL_NATIVE_BUFFER_ANDROID)

-		{

-			return new AndroidNativeImage(reinterpret_cast<ANativeWindowBuffer*>(name));

-		}

-	#endif

-

 	EGLenum validationResult = context->validateSharedImage(target, name, textureLevel);

 

 	if(validationResult != EGL_SUCCESS)

diff --git a/src/OpenGL/libEGL/libEGL.hpp b/src/OpenGL/libEGL/libEGL.hpp
index a2496a2..8c0d949 100644
--- a/src/OpenGL/libEGL/libEGL.hpp
+++ b/src/OpenGL/libEGL/libEGL.hpp
@@ -84,7 +84,11 @@
 			#if defined(_WIN32)
 			const char *libEGL_lib[] = {"libEGL.dll", "libEGL_translator.dll"};
 			#elif defined(__ANDROID__)
+			#if defined(__LP64__)
+			const char *libEGL_lib[] = {"/vendor/lib64/egl/libEGL_swiftshader.so"};
+			#else
 			const char *libEGL_lib[] = {"/vendor/lib/egl/libEGL_swiftshader.so"};
+			#endif
 			#elif defined(__LP64__)
 			const char *libEGL_lib[] = {"lib64EGL_translator.so", "libEGL.so.1", "libEGL.so"};
 			#else
diff --git a/src/OpenGL/libGLES_CM/Android.mk b/src/OpenGL/libGLES_CM/Android.mk
index f547576..f005853 100644
--- a/src/OpenGL/libGLES_CM/Android.mk
+++ b/src/OpenGL/libGLES_CM/Android.mk
@@ -100,7 +100,12 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := libGLESv1_CM_swiftshader
+ifdef TARGET_2ND_ARCH
+LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib/egl
+LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64/egl
+else
 LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/egl
+endif
 LOCAL_MODULE_TAGS := optional
 LOCAL_CLANG := true
 LOCAL_SRC_FILES += $(COMMON_SRC_FILES)
diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.hpp b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
index 91537b7..864783e 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
@@ -243,7 +243,11 @@
 			#if defined(_WIN32)
 			const char *libGLES_CM_lib[] = {"libGLES_CM.dll", "libGLES_CM_translator.dll"};
 			#elif defined(__ANDROID__)
+			#if defined(__LP64__)
+			const char *libGLES_CM_lib[] = {"/vendor/lib64/egl/libGLESv1_CM_swiftshader.so"};
+			#else
 			const char *libGLES_CM_lib[] = {"/vendor/lib/egl/libGLESv1_CM_swiftshader.so"};
+			#endif
 			#elif defined(__LP64__)
 			const char *libGLES_CM_lib[] = {"lib64GLES_CM_translator.so", "libGLES_CM.so.1", "libGLES_CM.so"};
 			#else
diff --git a/src/OpenGL/libGLESv2/Android.mk b/src/OpenGL/libGLESv2/Android.mk
index 2b4158d..3f2cb1e 100644
--- a/src/OpenGL/libGLESv2/Android.mk
+++ b/src/OpenGL/libGLESv2/Android.mk
@@ -104,7 +104,12 @@
 
 include $(CLEAR_VARS)
 LOCAL_MODULE := libGLESv2_swiftshader
+ifdef TARGET_2ND_ARCH
+LOCAL_MODULE_PATH_32 := $(TARGET_OUT_VENDOR)/lib/egl
+LOCAL_MODULE_PATH_64 := $(TARGET_OUT_VENDOR)/lib64/egl
+else
 LOCAL_MODULE_PATH := $(TARGET_OUT_VENDOR)/lib/egl
+endif
 LOCAL_MODULE_TAGS := optional
 LOCAL_CLANG := true
 LOCAL_SRC_FILES += $(COMMON_SRC_FILES)
diff --git a/src/OpenGL/libGLESv2/libGLESv2.cpp b/src/OpenGL/libGLESv2/libGLESv2.cpp
index ba400ce..1e140af 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.cpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.cpp
@@ -772,7 +772,7 @@
 

 	if(context)

 	{

-		es2::Buffer *buffer;

+		es2::Buffer *buffer = nullptr;

 		if(!context->getBuffer(target, &buffer))

 		{

 			return error(GL_INVALID_ENUM);

@@ -805,7 +805,7 @@
 

 	if(context)

 	{

-		es2::Buffer *buffer;

+		es2::Buffer *buffer = nullptr;

 		if(!context->getBuffer(target, &buffer))

 		{

 			return error(GL_INVALID_ENUM);

diff --git a/src/OpenGL/libGLESv2/libGLESv2.hpp b/src/OpenGL/libGLESv2/libGLESv2.hpp
index 7eb8609..4cbd7ec 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.hpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.hpp
@@ -249,7 +249,11 @@
 			#if defined(_WIN32)
 			const char *libGLESv2_lib[] = {"libGLESv2.dll", "libGLES_V2_translator.dll"};
 			#elif defined(__ANDROID__)
+			#if defined(__LP64__)
+			const char *libGLESv2_lib[] = {"/vendor/lib64/egl/libGLESv2_swiftshader.so"};
+			#else
 			const char *libGLESv2_lib[] = {"/vendor/lib/egl/libGLESv2_swiftshader.so"};
+			#endif
 			#elif defined(__LP64__)
 			const char *libGLESv2_lib[] = {"lib64GLES_V2_translator.so", "libGLESv2.so.2", "libGLESv2.so"};
 			#else