Store the native display as an opaque pointer.

Bug 18314459

Change-Id: I63e56d626bd1838803d1de71b417b7e40242c5e9
Reviewed-on: https://swiftshader-review.googlesource.com/4390
Reviewed-by: Nicolas Capens <capn@google.com>
Tested-by: Nicolas Capens <capn@google.com>
diff --git a/src/Main/FrameBufferAndroid.hpp b/src/Main/FrameBufferAndroid.hpp
index 7e7acde..359cea9 100644
--- a/src/Main/FrameBufferAndroid.hpp
+++ b/src/Main/FrameBufferAndroid.hpp
@@ -16,10 +16,10 @@
 
         ~FrameBufferAndroid();
 
-        void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};

-		void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;

-

-		void *lock() override;

+        void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};
+		void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;
+
+		void *lock() override;
 		void unlock() override;
 
         bool setSwapRectangle(int l, int t, int w, int h);
diff --git a/src/Main/FrameBufferWin.cpp b/src/Main/FrameBufferWin.cpp
index 8765171..860a424 100644
--- a/src/Main/FrameBufferWin.cpp
+++ b/src/Main/FrameBufferWin.cpp
@@ -69,7 +69,7 @@
 	return 0;

 }

 

-sw::FrameBuffer *createFrameBuffer(HDC display, HWND window, int width, int height)

+sw::FrameBuffer *createFrameBuffer(void *display, HWND window, int width, int height)

 {

 	return createFrameBufferWin(window, width, height, false, false);

 }

diff --git a/src/Main/FrameBufferX11.cpp b/src/Main/FrameBufferX11.cpp
index 245805f..e079e8c 100644
--- a/src/Main/FrameBufferX11.cpp
+++ b/src/Main/FrameBufferX11.cpp
@@ -1,150 +1,150 @@
-// SwiftShader Software Renderer

-//

-// Copyright(c) 2005-2012 TransGaming Inc.

-//

-// All rights reserved. No part of this software may be copied, distributed, transmitted,

-// transcribed, stored in a retrieval system, translated into any human or computer

-// language by any means, or disclosed to third parties without the explicit written

-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express

-// or implied, including but not limited to any patent rights, are granted to you.

-//

-

-// Surface.cpp: Implements the egl::Surface class, representing a drawing surface

-// such as the client area of a window, including any back buffers.

-// Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.

-

-#include "FrameBufferX11.hpp"

-

-#include "libX11.hpp"

-

-#include <sys/ipc.h>

-#include <sys/shm.h>

-#include <string.h>

-#include <assert.h>

-

-namespace sw

-{

-	static int (*PreviousXErrorHandler)(Display *display, XErrorEvent *event) = 0;

-	static bool shmBadAccess = false;

-

-	// Catches BadAcces errors so we can fall back to not using MIT-SHM

-	static int XShmErrorHandler(Display *display, XErrorEvent *event)

-	{

-		if(event->error_code == BadAccess)

-		{

-			shmBadAccess = true;

-			return 0;

-		}

-		else

-		{

-			return PreviousXErrorHandler(display, event);

-		}

-	}

-

-	FrameBufferX11::FrameBufferX11(Display *display, Window window, int width, int height) : FrameBuffer(width, height, false, false), ownX11(!display), x_display(display), x_window(window)

-	{

-		if(!x_display)

-		{

-			x_display = libX11->XOpenDisplay(0);

-		}

-

-		int screen = DefaultScreen(x_display);

-		x_gc = libX11->XDefaultGC(x_display, screen);

-		int depth = libX11->XDefaultDepth(x_display, screen);

-

-		Status status = libX11->XMatchVisualInfo(x_display, screen, 32, TrueColor, &x_visual);

-		bool match = (status != 0 && x_visual.blue_mask == 0xFF);   // Prefer X8R8G8B8

-		Visual *visual = match ? x_visual.visual : libX11->XDefaultVisual(x_display, screen);

-

-		mit_shm = (libX11->XShmQueryExtension && libX11->XShmQueryExtension(x_display) == True);

-

-		if(mit_shm)

-		{

-			x_image = libX11->XShmCreateImage(x_display, visual, depth, ZPixmap, 0, &shminfo, width, height);

-

-			shminfo.shmid = shmget(IPC_PRIVATE, x_image->bytes_per_line * x_image->height, IPC_CREAT | SHM_R | SHM_W);

-			shminfo.shmaddr = x_image->data = buffer = (char*)shmat(shminfo.shmid, 0, 0);

-			shminfo.readOnly = False;

-

-			PreviousXErrorHandler = libX11->XSetErrorHandler(XShmErrorHandler);

-			libX11->XShmAttach(x_display, &shminfo);   // May produce a BadAccess error

-			libX11->XSync(x_display, False);

-			libX11->XSetErrorHandler(PreviousXErrorHandler);

-

-			if(shmBadAccess)

-			{

-				mit_shm = false;

-

-				XDestroyImage(x_image);

-				shmdt(shminfo.shmaddr);

-				shmctl(shminfo.shmid, IPC_RMID, 0);

-

-				shmBadAccess = false;

-			}

-		}

-

-		if(!mit_shm)

-		{

-			buffer = new char[width * height * 4];

-			x_image = libX11->XCreateImage(x_display, visual, depth, ZPixmap, 0, buffer, width, height, 32, width * 4);

-		}

-	}

-

-	FrameBufferX11::~FrameBufferX11()

-	{

-		if(!mit_shm)

-		{

-			x_image->data = 0;

-			XDestroyImage(x_image);

-

-			delete[] buffer;

-			buffer = 0;

-		}

-		else

-		{

-			libX11->XShmDetach(x_display, &shminfo);

-			XDestroyImage(x_image);

-			shmdt(shminfo.shmaddr);

-			shmctl(shminfo.shmid, IPC_RMID, 0);

-		}

-

-		if(ownX11)

-		{

-			libX11->XCloseDisplay(x_display);

-		}

-	}

-

-	void *FrameBufferX11::lock()

-	{

-		stride = x_image->bytes_per_line;

-		locked = buffer;

-

-		return locked;

-	}

-

-	void FrameBufferX11::unlock()

-	{

-		locked = 0;

-	}

-

-	void FrameBufferX11::blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride)

-	{

-		copy(source, sourceFormat, sourceStride);

-

-		if(!mit_shm)

-		{

-			libX11->XPutImage(x_display, x_window, x_gc, x_image, 0, 0, 0, 0, width, height);

-		}

-		else

-		{

-			libX11->XShmPutImage(x_display, x_window, x_gc, x_image, 0, 0, 0, 0, width, height, False);

-		}

-

-		libX11->XSync(x_display, False);

-	}

-}

-

-sw::FrameBuffer *createFrameBuffer(Display *display, Window window, int width, int height)

-{

-	return new sw::FrameBufferX11(display, window, width, height);

-}

+// SwiftShader Software Renderer
+//
+// Copyright(c) 2005-2012 TransGaming Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// Surface.cpp: Implements the egl::Surface class, representing a drawing surface
+// such as the client area of a window, including any back buffers.
+// Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.
+
+#include "FrameBufferX11.hpp"
+
+#include "libX11.hpp"
+
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <string.h>
+#include <assert.h>
+
+namespace sw
+{
+	static int (*PreviousXErrorHandler)(Display *display, XErrorEvent *event) = 0;
+	static bool shmBadAccess = false;
+
+	// Catches BadAcces errors so we can fall back to not using MIT-SHM
+	static int XShmErrorHandler(Display *display, XErrorEvent *event)
+	{
+		if(event->error_code == BadAccess)
+		{
+			shmBadAccess = true;
+			return 0;
+		}
+		else
+		{
+			return PreviousXErrorHandler(display, event);
+		}
+	}
+
+	FrameBufferX11::FrameBufferX11(Display *display, Window window, int width, int height) : FrameBuffer(width, height, false, false), ownX11(!display), x_display(display), x_window(window)
+	{
+		if(!x_display)
+		{
+			x_display = libX11->XOpenDisplay(0);
+		}
+
+		int screen = DefaultScreen(x_display);
+		x_gc = libX11->XDefaultGC(x_display, screen);
+		int depth = libX11->XDefaultDepth(x_display, screen);
+
+		Status status = libX11->XMatchVisualInfo(x_display, screen, 32, TrueColor, &x_visual);
+		bool match = (status != 0 && x_visual.blue_mask == 0xFF);   // Prefer X8R8G8B8
+		Visual *visual = match ? x_visual.visual : libX11->XDefaultVisual(x_display, screen);
+
+		mit_shm = (libX11->XShmQueryExtension && libX11->XShmQueryExtension(x_display) == True);
+
+		if(mit_shm)
+		{
+			x_image = libX11->XShmCreateImage(x_display, visual, depth, ZPixmap, 0, &shminfo, width, height);
+
+			shminfo.shmid = shmget(IPC_PRIVATE, x_image->bytes_per_line * x_image->height, IPC_CREAT | SHM_R | SHM_W);
+			shminfo.shmaddr = x_image->data = buffer = (char*)shmat(shminfo.shmid, 0, 0);
+			shminfo.readOnly = False;
+
+			PreviousXErrorHandler = libX11->XSetErrorHandler(XShmErrorHandler);
+			libX11->XShmAttach(x_display, &shminfo);   // May produce a BadAccess error
+			libX11->XSync(x_display, False);
+			libX11->XSetErrorHandler(PreviousXErrorHandler);
+
+			if(shmBadAccess)
+			{
+				mit_shm = false;
+
+				XDestroyImage(x_image);
+				shmdt(shminfo.shmaddr);
+				shmctl(shminfo.shmid, IPC_RMID, 0);
+
+				shmBadAccess = false;
+			}
+		}
+
+		if(!mit_shm)
+		{
+			buffer = new char[width * height * 4];
+			x_image = libX11->XCreateImage(x_display, visual, depth, ZPixmap, 0, buffer, width, height, 32, width * 4);
+		}
+	}
+
+	FrameBufferX11::~FrameBufferX11()
+	{
+		if(!mit_shm)
+		{
+			x_image->data = 0;
+			XDestroyImage(x_image);
+
+			delete[] buffer;
+			buffer = 0;
+		}
+		else
+		{
+			libX11->XShmDetach(x_display, &shminfo);
+			XDestroyImage(x_image);
+			shmdt(shminfo.shmaddr);
+			shmctl(shminfo.shmid, IPC_RMID, 0);
+		}
+
+		if(ownX11)
+		{
+			libX11->XCloseDisplay(x_display);
+		}
+	}
+
+	void *FrameBufferX11::lock()
+	{
+		stride = x_image->bytes_per_line;
+		locked = buffer;
+
+		return locked;
+	}
+
+	void FrameBufferX11::unlock()
+	{
+		locked = 0;
+	}
+
+	void FrameBufferX11::blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride)
+	{
+		copy(source, sourceFormat, sourceStride);
+
+		if(!mit_shm)
+		{
+			libX11->XPutImage(x_display, x_window, x_gc, x_image, 0, 0, 0, 0, width, height);
+		}
+		else
+		{
+			libX11->XShmPutImage(x_display, x_window, x_gc, x_image, 0, 0, 0, 0, width, height, False);
+		}
+
+		libX11->XSync(x_display, False);
+	}
+}
+
+sw::FrameBuffer *createFrameBuffer(void *display, Window window, int width, int height)
+{
+	return new sw::FrameBufferX11((::Display*)display, window, width, height);
+}
diff --git a/src/Main/FrameBufferX11.hpp b/src/Main/FrameBufferX11.hpp
index c5e8b53..0473553 100644
--- a/src/Main/FrameBufferX11.hpp
+++ b/src/Main/FrameBufferX11.hpp
@@ -1,56 +1,56 @@
-// SwiftShader Software Renderer

-//

-// Copyright(c) 2005-2012 TransGaming Inc.

-//

-// All rights reserved. No part of this software may be copied, distributed, transmitted,

-// transcribed, stored in a retrieval system, translated into any human or computer

-// language by any means, or disclosed to third parties without the explicit written

-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express

-// or implied, including but not limited to any patent rights, are granted to you.

-//

-

-// Surface.cpp: Implements the egl::Surface class, representing a drawing surface

-// such as the client area of a window, including any back buffers.

-// Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.

-

-#ifndef sw_FrameBufferX11_hpp

-#define sw_FrameBufferX11_hpp

-

-#include "Main/FrameBuffer.hpp"

-#include "Common/Debug.hpp"

-

-#include <X11/Xlib.h>

-#include <X11/Xutil.h>

-#include <X11/extensions/XShm.h>

-

-namespace sw

-{

-	class FrameBufferX11 : public FrameBuffer

-	{

-	public:

-		FrameBufferX11(Display *display, Window window, int width, int height);

-

-		~FrameBufferX11();

-

-		void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};

-		void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;

-

-		void *lock() override;

-		void unlock() override;

-

-	private:

-		bool ownX11;

-		Display *x_display;

-		Window x_window;

-		XImage *x_image;

+// SwiftShader Software Renderer
+//
+// Copyright(c) 2005-2012 TransGaming Inc.
+//
+// All rights reserved. No part of this software may be copied, distributed, transmitted,
+// transcribed, stored in a retrieval system, translated into any human or computer
+// language by any means, or disclosed to third parties without the explicit written
+// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
+// or implied, including but not limited to any patent rights, are granted to you.
+//
+
+// Surface.cpp: Implements the egl::Surface class, representing a drawing surface
+// such as the client area of a window, including any back buffers.
+// Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.
+
+#ifndef sw_FrameBufferX11_hpp
+#define sw_FrameBufferX11_hpp
+
+#include "Main/FrameBuffer.hpp"
+#include "Common/Debug.hpp"
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/XShm.h>
+
+namespace sw
+{
+	class FrameBufferX11 : public FrameBuffer
+	{
+	public:
+		FrameBufferX11(Display *display, Window window, int width, int height);
+
+		~FrameBufferX11();
+
+		void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};
+		void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;
+
+		void *lock() override;
+		void unlock() override;
+
+	private:
+		bool ownX11;
+		Display *x_display;
+		Window x_window;
+		XImage *x_image;
 		GC x_gc;
-		XVisualInfo x_visual;

-

-		bool mit_shm;

-		XShmSegmentInfo shminfo;

-

-		char *buffer;

-	};

-}

-

-#endif   // sw_FrameBufferX11_hpp

+		XVisualInfo x_visual;
+
+		bool mit_shm;
+		XShmSegmentInfo shminfo;
+
+		char *buffer;
+	};
+}
+
+#endif   // sw_FrameBufferX11_hpp
diff --git a/src/OpenGL/libEGL/Display.cpp b/src/OpenGL/libEGL/Display.cpp
index 8715d95..4ec679b 100644
--- a/src/OpenGL/libEGL/Display.cpp
+++ b/src/OpenGL/libEGL/Display.cpp
@@ -38,23 +38,11 @@
 
 namespace egl
 {
-typedef std::map<EGLNativeDisplayType, Display*> DisplayMap;
 
-// Protects the global displays map.
-sw::BackoffLock displays_lock;
-
-// The order of construction of globals is undefined in C++.
-// This function ensures that construction has completed before we attempt
-// to access displays.
-DisplayMap* getDisplays() {
-  static DisplayMap displays;
-  return &displays;
-}
-
-egl::Display *Display::getPlatformDisplay(EGLenum platform, EGLNativeDisplayType displayId)
+egl::Display *Display::getPlatformDisplay(EGLenum platform, void *nativeDisplay)
 {
     #ifndef __ANDROID__
-        if(platform == EGL_UNKNOWN)   // Default
+        if(platform == EGL_UNKNOWN)   // Default platform
         {
             #if defined(__unix__)
 				if(libX11)
@@ -68,14 +56,14 @@
             #endif
         }
 
-        if(displayId == EGL_DEFAULT_DISPLAY)
+        if(!nativeDisplay)   // Default display
         {
             if(platform == EGL_PLATFORM_X11_EXT)
             {
                 #if defined(__unix__)
 					if(libX11->XOpenDisplay)
 					{
-						displayId = libX11->XOpenDisplay(NULL);
+						nativeDisplay = libX11->XOpenDisplay(NULL);
 					}
 					else
 					{
@@ -88,26 +76,29 @@
         }
         else
         {
-            // FIXME: Check if displayId is a valid display device context for <platform>
+            // FIXME: Check if nativeDisplay is a valid display device context for <platform>
         }
     #endif
 
-    egl::Display *rval;
-    displays_lock.lock();
-    DisplayMap* displays = getDisplays();
-    if (displays->find(displayId) != displays->end())
-    {
-        rval = (*displays)[displayId];
-    } else {
-        rval = new egl::Display(platform, displayId);
+	static std::map<void*, Display*> displays;
+	static sw::BackoffLock displaysMutex;
 
-        (*displays)[displayId] = rval;
+	displaysMutex.lock();
+
+    egl::Display *display = displays[nativeDisplay];
+
+    if(!display)
+	{
+        display = new egl::Display(platform, nativeDisplay);
+        displays[nativeDisplay] = display;
     }
-    displays_lock.unlock();
-    return rval;
+
+    displaysMutex.unlock();
+
+    return display;
 }
 
-Display::Display(EGLenum platform, EGLNativeDisplayType displayId) : platform(platform), displayId(displayId)
+Display::Display(EGLenum platform, void *nativeDisplay) : platform(platform), nativeDisplay(nativeDisplay)
 {
     mMinSwapInterval = 1;
     mMaxSwapInterval = 1;
@@ -116,10 +107,6 @@
 Display::~Display()
 {
     terminate();
-
-    displays_lock.lock();
-    getDisplays()->erase(displayId);
-    displays_lock.unlock();
 }
 
 static void cpuid(int registers[4], int info)
@@ -561,7 +548,7 @@
         if(platform == EGL_PLATFORM_X11_EXT)
         {
             XWindowAttributes windowAttributes;
-            Status status = libX11->XGetWindowAttributes(displayId, window, &windowAttributes);
+            Status status = libX11->XGetWindowAttributes((::Display*)nativeDisplay, window, &windowAttributes);
 
             return status == True;
         }
@@ -596,9 +583,9 @@
     return mMaxSwapInterval;
 }
 
-EGLNativeDisplayType Display::getNativeDisplay() const
+void *Display::getNativeDisplay() const
 {
-	return displayId;
+	return nativeDisplay;
 }
 
 sw::Format Display::getDisplayFormat() const
@@ -680,7 +667,7 @@
     #else
         if(platform == EGL_PLATFORM_X11_EXT)
         {
-            Screen *screen = libX11->XDefaultScreenOfDisplay(displayId);
+            Screen *screen = libX11->XDefaultScreenOfDisplay((::Display*)nativeDisplay);
             unsigned int bpp = libX11->XPlanesOfScreen(screen);
 
             switch(bpp)
diff --git a/src/OpenGL/libEGL/Display.h b/src/OpenGL/libEGL/Display.h
index 76e856f..da1b442 100644
--- a/src/OpenGL/libEGL/Display.h
+++ b/src/OpenGL/libEGL/Display.h
@@ -28,9 +28,7 @@
 	class Display

 	{

 	public:

-		~Display();

-

-		static egl::Display *getPlatformDisplay(EGLenum platform, EGLNativeDisplayType displayId);

+		static egl::Display *getPlatformDisplay(EGLenum platform, void *nativeDisplay);

 

 		bool initialize();

 		void terminate();

@@ -55,20 +53,21 @@
 		EGLint getMinSwapInterval() const;

 		EGLint getMaxSwapInterval() const;

 

-		EGLNativeDisplayType getNativeDisplay() const;

+		void *getNativeDisplay() const;

 		const char *getExtensionString() const;

 

 	private:

-		Display(EGLenum platform, EGLNativeDisplayType displayId);

+		Display(EGLenum platform, void *nativeDisplay);

+		~Display();

 

 		sw::Format getDisplayFormat() const;

 

         const EGLenum platform;

-		const EGLNativeDisplayType displayId;

+		void *const nativeDisplay;

 

 		EGLint mMaxSwapInterval;

 		EGLint mMinSwapInterval;

-    

+

 		typedef std::set<Surface*> SurfaceSet;

 		SurfaceSet mSurfaceSet;

 

diff --git a/src/OpenGL/libEGL/Surface.cpp b/src/OpenGL/libEGL/Surface.cpp
index 3db1db2..538d010 100644
--- a/src/OpenGL/libEGL/Surface.cpp
+++ b/src/OpenGL/libEGL/Surface.cpp
@@ -246,7 +246,7 @@
 		return reset(width, height);

 	#else

 		XWindowAttributes windowAttributes;

-		libX11->XGetWindowAttributes(display->getNativeDisplay(), window, &windowAttributes);

+		libX11->XGetWindowAttributes((::Display*)display->getNativeDisplay(), window, &windowAttributes);

 

 		return reset(windowAttributes.width, windowAttributes.height);

 	#endif

@@ -286,7 +286,7 @@
 		int clientHeight; window->query(window, NATIVE_WINDOW_HEIGHT, &clientHeight);

 	#else

 		XWindowAttributes windowAttributes;

-		libX11->XGetWindowAttributes(display->getNativeDisplay(), window, &windowAttributes);

+		libX11->XGetWindowAttributes((::Display*)display->getNativeDisplay(), window, &windowAttributes);

 

 		int clientWidth = windowAttributes.width;

 		int clientHeight = windowAttributes.height;

diff --git a/src/OpenGL/libEGL/libEGL.cpp b/src/OpenGL/libEGL/libEGL.cpp
index 1aff963..21065c4 100644
--- a/src/OpenGL/libEGL/libEGL.cpp
+++ b/src/OpenGL/libEGL/libEGL.cpp
@@ -108,7 +108,14 @@
 {

 	TRACE("(EGLNativeDisplayType display_id = %p)", display_id);

 

-	return egl::Display::getPlatformDisplay(EGL_UNKNOWN, display_id);

+	if(display_id == EGL_DEFAULT_DISPLAY)

+	{

+		return egl::Display::getPlatformDisplay(EGL_UNKNOWN, nullptr);

+	}

+	else

+	{

+		return egl::Display::getPlatformDisplay(EGL_UNKNOWN, reinterpret_cast<void*>((uintptr_t)display_id));

+	}

 }

 

 EGLBoolean Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)

@@ -948,7 +955,7 @@
 {

 	TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list);

 

-	return egl::Display::getPlatformDisplay(platform, (EGLNativeDisplayType)native_display);

+	return egl::Display::getPlatformDisplay(platform, native_display);

 }

 

 EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)

diff --git a/src/OpenGL/libGL/main.h b/src/OpenGL/libGL/main.h
index 28d5802..6b86940 100644
--- a/src/OpenGL/libGL/main.h
+++ b/src/OpenGL/libGL/main.h
@@ -1,71 +1,71 @@
-// SwiftShader Software Renderer
-//
-// Copyright(c) 2005-2012 TransGaming Inc.
-//
-// All rights reserved. No part of this software may be copied, distributed, transmitted,
-// transcribed, stored in a retrieval system, translated into any human or computer
-// language by any means, or disclosed to third parties without the explicit written
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express
-// or implied, including but not limited to any patent rights, are granted to you.
-//
-
-// main.h: Management of thread-local data.
-
-#ifndef LIBGL_MAIN_H_
-#define LIBGL_MAIN_H_
-
-#include "Context.h"
-#include "Device.hpp"
-#include "common/debug.h"
-#include "Display.h"
-
-#define _GDI32_
-#include <windows.h>
-#include <GL/GL.h>
-#include <GL/glext.h>
-
-namespace gl
-{
-	struct Current
-	{
-		Context *context;
-		Display *display;
-		Surface *drawSurface;
-		Surface *readSurface;
-	};
-
-	void makeCurrent(Context *context, Display *display, Surface *surface);
-
-	Context *getContext();
-	Display *getDisplay();
-	Device *getDevice();
-	Surface *getCurrentDrawSurface();
-	Surface *getCurrentReadSurface();
-	
-	void setCurrentDisplay(Display *dpy);
-	void setCurrentContext(gl::Context *ctx);
-	void setCurrentDrawSurface(Surface *surface);
-	void setCurrentReadSurface(Surface *surface);
-}
-
-void error(GLenum errorCode);
-
-template<class T>
-T &error(GLenum errorCode, T &returnValue)
-{
-    error(errorCode);
-
-    return returnValue;
-}
-
-template<class T>
-const T &error(GLenum errorCode, const T &returnValue)
-{
-    error(errorCode);
-
-    return returnValue;
-}
-
-extern sw::FrameBuffer *createFrameBuffer(NativeDisplayType display, NativeWindowType window, int width, int height);
-
-#endif   // LIBGL_MAIN_H_
+// SwiftShader Software Renderer

+//

+// Copyright(c) 2005-2012 TransGaming Inc.

+//

+// All rights reserved. No part of this software may be copied, distributed, transmitted,

+// transcribed, stored in a retrieval system, translated into any human or computer

+// language by any means, or disclosed to third parties without the explicit written

+// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express

+// or implied, including but not limited to any patent rights, are granted to you.

+//

+

+// main.h: Management of thread-local data.

+

+#ifndef LIBGL_MAIN_H_

+#define LIBGL_MAIN_H_

+

+#include "Context.h"

+#include "Device.hpp"

+#include "common/debug.h"

+#include "Display.h"

+

+#define _GDI32_

+#include <windows.h>

+#include <GL/GL.h>

+#include <GL/glext.h>

+

+namespace gl

+{

+	struct Current

+	{

+		Context *context;

+		Display *display;

+		Surface *drawSurface;

+		Surface *readSurface;

+	};

+

+	void makeCurrent(Context *context, Display *display, Surface *surface);

+

+	Context *getContext();

+	Display *getDisplay();

+	Device *getDevice();

+	Surface *getCurrentDrawSurface();

+	Surface *getCurrentReadSurface();

+	

+	void setCurrentDisplay(Display *dpy);

+	void setCurrentContext(gl::Context *ctx);

+	void setCurrentDrawSurface(Surface *surface);

+	void setCurrentReadSurface(Surface *surface);

+}

+

+void error(GLenum errorCode);

+

+template<class T>

+T &error(GLenum errorCode, T &returnValue)

+{

+    error(errorCode);

+

+    return returnValue;

+}

+

+template<class T>

+const T &error(GLenum errorCode, const T &returnValue)

+{

+    error(errorCode);

+

+    return returnValue;

+}

+

+extern sw::FrameBuffer *createFrameBuffer(void *display, NativeWindowType window, int width, int height);

+

+#endif   // LIBGL_MAIN_H_

diff --git a/src/OpenGL/libGLES_CM/libGLES_CM.hpp b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
index 864783e..d4b4d75 100644
--- a/src/OpenGL/libGLES_CM/libGLES_CM.hpp
+++ b/src/OpenGL/libGLES_CM/libGLES_CM.hpp
@@ -208,7 +208,7 @@
 	__eglMustCastToProperFunctionPointerType (*es1GetProcAddress)(const char *procname);
 	egl::Image *(*createBackBuffer)(int width, int height, const egl::Config *config);
 	egl::Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);
-	sw::FrameBuffer *(*createFrameBuffer)(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);
+	sw::FrameBuffer *(*createFrameBuffer)(void *display, EGLNativeWindowType window, int width, int height);
 };
 
 class LibGLES_CM
diff --git a/src/OpenGL/libGLES_CM/main.cpp b/src/OpenGL/libGLES_CM/main.cpp
index 38a50aa..2cc06e3 100644
--- a/src/OpenGL/libGLES_CM/main.cpp
+++ b/src/OpenGL/libGLES_CM/main.cpp
@@ -337,7 +337,7 @@
 extern "C" __eglMustCastToProperFunctionPointerType es1GetProcAddress(const char *procname);

 egl::Image *createBackBuffer(int width, int height, const egl::Config *config);

 egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);

-sw::FrameBuffer *createFrameBuffer(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);

+sw::FrameBuffer *createFrameBuffer(void *display, EGLNativeWindowType window, int width, int height);

 

 extern "C"

 {

diff --git a/src/OpenGL/libGLESv2/libGLESv2.hpp b/src/OpenGL/libGLESv2/libGLESv2.hpp
index bde6c0a..afb7224 100644
--- a/src/OpenGL/libGLESv2/libGLESv2.hpp
+++ b/src/OpenGL/libGLESv2/libGLESv2.hpp
@@ -229,7 +229,7 @@
 	__eglMustCastToProperFunctionPointerType (*es2GetProcAddress)(const char *procname);
 	egl::Image *(*createBackBuffer)(int width, int height, const egl::Config *config);
 	egl::Image *(*createDepthStencil)(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);
-	sw::FrameBuffer *(*createFrameBuffer)(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);
+	sw::FrameBuffer *(*createFrameBuffer)(void *display, EGLNativeWindowType window, int width, int height);
 };
 
 class LibGLESv2
diff --git a/src/OpenGL/libGLESv2/main.cpp b/src/OpenGL/libGLESv2/main.cpp
index 1b51f67..6e5f008 100644
--- a/src/OpenGL/libGLESv2/main.cpp
+++ b/src/OpenGL/libGLESv2/main.cpp
@@ -1333,7 +1333,7 @@
 extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname);

 egl::Image *createBackBuffer(int width, int height, const egl::Config *config);

 egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);

-sw::FrameBuffer *createFrameBuffer(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);

+sw::FrameBuffer *createFrameBuffer(void *display, EGLNativeWindowType window, int width, int height);

 

 LibGLESv2exports::LibGLESv2exports()

 {