OSDN Git Service

Store the native display as an opaque pointer.
authorNicolas Capens <capn@google.com>
Fri, 11 Dec 2015 22:24:40 +0000 (17:24 -0500)
committerNicolas Capens <capn@google.com>
Mon, 21 Dec 2015 21:48:09 +0000 (21:48 +0000)
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>
13 files changed:
src/Main/FrameBufferAndroid.hpp
src/Main/FrameBufferWin.cpp
src/Main/FrameBufferX11.cpp
src/Main/FrameBufferX11.hpp
src/OpenGL/libEGL/Display.cpp
src/OpenGL/libEGL/Display.h
src/OpenGL/libEGL/Surface.cpp
src/OpenGL/libEGL/libEGL.cpp
src/OpenGL/libGL/main.h
src/OpenGL/libGLES_CM/libGLES_CM.hpp
src/OpenGL/libGLES_CM/main.cpp
src/OpenGL/libGLESv2/libGLESv2.hpp
src/OpenGL/libGLESv2/main.cpp

index 7e7acde..359cea9 100644 (file)
@@ -16,10 +16,10 @@ namespace sw
 
         ~FrameBufferAndroid();
 
-        void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};\r
-               void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;\r
-\r
-               void *lock() override;\r
+        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);
index 8765171..860a424 100644 (file)
@@ -69,7 +69,7 @@ sw::FrameBufferWin *createFrameBufferWin(HWND windowHandle, int width, int heigh
        return 0;\r
 }\r
 \r
-sw::FrameBuffer *createFrameBuffer(HDC display, HWND window, int width, int height)\r
+sw::FrameBuffer *createFrameBuffer(void *display, HWND window, int width, int height)\r
 {\r
        return createFrameBufferWin(window, width, height, false, false);\r
 }\r
index 245805f..e079e8c 100644 (file)
-// SwiftShader Software Renderer\r
-//\r
-// Copyright(c) 2005-2012 TransGaming Inc.\r
-//\r
-// All rights reserved. No part of this software may be copied, distributed, transmitted,\r
-// transcribed, stored in a retrieval system, translated into any human or computer\r
-// language by any means, or disclosed to third parties without the explicit written\r
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express\r
-// or implied, including but not limited to any patent rights, are granted to you.\r
-//\r
-\r
-// Surface.cpp: Implements the egl::Surface class, representing a drawing surface\r
-// such as the client area of a window, including any back buffers.\r
-// Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.\r
-\r
-#include "FrameBufferX11.hpp"\r
-\r
-#include "libX11.hpp"\r
-\r
-#include <sys/ipc.h>\r
-#include <sys/shm.h>\r
-#include <string.h>\r
-#include <assert.h>\r
-\r
-namespace sw\r
-{\r
-       static int (*PreviousXErrorHandler)(Display *display, XErrorEvent *event) = 0;\r
-       static bool shmBadAccess = false;\r
-\r
-       // Catches BadAcces errors so we can fall back to not using MIT-SHM\r
-       static int XShmErrorHandler(Display *display, XErrorEvent *event)\r
-       {\r
-               if(event->error_code == BadAccess)\r
-               {\r
-                       shmBadAccess = true;\r
-                       return 0;\r
-               }\r
-               else\r
-               {\r
-                       return PreviousXErrorHandler(display, event);\r
-               }\r
-       }\r
-\r
-       FrameBufferX11::FrameBufferX11(Display *display, Window window, int width, int height) : FrameBuffer(width, height, false, false), ownX11(!display), x_display(display), x_window(window)\r
-       {\r
-               if(!x_display)\r
-               {\r
-                       x_display = libX11->XOpenDisplay(0);\r
-               }\r
-\r
-               int screen = DefaultScreen(x_display);\r
-               x_gc = libX11->XDefaultGC(x_display, screen);\r
-               int depth = libX11->XDefaultDepth(x_display, screen);\r
-\r
-               Status status = libX11->XMatchVisualInfo(x_display, screen, 32, TrueColor, &x_visual);\r
-               bool match = (status != 0 && x_visual.blue_mask == 0xFF);   // Prefer X8R8G8B8\r
-               Visual *visual = match ? x_visual.visual : libX11->XDefaultVisual(x_display, screen);\r
-\r
-               mit_shm = (libX11->XShmQueryExtension && libX11->XShmQueryExtension(x_display) == True);\r
-\r
-               if(mit_shm)\r
-               {\r
-                       x_image = libX11->XShmCreateImage(x_display, visual, depth, ZPixmap, 0, &shminfo, width, height);\r
-\r
-                       shminfo.shmid = shmget(IPC_PRIVATE, x_image->bytes_per_line * x_image->height, IPC_CREAT | SHM_R | SHM_W);\r
-                       shminfo.shmaddr = x_image->data = buffer = (char*)shmat(shminfo.shmid, 0, 0);\r
-                       shminfo.readOnly = False;\r
-\r
-                       PreviousXErrorHandler = libX11->XSetErrorHandler(XShmErrorHandler);\r
-                       libX11->XShmAttach(x_display, &shminfo);   // May produce a BadAccess error\r
-                       libX11->XSync(x_display, False);\r
-                       libX11->XSetErrorHandler(PreviousXErrorHandler);\r
-\r
-                       if(shmBadAccess)\r
-                       {\r
-                               mit_shm = false;\r
-\r
-                               XDestroyImage(x_image);\r
-                               shmdt(shminfo.shmaddr);\r
-                               shmctl(shminfo.shmid, IPC_RMID, 0);\r
-\r
-                               shmBadAccess = false;\r
-                       }\r
-               }\r
-\r
-               if(!mit_shm)\r
-               {\r
-                       buffer = new char[width * height * 4];\r
-                       x_image = libX11->XCreateImage(x_display, visual, depth, ZPixmap, 0, buffer, width, height, 32, width * 4);\r
-               }\r
-       }\r
-\r
-       FrameBufferX11::~FrameBufferX11()\r
-       {\r
-               if(!mit_shm)\r
-               {\r
-                       x_image->data = 0;\r
-                       XDestroyImage(x_image);\r
-\r
-                       delete[] buffer;\r
-                       buffer = 0;\r
-               }\r
-               else\r
-               {\r
-                       libX11->XShmDetach(x_display, &shminfo);\r
-                       XDestroyImage(x_image);\r
-                       shmdt(shminfo.shmaddr);\r
-                       shmctl(shminfo.shmid, IPC_RMID, 0);\r
-               }\r
-\r
-               if(ownX11)\r
-               {\r
-                       libX11->XCloseDisplay(x_display);\r
-               }\r
-       }\r
-\r
-       void *FrameBufferX11::lock()\r
-       {\r
-               stride = x_image->bytes_per_line;\r
-               locked = buffer;\r
-\r
-               return locked;\r
-       }\r
-\r
-       void FrameBufferX11::unlock()\r
-       {\r
-               locked = 0;\r
-       }\r
-\r
-       void FrameBufferX11::blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride)\r
-       {\r
-               copy(source, sourceFormat, sourceStride);\r
-\r
-               if(!mit_shm)\r
-               {\r
-                       libX11->XPutImage(x_display, x_window, x_gc, x_image, 0, 0, 0, 0, width, height);\r
-               }\r
-               else\r
-               {\r
-                       libX11->XShmPutImage(x_display, x_window, x_gc, x_image, 0, 0, 0, 0, width, height, False);\r
-               }\r
-\r
-               libX11->XSync(x_display, False);\r
-       }\r
-}\r
-\r
-sw::FrameBuffer *createFrameBuffer(Display *display, Window window, int width, int height)\r
-{\r
-       return new sw::FrameBufferX11(display, window, width, height);\r
-}\r
+// 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);
+}
index c5e8b53..0473553 100644 (file)
@@ -1,56 +1,56 @@
-// SwiftShader Software Renderer\r
-//\r
-// Copyright(c) 2005-2012 TransGaming Inc.\r
-//\r
-// All rights reserved. No part of this software may be copied, distributed, transmitted,\r
-// transcribed, stored in a retrieval system, translated into any human or computer\r
-// language by any means, or disclosed to third parties without the explicit written\r
-// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express\r
-// or implied, including but not limited to any patent rights, are granted to you.\r
-//\r
-\r
-// Surface.cpp: Implements the egl::Surface class, representing a drawing surface\r
-// such as the client area of a window, including any back buffers.\r
-// Implements EGLSurface and related functionality. [EGL 1.4] section 2.2 page 3.\r
-\r
-#ifndef sw_FrameBufferX11_hpp\r
-#define sw_FrameBufferX11_hpp\r
-\r
-#include "Main/FrameBuffer.hpp"\r
-#include "Common/Debug.hpp"\r
-\r
-#include <X11/Xlib.h>\r
-#include <X11/Xutil.h>\r
-#include <X11/extensions/XShm.h>\r
-\r
-namespace sw\r
-{\r
-       class FrameBufferX11 : public FrameBuffer\r
-       {\r
-       public:\r
-               FrameBufferX11(Display *display, Window window, int width, int height);\r
-\r
-               ~FrameBufferX11();\r
-\r
-               void flip(void *source, Format sourceFormat, size_t sourceStride) override {blit(source, 0, 0, sourceFormat, sourceStride);};\r
-               void blit(void *source, const Rect *sourceRect, const Rect *destRect, Format sourceFormat, size_t sourceStride) override;\r
-\r
-               void *lock() override;\r
-               void unlock() override;\r
-\r
-       private:\r
-               bool ownX11;\r
-               Display *x_display;\r
-               Window x_window;\r
-               XImage *x_image;\r
+// 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;\r
-\r
-               bool mit_shm;\r
-               XShmSegmentInfo shminfo;\r
-\r
-               char *buffer;\r
-       };\r
-}\r
-\r
-#endif   // sw_FrameBufferX11_hpp\r
+               XVisualInfo x_visual;
+
+               bool mit_shm;
+               XShmSegmentInfo shminfo;
+
+               char *buffer;
+       };
+}
+
+#endif   // sw_FrameBufferX11_hpp
index 8715d95..4ec679b 100644 (file)
 
 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 @@ egl::Display *Display::getPlatformDisplay(EGLenum platform, EGLNativeDisplayType
             #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 @@ egl::Display *Display::getPlatformDisplay(EGLenum platform, EGLNativeDisplayType
         }
         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;
+
+       displaysMutex.lock();
 
-        (*displays)[displayId] = rval;
+    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(EGLenum platform, EGLNativeDisplayType displayId) : platform(pl
 Display::~Display()
 {
     terminate();
-
-    displays_lock.lock();
-    getDisplays()->erase(displayId);
-    displays_lock.unlock();
 }
 
 static void cpuid(int registers[4], int info)
@@ -561,7 +548,7 @@ bool Display::isValidWindow(EGLNativeWindowType window)
         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 @@ EGLint Display::getMaxSwapInterval() const
     return mMaxSwapInterval;
 }
 
-EGLNativeDisplayType Display::getNativeDisplay() const
+void *Display::getNativeDisplay() const
 {
-       return displayId;
+       return nativeDisplay;
 }
 
 sw::Format Display::getDisplayFormat() const
@@ -680,7 +667,7 @@ sw::Format Display::getDisplayFormat() const
     #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)
index 76e856f..da1b442 100644 (file)
@@ -28,9 +28,7 @@ namespace egl
        class Display\r
        {\r
        public:\r
-               ~Display();\r
-\r
-               static egl::Display *getPlatformDisplay(EGLenum platform, EGLNativeDisplayType displayId);\r
+               static egl::Display *getPlatformDisplay(EGLenum platform, void *nativeDisplay);\r
 \r
                bool initialize();\r
                void terminate();\r
@@ -55,20 +53,21 @@ namespace egl
                EGLint getMinSwapInterval() const;\r
                EGLint getMaxSwapInterval() const;\r
 \r
-               EGLNativeDisplayType getNativeDisplay() const;\r
+               void *getNativeDisplay() const;\r
                const char *getExtensionString() const;\r
 \r
        private:\r
-               Display(EGLenum platform, EGLNativeDisplayType displayId);\r
+               Display(EGLenum platform, void *nativeDisplay);\r
+               ~Display();\r
 \r
                sw::Format getDisplayFormat() const;\r
 \r
         const EGLenum platform;\r
-               const EGLNativeDisplayType displayId;\r
+               void *const nativeDisplay;\r
 \r
                EGLint mMaxSwapInterval;\r
                EGLint mMinSwapInterval;\r
-    \r
+\r
                typedef std::set<Surface*> SurfaceSet;\r
                SurfaceSet mSurfaceSet;\r
 \r
index 3db1db2..538d010 100644 (file)
@@ -246,7 +246,7 @@ bool WindowSurface::initialize()
                return reset(width, height);\r
        #else\r
                XWindowAttributes windowAttributes;\r
-               libX11->XGetWindowAttributes(display->getNativeDisplay(), window, &windowAttributes);\r
+               libX11->XGetWindowAttributes((::Display*)display->getNativeDisplay(), window, &windowAttributes);\r
 \r
                return reset(windowAttributes.width, windowAttributes.height);\r
        #endif\r
@@ -286,7 +286,7 @@ bool WindowSurface::checkForResize()
                int clientHeight; window->query(window, NATIVE_WINDOW_HEIGHT, &clientHeight);\r
        #else\r
                XWindowAttributes windowAttributes;\r
-               libX11->XGetWindowAttributes(display->getNativeDisplay(), window, &windowAttributes);\r
+               libX11->XGetWindowAttributes((::Display*)display->getNativeDisplay(), window, &windowAttributes);\r
 \r
                int clientWidth = windowAttributes.width;\r
                int clientHeight = windowAttributes.height;\r
index 1aff963..21065c4 100644 (file)
@@ -108,7 +108,14 @@ EGLDisplay GetDisplay(EGLNativeDisplayType display_id)
 {\r
        TRACE("(EGLNativeDisplayType display_id = %p)", display_id);\r
 \r
-       return egl::Display::getPlatformDisplay(EGL_UNKNOWN, display_id);\r
+       if(display_id == EGL_DEFAULT_DISPLAY)\r
+       {\r
+               return egl::Display::getPlatformDisplay(EGL_UNKNOWN, nullptr);\r
+       }\r
+       else\r
+       {\r
+               return egl::Display::getPlatformDisplay(EGL_UNKNOWN, reinterpret_cast<void*>((uintptr_t)display_id));\r
+       }\r
 }\r
 \r
 EGLBoolean Initialize(EGLDisplay dpy, EGLint *major, EGLint *minor)\r
@@ -948,7 +955,7 @@ EGLDisplay GetPlatformDisplayEXT(EGLenum platform, void *native_display, const E
 {\r
        TRACE("(EGLenum platform = 0x%X, void *native_display = %p, const EGLint *attrib_list = %p)", platform, native_display, attrib_list);\r
 \r
-       return egl::Display::getPlatformDisplay(platform, (EGLNativeDisplayType)native_display);\r
+       return egl::Display::getPlatformDisplay(platform, native_display);\r
 }\r
 \r
 EGLSurface CreatePlatformWindowSurfaceEXT(EGLDisplay dpy, EGLConfig config, void *native_window, const EGLint *attrib_list)\r
index 28d5802..6b86940 100644 (file)
@@ -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\r
+//\r
+// Copyright(c) 2005-2012 TransGaming Inc.\r
+//\r
+// All rights reserved. No part of this software may be copied, distributed, transmitted,\r
+// transcribed, stored in a retrieval system, translated into any human or computer\r
+// language by any means, or disclosed to third parties without the explicit written\r
+// agreement of TransGaming Inc. Without such an agreement, no rights or licenses, express\r
+// or implied, including but not limited to any patent rights, are granted to you.\r
+//\r
+\r
+// main.h: Management of thread-local data.\r
+\r
+#ifndef LIBGL_MAIN_H_\r
+#define LIBGL_MAIN_H_\r
+\r
+#include "Context.h"\r
+#include "Device.hpp"\r
+#include "common/debug.h"\r
+#include "Display.h"\r
+\r
+#define _GDI32_\r
+#include <windows.h>\r
+#include <GL/GL.h>\r
+#include <GL/glext.h>\r
+\r
+namespace gl\r
+{\r
+       struct Current\r
+       {\r
+               Context *context;\r
+               Display *display;\r
+               Surface *drawSurface;\r
+               Surface *readSurface;\r
+       };\r
+\r
+       void makeCurrent(Context *context, Display *display, Surface *surface);\r
+\r
+       Context *getContext();\r
+       Display *getDisplay();\r
+       Device *getDevice();\r
+       Surface *getCurrentDrawSurface();\r
+       Surface *getCurrentReadSurface();\r
+       \r
+       void setCurrentDisplay(Display *dpy);\r
+       void setCurrentContext(gl::Context *ctx);\r
+       void setCurrentDrawSurface(Surface *surface);\r
+       void setCurrentReadSurface(Surface *surface);\r
+}\r
+\r
+void error(GLenum errorCode);\r
+\r
+template<class T>\r
+T &error(GLenum errorCode, T &returnValue)\r
+{\r
+    error(errorCode);\r
+\r
+    return returnValue;\r
+}\r
+\r
+template<class T>\r
+const T &error(GLenum errorCode, const T &returnValue)\r
+{\r
+    error(errorCode);\r
+\r
+    return returnValue;\r
+}\r
+\r
+extern sw::FrameBuffer *createFrameBuffer(void *display, NativeWindowType window, int width, int height);\r
+\r
+#endif   // LIBGL_MAIN_H_\r
index 864783e..d4b4d75 100644 (file)
@@ -208,7 +208,7 @@ public:
        __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
index 38a50aa..2cc06e3 100644 (file)
@@ -337,7 +337,7 @@ egl::Context *es1CreateContext(const egl::Config *config, const egl::Context *sh
 extern "C" __eglMustCastToProperFunctionPointerType es1GetProcAddress(const char *procname);\r
 egl::Image *createBackBuffer(int width, int height, const egl::Config *config);\r
 egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);\r
-sw::FrameBuffer *createFrameBuffer(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);\r
+sw::FrameBuffer *createFrameBuffer(void *display, EGLNativeWindowType window, int width, int height);\r
 \r
 extern "C"\r
 {\r
index bde6c0a..afb7224 100644 (file)
@@ -229,7 +229,7 @@ public:
        __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
index 1b51f67..6e5f008 100644 (file)
@@ -1333,7 +1333,7 @@ egl::Context *es2CreateContext(const egl::Config *config, const egl::Context *sh
 extern "C" __eglMustCastToProperFunctionPointerType es2GetProcAddress(const char *procname);\r
 egl::Image *createBackBuffer(int width, int height, const egl::Config *config);\r
 egl::Image *createDepthStencil(unsigned int width, unsigned int height, sw::Format format, int multiSampleDepth, bool discard);\r
-sw::FrameBuffer *createFrameBuffer(EGLNativeDisplayType display, EGLNativeWindowType window, int width, int height);\r
+sw::FrameBuffer *createFrameBuffer(void *display, EGLNativeWindowType window, int width, int height);\r
 \r
 LibGLESv2exports::LibGLESv2exports()\r
 {\r