summaryrefslogtreecommitdiffstats
path: root/src/3rdparty/angle/src/libEGL
diff options
context:
space:
mode:
Diffstat (limited to 'src/3rdparty/angle/src/libEGL')
-rw-r--r--src/3rdparty/angle/src/libEGL/Display.cpp45
-rw-r--r--src/3rdparty/angle/src/libEGL/Display.h7
-rw-r--r--src/3rdparty/angle/src/libEGL/Surface.cpp37
-rw-r--r--src/3rdparty/angle/src/libEGL/libEGL.cpp21
-rw-r--r--src/3rdparty/angle/src/libEGL/main.cpp61
5 files changed, 81 insertions, 90 deletions
diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
index d5d0f0f831..a382c3b1eb 100644
--- a/src/3rdparty/angle/src/libEGL/Display.cpp
+++ b/src/3rdparty/angle/src/libEGL/Display.cpp
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -38,31 +38,16 @@ egl::Display *Display::getDisplay(EGLNativeDisplayType displayId)
return displays[displayId];
}
- egl::Display *display = NULL;
+ // FIXME: Check if displayId is a valid display device context
- if (displayId == EGL_DEFAULT_DISPLAY)
- {
- display = new egl::Display(displayId, (HDC)NULL, false);
- }
- else if (displayId == EGL_SOFTWARE_DISPLAY_ANGLE)
- {
- display = new egl::Display(displayId, (HDC)NULL, true);
- }
- else
- {
- // FIXME: Check if displayId is a valid display device context
-
- display = new egl::Display(displayId, (HDC)displayId, false);
- }
+ egl::Display *display = new egl::Display(displayId, (HDC)displayId);
displays[displayId] = display;
return display;
}
-Display::Display(EGLNativeDisplayType displayId, HDC deviceContext, bool software) : mDc(deviceContext)
+Display::Display(EGLNativeDisplayType displayId, HDC deviceContext) : mDc(deviceContext)
{
-
- mSoftwareDevice = software;
mDisplayId = displayId;
mRenderer = NULL;
}
@@ -86,7 +71,7 @@ bool Display::initialize()
return true;
}
- mRenderer = glCreateRenderer(this, mDc, mSoftwareDevice);
+ mRenderer = glCreateRenderer(this, mDc, mDisplayId);
if (!mRenderer)
{
@@ -128,6 +113,7 @@ bool Display::initialize()
}
initExtensionString();
+ initVendorString();
return true;
}
@@ -528,5 +514,24 @@ const char *Display::getExtensionString() const
return mExtensionString.c_str();
}
+void Display::initVendorString()
+{
+ mVendorString = "Google Inc.";
+
+ LUID adapterLuid = {0};
+
+ if (mRenderer && mRenderer->getLUID(&adapterLuid))
+ {
+ char adapterLuidString[64];
+ sprintf_s(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
+
+ mVendorString += adapterLuidString;
+ }
+}
+
+const char *Display::getVendorString() const
+{
+ return mVendorString.c_str();
+}
}
diff --git a/src/3rdparty/angle/src/libEGL/Display.h b/src/3rdparty/angle/src/libEGL/Display.h
index 8c71e51b7a..58c3940331 100644
--- a/src/3rdparty/angle/src/libEGL/Display.h
+++ b/src/3rdparty/angle/src/libEGL/Display.h
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+// Copyright (c) 2002-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
//
@@ -60,11 +60,12 @@ class Display
virtual void recreateSwapChains();
const char *getExtensionString() const;
+ const char *getVendorString() const;
private:
DISALLOW_COPY_AND_ASSIGN(Display);
- Display(EGLNativeDisplayType displayId, HDC deviceContext, bool software);
+ Display(EGLNativeDisplayType displayId, HDC deviceContext);
bool restoreLostDevice();
@@ -84,7 +85,9 @@ class Display
rx::Renderer *mRenderer;
void initExtensionString();
+ void initVendorString();
std::string mExtensionString;
+ std::string mVendorString;
};
}
diff --git a/src/3rdparty/angle/src/libEGL/Surface.cpp b/src/3rdparty/angle/src/libEGL/Surface.cpp
index a430a3530f..b47a7bcc20 100644
--- a/src/3rdparty/angle/src/libEGL/Surface.cpp
+++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
@@ -20,8 +20,6 @@
#include "libEGL/main.h"
#include "libEGL/Display.h"
-#include <dwmapi.h>
-
namespace egl
{
@@ -71,44 +69,9 @@ Surface::~Surface()
bool Surface::initialize()
{
- typedef HRESULT (STDAPICALLTYPE *PtrDwmIsCompositionEnabled)(BOOL*);
- typedef HRESULT (STDAPICALLTYPE *PtrDwmSetPresentParameters)(HWND, DWM_PRESENT_PARAMETERS *);
-
if (!resetSwapChain())
return false;
- // Modify present parameters for this window, if we are composited,
- // to minimize the amount of queuing done by DWM between our calls to
- // present and the actual screen.
- if (mWindow && (getComparableOSVersion() >= versionWindowsVista)) {
- // Resolve dwmapi.dll functions dynamically as the Library is
- // not present on Windows XP. Alternatively, /DELAYLOAD could be used.
- static PtrDwmIsCompositionEnabled dwmIsCompositionEnabled = 0;
- static PtrDwmSetPresentParameters dwmSetPresentParameters = 0;
- if (!dwmIsCompositionEnabled) {
- if (const HMODULE dwmLibrary = LoadLibraryW(L"dwmapi.dll")) {
- dwmIsCompositionEnabled =
- (PtrDwmIsCompositionEnabled)GetProcAddress(dwmLibrary, "DwmIsCompositionEnabled");
- dwmSetPresentParameters =
- (PtrDwmSetPresentParameters)GetProcAddress(dwmLibrary, "DwmSetPresentParameters");
- }
- }
- if (dwmIsCompositionEnabled && dwmSetPresentParameters) {
- BOOL isComposited;
- HRESULT result = dwmIsCompositionEnabled(&isComposited);
- if (SUCCEEDED(result) && isComposited) {
- DWM_PRESENT_PARAMETERS presentParams;
- memset(&presentParams, 0, sizeof(presentParams));
- presentParams.cbSize = sizeof(DWM_PRESENT_PARAMETERS);
- presentParams.cBuffer = 2;
-
- result = dwmSetPresentParameters(mWindow, &presentParams);
- if (FAILED(result))
- ERR("Unable to set present parameters: 0x%08X", result);
- }
- }
- }
-
return true;
}
diff --git a/src/3rdparty/angle/src/libEGL/libEGL.cpp b/src/3rdparty/angle/src/libEGL/libEGL.cpp
index 7fca456cf5..6e10c3926d 100644
--- a/src/3rdparty/angle/src/libEGL/libEGL.cpp
+++ b/src/3rdparty/angle/src/libEGL/libEGL.cpp
@@ -180,9 +180,9 @@ const char *__stdcall eglQueryString(EGLDisplay dpy, EGLint name)
case EGL_CLIENT_APIS:
return egl::success("OpenGL_ES");
case EGL_EXTENSIONS:
- return display->getExtensionString();
+ return egl::success(display->getExtensionString());
case EGL_VENDOR:
- return egl::success("Google Inc.");
+ return egl::success(display->getVendorString());
case EGL_VERSION:
return egl::success("1.4 (ANGLE " VERSION_STRING ")");
}
@@ -888,15 +888,18 @@ EGLBoolean __stdcall eglMakeCurrent(EGLDisplay dpy, EGLSurface draw, EGLSurface
return EGL_FALSE;
}
- rx::Renderer *renderer = display->getRenderer();
- if (renderer->testDeviceLost(true))
+ if (dpy != EGL_NO_DISPLAY)
{
- return EGL_FALSE;
- }
+ rx::Renderer *renderer = display->getRenderer();
+ if (renderer->testDeviceLost(true))
+ {
+ return EGL_FALSE;
+ }
- if (renderer->isDeviceLost())
- {
- return egl::error(EGL_CONTEXT_LOST, EGL_FALSE);
+ if (renderer->isDeviceLost())
+ {
+ return egl::error(EGL_CONTEXT_LOST, EGL_FALSE);
+ }
}
if ((draw != EGL_NO_SURFACE && !validateSurface(display, static_cast<egl::Surface*>(draw))) ||
diff --git a/src/3rdparty/angle/src/libEGL/main.cpp b/src/3rdparty/angle/src/libEGL/main.cpp
index 7ba77f08d1..7dea5fc74b 100644
--- a/src/3rdparty/angle/src/libEGL/main.cpp
+++ b/src/3rdparty/angle/src/libEGL/main.cpp
@@ -88,72 +88,89 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
return TRUE;
}
-static inline egl::Current *current()
-{
- return (egl::Current*)TlsGetValue(currentTLS);
-}
-
-#else // !QT_OPENGL_ES_2_ANGLE_STATIC
+#endif // !QT_OPENGL_ES_2_ANGLE_STATIC
-static egl::Current *current()
+namespace egl
+{
+Current *getCurrent()
{
+#ifndef QT_OPENGL_ES_2_ANGLE_STATIC
+ return (Current*)TlsGetValue(currentTLS);
+#else
// No precautions for thread safety taken as ANGLE is used single-threaded in Qt.
- static egl::Current curr = { EGL_SUCCESS, EGL_OPENGL_ES_API, EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE };
+ static Current curr = { EGL_SUCCESS, EGL_OPENGL_ES_API, EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE };
return &curr;
+#endif
}
-#endif // QT_OPENGL_ES_2_ANGLE_STATIC
-
-namespace egl
-{
void setCurrentError(EGLint error)
{
- current()->error = error;
+ Current *current = getCurrent();
+
+ current->error = error;
}
EGLint getCurrentError()
{
- return current()->error;
+ Current *current = getCurrent();
+
+ return current->error;
}
void setCurrentAPI(EGLenum API)
{
- current()->API = API;
+ Current *current = getCurrent();
+
+ current->API = API;
}
EGLenum getCurrentAPI()
{
- return current()->API;
+ Current *current = getCurrent();
+
+ return current->API;
}
void setCurrentDisplay(EGLDisplay dpy)
{
- current()->display = dpy;
+ Current *current = getCurrent();
+
+ current->display = dpy;
}
EGLDisplay getCurrentDisplay()
{
- return current()->display;
+ Current *current = getCurrent();
+
+ return current->display;
}
void setCurrentDrawSurface(EGLSurface surface)
{
- current()->drawSurface = surface;
+ Current *current = getCurrent();
+
+ current->drawSurface = surface;
}
EGLSurface getCurrentDrawSurface()
{
- return current()->drawSurface;
+ Current *current = getCurrent();
+
+ return current->drawSurface;
}
void setCurrentReadSurface(EGLSurface surface)
{
- current()->readSurface = surface;
+ Current *current = getCurrent();
+
+ current->readSurface = surface;
}
EGLSurface getCurrentReadSurface()
{
- return current()->readSurface;
+ Current *current = getCurrent();
+
+ return current->readSurface;
}
void error(EGLint errorCode)