summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/angle/src/libEGL/Surface.cpp9
-rw-r--r--src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp3
-rw-r--r--src/angle/patches/0008-ANGLE-DX11-Prevent-assert-when-view-is-minimized-or-.patch58
3 files changed, 69 insertions, 1 deletions
diff --git a/src/3rdparty/angle/src/libEGL/Surface.cpp b/src/3rdparty/angle/src/libEGL/Surface.cpp
index 5a62142b45..a430a3530f 100644
--- a/src/3rdparty/angle/src/libEGL/Surface.cpp
+++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
@@ -172,9 +172,16 @@ bool Surface::resetSwapChain()
bool Surface::resizeSwapChain(int backbufferWidth, int backbufferHeight)
{
- ASSERT(backbufferWidth >= 0 && backbufferHeight >= 0);
ASSERT(mSwapChain);
+ // Prevent bad swap chain resize by calling reset if size is invalid
+ if (backbufferWidth < 1 || backbufferHeight < 1)
+ {
+ mWidth = backbufferWidth;
+ mHeight = backbufferHeight;
+ return mSwapChain->reset(0, 0, mSwapInterval) == EGL_SUCCESS;
+ }
+
EGLint status = mSwapChain->resize(backbufferWidth, backbufferHeight);
if (status == EGL_CONTEXT_LOST)
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
index 87422be727..98f887587c 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
@@ -368,6 +368,9 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
return EGL_BAD_ACCESS;
}
+ if (!mSwapChain)
+ reset(backbufferWidth, backbufferHeight, mSwapInterval);
+
// Can only call resize if we have already created our swap buffer and resources
ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView);
diff --git a/src/angle/patches/0008-ANGLE-DX11-Prevent-assert-when-view-is-minimized-or-.patch b/src/angle/patches/0008-ANGLE-DX11-Prevent-assert-when-view-is-minimized-or-.patch
new file mode 100644
index 0000000000..47ecc25f0c
--- /dev/null
+++ b/src/angle/patches/0008-ANGLE-DX11-Prevent-assert-when-view-is-minimized-or-.patch
@@ -0,0 +1,58 @@
+From 654677720bd856b59387cfd034f441eba8c0e97f Mon Sep 17 00:00:00 2001
+From: Andrew Knight <andrew.knight@digia.com>
+Date: Thu, 4 Apr 2013 14:21:58 +0300
+Subject: [PATCH] ANGLE DX11: Prevent assert when view is minimized or size
+ goes to 0x0
+
+This allows the Direct3D 11 version of ANGLE to gracefully allow
+surfaces with dimensions of 0. This is important because Qt may resize
+the surface to 0x0 because of window minimization or other user
+action (window resize). As EGL specifies that empty (0x0) surfaces are
+valid, this makes sure an assert doesn't occur in the case that a valid
+surface is resized to an empty one.
+
+Change-Id: Ia60c4c694090d03c1da7f43c56e90b925c8eab6d
+---
+ src/3rdparty/angle/src/libEGL/Surface.cpp | 9 ++++++++-
+ src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp | 3 +++
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+diff --git a/src/3rdparty/angle/src/libEGL/Surface.cpp b/src/3rdparty/angle/src/libEGL/Surface.cpp
+index 5ece724..8387443 100644
+--- a/src/3rdparty/angle/src/libEGL/Surface.cpp
++++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
+@@ -172,9 +172,16 @@ bool Surface::resetSwapChain()
+
+ bool Surface::resizeSwapChain(int backbufferWidth, int backbufferHeight)
+ {
+- ASSERT(backbufferWidth >= 0 && backbufferHeight >= 0);
+ ASSERT(mSwapChain);
+
++ // Prevent bad swap chain resize by calling reset if size is invalid
++ if (backbufferWidth < 1 || backbufferHeight < 1)
++ {
++ mWidth = backbufferWidth;
++ mHeight = backbufferHeight;
++ return mSwapChain->reset(0, 0, mSwapInterval) == EGL_SUCCESS;
++ }
++
+ EGLint status = mSwapChain->resize(backbufferWidth, backbufferHeight);
+
+ if (status == EGL_CONTEXT_LOST)
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
+index 87422be..98f8875 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
+@@ -368,6 +368,9 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
+ return EGL_BAD_ACCESS;
+ }
+
++ if (!mSwapChain)
++ reset(backbufferWidth, backbufferHeight, mSwapInterval);
++
+ // Can only call resize if we have already created our swap buffer and resources
+ ASSERT(mSwapChain && mBackBufferTexture && mBackBufferRTView);
+
+--
+1.8.1.msysgit.1
+