summaryrefslogtreecommitdiffstats
path: root/src/angle
diff options
context:
space:
mode:
Diffstat (limited to 'src/angle')
-rw-r--r--src/angle/patches/0001-ANGLE-Fix-compilation-with-MSVC2013.patch28
-rw-r--r--src/angle/patches/0001-Fix-compilation-for-MSVC-2008-and-std-tuple.patch15
-rw-r--r--src/angle/patches/0001-Make-it-possible-to-link-ANGLE-statically-for-single.patch200
-rw-r--r--src/angle/patches/0002-Fix-compilation-of-ANGLE-with-mingw-tdm64-gcc-4.8.1.patch (renamed from src/angle/patches/0001-Fix-compilation-of-ANGLE-with-mingw-tdm64-gcc-4.8.1.patch)10
-rw-r--r--src/angle/patches/0003-Fix-compilation-with-MinGW-gcc-64-bit.patch (renamed from src/angle/patches/0001-Fix-compilation-with-MinGW-gcc-64-bit.patch)10
-rw-r--r--src/angle/patches/0004-Fix-black-screen-after-minimizing-OpenGL-window-with.patch45
-rw-r--r--src/angle/patches/0004-Make-it-possible-to-link-ANGLE-statically-for-single.patch68
-rw-r--r--src/angle/patches/0005-Fix-build-when-SSE2-is-not-available.patch33
-rw-r--r--src/angle/patches/0006-Fix-compilation-of-libGLESv2-with-older-MinGW-w64-he.patch (renamed from src/angle/patches/0011-Fix-compilation-of-libGLESv2-with-older-MinGW-w64-he.patch)17
-rw-r--r--src/angle/patches/0006-Make-DX9-DX11-mutually-exclusive.patch149
-rw-r--r--src/angle/patches/0007-ANGLE-Fix-typedefs-for-Win64.patch38
-rw-r--r--src/angle/patches/0007-Make-DX9-DX11-mutually-exclusive.patch141
-rw-r--r--src/angle/patches/0008-ANGLE-DX11-Prevent-assert-when-view-is-minimized-or-.patch58
-rw-r--r--src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-of-k.patch (renamed from src/angle/patches/0015-ANGLE-Dynamically-load-D3D-compiler-from-a-list-of-k.patch)50
-rw-r--r--src/angle/patches/0009-ANGLE-Support-WinRT.patch (renamed from src/angle/patches/0012-ANGLE-Support-WinRT.patch)1039
-rw-r--r--src/angle/patches/0010-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch426
-rw-r--r--src/angle/patches/0011-ANGLE-Fix-compilation-error-on-MinGW-caused-by-trace.patch37
-rw-r--r--src/angle/patches/0012-ANGLE-fix-semantic-index-lookup.patch48
-rw-r--r--src/angle/patches/0013-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch990
-rw-r--r--src/angle/patches/0014-ANGLE-D3D11-Always-execute-QueryInterface.patch51
-rw-r--r--src/angle/patches/0016-ANGLE-D3D11-Fix-build-on-desktop-Windows.patch28
-rw-r--r--src/angle/src/compiler/compiler.pro2
-rw-r--r--src/angle/src/compiler/preprocessor/preprocessor.pro1
-rw-r--r--src/angle/src/compiler/translator.pro163
-rw-r--r--src/angle/src/compiler/translator_common.pro133
-rw-r--r--src/angle/src/compiler/translator_hlsl.pro30
-rw-r--r--src/angle/src/config.pri14
-rw-r--r--src/angle/src/libEGL/libEGL.pro6
-rw-r--r--src/angle/src/libGLESv2/libGLESv2.pro157
29 files changed, 1598 insertions, 2389 deletions
diff --git a/src/angle/patches/0001-ANGLE-Fix-compilation-with-MSVC2013.patch b/src/angle/patches/0001-ANGLE-Fix-compilation-with-MSVC2013.patch
deleted file mode 100644
index cf32a20d46..0000000000
--- a/src/angle/patches/0001-ANGLE-Fix-compilation-with-MSVC2013.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 4863cf64cd332a5fcefe453634c3c5ef62cb758c Mon Sep 17 00:00:00 2001
-From: Friedemann Kleint <Friedemann.Kleint@digia.com>
-Date: Thu, 24 Oct 2013 12:49:59 +0300
-Subject: [PATCH] ANGLE: Fix compilation with MSVC2013.
-
-Add missing include for std::min(), std::max().
-
-Change-Id: I740e5db94f9f958ac65de8dd7baab7e203482637
----
- src/3rdparty/angle/src/libEGL/Surface.cpp | 2 ++
- 1 file changed, 2 insertions(+)
-
-diff --git a/src/3rdparty/angle/src/libEGL/Surface.cpp b/src/3rdparty/angle/src/libEGL/Surface.cpp
-index b47a7bc..83fbbf5 100644
---- a/src/3rdparty/angle/src/libEGL/Surface.cpp
-+++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
-@@ -20,6 +20,8 @@
- #include "libEGL/main.h"
- #include "libEGL/Display.h"
-
-+#include <algorithm>
-+
- namespace egl
- {
-
---
-1.8.3.msysgit.0
-
diff --git a/src/angle/patches/0001-Fix-compilation-for-MSVC-2008-and-std-tuple.patch b/src/angle/patches/0001-Fix-compilation-for-MSVC-2008-and-std-tuple.patch
index 2fa23aed8f..06ab16abdb 100644
--- a/src/angle/patches/0001-Fix-compilation-for-MSVC-2008-and-std-tuple.patch
+++ b/src/angle/patches/0001-Fix-compilation-for-MSVC-2008-and-std-tuple.patch
@@ -1,32 +1,31 @@
-From d4776adddb971642164de54141e015abde881740 Mon Sep 17 00:00:00 2001
+From 88297d02fd1aed6cac258b72d9d0a8baabad6203 Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@digia.com>
-Date: Tue, 8 Oct 2013 09:46:54 +0200
+Date: Mon, 17 Feb 2014 16:56:51 +0200
Subject: [PATCH] Fix compilation for MSVC 2008 and std::tuple
For MSVC 2008 make_tuple is in the tr1 namespace.
Change-Id: I4a51f6cabdf068993869b404b12ed1484a21a9d4
---
- .../src/libGLESv2/renderer/IndexRangeCache.cpp | 6 +++++-
- 1 files changed, 5 insertions(+), 1 deletions(-)
+ src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.cpp | 4 ++++
+ 1 file changed, 4 insertions(+)
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.cpp
-index 610a5ef..95a6961 100644
+index 610a5ef..51d7f0b 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.cpp
@@ -81,7 +81,11 @@ IndexRangeCache::IndexRange::IndexRange(GLenum typ, intptr_t off, GLsizei c)
bool IndexRangeCache::IndexRange::operator<(const IndexRange& rhs) const
{
-- return std::make_tuple(type, offset, count) < std::make_tuple(rhs.type, rhs.offset, rhs.count);
+#if defined(_MSC_VER) && _MSC_VER < 1600
+ return std::tr1::make_tuple(type, offset, count) < std::tr1::make_tuple(rhs.type, rhs.offset, rhs.count);
+#else
-+ return std::make_tuple(type, offset, count) < std::make_tuple(rhs.type, rhs.offset, rhs.count);
+ return std::make_tuple(type, offset, count) < std::make_tuple(rhs.type, rhs.offset, rhs.count);
+#endif
}
IndexRangeCache::IndexBounds::IndexBounds()
--
-1.7.6.msysgit.0
+1.8.4.msysgit.0
diff --git a/src/angle/patches/0001-Make-it-possible-to-link-ANGLE-statically-for-single.patch b/src/angle/patches/0001-Make-it-possible-to-link-ANGLE-statically-for-single.patch
deleted file mode 100644
index 9de8c54fb6..0000000000
--- a/src/angle/patches/0001-Make-it-possible-to-link-ANGLE-statically-for-single.patch
+++ /dev/null
@@ -1,200 +0,0 @@
-From f1eeb288ae18f3015f435fc2df25ec1eb0f15e1a Mon Sep 17 00:00:00 2001
-From: Friedemann Kleint <Friedemann.Kleint@digia.com>
-Date: Sat, 14 Sep 2013 11:07:17 +0300
-Subject: [PATCH] Make it possible to link ANGLE statically for
- single-thread use.
-
-Fix exports and provide static instances of thread-local
-data depending on QT_OPENGL_ES_2_ANGLE_STATIC.
-
-Change-Id: Ifab25a820adf5953bb3b09036de53dbf7f1a7fd5
----
- src/3rdparty/angle/include/KHR/khrplatform.h | 2 +-
- src/3rdparty/angle/src/libEGL/main.cpp | 35 ++++++++++++++++++++--------
- src/3rdparty/angle/src/libGLESv2/main.cpp | 21 ++++++++++++++---
- 3 files changed, 44 insertions(+), 14 deletions(-)
-
-diff --git a/src/3rdparty/angle/include/KHR/khrplatform.h b/src/3rdparty/angle/include/KHR/khrplatform.h
-index 8ec0d19..541bfa9 100644
---- a/src/3rdparty/angle/include/KHR/khrplatform.h
-+++ b/src/3rdparty/angle/include/KHR/khrplatform.h
-@@ -97,7 +97,7 @@
- *-------------------------------------------------------------------------
- * This precedes the return type of the function in the function prototype.
- */
--#if defined(_WIN32) && !defined(__SCITECH_SNAP__)
-+#if defined(_WIN32) && !defined(__SCITECH_SNAP__) && !defined(QT_OPENGL_ES_2_ANGLE_STATIC)
- # define KHRONOS_APICALL __declspec(dllimport)
- #elif defined (__SYMBIAN32__)
- # define KHRONOS_APICALL IMPORT_C
-diff --git a/src/3rdparty/angle/src/libEGL/main.cpp b/src/3rdparty/angle/src/libEGL/main.cpp
-index 424ec3f..7dea5fc 100644
---- a/src/3rdparty/angle/src/libEGL/main.cpp
-+++ b/src/3rdparty/angle/src/libEGL/main.cpp
-@@ -10,6 +10,8 @@
-
- #include "common/debug.h"
-
-+#ifndef QT_OPENGL_ES_2_ANGLE_STATIC
-+
- static DWORD currentTLS = TLS_OUT_OF_INDEXES;
-
- extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
-@@ -86,74 +88,87 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
- return TRUE;
- }
-
-+#endif // !QT_OPENGL_ES_2_ANGLE_STATIC
-+
- 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 Current curr = { EGL_SUCCESS, EGL_OPENGL_ES_API, EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE };
-+ return &curr;
-+#endif
-+}
-+
- void setCurrentError(EGLint error)
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- current->error = error;
- }
-
- EGLint getCurrentError()
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- return current->error;
- }
-
- void setCurrentAPI(EGLenum API)
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- current->API = API;
- }
-
- EGLenum getCurrentAPI()
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- return current->API;
- }
-
- void setCurrentDisplay(EGLDisplay dpy)
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- current->display = dpy;
- }
-
- EGLDisplay getCurrentDisplay()
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- return current->display;
- }
-
- void setCurrentDrawSurface(EGLSurface surface)
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- current->drawSurface = surface;
- }
-
- EGLSurface getCurrentDrawSurface()
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- return current->drawSurface;
- }
-
- void setCurrentReadSurface(EGLSurface surface)
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- current->readSurface = surface;
- }
-
- EGLSurface getCurrentReadSurface()
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- return current->readSurface;
- }
-diff --git a/src/3rdparty/angle/src/libGLESv2/main.cpp b/src/3rdparty/angle/src/libGLESv2/main.cpp
-index 6d7a241..730a6ac 100644
---- a/src/3rdparty/angle/src/libGLESv2/main.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/main.cpp
-@@ -11,6 +11,8 @@
-
- #include "libGLESv2/Context.h"
-
-+#ifndef QT_OPENGL_ES_2_ANGLE_STATIC
-+
- static DWORD currentTLS = TLS_OUT_OF_INDEXES;
-
- extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
-@@ -69,11 +71,24 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
- return TRUE;
- }
-
-+#endif // !QT_OPENGL_ES_2_ANGLE_STATIC
-+
- namespace gl
- {
-+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 gl::Current curr = { 0, 0 };
-+ return &curr;
-+#endif
-+}
-+
- void makeCurrent(Context *context, egl::Display *display, egl::Surface *surface)
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- current->context = context;
- current->display = display;
-@@ -86,7 +101,7 @@ void makeCurrent(Context *context, egl::Display *display, egl::Surface *surface)
-
- Context *getContext()
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- return current->context;
- }
-@@ -112,7 +127,7 @@ Context *getNonLostContext()
-
- egl::Display *getDisplay()
- {
-- Current *current = (Current*)TlsGetValue(currentTLS);
-+ Current *current = getCurrent();
-
- return current->display;
- }
---
-1.8.1.msysgit.1
-
diff --git a/src/angle/patches/0001-Fix-compilation-of-ANGLE-with-mingw-tdm64-gcc-4.8.1.patch b/src/angle/patches/0002-Fix-compilation-of-ANGLE-with-mingw-tdm64-gcc-4.8.1.patch
index 498cce1b7c..8b91d4b8ea 100644
--- a/src/angle/patches/0001-Fix-compilation-of-ANGLE-with-mingw-tdm64-gcc-4.8.1.patch
+++ b/src/angle/patches/0002-Fix-compilation-of-ANGLE-with-mingw-tdm64-gcc-4.8.1.patch
@@ -1,6 +1,6 @@
-From 58a797397378aff3aa039a8b2a2d7011fe788737 Mon Sep 17 00:00:00 2001
+From 95e3ca47772ef0552662b1d04b7ee08d9d1d2338 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@digia.com>
-Date: Tue, 21 Jan 2014 10:23:38 +0100
+Date: Mon, 17 Feb 2014 16:59:19 +0200
Subject: [PATCH] Fix compilation of ANGLE with mingw-tdm64 gcc 4.8.1
Do not rely on sprintf_s being declared/defined. This also fixes
@@ -16,7 +16,7 @@ Change-Id: I520e2f61aeab34963e7a57baafd413c7db93f110
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
-index a382c3b..82b48ce 100644
+index a382c3b..13ef701 100644
--- a/src/3rdparty/angle/src/libEGL/Display.cpp
+++ b/src/3rdparty/angle/src/libEGL/Display.cpp
@@ -523,7 +523,7 @@ void Display::initVendorString()
@@ -24,10 +24,10 @@ index a382c3b..82b48ce 100644
{
char adapterLuidString[64];
- sprintf_s(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
-+ snprintf(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08l%08l)", adapterLuid.HighPart, adapterLuid.LowPart);
++ snprintf(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
mVendorString += adapterLuidString;
}
--
-1.8.5.2.msysgit.0
+1.8.4.msysgit.0
diff --git a/src/angle/patches/0001-Fix-compilation-with-MinGW-gcc-64-bit.patch b/src/angle/patches/0003-Fix-compilation-with-MinGW-gcc-64-bit.patch
index 0420694c91..7d70057a9a 100644
--- a/src/angle/patches/0001-Fix-compilation-with-MinGW-gcc-64-bit.patch
+++ b/src/angle/patches/0003-Fix-compilation-with-MinGW-gcc-64-bit.patch
@@ -1,6 +1,6 @@
-From 821c28d387b332bf16b6ea35ec22a77d3ba41632 Mon Sep 17 00:00:00 2001
+From a03d8f647816767525489a2b26663d897f0264a0 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@digia.com>
-Date: Mon, 28 Oct 2013 10:27:53 +0100
+Date: Tue, 18 Feb 2014 09:34:39 +0200
Subject: [PATCH] Fix compilation with MinGW gcc 64 bit
Fix compilation of ANGLE with gcc 4.8.0 64 bit: The
@@ -18,10 +18,10 @@ Change-Id: Ibde75dd4b5536f3827bdf0ab02a15e93a1a8a4f0
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/3rdparty/angle/src/third_party/trace_event/trace_event.h b/src/3rdparty/angle/src/third_party/trace_event/trace_event.h
-index 113b126..72d354d 100644
+index 1880056..637cf9a 100644
--- a/src/3rdparty/angle/src/third_party/trace_event/trace_event.h
+++ b/src/3rdparty/angle/src/third_party/trace_event/trace_event.h
-@@ -589,7 +589,7 @@ const unsigned long long noEventId = 0;
+@@ -587,7 +587,7 @@ const unsigned long long noEventId = 0;
class TraceID {
public:
explicit TraceID(const void* id, unsigned char* flags) :
@@ -31,5 +31,5 @@ index 113b126..72d354d 100644
*flags |= TRACE_EVENT_FLAG_MANGLE_ID;
}
--
-1.8.3.msysgit.0
+1.8.4.msysgit.0
diff --git a/src/angle/patches/0004-Fix-black-screen-after-minimizing-OpenGL-window-with.patch b/src/angle/patches/0004-Fix-black-screen-after-minimizing-OpenGL-window-with.patch
deleted file mode 100644
index 6eb84fd02e..0000000000
--- a/src/angle/patches/0004-Fix-black-screen-after-minimizing-OpenGL-window-with.patch
+++ /dev/null
@@ -1,45 +0,0 @@
-From 991dfbdfc018cb30bc1ac4df429411680b47d674 Mon Sep 17 00:00:00 2001
-From: Miikka Heikkinen <miikka.heikkinen@digia.com>
-Date: Sat, 14 Sep 2013 11:07:45 +0300
-Subject: [PATCH] Fix black screen after minimizing OpenGL window with
- ANGLE
-
-CreateTexture will fail on zero dimensions, so just release old target
-and reset dimensions when resetSwapChain is called with zero size area.
-
-Task-number: QTBUG-27994
-Change-Id: I1e500c4fd4b92f7d9ea2a49a44f3fb930b575cd1
-Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
----
- src/3rdparty/angle/src/libGLESv2/renderer/SwapChain9.cpp | 15 +++++++++++++++
- 1 file changed, 15 insertions(+)
-
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain9.cpp
-index 0324d01..f57a874 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain9.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain9.cpp
-@@ -137,6 +137,21 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
- pShareHandle = &mShareHandle;
- }
-
-+ // CreateTexture will fail on zero dimensions, so just release old target
-+ if (!backbufferWidth || !backbufferHeight)
-+ {
-+ if (mRenderTarget)
-+ {
-+ mRenderTarget->Release();
-+ mRenderTarget = NULL;
-+ }
-+
-+ mWidth = backbufferWidth;
-+ mHeight = backbufferHeight;
-+
-+ return EGL_SUCCESS;
-+ }
-+
- result = device->CreateTexture(backbufferWidth, backbufferHeight, 1, D3DUSAGE_RENDERTARGET,
- gl_d3d9::ConvertRenderbufferFormat(mBackBufferFormat), D3DPOOL_DEFAULT,
- &mOffscreenTexture, pShareHandle);
---
-1.8.1.msysgit.1
-
diff --git a/src/angle/patches/0004-Make-it-possible-to-link-ANGLE-statically-for-single.patch b/src/angle/patches/0004-Make-it-possible-to-link-ANGLE-statically-for-single.patch
new file mode 100644
index 0000000000..2c95c5bcfa
--- /dev/null
+++ b/src/angle/patches/0004-Make-it-possible-to-link-ANGLE-statically-for-single.patch
@@ -0,0 +1,68 @@
+From 9b24b25eeb5ca97d7978c6840fdb1e903bf63a55 Mon Sep 17 00:00:00 2001
+From: Friedemann Kleint <Friedemann.Kleint@digia.com>
+Date: Tue, 18 Feb 2014 09:52:52 +0200
+Subject: [PATCH] Make it possible to link ANGLE statically for
+ single-thread use.
+
+Fix exports and provide static instances of thread-local
+data depending on QT_OPENGL_ES_2_ANGLE_STATIC.
+
+Change-Id: Ifab25a820adf5953bb3b09036de53dbf7f1a7fd5
+---
+ src/3rdparty/angle/include/KHR/khrplatform.h | 2 +-
+ src/3rdparty/angle/src/libEGL/main.cpp | 6 ++++++
+ src/3rdparty/angle/src/libGLESv2/main.cpp | 6 ++++++
+ 3 files changed, 13 insertions(+), 1 deletion(-)
+
+diff --git a/src/3rdparty/angle/include/KHR/khrplatform.h b/src/3rdparty/angle/include/KHR/khrplatform.h
+index c9e6f17..1ac2d3f 100644
+--- a/src/3rdparty/angle/include/KHR/khrplatform.h
++++ b/src/3rdparty/angle/include/KHR/khrplatform.h
+@@ -97,7 +97,7 @@
+ *-------------------------------------------------------------------------
+ * This precedes the return type of the function in the function prototype.
+ */
+-#if defined(_WIN32) && !defined(__SCITECH_SNAP__)
++#if defined(_WIN32) && !defined(__SCITECH_SNAP__) && !defined(QT_OPENGL_ES_2_ANGLE_STATIC)
+ # define KHRONOS_APICALL __declspec(dllimport)
+ #elif defined (__SYMBIAN32__)
+ # define KHRONOS_APICALL IMPORT_C
+diff --git a/src/3rdparty/angle/src/libEGL/main.cpp b/src/3rdparty/angle/src/libEGL/main.cpp
+index 80dcc34..772b8eb 100644
+--- a/src/3rdparty/angle/src/libEGL/main.cpp
++++ b/src/3rdparty/angle/src/libEGL/main.cpp
+@@ -106,7 +106,13 @@ namespace egl
+
+ Current *GetCurrentData()
+ {
++#ifndef QT_OPENGL_ES_2_ANGLE_STATIC
+ Current *current = (Current*)TlsGetValue(currentTLS);
++#else
++ // No precautions for thread safety taken as ANGLE is used single-threaded in Qt.
++ static Current s_current = { EGL_SUCCESS, EGL_OPENGL_ES_API, EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE };
++ Current *current = &s_current;
++#endif
+
+ // ANGLE issue 488: when the dll is loaded after thread initialization,
+ // thread local storage (current) might not exist yet.
+diff --git a/src/3rdparty/angle/src/libGLESv2/main.cpp b/src/3rdparty/angle/src/libGLESv2/main.cpp
+index 50e2593..6b459d3 100644
+--- a/src/3rdparty/angle/src/libGLESv2/main.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/main.cpp
+@@ -89,7 +89,13 @@ namespace gl
+
+ Current *GetCurrentData()
+ {
++#ifndef QT_OPENGL_ES_2_ANGLE_STATIC
+ Current *current = (Current*)TlsGetValue(currentTLS);
++#else
++ // No precautions for thread safety taken as ANGLE is used single-threaded in Qt.
++ static Current s_current = { 0, 0 };
++ Current *current = &s_current;
++#endif
+
+ // ANGLE issue 488: when the dll is loaded after thread initialization,
+ // thread local storage (current) might not exist yet.
+--
+1.8.4.msysgit.0
+
diff --git a/src/angle/patches/0005-Fix-build-when-SSE2-is-not-available.patch b/src/angle/patches/0005-Fix-build-when-SSE2-is-not-available.patch
index 840f6dc36e..475ec55b0e 100644
--- a/src/angle/patches/0005-Fix-build-when-SSE2-is-not-available.patch
+++ b/src/angle/patches/0005-Fix-build-when-SSE2-is-not-available.patch
@@ -1,6 +1,6 @@
-From af7cb8e35774f5cba15256cb463da8c1c4d533f3 Mon Sep 17 00:00:00 2001
+From cebc37237a74a130dffaefad0a10da17abc42981 Mon Sep 17 00:00:00 2001
From: Andy Shaw <andy.shaw@digia.com>
-Date: Sat, 14 Sep 2013 11:25:53 +0300
+Date: Tue, 18 Feb 2014 09:59:17 +0200
Subject: [PATCH] Fix build when SSE2 is not available.
Although SSE2 support is detected at runtime it still may not be
@@ -9,15 +9,15 @@ when it is available at build time too.
Change-Id: I86c45a6466ab4cec79aa0f62b0d5230a78ad825a
---
- src/3rdparty/angle/src/libGLESv2/mathutil.h | 2 ++
- src/3rdparty/angle/src/libGLESv2/renderer/Image9.cpp | 4 ++++
- 2 files changed, 6 insertions(+)
+ src/3rdparty/angle/src/libGLESv2/mathutil.h | 2 ++
+ src/3rdparty/angle/src/libGLESv2/renderer/d3d9/Image9.cpp | 6 +++++-
+ 2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/3rdparty/angle/src/libGLESv2/mathutil.h b/src/3rdparty/angle/src/libGLESv2/mathutil.h
-index bb48b94..0835486 100644
+index f902131..6474b66 100644
--- a/src/3rdparty/angle/src/libGLESv2/mathutil.h
+++ b/src/3rdparty/angle/src/libGLESv2/mathutil.h
-@@ -93,6 +93,7 @@ inline bool supportsSSE2()
+@@ -92,6 +92,7 @@ inline bool supportsSSE2()
return supports;
}
@@ -25,7 +25,7 @@ index bb48b94..0835486 100644
int info[4];
__cpuid(info, 0);
-@@ -102,6 +103,7 @@ inline bool supportsSSE2()
+@@ -101,6 +102,7 @@ inline bool supportsSSE2()
supports = (info[3] >> 26) & 1;
}
@@ -33,10 +33,10 @@ index bb48b94..0835486 100644
checked = true;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Image9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Image9.cpp
-index b3dcc59..53030b7 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Image9.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Image9.cpp
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d9/Image9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d9/Image9.cpp
+index 8511946..cd12d8c 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d9/Image9.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d9/Image9.cpp
@@ -373,11 +373,13 @@ void Image9::loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei heigh
switch (mInternalFormat)
{
@@ -65,6 +65,13 @@ index b3dcc59..53030b7 100644
{
loadRGBAUByteDataToBGRA(width, height, inputPitch, input, locked.Pitch, locked.pBits);
}
+@@ -729,4 +733,4 @@ void Image9::copy(GLint xoffset, GLint yoffset, GLint x, GLint y, GLsizei width,
+ mDirty = true;
+ }
+
+-}
+\ No newline at end of file
++}
--
-1.8.1.msysgit.1
+1.8.4.msysgit.0
diff --git a/src/angle/patches/0011-Fix-compilation-of-libGLESv2-with-older-MinGW-w64-he.patch b/src/angle/patches/0006-Fix-compilation-of-libGLESv2-with-older-MinGW-w64-he.patch
index 9189501b59..cf31245b95 100644
--- a/src/angle/patches/0011-Fix-compilation-of-libGLESv2-with-older-MinGW-w64-he.patch
+++ b/src/angle/patches/0006-Fix-compilation-of-libGLESv2-with-older-MinGW-w64-he.patch
@@ -1,7 +1,8 @@
-From 6d8be1da6a5a5177289200247f98e0200e0e3df3 Mon Sep 17 00:00:00 2001
+From 68ba96d224a84389567f506661a78c32b307e84d Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@digia.com>
-Date: Sat, 14 Sep 2013 11:38:47 +0300
-Subject: [PATCH] Fix compilation of libGLESv2 with older MinGW-w64 headers
+Date: Tue, 18 Feb 2014 10:29:14 +0200
+Subject: [PATCH] Fix compilation of libGLESv2 with older MinGW-w64
+ headers
Fix compilation of libGLESv2 for mingw-headers predating MinGW-w64
svn commit 5567 (like MinGW-builds gcc 4.7.2-rev8, the toolchain
@@ -18,18 +19,18 @@ Change-Id: I31272a1a991c4fc0f1611f8fb7510be51d6bb925
1 file changed, 19 insertions(+)
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-index 70b9326..d1d234b 100644
+index 3407353..e74120d 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-@@ -21,6 +21,25 @@
- #define ANGLE_ENABLE_D3D11 0
+@@ -24,6 +24,25 @@
+ #define D3DERR_OUTOFVIDEOMEMORY MAKE_HRESULT(1, 0x876, 380)
#endif
+#ifdef __MINGW32__
+
+#ifndef D3DCOMPILER_DLL
+
-+//Add define + typedefs for older MinGW-w64 headers (pre 5783)
++// Add define + typedefs for older MinGW-w64 headers (pre 5783)
+
+#define D3DCOMPILER_DLL L"d3dcompiler_43.dll"
+
@@ -48,5 +49,5 @@ index 70b9326..d1d234b 100644
{
--
-1.8.1.msysgit.1
+1.8.4.msysgit.0
diff --git a/src/angle/patches/0006-Make-DX9-DX11-mutually-exclusive.patch b/src/angle/patches/0006-Make-DX9-DX11-mutually-exclusive.patch
deleted file mode 100644
index 1e618d43c7..0000000000
--- a/src/angle/patches/0006-Make-DX9-DX11-mutually-exclusive.patch
+++ /dev/null
@@ -1,149 +0,0 @@
-From c2eb5746cdf65091932558ac48ae1e6175d45a3c Mon Sep 17 00:00:00 2001
-From: Andrew Knight <andrew.knight@digia.com>
-Date: Sat, 14 Sep 2013 12:01:19 +0300
-Subject: [PATCH] Make DX9/DX11 mutually exclusive
-
-ANGLE supports selecting the renderer on creation, choosing between
-D3D11 and D3D9 backends. This patch removes that feature, and makes the
-D3D version a compile-time decision. This makes the binary size smaller
-(no extra render is built) and ensures compatibility with Windows Runtime,
-which supports only Direct3D 11.
-
-Change-Id: Id9473e0e631721083fe4026d475e37603a144c37
----
- src/3rdparty/angle/src/common/RefCountObject.cpp | 1 -
- src/3rdparty/angle/src/common/debug.cpp | 4 +++
- src/3rdparty/angle/src/libGLESv2/Texture.cpp | 6 +++-
- src/3rdparty/angle/src/libGLESv2/precompiled.h | 3 ++
- .../angle/src/libGLESv2/renderer/Renderer.cpp | 37 +++++++---------------
- 5 files changed, 24 insertions(+), 27 deletions(-)
-
-diff --git a/src/3rdparty/angle/src/common/RefCountObject.cpp b/src/3rdparty/angle/src/common/RefCountObject.cpp
-index 0364adf..c1ef90c 100644
---- a/src/3rdparty/angle/src/common/RefCountObject.cpp
-+++ b/src/3rdparty/angle/src/common/RefCountObject.cpp
-@@ -1,4 +1,3 @@
--#include "precompiled.h"
- //
- // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
-diff --git a/src/3rdparty/angle/src/common/debug.cpp b/src/3rdparty/angle/src/common/debug.cpp
-index 2333740..9b93256 100644
---- a/src/3rdparty/angle/src/common/debug.cpp
-+++ b/src/3rdparty/angle/src/common/debug.cpp
-@@ -8,7 +8,11 @@
-
- #include "common/debug.h"
- #include "common/system.h"
-+#ifndef ANGLE_ENABLE_D3D11
- #include <d3d9.h>
-+#else
-+typedef DWORD D3DCOLOR;
-+#endif
-
- namespace gl
- {
-diff --git a/src/3rdparty/angle/src/libGLESv2/Texture.cpp b/src/3rdparty/angle/src/libGLESv2/Texture.cpp
-index ae83037..72c0a8a 100644
---- a/src/3rdparty/angle/src/libGLESv2/Texture.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/Texture.cpp
-@@ -14,7 +14,11 @@
- #include "libGLESv2/main.h"
- #include "libGLESv2/mathutil.h"
- #include "libGLESv2/utilities.h"
--#include "libGLESv2/renderer/Blit.h"
-+#ifndef ANGLE_ENABLE_D3D11
-+# include "libGLESv2/renderer/Blit.h"
-+#else
-+# define D3DFMT_UNKNOWN DXGI_FORMAT_UNKNOWN
-+#endif
- #include "libGLESv2/Renderbuffer.h"
- #include "libGLESv2/renderer/Image.h"
- #include "libGLESv2/renderer/Renderer.h"
-diff --git a/src/3rdparty/angle/src/libGLESv2/precompiled.h b/src/3rdparty/angle/src/libGLESv2/precompiled.h
-index a850d57..50dec6b 100644
---- a/src/3rdparty/angle/src/libGLESv2/precompiled.h
-+++ b/src/3rdparty/angle/src/libGLESv2/precompiled.h
-@@ -32,9 +32,12 @@
- #include <unordered_map>
- #include <vector>
-
-+#ifndef ANGLE_ENABLE_D3D11
- #include <d3d9.h>
-+#else
- #include <D3D11.h>
- #include <dxgi.h>
-+#endif
- #include <D3Dcompiler.h>
-
- #ifdef _MSC_VER
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-index d1d234b..21ad223 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-@@ -11,8 +11,11 @@
- #include "libGLESv2/main.h"
- #include "libGLESv2/Program.h"
- #include "libGLESv2/renderer/Renderer.h"
-+#ifndef ANGLE_ENABLE_D3D11
- #include "libGLESv2/renderer/Renderer9.h"
-+#else
- #include "libGLESv2/renderer/Renderer11.h"
-+#endif
- #include "libGLESv2/utilities.h"
- #include "third_party/trace_event/trace_event.h"
-
-@@ -21,6 +24,10 @@
- #define ANGLE_ENABLE_D3D11 0
- #endif
-
-+#ifndef D3DERR_OUTOFVIDEOMEMORY
-+#define D3DERR_OUTOFVIDEOMEMORY MAKE_HRESULT(1, 0x876, 380)
-+#endif
-+
- #ifdef __MINGW32__
-
- #ifndef D3DCOMPILER_DLL
-@@ -192,34 +199,14 @@ rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayT
- {
- rx::Renderer *renderer = NULL;
- EGLint status = EGL_BAD_ALLOC;
--
-- if (ANGLE_ENABLE_D3D11 ||
-- displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
-- displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
-- {
-- renderer = new rx::Renderer11(display, hDc);
--
-- if (renderer)
-- {
-- status = renderer->initialize();
-- }
--
-- if (status == EGL_SUCCESS)
-- {
-- return renderer;
-- }
-- else if (displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
-- {
-- return NULL;
-- }
--
-- // Failed to create a D3D11 renderer, try creating a D3D9 renderer
-- delete renderer;
-- }
-
-+#if ANGLE_ENABLE_D3D11
-+ renderer = new rx::Renderer11(display, hDc);
-+#else
- bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
- renderer = new rx::Renderer9(display, hDc, softwareDevice);
--
-+#endif
-+
- if (renderer)
- {
- status = renderer->initialize();
---
-1.8.1.msysgit.1
-
diff --git a/src/angle/patches/0007-ANGLE-Fix-typedefs-for-Win64.patch b/src/angle/patches/0007-ANGLE-Fix-typedefs-for-Win64.patch
deleted file mode 100644
index 5779d68e70..0000000000
--- a/src/angle/patches/0007-ANGLE-Fix-typedefs-for-Win64.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 2c7319083bc7bac6faafdf29b3a1d5440abf1313 Mon Sep 17 00:00:00 2001
-From: Jonathan Liu <net147@gmail.com>
-Date: Sat, 14 Sep 2013 11:32:01 +0300
-Subject: [PATCH] ANGLE: Fix typedefs for Win64
-
-The long int type is incorrect for Windows 64-bit as LLP64 is used
-there.
-
-Change-Id: Ibbe6f94bffd511ab1285020c89874021a762c2af
----
- src/3rdparty/angle/include/KHR/khrplatform.h | 7 +++++++
- 1 file changed, 7 insertions(+)
-
-diff --git a/src/3rdparty/angle/include/KHR/khrplatform.h b/src/3rdparty/angle/include/KHR/khrplatform.h
-index 541bfa9..001e925 100644
---- a/src/3rdparty/angle/include/KHR/khrplatform.h
-+++ b/src/3rdparty/angle/include/KHR/khrplatform.h
-@@ -221,10 +221,17 @@ typedef signed char khronos_int8_t;
- typedef unsigned char khronos_uint8_t;
- typedef signed short int khronos_int16_t;
- typedef unsigned short int khronos_uint16_t;
-+#ifdef _WIN64
-+typedef signed long long int khronos_intptr_t;
-+typedef unsigned long long int khronos_uintptr_t;
-+typedef signed long long int khronos_ssize_t;
-+typedef unsigned long long int khronos_usize_t;
-+#else
- typedef signed long int khronos_intptr_t;
- typedef unsigned long int khronos_uintptr_t;
- typedef signed long int khronos_ssize_t;
- typedef unsigned long int khronos_usize_t;
-+#endif
-
- #if KHRONOS_SUPPORT_FLOAT
- /*
---
-1.8.1.msysgit.1
-
diff --git a/src/angle/patches/0007-Make-DX9-DX11-mutually-exclusive.patch b/src/angle/patches/0007-Make-DX9-DX11-mutually-exclusive.patch
new file mode 100644
index 0000000000..25a2f12847
--- /dev/null
+++ b/src/angle/patches/0007-Make-DX9-DX11-mutually-exclusive.patch
@@ -0,0 +1,141 @@
+From e1b26c6669cafb5c1298d6e5476c24686fccf1bd Mon Sep 17 00:00:00 2001
+From: Andrew Knight <andrew.knight@digia.com>
+Date: Thu, 20 Feb 2014 16:46:15 +0200
+Subject: [PATCH] Make DX9/DX11 support configurable
+
+ANGLE supports selecting the renderer on creation, choosing between
+D3D11 and D3D9 backends. This patch improves upon this by enabling the
+D3D backend(s) at compile time. This can make the binary size smaller
+(no extra render is built) and ensures compatibility with Windows Runtime
+when building only the D3D11 renderer.
+
+Change-Id: Id9473e0e631721083fe4026d475e37603a144c37
+---
+ src/3rdparty/angle/src/libEGL/Display.cpp | 4 +++-
+ src/3rdparty/angle/src/libGLESv2/Texture.cpp | 6 +++++-
+ src/3rdparty/angle/src/libGLESv2/precompiled.h | 10 +++++++---
+ .../angle/src/libGLESv2/renderer/Renderer.cpp | 19 +++++++++++++------
+ 4 files changed, 28 insertions(+), 11 deletions(-)
+
+diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
+index 13ef701..a7f5f5a 100644
+--- a/src/3rdparty/angle/src/libEGL/Display.cpp
++++ b/src/3rdparty/angle/src/libEGL/Display.cpp
+@@ -471,7 +471,6 @@ bool Display::hasExistingWindowSurface(HWND window)
+
+ void Display::initExtensionString()
+ {
+- HMODULE swiftShader = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
+ bool shareHandleSupported = mRenderer->getShareHandleSupport();
+
+ mExtensionString = "";
+@@ -487,10 +486,13 @@ void Display::initExtensionString()
+
+ mExtensionString += "EGL_ANGLE_query_surface_pointer ";
+
++#if defined(ANGLE_ENABLE_D3D9)
++ HMODULE swiftShader = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
+ if (swiftShader)
+ {
+ mExtensionString += "EGL_ANGLE_software_display ";
+ }
++#endif
+
+ if (shareHandleSupported)
+ {
+diff --git a/src/3rdparty/angle/src/libGLESv2/Texture.cpp b/src/3rdparty/angle/src/libGLESv2/Texture.cpp
+index 3deecaf..3257d05 100644
+--- a/src/3rdparty/angle/src/libGLESv2/Texture.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/Texture.cpp
+@@ -14,7 +14,11 @@
+ #include "libGLESv2/main.h"
+ #include "libGLESv2/mathutil.h"
+ #include "libGLESv2/utilities.h"
+-#include "libGLESv2/renderer/d3d9/Blit.h"
++#if defined(ANGLE_ENABLE_D3D9)
++# include "libGLESv2/renderer/d3d9/Blit.h"
++#else
++# define D3DFMT_UNKNOWN DXGI_FORMAT_UNKNOWN
++#endif
+ #include "libGLESv2/Renderbuffer.h"
+ #include "libGLESv2/renderer/Image.h"
+ #include "libGLESv2/renderer/Renderer.h"
+diff --git a/src/3rdparty/angle/src/libGLESv2/precompiled.h b/src/3rdparty/angle/src/libGLESv2/precompiled.h
+index 58ad181..79490b1 100644
+--- a/src/3rdparty/angle/src/libGLESv2/precompiled.h
++++ b/src/3rdparty/angle/src/libGLESv2/precompiled.h
+@@ -32,9 +32,13 @@
+ #include <unordered_map>
+ #include <vector>
+
+-#include <d3d9.h>
+-#include <d3d11.h>
+-#include <dxgi.h>
++#if defined(ANGLE_ENABLE_D3D9)
++# include <d3d9.h>
++#endif
++#if defined(ANGLE_ENABLE_D3D11)
++# include <d3d11.h>
++# include <dxgi.h>
++#endif
+ #include <d3dcompiler.h>
+
+ #ifdef _MSC_VER
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+index 86be93f..3407353 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+@@ -11,14 +11,17 @@
+ #include "libGLESv2/main.h"
+ #include "libGLESv2/Program.h"
+ #include "libGLESv2/renderer/Renderer.h"
+-#include "libGLESv2/renderer/d3d9/Renderer9.h"
+-#include "libGLESv2/renderer/d3d11/Renderer11.h"
++#if defined(ANGLE_ENABLE_D3D9)
++# include "libGLESv2/renderer/d3d9/Renderer9.h"
++#endif
++#if defined(ANGLE_ENABLE_D3D11)
++# include "libGLESv2/renderer/d3d11/Renderer11.h"
++#endif
+ #include "libGLESv2/utilities.h"
+ #include "third_party/trace_event/trace_event.h"
+
+-#if !defined(ANGLE_ENABLE_D3D11)
+-// Enables use of the Direct3D 11 API for a default display, when available
+-#define ANGLE_ENABLE_D3D11 0
++#ifndef D3DERR_OUTOFVIDEOMEMORY
++#define D3DERR_OUTOFVIDEOMEMORY MAKE_HRESULT(1, 0x876, 380)
+ #endif
+
+ namespace rx
+@@ -177,7 +180,8 @@ rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayT
+ rx::Renderer *renderer = NULL;
+ EGLint status = EGL_BAD_ALLOC;
+
+- if (ANGLE_ENABLE_D3D11 ||
++#if defined(ANGLE_ENABLE_D3D11)
++ if (displayId == EGL_DEFAULT_DISPLAY ||
+ displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
+ displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
+ {
+@@ -200,7 +204,9 @@ rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayT
+ // Failed to create a D3D11 renderer, try creating a D3D9 renderer
+ delete renderer;
+ }
++#endif // ANGLE_ENABLE_D3D11
+
++#if defined(ANGLE_ENABLE_D3D9)
+ bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
+ renderer = new rx::Renderer9(display, hDc, softwareDevice);
+
+@@ -213,6 +219,7 @@ rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayT
+ {
+ return renderer;
+ }
++#endif // ANGLE_ENABLE_D3D9
+
+ return NULL;
+ }
+--
+1.8.4.msysgit.0
+
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
deleted file mode 100644
index 10b36c2096..0000000000
--- a/src/angle/patches/0008-ANGLE-DX11-Prevent-assert-when-view-is-minimized-or-.patch
+++ /dev/null
@@ -1,58 +0,0 @@
-From 6f4600a842bbc7438c8d330305de82b960598ad3 Mon Sep 17 00:00:00 2001
-From: Andrew Knight <andrew.knight@digia.com>
-Date: Sun, 15 Sep 2013 00:18:44 +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 311790c..b47a7bc 100644
---- a/src/3rdparty/angle/src/libEGL/Surface.cpp
-+++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
-@@ -135,9 +135,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 a50db3b..0da58cb 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-@@ -369,6 +369,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
-
diff --git a/src/angle/patches/0015-ANGLE-Dynamically-load-D3D-compiler-from-a-list-of-k.patch b/src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-of-k.patch
index 1955e12bf3..c7cfafc246 100644
--- a/src/angle/patches/0015-ANGLE-Dynamically-load-D3D-compiler-from-a-list-of-k.patch
+++ b/src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-of-k.patch
@@ -1,6 +1,6 @@
-From 806fbe22a3515792b6716b5072a2131e2ce3437a Mon Sep 17 00:00:00 2001
+From 0fede57f6fc052942b910995fdfa4cd76a32f586 Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Sat, 7 Dec 2013 23:57:39 +0200
+Date: Tue, 18 Feb 2014 12:11:45 +0200
Subject: [PATCH] ANGLE: Dynamically load D3D compiler from a list or the
environment
@@ -11,36 +11,29 @@ QT_D3DCOMPILER_DLL.
Change-Id: I0d7a8a8a36cc571836f8fa59ea14513b9b19c19b
---
- .../angle/src/libGLESv2/renderer/Renderer.cpp | 44 ++++++++++++++++++----
- 1 file changed, 36 insertions(+), 8 deletions(-)
+ .../angle/src/libGLESv2/renderer/Renderer.cpp | 34 ++++++++++++++++++++--
+ 1 file changed, 32 insertions(+), 2 deletions(-)
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-index 7ba183d..39fd0f4 100644
+index e74120d..94cbc0e 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-@@ -29,12 +29,12 @@
- #endif
+@@ -43,6 +43,10 @@ typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const
+
+ #endif // __MINGW32__
- #ifndef D3DCOMPILER_DLL
--#ifndef ANGLE_OS_WINPHONE
- #define D3DCOMPILER_DLL L"d3dcompiler_43.dll" // Lowest common denominator
--#else
--#define D3DCOMPILER_DLL L"qtd3dcompiler.dll" // Placeholder DLL for phone
--#endif // ANGLE_OS_WINPHONE
--#endif // D3DCOMPILER_DLL
-+#endif
-+
+#ifndef QT_D3DCOMPILER_DLL
+#define QT_D3DCOMPILER_DLL D3DCOMPILER_DLL
+#endif
++
+ namespace rx
+ {
- #if defined(__MINGW32__) || defined(ANGLE_OS_WINPHONE)
-
-@@ -83,12 +83,40 @@ bool Renderer::initializeCompiler()
- }
+@@ -77,10 +81,36 @@ bool Renderer::initializeCompiler()
}
- #else
-- // Load the version of the D3DCompiler DLL associated with the Direct3D version ANGLE was built with.
+ #endif // ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES
+
+- if (!mD3dCompilerModule)
+ // Load the compiler DLL specified by the environment, or default to QT_D3DCOMPILER_DLL
+#if !defined(ANGLE_OS_WINRT)
+ const wchar_t *defaultCompiler = _wgetenv(L"QT_D3DCOMPILER_DLL");
@@ -66,18 +59,13 @@ index 7ba183d..39fd0f4 100644
+
+ // Load the first available known compiler DLL
+ for (int i = 0; compilerDlls[i]; ++i)
-+ {
- #if !defined(ANGLE_OS_WINRT)
-- mD3dCompilerModule = LoadLibrary(D3DCOMPILER_DLL);
+ {
+ // Load the version of the D3DCompiler DLL associated with the Direct3D version ANGLE was built with.
+- mD3dCompilerModule = LoadLibrary(D3DCOMPILER_DLL);
+ mD3dCompilerModule = LoadLibrary(compilerDlls[i]);
- #else
-- mD3dCompilerModule = LoadPackagedLibrary(D3DCOMPILER_DLL, NULL);
-+ mD3dCompilerModule = LoadPackagedLibrary(compilerDlls[i], NULL);
- #endif
+ if (mD3dCompilerModule)
+ break;
-+ }
- #endif // ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES
+ }
if (!mD3dCompilerModule)
--
diff --git a/src/angle/patches/0012-ANGLE-Support-WinRT.patch b/src/angle/patches/0009-ANGLE-Support-WinRT.patch
index 8a5b96c7c0..92909d37d8 100644
--- a/src/angle/patches/0012-ANGLE-Support-WinRT.patch
+++ b/src/angle/patches/0009-ANGLE-Support-WinRT.patch
@@ -1,10 +1,10 @@
-From 67c318c7b9c6d95d3170d11956dbec56494511ca Mon Sep 17 00:00:00 2001
+From 46b8b123ada1787c68525cd07dcdbfdbc003bcc5 Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Tue, 1 Oct 2013 09:43:29 +0300
+Date: Thu, 20 Feb 2014 16:49:13 +0200
Subject: [PATCH] ANGLE: Support WinRT
This enables EGL for WinRT's native types, and adjusts some codepaths
-to accommodate differences in between desktop Windows and WinRT.
+to accommodate differences between desktop Windows and WinRT.
- WinRT native handles added to eglplatform.h
- References to native handles in libEGL/libGLESv2 follow eglplatform.h
@@ -16,31 +16,32 @@ Change-Id: Ia90377e700d335a1c569c2145008dd4b0dfd84d3
Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
---
src/3rdparty/angle/include/EGL/eglplatform.h | 10 ++-
- src/3rdparty/angle/src/compiler/osinclude.h | 35 ++++------
- src/3rdparty/angle/src/compiler/ossource_posix.cpp | 8 +++
- src/3rdparty/angle/src/compiler/ossource_win.cpp | 8 +++
- src/3rdparty/angle/src/compiler/ossource_winrt.cpp | 75 ++++++++++++++++++++++
- src/3rdparty/angle/src/libEGL/Display.cpp | 8 ++-
- src/3rdparty/angle/src/libEGL/Display.h | 4 +-
- src/3rdparty/angle/src/libEGL/Surface.cpp | 35 +++++++++-
- src/3rdparty/angle/src/libEGL/Surface.h | 7 +-
+ .../angle/src/compiler/translator/osinclude.h | 20 +++---
+ .../src/compiler/translator/ossource_posix.cpp | 8 +++
+ .../angle/src/compiler/translator/ossource_win.cpp | 8 +++
+ .../src/compiler/translator/ossource_winrt.cpp | 75 ++++++++++++++++++++++
+ src/3rdparty/angle/src/libEGL/Display.cpp | 11 ++--
+ src/3rdparty/angle/src/libEGL/Display.h | 7 +-
+ src/3rdparty/angle/src/libEGL/Surface.cpp | 42 +++++++++++-
+ src/3rdparty/angle/src/libEGL/Surface.h | 6 +-
src/3rdparty/angle/src/libEGL/libEGL.cpp | 4 +-
- src/3rdparty/angle/src/libEGL/main.cpp | 40 ++++++++++--
- src/3rdparty/angle/src/libGLESv2/main.cpp | 39 +++++++++--
- src/3rdparty/angle/src/libGLESv2/precompiled.h | 15 +++++
- .../angle/src/libGLESv2/renderer/Renderer.cpp | 23 ++++---
- .../angle/src/libGLESv2/renderer/Renderer.h | 27 +++++++-
- .../angle/src/libGLESv2/renderer/Renderer11.cpp | 10 ++-
- .../angle/src/libGLESv2/renderer/Renderer11.h | 2 +-
- .../angle/src/libGLESv2/renderer/SwapChain.h | 4 +-
- .../angle/src/libGLESv2/renderer/SwapChain11.cpp | 29 +++++++--
- .../angle/src/libGLESv2/renderer/SwapChain11.h | 2 +-
- src/3rdparty/angle/src/libGLESv2/utilities.cpp | 53 +++++++++++++++
- src/angle/src/common/common.pri | 2 +-
- src/angle/src/compiler/translator_common.pro | 7 +-
- src/angle/src/config.pri | 5 +-
- 24 files changed, 386 insertions(+), 66 deletions(-)
- create mode 100644 src/3rdparty/angle/src/compiler/ossource_winrt.cpp
+ src/3rdparty/angle/src/libEGL/main.cpp | 29 ++++++++-
+ src/3rdparty/angle/src/libGLESv2/Context.cpp | 1 +
+ src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp | 1 +
+ src/3rdparty/angle/src/libGLESv2/main.cpp | 27 ++++++++
+ src/3rdparty/angle/src/libGLESv2/main.h | 2 +-
+ src/3rdparty/angle/src/libGLESv2/precompiled.h | 45 ++++++++++++-
+ .../angle/src/libGLESv2/renderer/Renderer.cpp | 15 +++--
+ .../angle/src/libGLESv2/renderer/Renderer.h | 3 +-
+ .../angle/src/libGLESv2/renderer/SwapChain.h | 5 +-
+ .../src/libGLESv2/renderer/d3d11/Renderer11.cpp | 13 +++-
+ .../src/libGLESv2/renderer/d3d11/Renderer11.h | 5 +-
+ .../src/libGLESv2/renderer/d3d11/SwapChain11.cpp | 37 +++++++++--
+ .../src/libGLESv2/renderer/d3d11/SwapChain11.h | 2 +-
+ .../libGLESv2/renderer/d3d11/shaders/Clear11.hlsl | 4 ++
+ src/3rdparty/angle/src/libGLESv2/utilities.cpp | 48 ++++++++++++++
+ 25 files changed, 378 insertions(+), 50 deletions(-)
+ create mode 100644 src/3rdparty/angle/src/compiler/translator/ossource_winrt.cpp
diff --git a/src/3rdparty/angle/include/EGL/eglplatform.h b/src/3rdparty/angle/include/EGL/eglplatform.h
index 34283f2..eb15ae5 100644
@@ -63,17 +64,14 @@ index 34283f2..eb15ae5 100644
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN 1
#endif
-diff --git a/src/3rdparty/angle/src/compiler/osinclude.h b/src/3rdparty/angle/src/compiler/osinclude.h
-index d8bb1a7..60177d5 100644
---- a/src/3rdparty/angle/src/compiler/osinclude.h
-+++ b/src/3rdparty/angle/src/compiler/osinclude.h
-@@ -13,27 +13,26 @@
+diff --git a/src/3rdparty/angle/src/compiler/translator/osinclude.h b/src/3rdparty/angle/src/compiler/translator/osinclude.h
+index c3063d6..cccfa63 100644
+--- a/src/3rdparty/angle/src/compiler/translator/osinclude.h
++++ b/src/3rdparty/angle/src/compiler/translator/osinclude.h
+@@ -13,7 +13,11 @@
//
#if defined(_WIN32) || defined(_WIN64)
-+#define STRICT
-+#define VC_EXTRALEAN 1
-+#include <windows.h>
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
+#define ANGLE_OS_WINRT
+#else
@@ -81,31 +79,17 @@ index d8bb1a7..60177d5 100644
+#endif
#elif defined(__APPLE__) || defined(__linux__) || \
defined(__FreeBSD__) || defined(__OpenBSD__) || \
- defined(__sun) || defined(ANDROID) || \
- defined(__GLIBC__) || defined(__GNU__) || \
- defined(__QNX__)
- #define ANGLE_OS_POSIX
--#else
--#error Unsupported platform.
--#endif
--
--#if defined(ANGLE_OS_WIN)
--#define STRICT
--#define VC_EXTRALEAN 1
--#include <windows.h>
--#elif defined(ANGLE_OS_POSIX)
- #include <pthread.h>
- #include <semaphore.h>
- #include <errno.h>
--#endif // ANGLE_OS_WIN
--
-+#else
-+#error Unsupported platform.
-+#endif
-
- #include "compiler/debug.h"
+ defined(__NetBSD__) || defined(__DragonFly__) || \
+@@ -25,7 +29,7 @@
+ #error Unsupported platform.
+ #endif
-@@ -43,23 +42,17 @@
+-#if defined(ANGLE_OS_WIN)
++#if defined(ANGLE_OS_WIN) || defined(ANGLE_OS_WINRT)
+ #define STRICT
+ #define VC_EXTRALEAN 1
+ #include <windows.h>
+@@ -44,23 +48,17 @@
#if defined(ANGLE_OS_WIN)
typedef DWORD OS_TLSIndex;
#define OS_INVALID_TLS_INDEX (TLS_OUT_OF_INDEXES)
@@ -133,10 +117,10 @@ index d8bb1a7..60177d5 100644
-}
-
#endif // __OSINCLUDE_H
-diff --git a/src/3rdparty/angle/src/compiler/ossource_posix.cpp b/src/3rdparty/angle/src/compiler/ossource_posix.cpp
-index 1e1e699..35510c1 100644
---- a/src/3rdparty/angle/src/compiler/ossource_posix.cpp
-+++ b/src/3rdparty/angle/src/compiler/ossource_posix.cpp
+diff --git a/src/3rdparty/angle/src/compiler/translator/ossource_posix.cpp b/src/3rdparty/angle/src/compiler/translator/ossource_posix.cpp
+index 90a3757..d4bba4c 100644
+--- a/src/3rdparty/angle/src/compiler/translator/ossource_posix.cpp
++++ b/src/3rdparty/angle/src/compiler/translator/ossource_posix.cpp
@@ -33,6 +33,14 @@ OS_TLSIndex OS_AllocTLSIndex()
}
@@ -152,10 +136,10 @@ index 1e1e699..35510c1 100644
bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue)
{
if (nIndex == OS_INVALID_TLS_INDEX) {
-diff --git a/src/3rdparty/angle/src/compiler/ossource_win.cpp b/src/3rdparty/angle/src/compiler/ossource_win.cpp
-index 89922fe..708a1ad 100644
---- a/src/3rdparty/angle/src/compiler/ossource_win.cpp
-+++ b/src/3rdparty/angle/src/compiler/ossource_win.cpp
+diff --git a/src/3rdparty/angle/src/compiler/translator/ossource_win.cpp b/src/3rdparty/angle/src/compiler/translator/ossource_win.cpp
+index 2cc5871..abd8bc7 100644
+--- a/src/3rdparty/angle/src/compiler/translator/ossource_win.cpp
++++ b/src/3rdparty/angle/src/compiler/translator/ossource_win.cpp
@@ -29,6 +29,14 @@ OS_TLSIndex OS_AllocTLSIndex()
}
@@ -171,11 +155,11 @@ index 89922fe..708a1ad 100644
bool OS_SetTLSValue(OS_TLSIndex nIndex, void *lpvValue)
{
if (nIndex == OS_INVALID_TLS_INDEX) {
-diff --git a/src/3rdparty/angle/src/compiler/ossource_winrt.cpp b/src/3rdparty/angle/src/compiler/ossource_winrt.cpp
+diff --git a/src/3rdparty/angle/src/compiler/translator/ossource_winrt.cpp b/src/3rdparty/angle/src/compiler/translator/ossource_winrt.cpp
new file mode 100644
-index 0000000..84443ab
+index 0000000..bb061ca
--- /dev/null
-+++ b/src/3rdparty/angle/src/compiler/ossource_winrt.cpp
++++ b/src/3rdparty/angle/src/compiler/translator/ossource_winrt.cpp
@@ -0,0 +1,75 @@
+//
+// Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
@@ -183,7 +167,7 @@ index 0000000..84443ab
+// found in the LICENSE file.
+//
+
-+#include "compiler/osinclude.h"
++#include "compiler/translator/osinclude.h"
+//
+// This file contains contains Windows Runtime specific functions
+//
@@ -253,10 +237,40 @@ index 0000000..84443ab
+ return true;
+}
diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
-index a382c3b..14973af 100644
+index a7f5f5a..e75a4b6 100644
--- a/src/3rdparty/angle/src/libEGL/Display.cpp
+++ b/src/3rdparty/angle/src/libEGL/Display.cpp
-@@ -186,7 +186,7 @@ bool Display::getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value)
+@@ -1,3 +1,4 @@
++#include "../libGLESv2/precompiled.h"
+ //
+ // 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
+@@ -40,13 +41,13 @@ egl::Display *Display::getDisplay(EGLNativeDisplayType displayId)
+
+ // FIXME: Check if displayId is a valid display device context
+
+- egl::Display *display = new egl::Display(displayId, (HDC)displayId);
++ egl::Display *display = new egl::Display(displayId);
+
+ displays[displayId] = display;
+ return display;
+ }
+
+-Display::Display(EGLNativeDisplayType displayId, HDC deviceContext) : mDc(deviceContext)
++Display::Display(EGLNativeDisplayType displayId)
+ {
+ mDisplayId = displayId;
+ mRenderer = NULL;
+@@ -71,7 +72,7 @@ bool Display::initialize()
+ return true;
+ }
+
+- mRenderer = glCreateRenderer(this, mDc, mDisplayId);
++ mRenderer = glCreateRenderer(this, mDisplayId);
+
+ if (!mRenderer)
+ {
+@@ -186,7 +187,7 @@ bool Display::getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value)
@@ -265,7 +279,7 @@ index a382c3b..14973af 100644
{
const Config *configuration = mConfigSet.get(config);
EGLint postSubBufferSupported = EGL_FALSE;
-@@ -456,7 +456,7 @@ bool Display::isValidSurface(egl::Surface *surface)
+@@ -456,7 +457,7 @@ bool Display::isValidSurface(egl::Surface *surface)
return mSurfaceSet.find(surface) != mSurfaceSet.end();
}
@@ -274,33 +288,11 @@ index a382c3b..14973af 100644
{
for (SurfaceSet::iterator surface = mSurfaceSet.begin(); surface != mSurfaceSet.end(); surface++)
{
-@@ -471,7 +471,6 @@ bool Display::hasExistingWindowSurface(HWND window)
-
- void Display::initExtensionString()
- {
-- HMODULE swiftShader = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
- bool shareHandleSupported = mRenderer->getShareHandleSupport();
-
- mExtensionString = "";
-@@ -487,10 +486,13 @@ void Display::initExtensionString()
-
- mExtensionString += "EGL_ANGLE_query_surface_pointer ";
-
-+#if !defined(ANGLE_OS_WINRT)
-+ HMODULE swiftShader = GetModuleHandle(TEXT("swiftshader_d3d9.dll"));
- if (swiftShader)
- {
- mExtensionString += "EGL_ANGLE_software_display ";
- }
-+#endif
-
- if (shareHandleSupported)
- {
diff --git a/src/3rdparty/angle/src/libEGL/Display.h b/src/3rdparty/angle/src/libEGL/Display.h
-index 58c3940..5d55410 100644
+index c816e4e..cd07bb3 100644
--- a/src/3rdparty/angle/src/libEGL/Display.h
+++ b/src/3rdparty/angle/src/libEGL/Display.h
-@@ -40,7 +40,7 @@ class Display
+@@ -38,7 +38,7 @@ class Display
bool getConfigs(EGLConfig *configs, const EGLint *attribList, EGLint configSize, EGLint *numConfig);
bool getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value);
@@ -309,7 +301,7 @@ index 58c3940..5d55410 100644
EGLSurface createOffscreenSurface(EGLConfig config, HANDLE shareHandle, const EGLint *attribList);
EGLContext createContext(EGLConfig configHandle, const gl::Context *shareContext, bool notifyResets, bool robustAccess);
-@@ -51,7 +51,7 @@ class Display
+@@ -49,7 +49,7 @@ class Display
bool isValidConfig(EGLConfig config);
bool isValidContext(gl::Context *context);
bool isValidSurface(egl::Surface *surface);
@@ -318,11 +310,30 @@ index 58c3940..5d55410 100644
rx::Renderer *getRenderer() { return mRenderer; };
+@@ -63,12 +63,11 @@ class Display
+ private:
+ DISALLOW_COPY_AND_ASSIGN(Display);
+
+- Display(EGLNativeDisplayType displayId, HDC deviceContext);
++ Display(EGLNativeDisplayType displayId);
+
+ bool restoreLostDevice();
+
+ EGLNativeDisplayType mDisplayId;
+- const HDC mDc;
+
+ bool mSoftwareDevice;
+
diff --git a/src/3rdparty/angle/src/libEGL/Surface.cpp b/src/3rdparty/angle/src/libEGL/Surface.cpp
-index b47a7bc..abc6d7d 100644
+index 12f8dfd..3443355 100644
--- a/src/3rdparty/angle/src/libEGL/Surface.cpp
+++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
-@@ -20,10 +20,15 @@
+@@ -1,3 +1,4 @@
++#include "../libGLESv2/precompiled.h"
+ //
+ // Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+@@ -22,10 +23,15 @@
#include "libEGL/main.h"
#include "libEGL/Display.h"
@@ -334,12 +345,12 @@ index b47a7bc..abc6d7d 100644
namespace egl
{
--Surface::Surface(Display *display, const Config *config, HWND window, EGLint postSubBufferSupported)
+-Surface::Surface(Display *display, const Config *config, HWND window, EGLint postSubBufferSupported)
+Surface::Surface(Display *display, const Config *config, EGLNativeWindowType window, EGLint postSubBufferSupported)
: mDisplay(display), mConfig(config), mWindow(window), mPostSubBufferSupported(postSubBufferSupported)
{
mRenderer = mDisplay->getRenderer();
-@@ -96,6 +101,7 @@ bool Surface::resetSwapChain()
+@@ -98,6 +104,7 @@ bool Surface::resetSwapChain()
if (mWindow)
{
@@ -347,14 +358,16 @@ index b47a7bc..abc6d7d 100644
RECT windowRect;
if (!GetClientRect(getWindowHandle(), &windowRect))
{
-@@ -107,6 +113,14 @@ bool Surface::resetSwapChain()
+@@ -109,6 +116,16 @@ bool Surface::resetSwapChain()
width = windowRect.right - windowRect.left;
height = windowRect.bottom - windowRect.top;
+#else
+ ABI::Windows::Foundation::Rect windowRect;
+ ABI::Windows::UI::Core::ICoreWindow *window;
-+ ASSERT(SUCCEEDED(mWindow->QueryInterface(IID_PPV_ARGS(&window))));
++ HRESULT hr = mWindow->QueryInterface(IID_PPV_ARGS(&window));
++ if (FAILED(hr))
++ return false;
+ window->get_Bounds(&windowRect);
+ width = windowRect.Width;
+ height = windowRect.Height;
@@ -362,7 +375,7 @@ index b47a7bc..abc6d7d 100644
}
else
{
-@@ -226,7 +240,7 @@ bool Surface::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
+@@ -221,7 +238,7 @@ bool Surface::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
return true;
}
@@ -371,7 +384,7 @@ index b47a7bc..abc6d7d 100644
{
return mWindow;
}
-@@ -235,6 +249,7 @@ HWND Surface::getWindowHandle()
+@@ -230,6 +247,7 @@ HWND Surface::getWindowHandle()
#define kSurfaceProperty _TEXT("Egl::SurfaceOwner")
#define kParentWndProc _TEXT("Egl::SurfaceParentWndProc")
@@ -379,7 +392,7 @@ index b47a7bc..abc6d7d 100644
static LRESULT CALLBACK SurfaceWindowProc(HWND hwnd, UINT message, WPARAM wparam, LPARAM lparam)
{
if (message == WM_SIZE)
-@@ -248,9 +263,13 @@ static LRESULT CALLBACK SurfaceWindowProc(HWND hwnd, UINT message, WPARAM wparam
+@@ -243,9 +261,13 @@ static LRESULT CALLBACK SurfaceWindowProc(HWND hwnd, UINT message, WPARAM wparam
WNDPROC prevWndFunc = reinterpret_cast<WNDPROC >(GetProp(hwnd, kParentWndProc));
return CallWindowProc(prevWndFunc, hwnd, message, wparam, lparam);
}
@@ -393,7 +406,7 @@ index b47a7bc..abc6d7d 100644
if (!mWindow)
{
return;
-@@ -274,10 +293,12 @@ void Surface::subclassWindow()
+@@ -269,10 +291,12 @@ void Surface::subclassWindow()
SetProp(mWindow, kSurfaceProperty, reinterpret_cast<HANDLE>(this));
SetProp(mWindow, kParentWndProc, reinterpret_cast<HANDLE>(oldWndProc));
mWindowSubclassed = true;
@@ -406,7 +419,7 @@ index b47a7bc..abc6d7d 100644
if(!mWindowSubclassed)
{
return;
-@@ -300,10 +321,12 @@ void Surface::unsubclassWindow()
+@@ -295,10 +319,12 @@ void Surface::unsubclassWindow()
RemoveProp(mWindow, kSurfaceProperty);
RemoveProp(mWindow, kParentWndProc);
mWindowSubclassed = false;
@@ -419,34 +432,38 @@ index b47a7bc..abc6d7d 100644
RECT client;
if (!GetClientRect(getWindowHandle(), &client))
{
-@@ -314,6 +337,14 @@ bool Surface::checkForOutOfDateSwapChain()
+@@ -309,14 +335,26 @@ bool Surface::checkForOutOfDateSwapChain()
// Grow the buffer now, if the window has grown. We need to grow now to avoid losing information.
int clientWidth = client.right - client.left;
int clientHeight = client.bottom - client.top;
+#else
+ ABI::Windows::Foundation::Rect windowRect;
+ ABI::Windows::UI::Core::ICoreWindow *window;
-+ ASSERT(SUCCEEDED(mWindow->QueryInterface(IID_PPV_ARGS(&window))));
++ HRESULT hr = mWindow->QueryInterface(IID_PPV_ARGS(&window));
++ if (FAILED(hr))
++ return false;
+ window->get_Bounds(&windowRect);
+ int clientWidth = windowRect.Width;
+ int clientHeight = windowRect.Height;
+#endif
bool sizeDirty = clientWidth != getWidth() || clientHeight != getHeight();
- if (mSwapIntervalDirty)
++#if !defined(ANGLE_OS_WINRT)
+ if (IsIconic(getWindowHandle()))
+ {
+ // The window is automatically resized to 150x22 when it's minimized, but the swapchain shouldn't be resized
+ // because that's not a useful size to render to.
+ sizeDirty = false;
+ }
++#endif
+
+ bool wasDirty = (mSwapIntervalDirty || sizeDirty);
+
diff --git a/src/3rdparty/angle/src/libEGL/Surface.h b/src/3rdparty/angle/src/libEGL/Surface.h
-index 938b800..ae9a380 100644
+index 938b800..1d2303c 100644
--- a/src/3rdparty/angle/src/libEGL/Surface.h
+++ b/src/3rdparty/angle/src/libEGL/Surface.h
-@@ -15,6 +15,7 @@
- #include <EGL/egl.h>
-
- #include "common/angleutils.h"
-+#include "windows.h"
-
- namespace gl
- {
-@@ -34,7 +35,7 @@ class Config;
+@@ -34,7 +34,7 @@ class Config;
class Surface
{
public:
@@ -455,7 +472,7 @@ index 938b800..ae9a380 100644
Surface(Display *display, const egl::Config *config, HANDLE shareHandle, EGLint width, EGLint height, EGLenum textureFormat, EGLenum textureTarget);
~Surface();
-@@ -43,7 +44,7 @@ class Surface
+@@ -43,7 +43,7 @@ class Surface
void release();
bool resetSwapChain();
@@ -464,17 +481,17 @@ index 938b800..ae9a380 100644
bool swap();
bool postSubBuffer(EGLint x, EGLint y, EGLint width, EGLint height);
-@@ -79,7 +80,7 @@ private:
+@@ -79,7 +79,7 @@ private:
bool resetSwapChain(int backbufferWidth, int backbufferHeight);
bool swapRect(EGLint x, EGLint y, EGLint width, EGLint height);
- const HWND mWindow; // Window that the surface is created for.
-+ const EGLNativeWindowType mWindow; // Window that the surface is created for.
++ const EGLNativeWindowType mWindow; // Window that the surface is created for.
bool mWindowSubclassed; // Indicates whether we successfully subclassed mWindow for WM_RESIZE hooking
const egl::Config *mConfig; // EGL config surface was created with
EGLint mHeight; // Height of surface
diff --git a/src/3rdparty/angle/src/libEGL/libEGL.cpp b/src/3rdparty/angle/src/libEGL/libEGL.cpp
-index 6e10c39..5bcb5d5 100644
+index 0ea46d4..b2944d5 100644
--- a/src/3rdparty/angle/src/libEGL/libEGL.cpp
+++ b/src/3rdparty/angle/src/libEGL/libEGL.cpp
@@ -308,14 +308,16 @@ EGLSurface __stdcall eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EG
@@ -496,7 +513,7 @@ index 6e10c39..5bcb5d5 100644
catch(std::bad_alloc&)
{
diff --git a/src/3rdparty/angle/src/libEGL/main.cpp b/src/3rdparty/angle/src/libEGL/main.cpp
-index 7dea5fc..964b4b2 100644
+index 772b8eb..e972691 100644
--- a/src/3rdparty/angle/src/libEGL/main.cpp
+++ b/src/3rdparty/angle/src/libEGL/main.cpp
@@ -1,3 +1,4 @@
@@ -504,24 +521,67 @@ index 7dea5fc..964b4b2 100644
//
// Copyright (c) 2002-2012 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
-@@ -12,7 +13,13 @@
+@@ -10,14 +11,23 @@
- #ifndef QT_OPENGL_ES_2_ANGLE_STATIC
+ #include "common/debug.h"
+#if !defined(ANGLE_OS_WINRT)
static DWORD currentTLS = TLS_OUT_OF_INDEXES;
+#else
+static __declspec(thread) void *currentTLS = 0;
+#endif
-+
-+namespace egl { Current *getCurrent(); }
- extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
+ namespace egl
{
-@@ -35,22 +42,25 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
+
+ Current *AllocateCurrent()
+ {
++#if !defined(ANGLE_OS_WINRT)
+ Current *current = (egl::Current*)LocalAlloc(LPTR, sizeof(egl::Current));
++#else
++ currentTLS = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Current));
++ Current *current = (egl::Current*)currentTLS;
++#endif
+
+ if (!current)
+ {
+@@ -25,8 +35,10 @@ Current *AllocateCurrent()
+ return NULL;
+ }
+
++#if !defined(ANGLE_OS_WINRT)
+ ASSERT(currentTLS != TLS_OUT_OF_INDEXES);
+ TlsSetValue(currentTLS, current);
++#endif
+
+ current->error = EGL_SUCCESS;
+ current->API = EGL_OPENGL_ES_API;
+@@ -39,12 +51,20 @@ Current *AllocateCurrent()
+
+ void DeallocateCurrent()
+ {
++#if !defined(ANGLE_OS_WINRT)
+ void *current = TlsGetValue(currentTLS);
+
+ if (current)
+ {
+ LocalFree((HLOCAL)current);
+ }
++#else
++ if (currentTLS)
++ {
++ HeapFree(GetProcessHeap(), 0, currentTLS);
++ currentTLS = 0;
++ }
++#endif
+ }
+
+ }
+@@ -69,13 +89,14 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
+ }
}
#endif
-
+-
+#if !defined(ANGLE_OS_WINRT)
currentTLS = TlsAlloc();
@@ -533,94 +593,114 @@ index 7dea5fc..964b4b2 100644
}
// Fall throught to initialize index
case DLL_THREAD_ATTACH:
- {
-- egl::Current *current = (egl::Current*)LocalAlloc(LPTR, sizeof(egl::Current));
-+ egl::Current *current = egl::getCurrent();
-
- if (current)
- {
-+#if !defined(ANGLE_OS_WINRT)
- TlsSetValue(currentTLS, current);
--
-+#endif
- current->error = EGL_SUCCESS;
- current->API = EGL_OPENGL_ES_API;
- current->display = EGL_NO_DISPLAY;
-@@ -61,24 +71,35 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
- break;
- case DLL_THREAD_DETACH:
- {
-- void *current = TlsGetValue(currentTLS);
-+ egl::Current *current = egl::getCurrent();
-
- if (current)
- {
-+#if !defined(ANGLE_OS_WINRT)
- LocalFree((HLOCAL)current);
-+#else
-+ HeapFree(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, current);
-+ currentTLS = 0;
-+#endif
- }
- }
- break;
+@@ -91,7 +112,9 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
case DLL_PROCESS_DETACH:
{
-- void *current = TlsGetValue(currentTLS);
-+ egl::Current *current = egl::getCurrent();
-
- if (current)
- {
+ egl::DeallocateCurrent();
+#if !defined(ANGLE_OS_WINRT)
- LocalFree((HLOCAL)current);
- }
-
TlsFree(currentTLS);
-+#else
-+ HeapFree(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, current);
-+ currentTLS = 0;
-+ }
+#endif
}
break;
default:
-@@ -95,7 +116,16 @@ namespace egl
- Current *getCurrent()
+@@ -107,8 +130,12 @@ namespace egl
+ Current *GetCurrentData()
{
#ifndef QT_OPENGL_ES_2_ANGLE_STATIC
-- return (Current*)TlsGetValue(currentTLS);
+#if !defined(ANGLE_OS_WINRT)
-+ Current *current = (Current*)TlsGetValue(currentTLS);
-+ if (!current)
-+ current = (Current*)LocalAlloc(LPTR, sizeof(Current));
-+ return current;
-+#else
-+ if (!currentTLS)
-+ currentTLS = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY, sizeof(Current));
-+ return (Current*)currentTLS;
-+#endif
+ Current *current = (Current*)TlsGetValue(currentTLS);
#else
++ Current *current = (Current*)currentTLS;
++#endif
++#else
// No precautions for thread safety taken as ANGLE is used single-threaded in Qt.
- static Current curr = { EGL_SUCCESS, EGL_OPENGL_ES_API, EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE };
+ static Current s_current = { EGL_SUCCESS, EGL_OPENGL_ES_API, EGL_NO_DISPLAY, EGL_NO_SURFACE, EGL_NO_SURFACE };
+ Current *current = &s_current;
+diff --git a/src/3rdparty/angle/src/libGLESv2/Context.cpp b/src/3rdparty/angle/src/libGLESv2/Context.cpp
+index 1a058b6..e651785 100644
+--- a/src/3rdparty/angle/src/libGLESv2/Context.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/Context.cpp
+@@ -1076,6 +1076,7 @@ void Context::setRenderbufferStorage(GLsizei width, GLsizei height, GLenum inter
+ case GL_RGB565:
+ case GL_RGB8_OES:
+ case GL_RGBA8_OES:
++ case GL_BGRA8_EXT:
+ renderbuffer = new gl::Colorbuffer(mRenderer,width, height, internalformat, samples);
+ break;
+ case GL_STENCIL_INDEX8:
+diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
+index a33481e..814dfbf 100644
+--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
+@@ -4895,6 +4895,7 @@ void __stdcall glRenderbufferStorageMultisampleANGLE(GLenum target, GLsizei samp
+ case GL_RGBA8_OES:
+ case GL_STENCIL_INDEX8:
+ case GL_DEPTH24_STENCIL8_OES:
++ case GL_BGRA8_EXT:
+ context->setRenderbufferStorage(width, height, internalformat, samples);
+ break;
+ default:
diff --git a/src/3rdparty/angle/src/libGLESv2/main.cpp b/src/3rdparty/angle/src/libGLESv2/main.cpp
-index 730a6ac..defdf35 100644
+index 6b459d3..95f4b8d 100644
--- a/src/3rdparty/angle/src/libGLESv2/main.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/main.cpp
-@@ -13,7 +13,13 @@
+@@ -11,14 +11,23 @@
- #ifndef QT_OPENGL_ES_2_ANGLE_STATIC
+ #include "libGLESv2/Context.h"
+#if !defined(ANGLE_OS_WINRT)
static DWORD currentTLS = TLS_OUT_OF_INDEXES;
+#else
+static __declspec(thread) void *currentTLS = 0;
+#endif
-+
-+namespace gl { Current *getCurrent(); }
- extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
+ namespace gl
{
-@@ -21,22 +27,25 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
+
+ Current *AllocateCurrent()
+ {
++#if !defined(ANGLE_OS_WINRT)
+ Current *current = (Current*)LocalAlloc(LPTR, sizeof(Current));
++#else
++ currentTLS = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(Current));
++ Current *current = (Current*)currentTLS;
++#endif
+
+ if (!current)
+ {
+@@ -26,8 +35,10 @@ Current *AllocateCurrent()
+ return NULL;
+ }
+
++#if !defined(ANGLE_OS_WINRT)
+ ASSERT(currentTLS != TLS_OUT_OF_INDEXES);
+ TlsSetValue(currentTLS, current);
++#endif
+
+ current->context = NULL;
+ current->display = NULL;
+@@ -37,12 +48,20 @@ Current *AllocateCurrent()
+
+ void DeallocateCurrent()
+ {
++#if !defined(ANGLE_OS_WINRT)
+ void *current = TlsGetValue(currentTLS);
+
+ if (current)
+ {
+ LocalFree((HLOCAL)current);
+ }
++#else
++ if (currentTLS)
++ {
++ HeapFree(GetProcessHeap(), 0, currentTLS);
++ currentTLS = 0;
++ }
++#endif
+ }
+
+ }
+@@ -53,12 +72,14 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
{
case DLL_PROCESS_ATTACH:
{
@@ -635,167 +715,162 @@ index 730a6ac..defdf35 100644
}
// Fall throught to initialize index
case DLL_THREAD_ATTACH:
- {
-- gl::Current *current = (gl::Current*)LocalAlloc(LPTR, sizeof(gl::Current));
-+ gl::Current *current = gl::getCurrent();
-
- if (current)
- {
-+#if !defined(ANGLE_OS_WINRT)
- TlsSetValue(currentTLS, current);
--
-+#endif
- current->context = NULL;
- current->display = NULL;
- }
-@@ -44,24 +53,35 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
- break;
- case DLL_THREAD_DETACH:
- {
-- void *current = TlsGetValue(currentTLS);
-+ gl::Current *current = gl::getCurrent();
-
- if (current)
- {
-+#if !defined(ANGLE_OS_WINRT)
- LocalFree((HLOCAL)current);
-+#else
-+ HeapFree(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, current);
-+ currentTLS = 0;
-+#endif
- }
- }
- break;
+@@ -74,7 +95,9 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
case DLL_PROCESS_DETACH:
{
-- void *current = TlsGetValue(currentTLS);
-+ gl::Current *current = gl::getCurrent();
-
- if (current)
- {
+ gl::DeallocateCurrent();
+#if !defined(ANGLE_OS_WINRT)
- LocalFree((HLOCAL)current);
- }
-
TlsFree(currentTLS);
-+#else
-+ HeapFree(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS, current);
-+ currentTLS = 0;
-+ }
+#endif
}
break;
default:
-@@ -78,7 +98,16 @@ namespace gl
- Current *getCurrent()
+@@ -90,8 +113,12 @@ namespace gl
+ Current *GetCurrentData()
{
#ifndef QT_OPENGL_ES_2_ANGLE_STATIC
-- return (Current*)TlsGetValue(currentTLS);
+#if !defined(ANGLE_OS_WINRT)
-+ Current *current = (Current*)TlsGetValue(currentTLS);
-+ if (!current)
-+ current = (Current*)LocalAlloc(LPTR, sizeof(Current));
-+ return current;
-+#else
-+ if (!currentTLS)
-+ currentTLS = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS|HEAP_ZERO_MEMORY, sizeof(Current));
-+ return (Current*)currentTLS;
-+#endif
+ Current *current = (Current*)TlsGetValue(currentTLS);
#else
++ Current *current = (Current*)currentTLS;
++#endif
++#else
// No precautions for thread safety taken as ANGLE is used single-threaded in Qt.
- static gl::Current curr = { 0, 0 };
+ static Current s_current = { 0, 0 };
+ Current *current = &s_current;
+diff --git a/src/3rdparty/angle/src/libGLESv2/main.h b/src/3rdparty/angle/src/libGLESv2/main.h
+index b413f23..69465c9 100644
+--- a/src/3rdparty/angle/src/libGLESv2/main.h
++++ b/src/3rdparty/angle/src/libGLESv2/main.h
+@@ -57,7 +57,7 @@ gl::Context *glCreateContext(const gl::Context *shareContext, rx::Renderer *rend
+ void glDestroyContext(gl::Context *context);
+ void glMakeCurrent(gl::Context *context, egl::Display *display, egl::Surface *surface);
+ gl::Context *glGetCurrentContext();
+-rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId);
++rx::Renderer *glCreateRenderer(egl::Display *display, EGLNativeDisplayType displayId);
+ void glDestroyRenderer(rx::Renderer *renderer);
+
+ __eglMustCastToProperFunctionPointerType __stdcall glGetProcAddress(const char *procname);
diff --git a/src/3rdparty/angle/src/libGLESv2/precompiled.h b/src/3rdparty/angle/src/libGLESv2/precompiled.h
-index 50dec6b..823d27b 100644
+index 79490b1..2ff09f5 100644
--- a/src/3rdparty/angle/src/libGLESv2/precompiled.h
+++ b/src/3rdparty/angle/src/libGLESv2/precompiled.h
-@@ -32,13 +32,28 @@
+@@ -32,14 +32,55 @@
#include <unordered_map>
#include <vector>
+#if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_APP || WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP)
-+#define ANGLE_OS_WINRT
-+#if WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
-+#define ANGLE_OS_WINPHONE
++# define ANGLE_OS_WINRT
++# if WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP
++# define ANGLE_OS_WINPHONE
++# endif
+#endif
++
+ #if defined(ANGLE_ENABLE_D3D9)
+ # include <d3d9.h>
+ #endif
+ #if defined(ANGLE_ENABLE_D3D11)
+-# include <d3d11.h>
++# if !defined(ANGLE_OS_WINRT)
++# include <d3d11.h>
++# else
++# include <d3d11_1.h>
++# define Sleep(x) WaitForSingleObjectEx(GetCurrentThread(), x, FALSE)
++# define GetVersion() WINVER
++# define LoadLibrary(x) LoadPackagedLibrary(x, NULL)
++# endif
+ # include <dxgi.h>
+ #endif
+-#include <d3dcompiler.h>
++#if !defined(ANGLE_OS_WINPHONE)
++# include <d3dcompiler.h>
+#endif
+
- #ifndef ANGLE_ENABLE_D3D11
- #include <d3d9.h>
- #else
-+#if !defined(ANGLE_OS_WINRT)
- #include <D3D11.h>
-+#else
-+#include <d3d11_1.h>
-+#define Sleep(x) WaitForSingleObjectEx(GetCurrentThread(), x, FALSE)
-+#define GetVersion() WINVER
++#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL0
++#define D3DCOMPILE_OPTIMIZATION_LEVEL0 (1 << 14)
+#endif
- #include <dxgi.h>
- #endif
-+#ifndef ANGLE_OS_WINPHONE
- #include <D3Dcompiler.h>
++#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL1
++#define D3DCOMPILE_OPTIMIZATION_LEVEL1 0
++#endif
++#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL2
++#define D3DCOMPILE_OPTIMIZATION_LEVEL2 ((1 << 14) | (1 << 15))
++#endif
++#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL3
++#define D3DCOMPILE_OPTIMIZATION_LEVEL3 (1 << 15)
++#endif
++#ifndef D3DCOMPILE_DEBUG
++#define D3DCOMPILE_DEBUG (1 << 0)
++#endif
++#ifndef D3DCOMPILE_SKIP_OPTIMIZATION
++#define D3DCOMPILE_SKIP_OPTIMIZATION (1 << 2)
++#endif
++#ifndef D3DCOMPILE_AVOID_FLOW_CONTROL
++#define D3DCOMPILE_AVOID_FLOW_CONTROL (1 << 9)
++#endif
++#ifndef D3DCOMPILE_PREFER_FLOW_CONTROL
++#define D3DCOMPILE_PREFER_FLOW_CONTROL (1 << 10)
+#endif
#ifdef _MSC_VER
#include <hash_map>
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-index 21ad223..7ba183d 100644
+index 94cbc0e..5278113 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
-@@ -28,13 +28,18 @@
+@@ -24,7 +24,7 @@
#define D3DERR_OUTOFVIDEOMEMORY MAKE_HRESULT(1, 0x876, 380)
#endif
-#ifdef __MINGW32__
--
- #ifndef D3DCOMPILER_DLL
-+#ifndef ANGLE_OS_WINPHONE
-+#define D3DCOMPILER_DLL L"d3dcompiler_43.dll" // Lowest common denominator
-+#else
-+#define D3DCOMPILER_DLL L"qtd3dcompiler.dll" // Placeholder DLL for phone
-+#endif // ANGLE_OS_WINPHONE
-+#endif // D3DCOMPILER_DLL
-
--//Add define + typedefs for older MinGW-w64 headers (pre 5783)
+#if defined(__MINGW32__) || defined(ANGLE_OS_WINPHONE)
--#define D3DCOMPILER_DLL L"d3dcompiler_43.dll"
-+//Add define + typedefs for older MinGW-w64 headers (pre 5783)
-+//Also define these on Windows Phone, which doesn't have a shader compiler
+ #ifndef D3DCOMPILER_DLL
- HRESULT WINAPI D3DCompile(const void *data, SIZE_T data_size, const char *filename,
- const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,
-@@ -43,9 +48,7 @@ typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const
- const D3D_SHADER_MACRO *defines, ID3DInclude *include, const char *entrypoint,
- const char *target, UINT sflags, UINT eflags, ID3DBlob **shader, ID3DBlob **error_messages);
+@@ -41,7 +41,7 @@ typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const
+
+ #endif // D3DCOMPILER_DLL
--#endif // D3DCOMPILER_DLL
--
-#endif // __MINGW32__
+#endif // __MINGW32__ || ANGLE_OS_WINPHONE
- namespace rx
+ #ifndef QT_D3DCOMPILER_DLL
+ #define QT_D3DCOMPILER_DLL D3DCOMPILER_DLL
+@@ -224,17 +224,22 @@ ShaderBlob *Renderer::compileToBinary(gl::InfoLog &infoLog, const char *hlsl, co
+ extern "C"
{
-@@ -81,7 +84,11 @@ bool Renderer::initializeCompiler()
- }
- #else
- // Load the version of the D3DCompiler DLL associated with the Direct3D version ANGLE was built with.
-+#if !defined(ANGLE_OS_WINRT)
- mD3dCompilerModule = LoadLibrary(D3DCOMPILER_DLL);
-+#else
-+ mD3dCompilerModule = LoadPackagedLibrary(D3DCOMPILER_DLL, NULL);
+
+-rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId)
++rx::Renderer *glCreateRenderer(egl::Display *display, EGLNativeDisplayType displayId)
+ {
+ rx::Renderer *renderer = NULL;
+ EGLint status = EGL_BAD_ALLOC;
+
++#if defined(ANGLE_OS_WINRT)
++ if (displayId == EGL_DEFAULT_DISPLAY)
++ displayId = EGL_D3D11_ONLY_DISPLAY_ANGLE;
+#endif
- #endif // ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES
++
+ #if defined(ANGLE_ENABLE_D3D11)
+ if (displayId == EGL_DEFAULT_DISPLAY ||
+ displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
+ displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
+ {
+- renderer = new rx::Renderer11(display, hDc);
++ renderer = new rx::Renderer11(display);
- if (!mD3dCompilerModule)
-@@ -225,4 +232,4 @@ void glDestroyRenderer(rx::Renderer *renderer)
- delete renderer;
- }
+ if (renderer)
+ {
+@@ -257,7 +262,7 @@ rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayT
--}
-\ No newline at end of file
-+}
+ #if defined(ANGLE_ENABLE_D3D9)
+ bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
+- renderer = new rx::Renderer9(display, hDc, softwareDevice);
++ renderer = new rx::Renderer9(display, displayId, softwareDevice);
+
+ if (renderer)
+ {
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
-index 04e877b..ac67c27 100644
+index 7244a0a..79578b2 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
@@ -1,3 +1,4 @@
@@ -803,38 +878,7 @@ index 04e877b..ac67c27 100644
//
// Copyright (c) 2012-2013 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
-@@ -13,6 +14,30 @@
- #include "libGLESv2/Uniform.h"
- #include "libGLESv2/angletypes.h"
-
-+#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL0
-+#define D3DCOMPILE_OPTIMIZATION_LEVEL0 (1 << 14)
-+#endif
-+#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL1
-+#define D3DCOMPILE_OPTIMIZATION_LEVEL1 0
-+#endif
-+#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL2
-+#define D3DCOMPILE_OPTIMIZATION_LEVEL2 ((1 << 14) | (1 << 15))
-+#endif
-+#ifndef D3DCOMPILE_OPTIMIZATION_LEVEL3
-+#define D3DCOMPILE_OPTIMIZATION_LEVEL3 (1 << 15)
-+#endif
-+#ifndef D3DCOMPILE_DEBUG
-+#define D3DCOMPILE_DEBUG (1 << 0)
-+#endif
-+#ifndef D3DCOMPILE_SKIP_OPTIMIZATION
-+#define D3DCOMPILE_SKIP_OPTIMIZATION (1 << 2)
-+#endif
-+#ifndef D3DCOMPILE_AVOID_FLOW_CONTROL
-+#define D3DCOMPILE_AVOID_FLOW_CONTROL (1 << 9)
-+#endif
-+#ifndef D3DCOMPILE_PREFER_FLOW_CONTROL
-+#define D3DCOMPILE_PREFER_FLOW_CONTROL (1 << 10)
-+#endif
- #if !defined(ANGLE_COMPILE_OPTIMIZATION_LEVEL)
- #define ANGLE_COMPILE_OPTIMIZATION_LEVEL D3DCOMPILE_OPTIMIZATION_LEVEL3
- #endif
-@@ -107,7 +132,7 @@ class Renderer
+@@ -113,7 +114,7 @@ class Renderer
virtual void sync(bool block) = 0;
@@ -843,10 +887,46 @@ index 04e877b..ac67c27 100644
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler) = 0;
virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture) = 0;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp
-index a431018..d04467b 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
+index f09f19b..8231fbc 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
+@@ -1,3 +1,4 @@
++#include "../precompiled.h"
+ //
+ // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
+ // Use of this source code is governed by a BSD-style license that can be
+@@ -22,7 +23,7 @@ namespace rx
+ class SwapChain
+ {
+ public:
+- SwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat)
++ SwapChain(EGLNativeWindowType window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat)
+ : mWindow(window), mShareHandle(shareHandle), mBackBufferFormat(backBufferFormat), mDepthBufferFormat(depthBufferFormat)
+ {
+ }
+@@ -37,7 +38,7 @@ class SwapChain
+ virtual HANDLE getShareHandle() {return mShareHandle;};
+
+ protected:
+- const HWND mWindow; // Window that the surface is created for.
++ const EGLNativeWindowType mWindow; // Window that the surface is created for.
+ const GLenum mBackBufferFormat;
+ const GLenum mDepthBufferFormat;
+
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp
+index d9fcb7a..7f166fd 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp
+@@ -66,7 +66,7 @@ enum
+ MAX_TEXTURE_IMAGE_UNITS_VTF_SM4 = 16
+ };
+
+-Renderer11::Renderer11(egl::Display *display, HDC hDc) : Renderer(display), mDc(hDc)
++Renderer11::Renderer11(egl::Display *display) : Renderer(display)
+ {
+ mVertexDataManager = NULL;
+ mIndexDataManager = NULL;
@@ -137,6 +137,7 @@ EGLint Renderer11::initialize()
return EGL_NOT_INITIALIZED;
}
@@ -855,7 +935,15 @@ index a431018..d04467b 100644
mDxgiModule = LoadLibrary(TEXT("dxgi.dll"));
mD3d11Module = LoadLibrary(TEXT("d3d11.dll"));
-@@ -155,6 +156,7 @@ EGLint Renderer11::initialize()
+@@ -146,6 +147,7 @@ EGLint Renderer11::initialize()
+ return EGL_NOT_INITIALIZED;
+ }
+
++
+ // create the D3D11 device
+ ASSERT(mDevice == NULL);
+ PFN_D3D11_CREATE_DEVICE D3D11CreateDevice = (PFN_D3D11_CREATE_DEVICE)GetProcAddress(mD3d11Module, "D3D11CreateDevice");
+@@ -155,6 +157,7 @@ EGLint Renderer11::initialize()
ERR("Could not retrieve D3D11CreateDevice address - aborting!\n");
return EGL_NOT_INITIALIZED;
}
@@ -863,7 +951,7 @@ index a431018..d04467b 100644
D3D_FEATURE_LEVEL featureLevels[] =
{
-@@ -203,8 +205,12 @@ EGLint Renderer11::initialize()
+@@ -203,8 +206,12 @@ EGLint Renderer11::initialize()
}
}
@@ -877,7 +965,7 @@ index a431018..d04467b 100644
if (FAILED(result))
{
-@@ -524,7 +530,7 @@ void Renderer11::sync(bool block)
+@@ -522,7 +529,7 @@ void Renderer11::sync(bool block)
}
}
@@ -886,10 +974,19 @@ index a431018..d04467b 100644
{
return new rx::SwapChain11(this, window, shareHandle, backBufferFormat, depthBufferFormat);
}
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h
-index f024855..a7f5a39 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h
+index 1b6760b..ba3f0c6 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h
+@@ -39,7 +39,7 @@ enum
+ class Renderer11 : public Renderer
+ {
+ public:
+- Renderer11(egl::Display *display, HDC hDc);
++ Renderer11(egl::Display *display);
+ virtual ~Renderer11();
+
+ static Renderer11 *makeRenderer11(Renderer *renderer);
@@ -52,7 +52,7 @@ class Renderer11 : public Renderer
virtual void sync(bool block);
@@ -899,33 +996,19 @@ index f024855..a7f5a39 100644
virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
virtual void setTexture(gl::SamplerType type, int index, gl::Texture *texture);
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
-index 14c0515..a6870eb 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
-@@ -18,7 +18,7 @@ namespace rx
- class SwapChain
- {
- public:
-- SwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat)
-+ SwapChain(EGLNativeWindowType window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat)
- : mWindow(window), mShareHandle(shareHandle), mBackBufferFormat(backBufferFormat), mDepthBufferFormat(depthBufferFormat)
- {
- }
-@@ -33,7 +33,7 @@ class SwapChain
- virtual HANDLE getShareHandle() {return mShareHandle;};
+@@ -203,7 +203,6 @@ class Renderer11 : public Renderer
- protected:
-- const HWND mWindow; // Window that the surface is created for.
-+ const EGLNativeWindowType mWindow; // Window that the surface is created for.
- const GLenum mBackBufferFormat;
- const GLenum mDepthBufferFormat;
+ HMODULE mD3d11Module;
+ HMODULE mDxgiModule;
+- HDC mDc;
+
+ bool mDeviceLost;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-index 0da58cb..0797fd7 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-@@ -17,7 +17,7 @@
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.cpp
+index d2b53a7..bd97d5c 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.cpp
+@@ -18,7 +18,7 @@
namespace rx
{
@@ -934,15 +1017,20 @@ index 0da58cb..0797fd7 100644
GLenum backBufferFormat, GLenum depthBufferFormat)
: mRenderer(renderer), SwapChain(window, shareHandle, backBufferFormat, depthBufferFormat)
{
-@@ -468,6 +468,7 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
+@@ -361,25 +361,50 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
if (mWindow)
{
+#if !defined(ANGLE_OS_WINRT)
- // We cannot create a swap chain for an HWND that is owned by a different process
- DWORD currentProcessId = GetCurrentProcessId();
- DWORD wndProcessId;
-@@ -491,14 +492,34 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
+ IDXGIFactory *factory = mRenderer->getDxgiFactory();
+
+ DXGI_SWAP_CHAIN_DESC swapChainDesc = {0};
+- swapChainDesc.BufferCount = 2;
+ swapChainDesc.BufferDesc.Format = gl_d3d11::ConvertRenderbufferFormat(mBackBufferFormat);
+ swapChainDesc.BufferDesc.Width = backbufferWidth;
+ swapChainDesc.BufferDesc.Height = backbufferHeight;
++ swapChainDesc.BufferCount = 2;
+ swapChainDesc.BufferDesc.Scaling = DXGI_MODE_SCALING_UNSPECIFIED;
swapChainDesc.BufferDesc.ScanlineOrdering = DXGI_MODE_SCANLINE_ORDER_UNSPECIFIED;
swapChainDesc.BufferDesc.RefreshRate.Numerator = 0;
swapChainDesc.BufferDesc.RefreshRate.Denominator = 1;
@@ -954,14 +1042,18 @@ index 0da58cb..0797fd7 100644
+ ASSERT(SUCCEEDED(result));
+
+ DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0};
-+ swapChainDesc.BufferCount = 2;
+ swapChainDesc.Format = gl_d3d11::ConvertRenderbufferFormat(mBackBufferFormat);
+ swapChainDesc.Width = backbufferWidth;
+ swapChainDesc.Height = backbufferHeight;
+ swapChainDesc.Stereo = FALSE;
++#if !defined(ANGLE_OS_WINPHONE)
++ swapChainDesc.BufferCount = 2;
+ swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
++#else
++ swapChainDesc.BufferCount = 1;
++ swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
++#endif
+#endif
-+
swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
swapChainDesc.Flags = 0;
- swapChainDesc.OutputWindow = mWindow;
@@ -969,9 +1061,8 @@ index 0da58cb..0797fd7 100644
swapChainDesc.SampleDesc.Quality = 0;
- swapChainDesc.Windowed = TRUE;
-- HRESULT result = factory->CreateSwapChain(device, &swapChainDesc, &mSwapChain);
+#if !defined(ANGLE_OS_WINRT)
-+ result = factory->CreateSwapChain(device, &swapChainDesc, &mSwapChain);
+ HRESULT result = factory->CreateSwapChain(device, &swapChainDesc, &mSwapChain);
+#else
+ IDXGISwapChain1 *swapChain;
+ result = factory->CreateSwapChainForCoreWindow(device, mWindow, &swapChainDesc, NULL, &swapChain);
@@ -980,10 +1071,28 @@ index 0da58cb..0797fd7 100644
if (FAILED(result))
{
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.h b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.h
+@@ -390,6 +415,7 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
+ {
+ return EGL_CONTEXT_LOST;
+ }
++#if !defined(ANGLE_OS_WINRT)
+ else
+ {
+ // We cannot create a swap chain for an HWND that is owned by a different process on some versions of
+@@ -408,6 +434,9 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
+ return EGL_BAD_ALLOC;
+ }
+ }
++#else
++ return EGL_BAD_ALLOC;
++#endif
+ }
+
+ result = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mBackBufferTexture);
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.h
index 8001046..2a030c8 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.h
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.h
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/SwapChain11.h
@@ -19,7 +19,7 @@ class Renderer11;
class SwapChain11 : public SwapChain
{
@@ -993,52 +1102,89 @@ index 8001046..2a030c8 100644
GLenum backBufferFormat, GLenum depthBufferFormat);
virtual ~SwapChain11();
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/shaders/Clear11.hlsl b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/shaders/Clear11.hlsl
+index 042ac69..cb132dc 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/shaders/Clear11.hlsl
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/shaders/Clear11.hlsl
+@@ -12,10 +12,12 @@ struct PS_OutputMultiple
+ float4 color1 : SV_TARGET1;
+ float4 color2 : SV_TARGET2;
+ float4 color3 : SV_TARGET3;
++#ifdef SM4
+ float4 color4 : SV_TARGET4;
+ float4 color5 : SV_TARGET5;
+ float4 color6 : SV_TARGET6;
+ float4 color7 : SV_TARGET7;
++#endif
+ };
+
+ PS_OutputMultiple PS_ClearMultiple(in float4 inPosition : SV_POSITION, in float4 inColor : COLOR)
+@@ -25,10 +27,12 @@ PS_OutputMultiple PS_ClearMultiple(in float4 inPosition : SV_POSITION, in float4
+ outColor.color1 = inColor;
+ outColor.color2 = inColor;
+ outColor.color3 = inColor;
++#ifdef SM4
+ outColor.color4 = inColor;
+ outColor.color5 = inColor;
+ outColor.color6 = inColor;
+ outColor.color7 = inColor;
++#endif
+ return outColor;
+ }
+
diff --git a/src/3rdparty/angle/src/libGLESv2/utilities.cpp b/src/3rdparty/angle/src/libGLESv2/utilities.cpp
-index 32df49e..8fd193b 100644
+index 32df49e..30765ff 100644
--- a/src/3rdparty/angle/src/libGLESv2/utilities.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/utilities.cpp
-@@ -10,6 +10,14 @@
+@@ -9,6 +9,14 @@
+
#include "libGLESv2/utilities.h"
#include "libGLESv2/mathutil.h"
-
+#if defined(ANGLE_OS_WINRT)
-+#include <locale>
-+#include <codecvt>
-+#include <wrl.h>
-+#include <windows.storage.h>
-+using namespace ABI::Windows::Storage;
++# include <locale>
++# include <codecvt>
++# include <wrl.h>
++# include <windows.storage.h>
++ using namespace Microsoft::WRL;
++ using namespace ABI::Windows::Storage;
+#endif
-+
+
namespace gl
{
-
-@@ -737,7 +745,50 @@ bool IsTriangleMode(GLenum drawMode)
+@@ -737,6 +745,7 @@ bool IsTriangleMode(GLenum drawMode)
std::string getTempPath()
{
-+#if defined(ANGLE_OS_WINRT)
-+
++#if !defined(ANGLE_OS_WINRT)
+ char path[MAX_PATH];
+ DWORD pathLen = GetTempPathA(sizeof(path) / sizeof(path[0]), path);
+ if (pathLen == 0)
+@@ -751,6 +760,45 @@ std::string getTempPath()
+ UNREACHABLE();
+ return std::string();
+ }
++#else
+ static std::string path;
+
+ while (path.empty()) {
-+ IApplicationDataStatics *applicationDataFactory;
-+ HRESULT result = RoGetActivationFactory(Microsoft::WRL::Wrappers::HStringReference(RuntimeClass_Windows_Storage_ApplicationData).Get(),
-+ IID_PPV_ARGS(&applicationDataFactory));
++ ComPtr<IApplicationDataStatics> factory;
++ Wrappers::HStringReference classId(RuntimeClass_Windows_Storage_ApplicationData);
++ HRESULT result = RoGetActivationFactory(classId.Get(), IID_PPV_ARGS(&factory));
+ if (FAILED(result))
+ break;
+
-+ IApplicationData *applicationData;
-+ result = applicationDataFactory->get_Current(&applicationData);
++ ComPtr<IApplicationData> applicationData;
++ result = factory->get_Current(&applicationData);
+ if (FAILED(result))
+ break;
+
-+ IStorageFolder *storageFolder;
++ ComPtr<IStorageFolder> storageFolder;
+ result = applicationData->get_LocalFolder(&storageFolder);
+ if (FAILED(result))
+ break;
+
-+ IStorageItem *localFolder;
-+ result = storageFolder->QueryInterface(IID_PPV_ARGS(&localFolder));
++ ComPtr<IStorageItem> localFolder;
++ result = storageFolder.As(&localFolder);
+ if (FAILED(result))
+ break;
+
@@ -1055,77 +1201,10 @@ index 32df49e..8fd193b 100644
+ break;
+ }
+ }
-+
-+#else
-+
- char path[MAX_PATH];
-+
- DWORD pathLen = GetTempPathA(sizeof(path) / sizeof(path[0]), path);
- if (pathLen == 0)
- {
-@@ -751,6 +802,8 @@ std::string getTempPath()
- UNREACHABLE();
- return std::string();
- }
-+
+#endif
return path;
}
-diff --git a/src/angle/src/common/common.pri b/src/angle/src/common/common.pri
-index a94b9a6..12e26a9 100644
---- a/src/angle/src/common/common.pri
-+++ b/src/angle/src/common/common.pri
-@@ -7,7 +7,7 @@ INCLUDEPATH += \
- LIBS = $$QMAKE_LIBS_CORE $$QMAKE_LIBS_GUI
-
- # DirectX is included in the Windows 8 Kit, but everything else requires the DX SDK.
--win32-msvc2012 {
-+win32-msvc2012|winrt {
- FXC = fxc.exe
- } else {
- DX_DIR = $$(DXSDK_DIR)
-diff --git a/src/angle/src/compiler/translator_common.pro b/src/angle/src/compiler/translator_common.pro
-index b281215..5581c9d 100644
---- a/src/angle/src/compiler/translator_common.pro
-+++ b/src/angle/src/compiler/translator_common.pro
-@@ -78,7 +78,6 @@ SOURCES += \
- $$ANGLE_DIR/src/compiler/intermOut.cpp \
- $$ANGLE_DIR/src/compiler/IntermTraverse.cpp \
- $$ANGLE_DIR/src/compiler/MapLongVariableNames.cpp \
-- $$ANGLE_DIR/src/compiler/ossource_win.cpp \
- $$ANGLE_DIR/src/compiler/parseConst.cpp \
- $$ANGLE_DIR/src/compiler/ParseHelper.cpp \
- $$ANGLE_DIR/src/compiler/PoolAlloc.cpp \
-@@ -98,6 +97,12 @@ SOURCES += \
- $$ANGLE_DIR/src/compiler/timing/RestrictVertexShaderTiming.cpp \
- $$ANGLE_DIR/src/third_party/compiler/ArrayBoundsClamper.cpp
-
-+winrt {
-+ SOURCES += $$ANGLE_DIR/src/compiler/ossource_winrt.cpp
-+} else {
-+ SOURCES += $$ANGLE_DIR/src/compiler/ossource_win.cpp
-+}
-+
- # NOTE: 'win_flex' and 'bison' can be found in qt5/gnuwin32/bin
- flex.commands = $$addGnuPath(win_flex) --noline --nounistd --outfile=${QMAKE_FILE_BASE}_lex.cpp ${QMAKE_FILE_NAME}
- flex.output = ${QMAKE_FILE_BASE}_lex.cpp
-diff --git a/src/angle/src/config.pri b/src/angle/src/config.pri
-index 1c6d8b0..ed25581 100644
---- a/src/angle/src/config.pri
-+++ b/src/angle/src/config.pri
-@@ -37,8 +37,9 @@ DEFINES += _WINDOWS \
- NOMINMAX \
- WIN32_LEAN_AND_MEAN=1
-
--# Defines specifying the API version (0x0600 = Vista)
--DEFINES += _WIN32_WINNT=0x0600 WINVER=0x0600
-+# Defines specifying the API version (0x0600 = Vista, 0x0602 = Win8))
-+winrt: DEFINES += _WIN32_WINNT=0x0602 WINVER=0x0602
-+else: DEFINES += _WIN32_WINNT=0x0600 WINVER=0x0600
-
- # ANGLE specific defines
- DEFINES += ANGLE_DISABLE_TRACE \
--
1.8.4.msysgit.0
diff --git a/src/angle/patches/0010-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch b/src/angle/patches/0010-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch
new file mode 100644
index 0000000000..34c881ba21
--- /dev/null
+++ b/src/angle/patches/0010-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch
@@ -0,0 +1,426 @@
+From e84f947df4ae095eae600550749b3a4e8de5ee8b Mon Sep 17 00:00:00 2001
+From: Andrew Knight <andrew.knight@digia.com>
+Date: Thu, 20 Feb 2014 16:51:36 +0200
+Subject: [PATCH] ANGLE: Enable D3D11 for feature level 9 cards
+
+Enable use of ANGLE on lower-end hardware, such as Surface RT and
+Windows Phone 8.
+
+Based on https://codereview.appspot.com/12917046/
+
+Change-Id: Ice536802e4eedc1d264abd0dd65960638fce59e4
+---
+ .../angle/src/libGLESv2/renderer/d3d11/Image11.cpp | 7 +-
+ .../libGLESv2/renderer/d3d11/RenderStateCache.cpp | 5 +-
+ .../src/libGLESv2/renderer/d3d11/Renderer11.cpp | 90 ++++++++++++++++++++--
+ .../src/libGLESv2/renderer/d3d11/Renderer11.h | 1 +
+ .../libGLESv2/renderer/d3d11/TextureStorage11.cpp | 10 +--
+ .../libGLESv2/renderer/d3d11/renderer11_utils.cpp | 4 +-
+ .../libGLESv2/renderer/d3d11/renderer11_utils.h | 2 +-
+ 7 files changed, 100 insertions(+), 19 deletions(-)
+
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Image11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Image11.cpp
+index 2b07b9d..5d039a3 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Image11.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Image11.cpp
+@@ -142,7 +142,7 @@ bool Image11::redefine(Renderer *renderer, GLint internalformat, GLsizei width,
+ mHeight = height;
+ mInternalFormat = internalformat;
+ // compute the d3d format that will be used
+- mDXGIFormat = gl_d3d11::ConvertTextureFormat(internalformat);
++ mDXGIFormat = gl_d3d11::ConvertTextureFormat(internalformat, mRenderer->getFeatureLevel());
+ mActualFormat = d3d11_gl::ConvertTextureInternalFormat(mDXGIFormat);
+
+ if (mStagingTexture)
+@@ -191,7 +191,10 @@ void Image11::loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei heig
+ switch (mInternalFormat)
+ {
+ case GL_ALPHA8_EXT:
+- loadAlphaDataToNative(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData);
++ if (mRenderer->getFeatureLevel() >= D3D_FEATURE_LEVEL_10_0)
++ loadAlphaDataToNative(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData);
++ else
++ loadAlphaDataToBGRA(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData);
+ break;
+ case GL_LUMINANCE8_EXT:
+ loadLuminanceDataToNativeOrBGRA(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData, false);
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/RenderStateCache.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/RenderStateCache.cpp
+index 0047e04..a1c324c 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/RenderStateCache.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/RenderStateCache.cpp
+@@ -419,7 +419,8 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
+ samplerDesc.BorderColor[2] = 0.0f;
+ samplerDesc.BorderColor[3] = 0.0f;
+ samplerDesc.MinLOD = gl_d3d11::ConvertMinLOD(samplerState.minFilter, samplerState.lodOffset);
+- samplerDesc.MaxLOD = gl_d3d11::ConvertMaxLOD(samplerState.minFilter, samplerState.lodOffset);
++ samplerDesc.MaxLOD = mDevice->GetFeatureLevel() >= D3D_FEATURE_LEVEL_10_0
++ ? gl_d3d11::ConvertMaxLOD(samplerState.minFilter, samplerState.lodOffset) : FLT_MAX;
+
+ ID3D11SamplerState *dx11SamplerState = NULL;
+ HRESULT result = mDevice->CreateSamplerState(&samplerDesc, &dx11SamplerState);
+@@ -435,4 +436,4 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
+ }
+ }
+
+-}
+\ No newline at end of file
++}
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp
+index 7f166fd..31d976d 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.cpp
+@@ -164,6 +164,11 @@ EGLint Renderer11::initialize()
+ D3D_FEATURE_LEVEL_11_0,
+ D3D_FEATURE_LEVEL_10_1,
+ D3D_FEATURE_LEVEL_10_0,
++#if !defined(ANGLE_ENABLE_D3D9)
++ D3D_FEATURE_LEVEL_9_3,
++ D3D_FEATURE_LEVEL_9_2,
++ D3D_FEATURE_LEVEL_9_1,
++#endif
+ };
+
+ HRESULT result = S_OK;
+@@ -1533,7 +1538,7 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra
+ }
+
+ // needed for the point sprite geometry shader
+- if (mCurrentGeometryConstantBuffer != mDriverConstantBufferPS)
++ if (mFeatureLevel >= D3D_FEATURE_LEVEL_10_0 && mCurrentGeometryConstantBuffer != mDriverConstantBufferPS)
+ {
+ mDeviceContext->GSSetConstantBuffers(0, 1, &mDriverConstantBufferPS);
+ mCurrentGeometryConstantBuffer = mDriverConstantBufferPS;
+@@ -1956,6 +1961,11 @@ bool Renderer11::testDeviceResettable()
+ D3D_FEATURE_LEVEL_11_0,
+ D3D_FEATURE_LEVEL_10_1,
+ D3D_FEATURE_LEVEL_10_0,
++#if !defined(ANGLE_ENABLE_D3D9)
++ D3D_FEATURE_LEVEL_9_3,
++ D3D_FEATURE_LEVEL_9_2,
++ D3D_FEATURE_LEVEL_9_1,
++#endif
+ };
+
+ ID3D11Device* dummyDevice;
+@@ -2139,6 +2149,11 @@ float Renderer11::getTextureMaxAnisotropy() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return D3D10_MAX_MAXANISOTROPY;
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ return 16;
++ case D3D_FEATURE_LEVEL_9_1:
++ return D3D_FL9_1_DEFAULT_MAX_ANISOTROPY;
+ default: UNREACHABLE();
+ return 0;
+ }
+@@ -2158,6 +2173,11 @@ Range Renderer11::getViewportBounds() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return Range(D3D10_VIEWPORT_BOUNDS_MIN, D3D10_VIEWPORT_BOUNDS_MAX);
++ case D3D_FEATURE_LEVEL_9_3:
++ return Range(D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION * -2, D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION * 2);
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1:
++ return Range(D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION * -2, D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION * 2);
+ default: UNREACHABLE();
+ return Range(0, 0);
+ }
+@@ -2172,6 +2192,10 @@ unsigned int Renderer11::getMaxVertexTextureImageUnits() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return MAX_TEXTURE_IMAGE_UNITS_VTF_SM4;
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1:
++ return 0;
+ default: UNREACHABLE();
+ return 0;
+ }
+@@ -2195,14 +2219,14 @@ unsigned int Renderer11::getReservedFragmentUniformVectors() const
+ unsigned int Renderer11::getMaxVertexUniformVectors() const
+ {
+ META_ASSERT(MAX_VERTEX_UNIFORM_VECTORS_D3D11 <= D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT);
+- ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_10_0);
++ ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_9_1);
+ return MAX_VERTEX_UNIFORM_VECTORS_D3D11;
+ }
+
+ unsigned int Renderer11::getMaxFragmentUniformVectors() const
+ {
+ META_ASSERT(MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 <= D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT);
+- ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_10_0);
++ ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_9_1);
+ return MAX_FRAGMENT_UNIFORM_VECTORS_D3D11;
+ }
+
+@@ -2216,6 +2240,10 @@ unsigned int Renderer11::getMaxVaryingVectors() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return D3D10_VS_OUTPUT_REGISTER_COUNT;
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1:
++ return 8;
+ default: UNREACHABLE();
+ return 0;
+ }
+@@ -2229,6 +2257,10 @@ bool Renderer11::getNonPower2TextureSupport() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return true;
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1:
++ return false;
+ default: UNREACHABLE();
+ return false;
+ }
+@@ -2242,6 +2274,11 @@ bool Renderer11::getOcclusionQuerySupport() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return true;
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ return true;
++ case D3D_FEATURE_LEVEL_9_1:
++ return false;
+ default: UNREACHABLE();
+ return false;
+ }
+@@ -2254,7 +2291,11 @@ bool Renderer11::getInstancingSupport() const
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+- return true;
++ case D3D_FEATURE_LEVEL_9_3:
++ return true;
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1:
++ return false;
+ default: UNREACHABLE();
+ return false;
+ }
+@@ -2276,6 +2317,11 @@ bool Renderer11::getDerivativeInstructionSupport() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return true;
++ case D3D_FEATURE_LEVEL_9_3:
++ return true;
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1:
++ return false;
+ default: UNREACHABLE();
+ return false;
+ }
+@@ -2294,6 +2340,9 @@ int Renderer11::getMajorShaderModel() const
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_SHADER_MAJOR_VERSION; // 5
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SHADER_MAJOR_VERSION; // 4
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_SHADER_MAJOR_VERSION; // 4
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1: return D3D10_SHADER_MAJOR_VERSION; // 4 (level 9)
+ default: UNREACHABLE(); return 0;
+ }
+ }
+@@ -2305,6 +2354,9 @@ int Renderer11::getMinorShaderModel() const
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_SHADER_MINOR_VERSION; // 0
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SHADER_MINOR_VERSION; // 1
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_SHADER_MINOR_VERSION; // 0
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1: return D3D10_SHADER_MINOR_VERSION; // 0 (level 9)
+ default: UNREACHABLE(); return 0;
+ }
+ }
+@@ -2330,6 +2382,11 @@ int Renderer11::getMaxViewportDimension() const
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
+ return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 8192
++ case D3D_FEATURE_LEVEL_9_3:
++ return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 4096
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1:
++ return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 2048
+ default: UNREACHABLE();
+ return 0;
+ }
+@@ -2342,6 +2399,9 @@ int Renderer11::getMaxTextureWidth() const
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 16384
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 8192
++ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 4096
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 2048
+ default: UNREACHABLE(); return 0;
+ }
+ }
+@@ -2353,6 +2413,9 @@ int Renderer11::getMaxTextureHeight() const
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 16384
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 8192
++ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 4096
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 2048
+ default: UNREACHABLE(); return 0;
+ }
+ }
+@@ -2364,6 +2427,9 @@ bool Renderer11::get32BitIndexSupport() const
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP >= 32; // true
++ case D3D_FEATURE_LEVEL_9_3:
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1: return false;
+ default: UNREACHABLE(); return false;
+ }
+ }
+@@ -2410,6 +2476,8 @@ unsigned int Renderer11::getMaxRenderTargets() const
+ {
+ META_ASSERT(D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
+ META_ASSERT(D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
++ META_ASSERT(D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
++ META_ASSERT(D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
+
+ switch (mFeatureLevel)
+ {
+@@ -2417,6 +2485,9 @@ unsigned int Renderer11::getMaxRenderTargets() const
+ return D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; // 8
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0:
++ case D3D_FEATURE_LEVEL_9_3: // return D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT; // 4
++ case D3D_FEATURE_LEVEL_9_2:
++ case D3D_FEATURE_LEVEL_9_1: // return D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT; // 1
+ // Feature level 10.0 and 10.1 cards perform very poorly when the pixel shader
+ // outputs to multiple RTs that are not bound.
+ // TODO: Remove pixel shader outputs for render targets that are not bound.
+@@ -2603,7 +2674,7 @@ bool Renderer11::copyTexture(ID3D11ShaderResourceView *source, const gl::Rectang
+ samplerDesc.BorderColor[2] = 0.0f;
+ samplerDesc.BorderColor[3] = 0.0f;
+ samplerDesc.MinLOD = 0.0f;
+- samplerDesc.MaxLOD = 0.0f;
++ samplerDesc.MaxLOD = mDevice->GetFeatureLevel() >= D3D_FEATURE_LEVEL_10_0 ? 0.0f : FLT_MAX;
+
+ result = mDevice->CreateSamplerState(&samplerDesc, &mCopySampler);
+ ASSERT(SUCCEEDED(result));
+@@ -2848,7 +2919,7 @@ ShaderExecutable *Renderer11::loadExecutable(const void *function, size_t length
+
+ ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, rx::ShaderType type, D3DWorkaroundType workaround)
+ {
+- const char *profile = NULL;
++ std::string profile;
+
+ switch (type)
+ {
+@@ -2866,7 +2937,12 @@ ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const ch
+ return NULL;
+ }
+
+- ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile, D3DCOMPILE_OPTIMIZATION_LEVEL0, false);
++ if (mFeatureLevel == D3D_FEATURE_LEVEL_9_3)
++ profile += "_level_9_3";
++ else if (mFeatureLevel == D3D_FEATURE_LEVEL_9_2 || mFeatureLevel == D3D_FEATURE_LEVEL_9_1)
++ profile += "_level_9_1";
++
++ ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile.c_str(), D3DCOMPILE_OPTIMIZATION_LEVEL0, false);
+ if (!binary)
+ return NULL;
+
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h
+index ba3f0c6..a8a722c 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/Renderer11.h
+@@ -177,6 +177,7 @@ class Renderer11 : public Renderer
+ ID3D11Device *getDevice() { return mDevice; }
+ ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
+ IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
++ D3D_FEATURE_LEVEL getFeatureLevel() { return mFeatureLevel; }
+
+ bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
+ void unapplyRenderTargets();
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
+index 5f6ea21..fdfbe52 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp
+@@ -222,14 +222,14 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
+ }
+
+ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
+- : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat), usage, forceRenderable))
++ : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat, Renderer11::makeRenderer11(renderer)->getFeatureLevel()), usage, forceRenderable))
+ {
+ for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
+ {
+ mRenderTarget[i] = NULL;
+ }
+
+- DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat);
++ DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat, mRenderer->getFeatureLevel());
+ if (d3d11::IsDepthStencilFormat(convertedFormat))
+ {
+ mTextureFormat = d3d11::GetDepthTextureFormat(convertedFormat);
+@@ -331,7 +331,7 @@ RenderTarget *TextureStorage11_2D::getRenderTarget(int level)
+ srvDesc.Format = mShaderResourceFormat;
+ srvDesc.ViewDimension = D3D11_SRV_DIMENSION_TEXTURE2D;
+ srvDesc.Texture2D.MostDetailedMip = level;
+- srvDesc.Texture2D.MipLevels = 1;
++ srvDesc.Texture2D.MipLevels = level ? 1 : -1;
+
+ ID3D11ShaderResourceView *srv;
+ result = device->CreateShaderResourceView(mTexture, &srvDesc, &srv);
+@@ -440,7 +440,7 @@ void TextureStorage11_2D::generateMipmap(int level)
+ }
+
+ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
+- : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat), usage, forceRenderable))
++ : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat, Renderer11::makeRenderer11(renderer)->getFeatureLevel()), usage, forceRenderable))
+ {
+ for (unsigned int i = 0; i < 6; i++)
+ {
+@@ -450,7 +450,7 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLe
+ }
+ }
+
+- DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat);
++ DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat, mRenderer->getFeatureLevel());
+ if (d3d11::IsDepthStencilFormat(convertedFormat))
+ {
+ mTextureFormat = d3d11::GetDepthTextureFormat(convertedFormat);
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.cpp
+index 6f06024..34b8259 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.cpp
+@@ -329,7 +329,7 @@ DXGI_FORMAT ConvertRenderbufferFormat(GLenum format)
+ return DXGI_FORMAT_R8G8B8A8_UNORM;
+ }
+
+-DXGI_FORMAT ConvertTextureFormat(GLenum internalformat)
++DXGI_FORMAT ConvertTextureFormat(GLenum internalformat, D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (internalformat)
+ {
+@@ -342,7 +342,7 @@ DXGI_FORMAT ConvertTextureFormat(GLenum internalformat)
+ case GL_LUMINANCE8_ALPHA8_EXT:
+ return DXGI_FORMAT_R8G8B8A8_UNORM;
+ case GL_ALPHA8_EXT:
+- return DXGI_FORMAT_A8_UNORM;
++ return featureLevel >= D3D_FEATURE_LEVEL_10_0 ? DXGI_FORMAT_A8_UNORM : DXGI_FORMAT_B8G8R8A8_UNORM;
+ case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
+ case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
+ return DXGI_FORMAT_BC1_UNORM;
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.h
+index 1bc48c1..70ad4fe 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.h
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/renderer11_utils.h
+@@ -32,7 +32,7 @@ FLOAT ConvertMinLOD(GLenum minFilter, unsigned int lodOffset);
+ FLOAT ConvertMaxLOD(GLenum minFilter, unsigned int lodOffset);
+
+ DXGI_FORMAT ConvertRenderbufferFormat(GLenum format);
+-DXGI_FORMAT ConvertTextureFormat(GLenum format);
++DXGI_FORMAT ConvertTextureFormat(GLenum format, D3D_FEATURE_LEVEL featureLevel);
+ }
+
+ namespace d3d11_gl
+--
+1.8.4.msysgit.0
+
diff --git a/src/angle/patches/0011-ANGLE-Fix-compilation-error-on-MinGW-caused-by-trace.patch b/src/angle/patches/0011-ANGLE-Fix-compilation-error-on-MinGW-caused-by-trace.patch
new file mode 100644
index 0000000000..fdee11d324
--- /dev/null
+++ b/src/angle/patches/0011-ANGLE-Fix-compilation-error-on-MinGW-caused-by-trace.patch
@@ -0,0 +1,37 @@
+From 8ea24fcce69900f42299fd01772714a566f9111e Mon Sep 17 00:00:00 2001
+From: Andrew Knight <andrew.knight@digia.com>
+Date: Mon, 24 Feb 2014 11:08:23 +0200
+Subject: [PATCH] ANGLE: Fix compilation error on MinGW caused by trace_event.h
+
+The event trace header in ANGLE's third_party directory has an unused
+template which causes a compilation error on MinGW. Disable this part
+of the code.
+
+Change-Id: I167eac56507fafba34e3eb5ce6071d8f136a4e41
+---
+ src/3rdparty/angle/src/third_party/trace_event/trace_event.h | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/3rdparty/angle/src/third_party/trace_event/trace_event.h b/src/3rdparty/angle/src/third_party/trace_event/trace_event.h
+index 637cf9a..96ac910 100644
+--- a/src/3rdparty/angle/src/third_party/trace_event/trace_event.h
++++ b/src/3rdparty/angle/src/third_party/trace_event/trace_event.h
+@@ -791,6 +791,7 @@ private:
+ // TraceEventSamplingStateScope records the current sampling state
+ // and sets a new sampling state. When the scope exists, it restores
+ // the sampling state having recorded.
++#if 0 // This is not used by ANGLE and causes a compilation error on MinGW
+ template<size_t BucketNumber>
+ class SamplingStateScope {
+ public:
+@@ -818,6 +819,7 @@ public:
+ private:
+ const char* m_previousState;
+ };
++#endif
+
+ } // namespace TraceEvent
+
+--
+1.8.4.msysgit.0
+
diff --git a/src/angle/patches/0012-ANGLE-fix-semantic-index-lookup.patch b/src/angle/patches/0012-ANGLE-fix-semantic-index-lookup.patch
new file mode 100644
index 0000000000..fe16d1d7b2
--- /dev/null
+++ b/src/angle/patches/0012-ANGLE-fix-semantic-index-lookup.patch
@@ -0,0 +1,48 @@
+From 15b694fa33cf76f93de62b8106972083f5fb3114 Mon Sep 17 00:00:00 2001
+From: Andrew Knight <andrew.knight@digia.com>
+Date: Fri, 21 Feb 2014 13:34:21 +0200
+Subject: [PATCH] ANGLE: fix semantic index lookup
+
+The sorted semantic index table was returning a direct mapping to the
+new indices, instead of the old indices. This caused a mismatch in the
+GL type lookup for the translated attribute.
+
+Change-Id: I75d05ed707f56c45210e3dcbc277f894e3dc5a48
+---
+ src/3rdparty/angle/src/libGLESv2/ProgramBinary.cpp | 2 +-
+ src/3rdparty/angle/src/libGLESv2/renderer/d3d11/InputLayoutCache.cpp | 4 ++--
+ 2 files changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/src/3rdparty/angle/src/libGLESv2/ProgramBinary.cpp b/src/3rdparty/angle/src/libGLESv2/ProgramBinary.cpp
+index 41a83b6..13c515a 100644
+--- a/src/3rdparty/angle/src/libGLESv2/ProgramBinary.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/ProgramBinary.cpp
+@@ -2643,7 +2643,7 @@ void ProgramBinary::sortAttributesByLayout(rx::TranslatedAttribute attributes[MA
+ for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
+ {
+ int oldIndex = mAttributesByLayout[i];
+- sortedSemanticIndices[i] = mSemanticIndex[oldIndex];
++ sortedSemanticIndices[i] = oldIndex;
+ attributes[i] = oldTranslatedAttributes[oldIndex];
+ }
+ }
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/InputLayoutCache.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/InputLayoutCache.cpp
+index 3418e89..4940b8c 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/InputLayoutCache.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d11/InputLayoutCache.cpp
+@@ -103,10 +103,10 @@ GLenum InputLayoutCache::applyVertexBuffers(TranslatedAttribute attributes[gl::M
+ // Record the type of the associated vertex shader vector in our key
+ // This will prevent mismatched vertex shaders from using the same input layout
+ GLint attributeSize;
+- programBinary->getActiveAttribute(ilKey.elementCount, 0, NULL, &attributeSize, &ilKey.elements[ilKey.elementCount].glslElementType, NULL);
++ programBinary->getActiveAttribute(sortedSemanticIndices[i], 0, NULL, &attributeSize, &ilKey.elements[ilKey.elementCount].glslElementType, NULL);
+
+ ilKey.elements[ilKey.elementCount].desc.SemanticName = semanticName;
+- ilKey.elements[ilKey.elementCount].desc.SemanticIndex = sortedSemanticIndices[i];
++ ilKey.elements[ilKey.elementCount].desc.SemanticIndex = i;
+ ilKey.elements[ilKey.elementCount].desc.Format = attributes[i].attribute->mArrayEnabled ? vertexBuffer->getDXGIFormat(*attributes[i].attribute) : DXGI_FORMAT_R32G32B32A32_FLOAT;
+ ilKey.elements[ilKey.elementCount].desc.InputSlot = i;
+ ilKey.elements[ilKey.elementCount].desc.AlignedByteOffset = 0;
+--
+1.8.4.msysgit.0
+
diff --git a/src/angle/patches/0013-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch b/src/angle/patches/0013-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch
deleted file mode 100644
index 0a8e403e8d..0000000000
--- a/src/angle/patches/0013-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch
+++ /dev/null
@@ -1,990 +0,0 @@
-From a71ccc033fe2cf1c3c58633d3bd220c52b744478 Mon Sep 17 00:00:00 2001
-From: Andrew Knight <andrew.knight@digia.com>
-Date: Fri, 8 Nov 2013 09:04:59 +0200
-Subject: [PATCH] ANGLE: Enable D3D11 for feature level 9 cards
-
-Enable use of ANGLE on lower-end hardware, such as Surface RT and
-Windows Phone 8.
-
-Based on https://codereview.appspot.com/12917046/
-
-Change-Id: Ice536802e4eedc1d264abd0dd65960638fce59e4
----
- src/3rdparty/angle/src/libGLESv2/Buffer.cpp | 8 +-
- src/3rdparty/angle/src/libGLESv2/Buffer.h | 4 +-
- src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp | 4 +-
- .../angle/src/libGLESv2/renderer/BufferStorage.h | 2 +-
- .../src/libGLESv2/renderer/BufferStorage11.cpp | 9 +-
- .../angle/src/libGLESv2/renderer/BufferStorage11.h | 2 +-
- .../src/libGLESv2/renderer/BufferStorage9.cpp | 2 +-
- .../angle/src/libGLESv2/renderer/BufferStorage9.h | 2 +-
- .../angle/src/libGLESv2/renderer/Image11.cpp | 7 +-
- .../angle/src/libGLESv2/renderer/IndexBuffer11.cpp | 4 +-
- .../src/libGLESv2/renderer/RenderStateCache.cpp | 3 +-
- .../angle/src/libGLESv2/renderer/Renderer11.cpp | 288 +++++++++++++++------
- .../angle/src/libGLESv2/renderer/Renderer11.h | 2 +
- .../angle/src/libGLESv2/renderer/SwapChain11.cpp | 7 +-
- .../src/libGLESv2/renderer/TextureStorage11.cpp | 8 +-
- .../src/libGLESv2/renderer/renderer11_utils.cpp | 4 +-
- .../src/libGLESv2/renderer/renderer11_utils.h | 2 +-
- .../src/libGLESv2/renderer/shaders/Clear11.hlsl | 4 +
- src/angle/src/libGLESv2/libGLESv2.pro | 8 +-
- 19 files changed, 260 insertions(+), 110 deletions(-)
-
-diff --git a/src/3rdparty/angle/src/libGLESv2/Buffer.cpp b/src/3rdparty/angle/src/libGLESv2/Buffer.cpp
-index c007d5d..40baa95 100644
---- a/src/3rdparty/angle/src/libGLESv2/Buffer.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/Buffer.cpp
-@@ -37,11 +37,11 @@ Buffer::~Buffer()
- delete mStaticIndexBuffer;
- }
-
--void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
-+void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage, GLenum target)
- {
- mBufferStorage->clear();
- mIndexRangeCache.clear();
-- mBufferStorage->setData(data, size, 0);
-+ mBufferStorage->setData(data, size, 0, target);
-
- mUsage = usage;
-
-@@ -54,9 +54,9 @@ void Buffer::bufferData(const void *data, GLsizeiptr size, GLenum usage)
- }
- }
-
--void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset)
-+void Buffer::bufferSubData(const void *data, GLsizeiptr size, GLintptr offset, GLenum target)
- {
-- mBufferStorage->setData(data, size, offset);
-+ mBufferStorage->setData(data, size, offset, target);
- mIndexRangeCache.invalidateRange(offset, size);
-
- if ((mStaticVertexBuffer && mStaticVertexBuffer->getBufferSize() != 0) || (mStaticIndexBuffer && mStaticIndexBuffer->getBufferSize() != 0))
-diff --git a/src/3rdparty/angle/src/libGLESv2/Buffer.h b/src/3rdparty/angle/src/libGLESv2/Buffer.h
-index 4048f4b..9b86b97 100644
---- a/src/3rdparty/angle/src/libGLESv2/Buffer.h
-+++ b/src/3rdparty/angle/src/libGLESv2/Buffer.h
-@@ -33,8 +33,8 @@ class Buffer : public RefCountObject
-
- virtual ~Buffer();
-
-- void bufferData(const void *data, GLsizeiptr size, GLenum usage);
-- void bufferSubData(const void *data, GLsizeiptr size, GLintptr offset);
-+ void bufferData(const void *data, GLsizeiptr size, GLenum usage, GLenum target);
-+ void bufferSubData(const void *data, GLsizeiptr size, GLintptr offset, GLenum target);
-
- GLenum usage() const;
-
-diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
-index 320bbcc..91719f8 100644
---- a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
-@@ -758,7 +758,7 @@ void __stdcall glBufferData(GLenum target, GLsizeiptr size, const GLvoid* data,
- return gl::error(GL_INVALID_OPERATION);
- }
-
-- buffer->bufferData(data, size, usage);
-+ buffer->bufferData(data, size, usage, target);
- }
- }
- catch(std::bad_alloc&)
-@@ -812,7 +812,7 @@ void __stdcall glBufferSubData(GLenum target, GLintptr offset, GLsizeiptr size,
- return gl::error(GL_INVALID_VALUE);
- }
-
-- buffer->bufferSubData(data, size, offset);
-+ buffer->bufferSubData(data, size, offset, target);
- }
- }
- catch(std::bad_alloc&)
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage.h b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage.h
-index ace1a11..14a8c27 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage.h
-@@ -22,7 +22,7 @@ class BufferStorage
-
- // The data returned is only guaranteed valid until next non-const method.
- virtual void *getData() = 0;
-- virtual void setData(const void* data, unsigned int size, unsigned int offset) = 0;
-+ virtual void setData(const void* data, unsigned int size, unsigned int offset, unsigned int target) = 0;
- virtual void clear() = 0;
- virtual unsigned int getSize() const = 0;
- virtual bool supportsDirectBinding() const = 0;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp
-index 3647d8a..2f694db 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.cpp
-@@ -131,7 +131,7 @@ void *BufferStorage11::getData()
- return mResolvedData;
- }
-
--void BufferStorage11::setData(const void* data, unsigned int size, unsigned int offset)
-+void BufferStorage11::setData(const void* data, unsigned int size, unsigned int offset, unsigned int target)
- {
- ID3D11Device *device = mRenderer->getDevice();
- ID3D11DeviceContext *context = mRenderer->getDeviceContext();
-@@ -201,7 +201,10 @@ void BufferStorage11::setData(const void* data, unsigned int size, unsigned int
- D3D11_BUFFER_DESC bufferDesc;
- bufferDesc.ByteWidth = requiredBufferSize;
- bufferDesc.Usage = D3D11_USAGE_DEFAULT;
-- bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER | D3D11_BIND_INDEX_BUFFER;
-+ if (mRenderer->getFeatureLevel() > D3D_FEATURE_LEVEL_9_3)
-+ bufferDesc.BindFlags = D3D11_BIND_VERTEX_BUFFER | D3D11_BIND_INDEX_BUFFER;
-+ else
-+ bufferDesc.BindFlags = target == GL_ARRAY_BUFFER ? D3D11_BIND_VERTEX_BUFFER : D3D11_BIND_INDEX_BUFFER;
- bufferDesc.CPUAccessFlags = 0;
- bufferDesc.MiscFlags = 0;
- bufferDesc.StructureByteStride = 0;
-@@ -324,7 +327,7 @@ unsigned int BufferStorage11::getSize() const
-
- bool BufferStorage11::supportsDirectBinding() const
- {
-- return true;
-+ return mRenderer->getFeatureLevel() >= D3D_FEATURE_LEVEL_10_0;
- }
-
- void BufferStorage11::markBufferUsage()
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.h b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.h
-index b62348b..c948962 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage11.h
-@@ -24,7 +24,7 @@ class BufferStorage11 : public BufferStorage
- static BufferStorage11 *makeBufferStorage11(BufferStorage *bufferStorage);
-
- virtual void *getData();
-- virtual void setData(const void* data, unsigned int size, unsigned int offset);
-+ virtual void setData(const void* data, unsigned int size, unsigned int offset, unsigned int target);
- virtual void clear();
- virtual unsigned int getSize() const;
- virtual bool supportsDirectBinding() const;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp
-index e69e7a8..57fd29b 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.cpp
-@@ -36,7 +36,7 @@ void *BufferStorage9::getData()
- return mMemory;
- }
-
--void BufferStorage9::setData(const void* data, unsigned int size, unsigned int offset)
-+void BufferStorage9::setData(const void* data, unsigned int size, unsigned int offset, unsigned int)
- {
- if (!mMemory || offset + size > mAllocatedSize)
- {
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.h b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.h
-index 3e80396..82ae577 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/BufferStorage9.h
-@@ -23,7 +23,7 @@ class BufferStorage9 : public BufferStorage
- static BufferStorage9 *makeBufferStorage9(BufferStorage *bufferStorage);
-
- virtual void *getData();
-- virtual void setData(const void* data, unsigned int size, unsigned int offset);
-+ virtual void setData(const void* data, unsigned int size, unsigned int offset, unsigned int target = 0);
- virtual void clear();
- virtual unsigned int getSize() const;
- virtual bool supportsDirectBinding() const;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Image11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Image11.cpp
-index 09c8922..81e9e9e 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Image11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Image11.cpp
-@@ -136,7 +136,7 @@ bool Image11::redefine(Renderer *renderer, GLint internalformat, GLsizei width,
- mHeight = height;
- mInternalFormat = internalformat;
- // compute the d3d format that will be used
-- mDXGIFormat = gl_d3d11::ConvertTextureFormat(internalformat);
-+ mDXGIFormat = gl_d3d11::ConvertTextureFormat(internalformat, mRenderer->getFeatureLevel());
- mActualFormat = d3d11_gl::ConvertTextureInternalFormat(mDXGIFormat);
-
- if (mStagingTexture)
-@@ -185,7 +185,10 @@ void Image11::loadData(GLint xoffset, GLint yoffset, GLsizei width, GLsizei heig
- switch (mInternalFormat)
- {
- case GL_ALPHA8_EXT:
-- loadAlphaDataToNative(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData);
-+ if (mRenderer->getFeatureLevel() >= D3D_FEATURE_LEVEL_10_0)
-+ loadAlphaDataToNative(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData);
-+ else
-+ loadAlphaDataToBGRA(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData);
- break;
- case GL_LUMINANCE8_EXT:
- loadLuminanceDataToNativeOrBGRA(width, height, inputPitch, input, mappedImage.RowPitch, offsetMappedData, false);
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/IndexBuffer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/IndexBuffer11.cpp
-index 66604c4..36a62ad 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/IndexBuffer11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/IndexBuffer11.cpp
-@@ -170,7 +170,7 @@ DXGI_FORMAT IndexBuffer11::getIndexFormat() const
- {
- case GL_UNSIGNED_BYTE: return DXGI_FORMAT_R16_UINT;
- case GL_UNSIGNED_SHORT: return DXGI_FORMAT_R16_UINT;
-- case GL_UNSIGNED_INT: return DXGI_FORMAT_R32_UINT;
-+ case GL_UNSIGNED_INT: return mRenderer->get32BitIndexSupport() ? DXGI_FORMAT_R32_UINT : DXGI_FORMAT_R16_UINT;
- default: UNREACHABLE(); return DXGI_FORMAT_UNKNOWN;
- }
- }
-@@ -180,4 +180,4 @@ ID3D11Buffer *IndexBuffer11::getBuffer() const
- return mBuffer;
- }
-
--}
-\ No newline at end of file
-+}
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/RenderStateCache.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/RenderStateCache.cpp
-index b3111af..fd388df 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/RenderStateCache.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/RenderStateCache.cpp
-@@ -387,7 +387,8 @@ ID3D11SamplerState *RenderStateCache::getSamplerState(const gl::SamplerState &sa
- samplerDesc.BorderColor[2] = 0.0f;
- samplerDesc.BorderColor[3] = 0.0f;
- samplerDesc.MinLOD = gl_d3d11::ConvertMinLOD(samplerState.minFilter, samplerState.lodOffset);
-- samplerDesc.MaxLOD = gl_d3d11::ConvertMaxLOD(samplerState.minFilter, samplerState.lodOffset);
-+ samplerDesc.MaxLOD = mDevice->GetFeatureLevel() >= D3D_FEATURE_LEVEL_10_0
-+ ? gl_d3d11::ConvertMaxLOD(samplerState.minFilter, samplerState.lodOffset) : FLT_MAX;
-
- ID3D11SamplerState *dx11SamplerState = NULL;
- HRESULT result = mDevice->CreateSamplerState(&samplerDesc, &dx11SamplerState);
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp
-index d04467b..f83e9e9 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.cpp
-@@ -160,9 +160,13 @@ EGLint Renderer11::initialize()
-
- D3D_FEATURE_LEVEL featureLevels[] =
- {
-+ D3D_FEATURE_LEVEL_11_1,
- D3D_FEATURE_LEVEL_11_0,
- D3D_FEATURE_LEVEL_10_1,
- D3D_FEATURE_LEVEL_10_0,
-+ D3D_FEATURE_LEVEL_9_3,
-+ D3D_FEATURE_LEVEL_9_2,
-+ D3D_FEATURE_LEVEL_9_1,
- };
-
- HRESULT result = S_OK;
-@@ -1114,6 +1118,43 @@ void Renderer11::drawElements(GLenum mode, GLsizei count, GLenum type, const GLv
- }
- }
-
-+template <typename T>
-+static void drawLineLoopIndexed(T *data, GLenum type, const GLvoid *indices, GLsizei count)
-+{
-+ switch (type)
-+ {
-+ case GL_NONE: // Non-indexed draw
-+ for (int i = 0; i < count; i++)
-+ {
-+ data[i] = i;
-+ }
-+ data[count] = 0;
-+ break;
-+ case GL_UNSIGNED_BYTE:
-+ for (int i = 0; i < count; i++)
-+ {
-+ data[i] = static_cast<const GLubyte*>(indices)[i];
-+ }
-+ data[count] = static_cast<const GLubyte*>(indices)[0];
-+ break;
-+ case GL_UNSIGNED_SHORT:
-+ for (int i = 0; i < count; i++)
-+ {
-+ data[i] = static_cast<const GLushort*>(indices)[i];
-+ }
-+ data[count] = static_cast<const GLushort*>(indices)[0];
-+ break;
-+ case GL_UNSIGNED_INT:
-+ for (int i = 0; i < count; i++)
-+ {
-+ data[i] = static_cast<const GLuint*>(indices)[i];
-+ }
-+ data[count] = static_cast<const GLuint*>(indices)[0];
-+ break;
-+ default: UNREACHABLE();
-+ }
-+}
-+
- void Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer)
- {
- // Get the raw indices for an indexed draw
-@@ -1162,59 +1203,71 @@ void Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices,
- return gl::error(GL_OUT_OF_MEMORY);
- }
-
-- unsigned int *data = reinterpret_cast<unsigned int*>(mappedMemory);
-+ if (get32BitIndexSupport())
-+ drawLineLoopIndexed(reinterpret_cast<unsigned int*>(mappedMemory), type, indices, count);
-+ else
-+ drawLineLoopIndexed(reinterpret_cast<unsigned short*>(mappedMemory), type, indices, count);
-+
- unsigned int indexBufferOffset = offset;
-
-+ if (!mLineLoopIB->unmapBuffer())
-+ {
-+ ERR("Could not unmap index buffer for GL_LINE_LOOP.");
-+ return gl::error(GL_OUT_OF_MEMORY);
-+ }
-+
-+ if (mAppliedIBSerial != mLineLoopIB->getSerial() || mAppliedIBOffset != indexBufferOffset)
-+ {
-+ IndexBuffer11 *indexBuffer = IndexBuffer11::makeIndexBuffer11(mLineLoopIB->getIndexBuffer());
-+
-+ mDeviceContext->IASetIndexBuffer(indexBuffer->getBuffer(), indexBuffer->getIndexFormat(), indexBufferOffset);
-+ mAppliedIBSerial = mLineLoopIB->getSerial();
-+ mAppliedStorageIBSerial = 0;
-+ mAppliedIBOffset = indexBufferOffset;
-+ }
-+
-+ mDeviceContext->DrawIndexed(count + 1, 0, -minIndex);
-+}
-+
-+template <typename T>
-+static void drawTriangleFanIndexed(T *data, GLenum type, const GLvoid *indices, unsigned int numTris)
-+{
- switch (type)
- {
- case GL_NONE: // Non-indexed draw
-- for (int i = 0; i < count; i++)
-+ for (unsigned int i = 0; i < numTris; i++)
- {
-- data[i] = i;
-+ data[i*3 + 0] = 0;
-+ data[i*3 + 1] = i + 1;
-+ data[i*3 + 2] = i + 2;
- }
-- data[count] = 0;
- break;
- case GL_UNSIGNED_BYTE:
-- for (int i = 0; i < count; i++)
-+ for (unsigned int i = 0; i < numTris; i++)
- {
-- data[i] = static_cast<const GLubyte*>(indices)[i];
-+ data[i*3 + 0] = static_cast<const GLubyte*>(indices)[0];
-+ data[i*3 + 1] = static_cast<const GLubyte*>(indices)[i + 1];
-+ data[i*3 + 2] = static_cast<const GLubyte*>(indices)[i + 2];
- }
-- data[count] = static_cast<const GLubyte*>(indices)[0];
- break;
- case GL_UNSIGNED_SHORT:
-- for (int i = 0; i < count; i++)
-+ for (unsigned int i = 0; i < numTris; i++)
- {
-- data[i] = static_cast<const GLushort*>(indices)[i];
-+ data[i*3 + 0] = static_cast<const GLushort*>(indices)[0];
-+ data[i*3 + 1] = static_cast<const GLushort*>(indices)[i + 1];
-+ data[i*3 + 2] = static_cast<const GLushort*>(indices)[i + 2];
- }
-- data[count] = static_cast<const GLushort*>(indices)[0];
- break;
- case GL_UNSIGNED_INT:
-- for (int i = 0; i < count; i++)
-+ for (unsigned int i = 0; i < numTris; i++)
- {
-- data[i] = static_cast<const GLuint*>(indices)[i];
-+ data[i*3 + 0] = static_cast<const GLuint*>(indices)[0];
-+ data[i*3 + 1] = static_cast<const GLuint*>(indices)[i + 1];
-+ data[i*3 + 2] = static_cast<const GLuint*>(indices)[i + 2];
- }
-- data[count] = static_cast<const GLuint*>(indices)[0];
- break;
- default: UNREACHABLE();
- }
--
-- if (!mLineLoopIB->unmapBuffer())
-- {
-- ERR("Could not unmap index buffer for GL_LINE_LOOP.");
-- return gl::error(GL_OUT_OF_MEMORY);
-- }
--
-- if (mAppliedIBSerial != mLineLoopIB->getSerial() || mAppliedIBOffset != indexBufferOffset)
-- {
-- IndexBuffer11 *indexBuffer = IndexBuffer11::makeIndexBuffer11(mLineLoopIB->getIndexBuffer());
--
-- mDeviceContext->IASetIndexBuffer(indexBuffer->getBuffer(), indexBuffer->getIndexFormat(), indexBufferOffset);
-- mAppliedIBSerial = mLineLoopIB->getSerial();
-- mAppliedStorageIBSerial = 0;
-- mAppliedIBOffset = indexBufferOffset;
-- }
--
-- mDeviceContext->DrawIndexed(count + 1, 0, -minIndex);
- }
-
- void Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer, int instances)
-@@ -1267,45 +1320,12 @@ void Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *indic
- return gl::error(GL_OUT_OF_MEMORY);
- }
-
-- unsigned int *data = reinterpret_cast<unsigned int*>(mappedMemory);
-- unsigned int indexBufferOffset = offset;
-+ if (get32BitIndexSupport())
-+ drawTriangleFanIndexed(reinterpret_cast<unsigned int*>(mappedMemory), type, indices, numTris);
-+ else
-+ drawTriangleFanIndexed(reinterpret_cast<unsigned short*>(mappedMemory), type, indices, numTris);
-
-- switch (type)
-- {
-- case GL_NONE: // Non-indexed draw
-- for (unsigned int i = 0; i < numTris; i++)
-- {
-- data[i*3 + 0] = 0;
-- data[i*3 + 1] = i + 1;
-- data[i*3 + 2] = i + 2;
-- }
-- break;
-- case GL_UNSIGNED_BYTE:
-- for (unsigned int i = 0; i < numTris; i++)
-- {
-- data[i*3 + 0] = static_cast<const GLubyte*>(indices)[0];
-- data[i*3 + 1] = static_cast<const GLubyte*>(indices)[i + 1];
-- data[i*3 + 2] = static_cast<const GLubyte*>(indices)[i + 2];
-- }
-- break;
-- case GL_UNSIGNED_SHORT:
-- for (unsigned int i = 0; i < numTris; i++)
-- {
-- data[i*3 + 0] = static_cast<const GLushort*>(indices)[0];
-- data[i*3 + 1] = static_cast<const GLushort*>(indices)[i + 1];
-- data[i*3 + 2] = static_cast<const GLushort*>(indices)[i + 2];
-- }
-- break;
-- case GL_UNSIGNED_INT:
-- for (unsigned int i = 0; i < numTris; i++)
-- {
-- data[i*3 + 0] = static_cast<const GLuint*>(indices)[0];
-- data[i*3 + 1] = static_cast<const GLuint*>(indices)[i + 1];
-- data[i*3 + 2] = static_cast<const GLuint*>(indices)[i + 2];
-- }
-- break;
-- default: UNREACHABLE();
-- }
-+ unsigned int indexBufferOffset = offset;
-
- if (!mTriangleFanIB->unmapBuffer())
- {
-@@ -1515,7 +1535,7 @@ void Renderer11::applyUniforms(gl::ProgramBinary *programBinary, gl::UniformArra
- }
-
- // needed for the point sprite geometry shader
-- if (mCurrentGeometryConstantBuffer != mDriverConstantBufferPS)
-+ if (mFeatureLevel >= D3D_FEATURE_LEVEL_10_0 && mCurrentGeometryConstantBuffer != mDriverConstantBufferPS)
- {
- mDeviceContext->GSSetConstantBuffers(0, 1, &mDriverConstantBufferPS);
- mCurrentGeometryConstantBuffer = mDriverConstantBufferPS;
-@@ -1929,9 +1949,13 @@ bool Renderer11::testDeviceResettable()
-
- D3D_FEATURE_LEVEL featureLevels[] =
- {
-+ D3D_FEATURE_LEVEL_11_1,
- D3D_FEATURE_LEVEL_11_0,
- D3D_FEATURE_LEVEL_10_1,
- D3D_FEATURE_LEVEL_10_0,
-+ D3D_FEATURE_LEVEL_9_3,
-+ D3D_FEATURE_LEVEL_9_2,
-+ D3D_FEATURE_LEVEL_9_1,
- };
-
- ID3D11Device* dummyDevice;
-@@ -2110,11 +2134,17 @@ float Renderer11::getTextureMaxAnisotropy() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_MAX_MAXANISOTROPY;
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_MAX_MAXANISOTROPY;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ return 16;
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return D3D_FL9_1_DEFAULT_MAX_ANISOTROPY;
- default: UNREACHABLE();
- return 0;
- }
-@@ -2129,11 +2159,17 @@ Range Renderer11::getViewportBounds() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return Range(D3D11_VIEWPORT_BOUNDS_MIN, D3D11_VIEWPORT_BOUNDS_MAX);
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return Range(D3D10_VIEWPORT_BOUNDS_MIN, D3D10_VIEWPORT_BOUNDS_MAX);
-+ case D3D_FEATURE_LEVEL_9_3:
-+ return Range(D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION * -2, D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION * 2);
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return Range(D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION * -2, D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION * 2);
- default: UNREACHABLE();
- return Range(0, 0);
- }
-@@ -2144,10 +2180,15 @@ unsigned int Renderer11::getMaxVertexTextureImageUnits() const
- META_ASSERT(MAX_TEXTURE_IMAGE_UNITS_VTF_SM4 <= gl::IMPLEMENTATION_MAX_VERTEX_TEXTURE_IMAGE_UNITS);
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return MAX_TEXTURE_IMAGE_UNITS_VTF_SM4;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 0;
- default: UNREACHABLE();
- return 0;
- }
-@@ -2171,15 +2212,41 @@ unsigned int Renderer11::getReservedFragmentUniformVectors() const
- unsigned int Renderer11::getMaxVertexUniformVectors() const
- {
- META_ASSERT(MAX_VERTEX_UNIFORM_VECTORS_D3D11 <= D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT);
-- ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_10_0);
-- return MAX_VERTEX_UNIFORM_VECTORS_D3D11;
-+ switch (mFeatureLevel)
-+ {
-+ case D3D_FEATURE_LEVEL_11_1:
-+ case D3D_FEATURE_LEVEL_11_0:
-+ case D3D_FEATURE_LEVEL_10_1:
-+ case D3D_FEATURE_LEVEL_10_0:
-+ return MAX_VERTEX_UNIFORM_VECTORS_D3D11;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return MAX_VERTEX_UNIFORM_VECTORS_D3D9;
-+ default:
-+ UNIMPLEMENTED();
-+ return 0;
-+ }
- }
-
- unsigned int Renderer11::getMaxFragmentUniformVectors() const
- {
- META_ASSERT(MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 <= D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT);
-- ASSERT(mFeatureLevel >= D3D_FEATURE_LEVEL_10_0);
-- return MAX_FRAGMENT_UNIFORM_VECTORS_D3D11;
-+ switch (mFeatureLevel)
-+ {
-+ case D3D_FEATURE_LEVEL_11_1:
-+ case D3D_FEATURE_LEVEL_11_0:
-+ case D3D_FEATURE_LEVEL_10_1:
-+ case D3D_FEATURE_LEVEL_10_0:
-+ return MAX_FRAGMENT_UNIFORM_VECTORS_D3D11;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ return 221;
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 29;
-+ default: UNREACHABLE();
-+ return 0;
-+ }
- }
-
- unsigned int Renderer11::getMaxVaryingVectors() const
-@@ -2187,11 +2254,17 @@ unsigned int Renderer11::getMaxVaryingVectors() const
- META_ASSERT(gl::IMPLEMENTATION_MAX_VARYING_VECTORS == D3D11_VS_OUTPUT_REGISTER_COUNT);
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_VS_OUTPUT_REGISTER_COUNT;
- case D3D_FEATURE_LEVEL_10_1:
-+ return D3D10_1_VS_OUTPUT_REGISTER_COUNT;
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_VS_OUTPUT_REGISTER_COUNT;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 8;
- default: UNREACHABLE();
- return 0;
- }
-@@ -2201,10 +2274,15 @@ bool Renderer11::getNonPower2TextureSupport() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return true;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return false;
- default: UNREACHABLE();
- return false;
- }
-@@ -2214,10 +2292,15 @@ bool Renderer11::getOcclusionQuerySupport() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
- return true;
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return false;
- default: UNREACHABLE();
- return false;
- }
-@@ -2227,10 +2310,15 @@ bool Renderer11::getInstancingSupport() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
-+ case D3D_FEATURE_LEVEL_9_3:
- return true;
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return false;
- default: UNREACHABLE();
- return false;
- }
-@@ -2248,10 +2336,15 @@ bool Renderer11::getDerivativeInstructionSupport() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
-+ case D3D_FEATURE_LEVEL_9_3:
- return true;
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return false;
- default: UNREACHABLE();
- return false;
- }
-@@ -2267,9 +2360,13 @@ int Renderer11::getMajorShaderModel() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0: return D3D11_SHADER_MAJOR_VERSION; // 5
- case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SHADER_MAJOR_VERSION; // 4
- case D3D_FEATURE_LEVEL_10_0: return D3D10_SHADER_MAJOR_VERSION; // 4
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1: return 4; // SM4 level 9, but treat as 4
- default: UNREACHABLE(); return 0;
- }
- }
-@@ -2278,9 +2375,13 @@ int Renderer11::getMinorShaderModel() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0: return D3D11_SHADER_MINOR_VERSION; // 0
- case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SHADER_MINOR_VERSION; // 1
- case D3D_FEATURE_LEVEL_10_0: return D3D10_SHADER_MINOR_VERSION; // 0
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1: return 0;
- default: UNREACHABLE(); return 0;
- }
- }
-@@ -2301,11 +2402,17 @@ int Renderer11::getMaxViewportDimension() const
-
- switch (mFeatureLevel)
- {
-- case D3D_FEATURE_LEVEL_11_0:
-+ case D3D_FEATURE_LEVEL_11_1:
-+ case D3D_FEATURE_LEVEL_11_0:
- return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 16384
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 8192
-+ case D3D_FEATURE_LEVEL_9_3:
-+ return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 4096
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 2048
- default: UNREACHABLE();
- return 0;
- }
-@@ -2315,9 +2422,13 @@ int Renderer11::getMaxTextureWidth() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 16384
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 8192
-+ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 4096
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 2048
- default: UNREACHABLE(); return 0;
- }
- }
-@@ -2326,9 +2437,13 @@ int Renderer11::getMaxTextureHeight() const
- {
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 16384
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 8192
-+ case D3D_FEATURE_LEVEL_9_3: return D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 4096
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1: return D3D_FL9_1_REQ_TEXTURE2D_U_OR_V_DIMENSION; // 2048
- default: UNREACHABLE(); return 0;
- }
- }
-@@ -2337,9 +2452,13 @@ bool Renderer11::get32BitIndexSupport() const
- {
- switch (mFeatureLevel)
- {
-- case D3D_FEATURE_LEVEL_11_0:
-+ case D3D_FEATURE_LEVEL_11_1:
-+ case D3D_FEATURE_LEVEL_11_0:
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0: return D3D10_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP >= 32; // true
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1: return false;
- default: UNREACHABLE(); return false;
- }
- }
-@@ -2386,14 +2505,22 @@ unsigned int Renderer11::getMaxRenderTargets() const
- {
- META_ASSERT(D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
- META_ASSERT(D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
-+ META_ASSERT(D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
-+ META_ASSERT(D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT <= gl::IMPLEMENTATION_MAX_DRAW_BUFFERS);
-
- switch (mFeatureLevel)
- {
-+ case D3D_FEATURE_LEVEL_11_1:
- case D3D_FEATURE_LEVEL_11_0:
- return D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT; // 8
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_SIMULTANEOUS_RENDER_TARGET_COUNT; // 8
-+ case D3D_FEATURE_LEVEL_9_3:
-+ return D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT; // 4
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return D3D_FL9_1_SIMULTANEOUS_RENDER_TARGET_COUNT; // 1
- default:
- UNREACHABLE();
- return 1;
-@@ -2821,7 +2948,7 @@ ShaderExecutable *Renderer11::loadExecutable(const void *function, size_t length
-
- ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const char *shaderHLSL, rx::ShaderType type)
- {
-- const char *profile = NULL;
-+ std::string profile;
-
- switch (type)
- {
-@@ -2839,7 +2966,12 @@ ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const ch
- return NULL;
- }
-
-- ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile, D3DCOMPILE_OPTIMIZATION_LEVEL0, false);
-+ if (mFeatureLevel == D3D_FEATURE_LEVEL_9_3)
-+ profile += "_level_9_3";
-+ else if (mFeatureLevel == D3D_FEATURE_LEVEL_9_2 || mFeatureLevel == D3D_FEATURE_LEVEL_9_1)
-+ profile += "_level_9_1";
-+
-+ ID3DBlob *binary = (ID3DBlob*)compileToBinary(infoLog, shaderHLSL, profile.c_str(), D3DCOMPILE_OPTIMIZATION_LEVEL0, false);
- if (!binary)
- return NULL;
-
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h
-index a7f5a39..433945d 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer11.h
-@@ -32,6 +32,7 @@ class StreamingIndexBufferInterface;
-
- enum
- {
-+ MAX_VERTEX_UNIFORM_VECTORS_D3D9 = 254,
- MAX_VERTEX_UNIFORM_VECTORS_D3D11 = 1024,
- MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 = 1024
- };
-@@ -177,6 +178,7 @@ class Renderer11 : public Renderer
- ID3D11Device *getDevice() { return mDevice; }
- ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
- IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
-+ D3D_FEATURE_LEVEL getFeatureLevel() const { return mFeatureLevel; }
-
- bool getRenderTargetResource(gl::Renderbuffer *colorbuffer, unsigned int *subresourceIndex, ID3D11Texture2D **resource);
- void unapplyRenderTargets();
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-index 0797fd7..9770772 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-@@ -500,12 +500,17 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
- ASSERT(SUCCEEDED(result));
-
- DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0};
-- swapChainDesc.BufferCount = 2;
- swapChainDesc.Format = gl_d3d11::ConvertRenderbufferFormat(mBackBufferFormat);
- swapChainDesc.Width = backbufferWidth;
- swapChainDesc.Height = backbufferHeight;
- swapChainDesc.Stereo = FALSE;
-+#if !defined(ANGLE_OS_WINPHONE)
-+ swapChainDesc.BufferCount = 2;
- swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_FLIP_SEQUENTIAL;
-+#else
-+ swapChainDesc.BufferCount = 1;
-+ swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
-+#endif
- #endif
-
- swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/TextureStorage11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/TextureStorage11.cpp
-index 408b48e..32a407a 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/TextureStorage11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/TextureStorage11.cpp
-@@ -222,14 +222,14 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, SwapChain11 *swapch
- }
-
- TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, GLsizei width, GLsizei height)
-- : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat), usage, forceRenderable))
-+ : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat, Renderer11::makeRenderer11(renderer)->getFeatureLevel()), usage, forceRenderable))
- {
- for (unsigned int i = 0; i < gl::IMPLEMENTATION_MAX_TEXTURE_LEVELS; i++)
- {
- mRenderTarget[i] = NULL;
- }
-
-- DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat);
-+ DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat, Renderer11::makeRenderer11(renderer)->getFeatureLevel());
- if (d3d11::IsDepthStencilFormat(convertedFormat))
- {
- mTextureFormat = d3d11::GetDepthTextureFormat(convertedFormat);
-@@ -440,7 +440,7 @@ void TextureStorage11_2D::generateMipmap(int level)
- }
-
- TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLenum internalformat, GLenum usage, bool forceRenderable, int size)
-- : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat), usage, forceRenderable))
-+ : TextureStorage11(renderer, GetTextureBindFlags(gl_d3d11::ConvertTextureFormat(internalformat, Renderer11::makeRenderer11(renderer)->getFeatureLevel()), usage, forceRenderable))
- {
- for (unsigned int i = 0; i < 6; i++)
- {
-@@ -450,7 +450,7 @@ TextureStorage11_Cube::TextureStorage11_Cube(Renderer *renderer, int levels, GLe
- }
- }
-
-- DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat);
-+ DXGI_FORMAT convertedFormat = gl_d3d11::ConvertTextureFormat(internalformat, Renderer11::makeRenderer11(renderer)->getFeatureLevel());
- if (d3d11::IsDepthStencilFormat(convertedFormat))
- {
- mTextureFormat = d3d11::GetDepthTextureFormat(convertedFormat);
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.cpp
-index 13800da..0624a61 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.cpp
-@@ -329,7 +329,7 @@ DXGI_FORMAT ConvertRenderbufferFormat(GLenum format)
- return DXGI_FORMAT_R8G8B8A8_UNORM;
- }
-
--DXGI_FORMAT ConvertTextureFormat(GLenum internalformat)
-+DXGI_FORMAT ConvertTextureFormat(GLenum internalformat, D3D_FEATURE_LEVEL featureLevel)
- {
- switch (internalformat)
- {
-@@ -342,7 +342,7 @@ DXGI_FORMAT ConvertTextureFormat(GLenum internalformat)
- case GL_LUMINANCE8_ALPHA8_EXT:
- return DXGI_FORMAT_R8G8B8A8_UNORM;
- case GL_ALPHA8_EXT:
-- return DXGI_FORMAT_A8_UNORM;
-+ return featureLevel >= D3D_FEATURE_LEVEL_10_0 ? DXGI_FORMAT_A8_UNORM : DXGI_FORMAT_B8G8R8A8_UNORM;
- case GL_COMPRESSED_RGB_S3TC_DXT1_EXT:
- case GL_COMPRESSED_RGBA_S3TC_DXT1_EXT:
- return DXGI_FORMAT_BC1_UNORM;
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.h b/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.h
-index 1bc48c1..70ad4fe 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/renderer11_utils.h
-@@ -32,7 +32,7 @@ FLOAT ConvertMinLOD(GLenum minFilter, unsigned int lodOffset);
- FLOAT ConvertMaxLOD(GLenum minFilter, unsigned int lodOffset);
-
- DXGI_FORMAT ConvertRenderbufferFormat(GLenum format);
--DXGI_FORMAT ConvertTextureFormat(GLenum format);
-+DXGI_FORMAT ConvertTextureFormat(GLenum format, D3D_FEATURE_LEVEL featureLevel);
- }
-
- namespace d3d11_gl
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/shaders/Clear11.hlsl b/src/3rdparty/angle/src/libGLESv2/renderer/shaders/Clear11.hlsl
-index 042ac69..cb132dc 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/shaders/Clear11.hlsl
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/shaders/Clear11.hlsl
-@@ -12,10 +12,12 @@ struct PS_OutputMultiple
- float4 color1 : SV_TARGET1;
- float4 color2 : SV_TARGET2;
- float4 color3 : SV_TARGET3;
-+#ifdef SM4
- float4 color4 : SV_TARGET4;
- float4 color5 : SV_TARGET5;
- float4 color6 : SV_TARGET6;
- float4 color7 : SV_TARGET7;
-+#endif
- };
-
- PS_OutputMultiple PS_ClearMultiple(in float4 inPosition : SV_POSITION, in float4 inColor : COLOR)
-@@ -25,10 +27,12 @@ PS_OutputMultiple PS_ClearMultiple(in float4 inPosition : SV_POSITION, in float4
- outColor.color1 = inColor;
- outColor.color2 = inColor;
- outColor.color3 = inColor;
-+#ifdef SM4
- outColor.color4 = inColor;
- outColor.color5 = inColor;
- outColor.color6 = inColor;
- outColor.color7 = inColor;
-+#endif
- return outColor;
- }
-
-diff --git a/src/angle/src/libGLESv2/libGLESv2.pro b/src/angle/src/libGLESv2/libGLESv2.pro
-index ff2f888..b39ce78 100644
---- a/src/angle/src/libGLESv2/libGLESv2.pro
-+++ b/src/angle/src/libGLESv2/libGLESv2.pro
-@@ -190,7 +190,7 @@ for (ps, PIXEL_SHADERS_BLIT) {
- QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
- }
- for (ps, PIXEL_SHADERS_PASSTHROUGH) {
-- fxc_ps_$${ps}.commands = $$FXC /nologo /E PS_$$ps /T ps_4_0 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
-+ fxc_ps_$${ps}.commands = $$FXC /nologo /E PS_$$ps /T ps_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_ps_$${ps}.output = $$SHADER_DIR/$${ps}11ps.h
- fxc_ps_$${ps}.input = PASSTHROUGH_INPUT
- fxc_ps_$${ps}.dependency_type = TYPE_C
-@@ -199,7 +199,7 @@ for (ps, PIXEL_SHADERS_PASSTHROUGH) {
- QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
- }
- for (ps, PIXEL_SHADERS_CLEAR) {
-- fxc_ps_$${ps}.commands = $$FXC /nologo /E PS_$$ps /T ps_4_0 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
-+ fxc_ps_$${ps}.commands = $$FXC /nologo /E PS_$$ps /T ps_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_ps_$${ps}.output = $$SHADER_DIR/$${ps}11ps.h
- fxc_ps_$${ps}.input = CLEAR_INPUT
- fxc_ps_$${ps}.dependency_type = TYPE_C
-@@ -217,7 +217,7 @@ for (vs, VERTEX_SHADERS_BLIT) {
- QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
- }
- for (vs, VERTEX_SHADERS_PASSTHROUGH) {
-- fxc_vs_$${vs}.commands = $$FXC /nologo /E VS_$$vs /T vs_4_0 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
-+ fxc_vs_$${vs}.commands = $$FXC /nologo /E VS_$$vs /T vs_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_vs_$${vs}.output = $$SHADER_DIR/$${vs}11vs.h
- fxc_vs_$${vs}.input = PASSTHROUGH_INPUT
- fxc_vs_$${vs}.dependency_type = TYPE_C
-@@ -226,7 +226,7 @@ for (vs, VERTEX_SHADERS_PASSTHROUGH) {
- QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
- }
- for (vs, VERTEX_SHADERS_CLEAR) {
-- fxc_vs_$${vs}.commands = $$FXC /nologo /E VS_$$vs /T vs_4_0 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
-+ fxc_vs_$${vs}.commands = $$FXC /nologo /E VS_$$vs /T vs_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_vs_$${vs}.output = $$SHADER_DIR/$${vs}11vs.h
- fxc_vs_$${vs}.input = CLEAR_INPUT
- fxc_vs_$${vs}.dependency_type = TYPE_C
---
-1.8.4.msysgit.0
-
diff --git a/src/angle/patches/0014-ANGLE-D3D11-Always-execute-QueryInterface.patch b/src/angle/patches/0014-ANGLE-D3D11-Always-execute-QueryInterface.patch
deleted file mode 100644
index dbe618102e..0000000000
--- a/src/angle/patches/0014-ANGLE-D3D11-Always-execute-QueryInterface.patch
+++ /dev/null
@@ -1,51 +0,0 @@
-From 4d1906f0b81f2b61adf9640ae6cef9d503c33209 Mon Sep 17 00:00:00 2001
-From: Maurice Kalinowski <maurice.kalinowski@digia.com>
-Date: Tue, 3 Dec 2013 14:52:18 +0100
-Subject: [PATCH] ANGLE D3D11: Always execute QueryInterface
-
-ASSERT removes the condition when building for release mode. However,
-QueryInterface must be called in any case. Adopt to using ASSERT(false)
-like in other occurrences in angle.
-
-This is a follow-up patch to 331bc16afd23414493b842819e0b747e8f364243
-
-Change-Id: I4413bab06b5a529fcbd09bbc20828fcdcf4e4fc6
----
- src/3rdparty/angle/src/libEGL/Surface.cpp | 14 ++++++++++++--
- 1 file changed, 12 insertions(+), 2 deletions(-)
-
-diff --git a/src/3rdparty/angle/src/libEGL/Surface.cpp b/src/3rdparty/angle/src/libEGL/Surface.cpp
-index ee8d480..99d0c1d 100644
---- a/src/3rdparty/angle/src/libEGL/Surface.cpp
-+++ b/src/3rdparty/angle/src/libEGL/Surface.cpp
-@@ -118,7 +118,12 @@ bool Surface::resetSwapChain()
- #else
- ABI::Windows::Foundation::Rect windowRect;
- ABI::Windows::UI::Core::ICoreWindow *window;
-- ASSERT(SUCCEEDED(mWindow->QueryInterface(IID_PPV_ARGS(&window))));
-+ HRESULT result = mWindow->QueryInterface(IID_PPV_ARGS(&window));
-+ if (FAILED(result))
-+ {
-+ ASSERT(false);
-+ return false;
-+ }
- window->get_Bounds(&windowRect);
- width = windowRect.Width;
- height = windowRect.Height;
-@@ -342,7 +347,12 @@ bool Surface::checkForOutOfDateSwapChain()
- #else
- ABI::Windows::Foundation::Rect windowRect;
- ABI::Windows::UI::Core::ICoreWindow *window;
-- ASSERT(SUCCEEDED(mWindow->QueryInterface(IID_PPV_ARGS(&window))));
-+ HRESULT result = mWindow->QueryInterface(IID_PPV_ARGS(&window));
-+ if (FAILED(result))
-+ {
-+ ASSERT(false);
-+ return false;
-+ }
- window->get_Bounds(&windowRect);
- int clientWidth = windowRect.Width;
- int clientHeight = windowRect.Height;
---
-1.7.11.msysgit.0
-
diff --git a/src/angle/patches/0016-ANGLE-D3D11-Fix-build-on-desktop-Windows.patch b/src/angle/patches/0016-ANGLE-D3D11-Fix-build-on-desktop-Windows.patch
deleted file mode 100644
index 99f458bc28..0000000000
--- a/src/angle/patches/0016-ANGLE-D3D11-Fix-build-on-desktop-Windows.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 8229b84ddf0134ac11412262d23515dfb7ddb177 Mon Sep 17 00:00:00 2001
-From: Andrew Knight <andrew.knight@digia.com>
-Date: Sun, 8 Dec 2013 22:50:38 +0200
-Subject: [PATCH] ANGLE D3D11: Fix build on desktop Windows
-
-This fixes a missing declaration caused by 11a2226c
-
-Change-Id: I4b8092c6b9592e886353af9193686238105a1512
----
- src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-index 9770772..2fe15ff 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain11.cpp
-@@ -519,7 +519,7 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
- swapChainDesc.SampleDesc.Quality = 0;
-
- #if !defined(ANGLE_OS_WINRT)
-- result = factory->CreateSwapChain(device, &swapChainDesc, &mSwapChain);
-+ HRESULT result = factory->CreateSwapChain(device, &swapChainDesc, &mSwapChain);
- #else
- IDXGISwapChain1 *swapChain;
- result = factory->CreateSwapChainForCoreWindow(device, mWindow, &swapChainDesc, NULL, &swapChain);
---
-1.8.4.msysgit.0
-
diff --git a/src/angle/src/compiler/compiler.pro b/src/angle/src/compiler/compiler.pro
index 26b03bfc86..7f3f3e301e 100644
--- a/src/angle/src/compiler/compiler.pro
+++ b/src/angle/src/compiler/compiler.pro
@@ -1,3 +1,3 @@
TEMPLATE = subdirs
CONFIG += ordered
-SUBDIRS = preprocessor translator_common.pro translator_hlsl.pro
+SUBDIRS = preprocessor translator.pro
diff --git a/src/angle/src/compiler/preprocessor/preprocessor.pro b/src/angle/src/compiler/preprocessor/preprocessor.pro
index 432c8dcf32..74cd97c5a4 100644
--- a/src/angle/src/compiler/preprocessor/preprocessor.pro
+++ b/src/angle/src/compiler/preprocessor/preprocessor.pro
@@ -21,6 +21,7 @@ HEADERS += \
$$ANGLE_DIR/src/compiler/preprocessor/DirectiveParser.h \
$$ANGLE_DIR/src/compiler/preprocessor/ExpressionParser.h \
$$ANGLE_DIR/src/compiler/preprocessor/Input.h \
+ $$ANGLE_DIR/src/compiler/preprocessor/length_limits.h \
$$ANGLE_DIR/src/compiler/preprocessor/Lexer.h \
$$ANGLE_DIR/src/compiler/preprocessor/Macro.h \
$$ANGLE_DIR/src/compiler/preprocessor/MacroExpander.h \
diff --git a/src/angle/src/compiler/translator.pro b/src/angle/src/compiler/translator.pro
new file mode 100644
index 0000000000..0051486f82
--- /dev/null
+++ b/src/angle/src/compiler/translator.pro
@@ -0,0 +1,163 @@
+TEMPLATE = lib
+CONFIG += static
+TARGET = $$qtLibraryTarget(translator)
+
+include(../config.pri)
+
+# Mingw 4.7 chokes on implicit move semantics, so disable C++11 here
+mingw: CONFIG -= c++11
+
+INCLUDEPATH += \
+ $$ANGLE_DIR/src \
+ $$ANGLE_DIR/include
+
+DEFINES += _SECURE_SCL=0 _LIB COMPILER_IMPLEMENTATION
+
+FLEX_SOURCES = $$ANGLE_DIR/src/compiler/translator/glslang.l
+BISON_SOURCES = $$ANGLE_DIR/src/compiler/translator/glslang.y
+
+HEADERS += \
+ $$ANGLE_DIR/include/GLSLANG/ResourceLimits.h \
+ $$ANGLE_DIR/include/GLSLANG/ShaderLang.h \
+ $$ANGLE_DIR/src/compiler/translator/BaseTypes.h \
+ $$ANGLE_DIR/src/compiler/translator/BuiltInFunctionEmulator.h \
+ $$ANGLE_DIR/src/compiler/translator/Common.h \
+ $$ANGLE_DIR/src/compiler/translator/compilerdebug.h \
+ $$ANGLE_DIR/src/compiler/translator/ConstantUnion.h \
+ $$ANGLE_DIR/src/compiler/translator/depgraph/DependencyGraph.h \
+ $$ANGLE_DIR/src/compiler/translator/depgraph/DependencyGraphBuilder.h \
+ $$ANGLE_DIR/src/compiler/translator/depgraph/DependencyGraphOutput.h \
+ $$ANGLE_DIR/src/compiler/translator/DetectCallDepth.h \
+ $$ANGLE_DIR/src/compiler/translator/DetectDiscontinuity.h \
+ $$ANGLE_DIR/src/compiler/translator/Diagnostics.h \
+ $$ANGLE_DIR/src/compiler/translator/DirectiveHandler.h \
+ $$ANGLE_DIR/src/compiler/translator/ExtensionBehavior.h \
+ $$ANGLE_DIR/src/compiler/translator/ForLoopUnroll.h \
+ $$ANGLE_DIR/src/compiler/translator/HashNames.h \
+ $$ANGLE_DIR/src/compiler/translator/InfoSink.h \
+ $$ANGLE_DIR/src/compiler/translator/Initialize.h \
+ $$ANGLE_DIR/src/compiler/translator/InitializeDll.h \
+ $$ANGLE_DIR/src/compiler/translator/InitializeParseContext.h \
+ $$ANGLE_DIR/src/compiler/translator/InitializeVariables.h \
+ $$ANGLE_DIR/src/compiler/translator/intermediate.h \
+ $$ANGLE_DIR/src/compiler/translator/localintermediate.h \
+ $$ANGLE_DIR/src/compiler/translator/MapLongVariableNames.h \
+ $$ANGLE_DIR/src/compiler/translator/MMap.h \
+ $$ANGLE_DIR/src/compiler/translator/NodeSearch.h \
+ $$ANGLE_DIR/src/compiler/translator/osinclude.h \
+ $$ANGLE_DIR/src/compiler/translator/OutputESSL.h \
+ $$ANGLE_DIR/src/compiler/translator/OutputGLSL.h \
+ $$ANGLE_DIR/src/compiler/translator/OutputGLSLBase.h \
+ $$ANGLE_DIR/src/compiler/translator/OutputHLSL.h \
+ $$ANGLE_DIR/src/compiler/translator/ParseContext.h \
+ $$ANGLE_DIR/src/compiler/translator/PoolAlloc.h \
+ $$ANGLE_DIR/src/compiler/translator/Pragma.h \
+ $$ANGLE_DIR/src/compiler/translator/QualifierAlive.h \
+ $$ANGLE_DIR/src/compiler/translator/RemoveTree.h \
+ $$ANGLE_DIR/src/compiler/translator/RenameFunction.h \
+ $$ANGLE_DIR/src/compiler/translator/RewriteElseBlocks.h \
+ $$ANGLE_DIR/src/compiler/translator/SearchSymbol.h \
+ $$ANGLE_DIR/src/compiler/translator/ShHandle.h \
+ $$ANGLE_DIR/src/compiler/translator/SymbolTable.h \
+ $$ANGLE_DIR/src/compiler/translator/timing/RestrictFragmentShaderTiming.h \
+ $$ANGLE_DIR/src/compiler/translator/timing/RestrictVertexShaderTiming.h \
+ $$ANGLE_DIR/src/compiler/translator/TranslatorESSL.h \
+ $$ANGLE_DIR/src/compiler/translator/TranslatorGLSL.h \
+ $$ANGLE_DIR/src/compiler/translator/TranslatorHLSL.h \
+ $$ANGLE_DIR/src/compiler/translator/Types.h \
+ $$ANGLE_DIR/src/compiler/translator/UnfoldShortCircuit.h \
+ $$ANGLE_DIR/src/compiler/translator/UnfoldShortCircuitAST.h \
+ $$ANGLE_DIR/src/compiler/translator/Uniform.h \
+ $$ANGLE_DIR/src/compiler/translator/util.h \
+ $$ANGLE_DIR/src/compiler/translator/ValidateLimitations.h \
+ $$ANGLE_DIR/src/compiler/translator/VariableInfo.h \
+ $$ANGLE_DIR/src/compiler/translator/VariablePacker.h \
+ $$ANGLE_DIR/src/compiler/translator/VersionGLSL.h \
+ $$ANGLE_DIR/src/third_party/compiler/ArrayBoundsClamper.h
+
+
+SOURCES += \
+ $$ANGLE_DIR/src/compiler/translator/BuiltInFunctionEmulator.cpp \
+ $$ANGLE_DIR/src/compiler/translator/CodeGen.cpp \
+ $$ANGLE_DIR/src/compiler/translator/Compiler.cpp \
+ $$ANGLE_DIR/src/compiler/translator/compilerdebug.cpp \
+ $$ANGLE_DIR/src/compiler/translator/depgraph/DependencyGraph.cpp \
+ $$ANGLE_DIR/src/compiler/translator/depgraph/DependencyGraphBuilder.cpp \
+ $$ANGLE_DIR/src/compiler/translator/depgraph/DependencyGraphOutput.cpp \
+ $$ANGLE_DIR/src/compiler/translator/depgraph/DependencyGraphTraverse.cpp \
+ $$ANGLE_DIR/src/compiler/translator/DetectCallDepth.cpp \
+ $$ANGLE_DIR/src/compiler/translator/DetectDiscontinuity.cpp \
+ $$ANGLE_DIR/src/compiler/translator/Diagnostics.cpp \
+ $$ANGLE_DIR/src/compiler/translator/DirectiveHandler.cpp \
+ $$ANGLE_DIR/src/compiler/translator/ForLoopUnroll.cpp \
+ $$ANGLE_DIR/src/compiler/translator/InfoSink.cpp \
+ $$ANGLE_DIR/src/compiler/translator/Initialize.cpp \
+ $$ANGLE_DIR/src/compiler/translator/InitializeDll.cpp \
+ $$ANGLE_DIR/src/compiler/translator/InitializeParseContext.cpp \
+ $$ANGLE_DIR/src/compiler/translator/InitializeVariables.cpp \
+ $$ANGLE_DIR/src/compiler/translator/Intermediate.cpp \
+ $$ANGLE_DIR/src/compiler/translator/intermOut.cpp \
+ $$ANGLE_DIR/src/compiler/translator/IntermTraverse.cpp \
+ $$ANGLE_DIR/src/compiler/translator/MapLongVariableNames.cpp \
+ $$ANGLE_DIR/src/compiler/translator/OutputESSL.cpp \
+ $$ANGLE_DIR/src/compiler/translator/OutputGLSL.cpp \
+ $$ANGLE_DIR/src/compiler/translator/OutputGLSLBase.cpp \
+ $$ANGLE_DIR/src/compiler/translator/OutputHLSL.cpp \
+ $$ANGLE_DIR/src/compiler/translator/parseConst.cpp \
+ $$ANGLE_DIR/src/compiler/translator/ParseContext.cpp \
+ $$ANGLE_DIR/src/compiler/translator/PoolAlloc.cpp \
+ $$ANGLE_DIR/src/compiler/translator/QualifierAlive.cpp \
+ $$ANGLE_DIR/src/compiler/translator/RemoveTree.cpp \
+ $$ANGLE_DIR/src/compiler/translator/RewriteElseBlocks.cpp \
+ $$ANGLE_DIR/src/compiler/translator/SearchSymbol.cpp \
+ $$ANGLE_DIR/src/compiler/translator/ShaderLang.cpp \
+ $$ANGLE_DIR/src/compiler/translator/SymbolTable.cpp \
+ $$ANGLE_DIR/src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp \
+ $$ANGLE_DIR/src/compiler/translator/timing/RestrictVertexShaderTiming.cpp \
+ $$ANGLE_DIR/src/compiler/translator/TranslatorESSL.cpp \
+ $$ANGLE_DIR/src/compiler/translator/TranslatorGLSL.cpp \
+ $$ANGLE_DIR/src/compiler/translator/TranslatorHLSL.cpp \
+ $$ANGLE_DIR/src/compiler/translator/UnfoldShortCircuit.cpp \
+ $$ANGLE_DIR/src/compiler/translator/UnfoldShortCircuitAST.cpp \
+ $$ANGLE_DIR/src/compiler/translator/Uniform.cpp \
+ $$ANGLE_DIR/src/compiler/translator/util.cpp \
+ $$ANGLE_DIR/src/compiler/translator/ValidateLimitations.cpp \
+ $$ANGLE_DIR/src/compiler/translator/VariableInfo.cpp \
+ $$ANGLE_DIR/src/compiler/translator/VariablePacker.cpp \
+ $$ANGLE_DIR/src/compiler/translator/VersionGLSL.cpp \
+ $$ANGLE_DIR/src/third_party/compiler/ArrayBoundsClamper.cpp
+
+
+winrt {
+ SOURCES += $$ANGLE_DIR/src/compiler/translator/ossource_winrt.cpp
+} else {
+ SOURCES += $$ANGLE_DIR/src/compiler/translator/ossource_win.cpp
+}
+
+# NOTE: 'win_flex' and 'bison' can be found in qt5/gnuwin32/bin
+flex.commands = $$addGnuPath(win_flex) --noline --nounistd --outfile=${QMAKE_FILE_BASE}_lex.cpp ${QMAKE_FILE_NAME}
+flex.output = ${QMAKE_FILE_BASE}_lex.cpp
+flex.input = FLEX_SOURCES
+flex.dependency_type = TYPE_C
+flex.variable_out = GENERATED_SOURCES
+QMAKE_EXTRA_COMPILERS += flex
+
+bison.commands = $$addGnuPath(bison) --no-lines --skeleton=yacc.c --defines=${QMAKE_FILE_BASE}_tab.h \
+ --output=${QMAKE_FILE_BASE}_tab.cpp ${QMAKE_FILE_NAME}
+bison.output = ${QMAKE_FILE_BASE}_tab.h
+bison.input = BISON_SOURCES
+bison.dependency_type = TYPE_C
+bison.variable_out = GENERATED_SOURCES
+QMAKE_EXTRA_COMPILERS += bison
+
+# This is a dummy compiler to work around the fact that an extra compiler can only
+# have one output file even if the command generates two.
+MAKEFILE_NOOP_COMMAND = @echo -n
+msvc: MAKEFILE_NOOP_COMMAND = @echo >NUL
+bison_impl.output = ${QMAKE_FILE_BASE}_tab.cpp
+bison_impl.input = BISON_SOURCES
+bison_impl.commands = $$MAKEFILE_NOOP_COMMAND
+bison_impl.depends = ${QMAKE_FILE_BASE}_tab.h
+bison_impl.output = ${QMAKE_FILE_BASE}_tab.cpp
+bison_impl.variable_out = GENERATED_SOURCES
+QMAKE_EXTRA_COMPILERS += bison_impl
diff --git a/src/angle/src/compiler/translator_common.pro b/src/angle/src/compiler/translator_common.pro
deleted file mode 100644
index c8f86d6b10..0000000000
--- a/src/angle/src/compiler/translator_common.pro
+++ /dev/null
@@ -1,133 +0,0 @@
-TEMPLATE = lib
-CONFIG += static
-TARGET = $$qtLibraryTarget(translator_common)
-
-include(../config.pri)
-
-# Mingw 4.7 chokes on implicit move semantics, so disable C++11 here
-mingw: CONFIG -= c++11
-
-INCLUDEPATH += \
- $$ANGLE_DIR/src \
- $$ANGLE_DIR/include
-
-DEFINES += _SECURE_SCL=0 _LIB COMPILER_IMPLEMENTATION
-
-FLEX_SOURCES = $$ANGLE_DIR/src/compiler/glslang.l
-BISON_SOURCES = $$ANGLE_DIR/src/compiler/glslang.y
-
-HEADERS += \
- $$ANGLE_DIR/src/compiler/BaseTypes.h \
- $$ANGLE_DIR/src/compiler/BuiltInFunctionEmulator.h \
- $$ANGLE_DIR/src/compiler/Common.h \
- $$ANGLE_DIR/src/compiler/ConstantUnion.h \
- $$ANGLE_DIR/src/compiler/debug.h \
- $$ANGLE_DIR/src/compiler/DetectRecursion.h \
- $$ANGLE_DIR/src/compiler/DetectCallDepth.h \
- $$ANGLE_DIR/src/compiler/Diagnostics.h \
- $$ANGLE_DIR/src/compiler/DirectiveHandler.h \
- $$ANGLE_DIR/src/compiler/ForLoopUnroll.h \
- $$ANGLE_DIR/src/compiler/InfoSink.h \
- $$ANGLE_DIR/src/compiler/Initialize.h \
- $$ANGLE_DIR/src/compiler/InitializeDll.h \
- $$ANGLE_DIR/src/compiler/InitializeGlobals.h \
- $$ANGLE_DIR/src/compiler/InitializeGLPosition.h \
- $$ANGLE_DIR/src/compiler/InitializeParseContext.h \
- $$ANGLE_DIR/src/compiler/intermediate.h \
- $$ANGLE_DIR/src/compiler/localintermediate.h \
- $$ANGLE_DIR/src/compiler/MapLongVariableNames.h \
- $$ANGLE_DIR/src/compiler/MMap.h \
- $$ANGLE_DIR/src/compiler/osinclude.h \
- $$ANGLE_DIR/src/compiler/ParseHelper.h \
- $$ANGLE_DIR/src/compiler/PoolAlloc.h \
- $$ANGLE_DIR/src/compiler/QualifierAlive.h \
- $$ANGLE_DIR/src/compiler/RemoveTree.h \
- $$ANGLE_DIR/src/compiler/RenameFunction.h \
- $$ANGLE_DIR/include/GLSLANG/ResourceLimits.h \
- $$ANGLE_DIR/include/GLSLANG/ShaderLang.h \
- $$ANGLE_DIR/src/compiler/ShHandle.h \
- $$ANGLE_DIR/src/compiler/SymbolTable.h \
- $$ANGLE_DIR/src/compiler/Types.h \
- $$ANGLE_DIR/src/compiler/UnfoldShortCircuit.h \
- $$ANGLE_DIR/src/compiler/util.h \
- $$ANGLE_DIR/src/compiler/ValidateLimitations.h \
- $$ANGLE_DIR/src/compiler/VariableInfo.h \
- $$ANGLE_DIR/src/compiler/VariablePacker.h \
- $$ANGLE_DIR/src/compiler/timing/RestrictFragmentShaderTiming.h \
- $$ANGLE_DIR/src/compiler/timing/RestrictVertexShaderTiming.h \
- $$ANGLE_DIR/src/compiler/depgraph/DependencyGraph.h \
- $$ANGLE_DIR/src/compiler/depgraph/DependencyGraphBuilder.h \
- $$ANGLE_DIR/src/compiler/depgraph/DependencyGraphOutput.h \
- $$ANGLE_DIR/src/third_party/compiler/ArrayBoundsClamper.h
-
-SOURCES += \
- $$ANGLE_DIR/src/compiler/BuiltInFunctionEmulator.cpp \
- $$ANGLE_DIR/src/compiler/Compiler.cpp \
- $$ANGLE_DIR/src/compiler/debug.cpp \
- $$ANGLE_DIR/src/compiler/DetectCallDepth.cpp \
- $$ANGLE_DIR/src/compiler/DetectRecursion.cpp \
- $$ANGLE_DIR/src/compiler/Diagnostics.cpp \
- $$ANGLE_DIR/src/compiler/DirectiveHandler.cpp \
- $$ANGLE_DIR/src/compiler/ForLoopUnroll.cpp \
- $$ANGLE_DIR/src/compiler/InfoSink.cpp \
- $$ANGLE_DIR/src/compiler/Initialize.cpp \
- $$ANGLE_DIR/src/compiler/InitializeDll.cpp \
- $$ANGLE_DIR/src/compiler/InitializeGLPosition.cpp \
- $$ANGLE_DIR/src/compiler/InitializeParseContext.cpp \
- $$ANGLE_DIR/src/compiler/Intermediate.cpp \
- $$ANGLE_DIR/src/compiler/intermOut.cpp \
- $$ANGLE_DIR/src/compiler/IntermTraverse.cpp \
- $$ANGLE_DIR/src/compiler/MapLongVariableNames.cpp \
- $$ANGLE_DIR/src/compiler/parseConst.cpp \
- $$ANGLE_DIR/src/compiler/ParseHelper.cpp \
- $$ANGLE_DIR/src/compiler/PoolAlloc.cpp \
- $$ANGLE_DIR/src/compiler/QualifierAlive.cpp \
- $$ANGLE_DIR/src/compiler/RemoveTree.cpp \
- $$ANGLE_DIR/src/compiler/ShaderLang.cpp \
- $$ANGLE_DIR/src/compiler/SymbolTable.cpp \
- $$ANGLE_DIR/src/compiler/util.cpp \
- $$ANGLE_DIR/src/compiler/ValidateLimitations.cpp \
- $$ANGLE_DIR/src/compiler/VariableInfo.cpp \
- $$ANGLE_DIR/src/compiler/VariablePacker.cpp \
- $$ANGLE_DIR/src/compiler/depgraph/DependencyGraph.cpp \
- $$ANGLE_DIR/src/compiler/depgraph/DependencyGraphBuilder.cpp \
- $$ANGLE_DIR/src/compiler/depgraph/DependencyGraphOutput.cpp \
- $$ANGLE_DIR/src/compiler/depgraph/DependencyGraphTraverse.cpp \
- $$ANGLE_DIR/src/compiler/timing/RestrictFragmentShaderTiming.cpp \
- $$ANGLE_DIR/src/compiler/timing/RestrictVertexShaderTiming.cpp \
- $$ANGLE_DIR/src/third_party/compiler/ArrayBoundsClamper.cpp
-
-winrt {
- SOURCES += $$ANGLE_DIR/src/compiler/ossource_winrt.cpp
-} else {
- SOURCES += $$ANGLE_DIR/src/compiler/ossource_win.cpp
-}
-
-# NOTE: 'win_flex' and 'bison' can be found in qt5/gnuwin32/bin
-flex.commands = $$addGnuPath(win_flex) --noline --nounistd --outfile=${QMAKE_FILE_BASE}_lex.cpp ${QMAKE_FILE_NAME}
-flex.output = ${QMAKE_FILE_BASE}_lex.cpp
-flex.input = FLEX_SOURCES
-flex.dependency_type = TYPE_C
-flex.variable_out = GENERATED_SOURCES
-QMAKE_EXTRA_COMPILERS += flex
-
-bison.commands = $$addGnuPath(bison) --no-lines --skeleton=yacc.c --defines=${QMAKE_FILE_BASE}_tab.h \
- --output=${QMAKE_FILE_BASE}_tab.cpp ${QMAKE_FILE_NAME}
-bison.output = ${QMAKE_FILE_BASE}_tab.h
-bison.input = BISON_SOURCES
-bison.dependency_type = TYPE_C
-bison.variable_out = GENERATED_SOURCES
-QMAKE_EXTRA_COMPILERS += bison
-
-# This is a dummy compiler to work around the fact that an extra compiler can only
-# have one output file even if the command generates two.
-MAKEFILE_NOOP_COMMAND = @echo -n
-msvc: MAKEFILE_NOOP_COMMAND = @echo >NUL
-bison_impl.output = ${QMAKE_FILE_BASE}_tab.cpp
-bison_impl.input = BISON_SOURCES
-bison_impl.commands = $$MAKEFILE_NOOP_COMMAND
-bison_impl.depends = ${QMAKE_FILE_BASE}_tab.h
-bison_impl.output = ${QMAKE_FILE_BASE}_tab.cpp
-bison_impl.variable_out = GENERATED_SOURCES
-QMAKE_EXTRA_COMPILERS += bison_impl
-
diff --git a/src/angle/src/compiler/translator_hlsl.pro b/src/angle/src/compiler/translator_hlsl.pro
deleted file mode 100644
index f19d33a530..0000000000
--- a/src/angle/src/compiler/translator_hlsl.pro
+++ /dev/null
@@ -1,30 +0,0 @@
-TEMPLATE = lib
-CONFIG += static
-TARGET = $$qtLibraryTarget(translator_hlsl)
-
-include(../config.pri)
-
-# Mingw 4.7 chokes on implicit move semantics, so disable C++11 here
-mingw: CONFIG -= c++11
-
-INCLUDEPATH += $$ANGLE_DIR/src \
- $$ANGLE_DIR/include
-
-DEFINES += COMPILER_IMPLEMENTATION
-
-HEADERS += \
- $$ANGLE_DIR/src/compiler/DetectDiscontinuity.h \
- $$ANGLE_DIR/src/compiler/OutputHLSL.h \
- $$ANGLE_DIR/src/compiler/SearchSymbol.h \
- $$ANGLE_DIR/src/compiler/TranslatorHLSL.h \
- $$ANGLE_DIR/src/compiler/UnfoldShortCircuit.h \
- $$ANGLE_DIR/src/compiler/Uniform.h
-
-SOURCES += \
- $$ANGLE_DIR/src/compiler/CodeGenHLSL.cpp \
- $$ANGLE_DIR/src/compiler/DetectDiscontinuity.cpp \
- $$ANGLE_DIR/src/compiler/OutputHLSL.cpp \
- $$ANGLE_DIR/src/compiler/SearchSymbol.cpp \
- $$ANGLE_DIR/src/compiler/TranslatorHLSL.cpp \
- $$ANGLE_DIR/src/compiler/UnfoldShortCircuit.cpp \
- $$ANGLE_DIR/src/compiler/Uniform.cpp
diff --git a/src/angle/src/config.pri b/src/angle/src/config.pri
index ed2558117e..c6dbb90ec7 100644
--- a/src/angle/src/config.pri
+++ b/src/angle/src/config.pri
@@ -38,14 +38,12 @@ DEFINES += _WINDOWS \
WIN32_LEAN_AND_MEAN=1
# Defines specifying the API version (0x0600 = Vista, 0x0602 = Win8))
-winrt: DEFINES += _WIN32_WINNT=0x0602 WINVER=0x0602
-else: DEFINES += _WIN32_WINNT=0x0600 WINVER=0x0600
-
-# ANGLE specific defines
-DEFINES += ANGLE_DISABLE_TRACE \
- ANGLE_DISABLE_PERF \
- ANGLE_COMPILE_OPTIMIZATION_LEVEL=D3DCOMPILE_OPTIMIZATION_LEVEL0 \
- ANGLE_USE_NEW_PREPROCESSOR=1
+winrt {
+ DEFINES += _WIN32_WINNT=0x0602 WINVER=0x0602
+} else {
+ DEFINES += _WIN32_WINNT=0x0600 WINVER=0x0600
+ DEFINES += ANGLE_ENABLE_D3D9
+}
angle_d3d11 {
DEFINES += ANGLE_ENABLE_D3D11
diff --git a/src/angle/src/libEGL/libEGL.pro b/src/angle/src/libEGL/libEGL.pro
index f51bc8ee83..4f10583fc0 100644
--- a/src/angle/src/libEGL/libEGL.pro
+++ b/src/angle/src/libEGL/libEGL.pro
@@ -3,11 +3,11 @@ TARGET = $$qtLibraryTarget(libEGL)
include(../common/common.pri)
-angle_d3d11 {
+angle_d3d11: \
LIBS_PRIVATE += -ld3d11
-} else {
+!winrt: \
LIBS_PRIVATE += -ld3d9
-}
+
LIBS_PRIVATE += -ldxguid -L$$QT_BUILD_TREE/lib -l$$qtLibraryTarget(libGLESv2)
HEADERS += \
diff --git a/src/angle/src/libGLESv2/libGLESv2.pro b/src/angle/src/libGLESv2/libGLESv2.pro
index 75853e219e..6176016f13 100644
--- a/src/angle/src/libGLESv2/libGLESv2.pro
+++ b/src/angle/src/libGLESv2/libGLESv2.pro
@@ -7,13 +7,13 @@ include(../common/common.pri)
INCLUDEPATH += $$OUT_PWD/.. $$ANGLE_DIR/src/libGLESv2
# Remember to adapt tools/configure/configureapp.cpp if the Direct X version changes.
-angle_d3d11 {
+angle_d3d11: \
LIBS_PRIVATE += -ldxgi -ld3d11
-} else {
+!winrt: \
LIBS_PRIVATE += -ld3d9
-}
+
LIBS_PRIVATE += -ldxguid
-STATICLIBS = translator_common translator_hlsl preprocessor
+STATICLIBS = translator preprocessor
for(libname, STATICLIBS) {
# Appends 'd' to the library for debug builds and builds up the fully
@@ -93,67 +93,69 @@ SSE2_SOURCES += $$ANGLE_DIR/src/libGLESv2/renderer/ImageSSE2.cpp
angle_d3d11 {
HEADERS += \
- $$ANGLE_DIR/src/libGLESv2/renderer/BufferStorage11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Fence11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Image11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/IndexBuffer11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/InputLayoutCache.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Query11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Renderer11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/renderer11_utils.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/RenderTarget11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/RenderStateCache.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/ShaderExecutable11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/SwapChain11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/TextureStorage11.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/VertexBuffer11.h
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/BufferStorage11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Fence11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Image11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/IndexBuffer11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/InputLayoutCache.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Query11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Renderer11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/renderer11_utils.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/RenderTarget11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/RenderStateCache.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/ShaderExecutable11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/SwapChain11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/TextureStorage11.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/VertexBuffer11.h
SOURCES += \
- $$ANGLE_DIR/src/libGLESv2/renderer/BufferStorage11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Fence11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Image11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/IndexBuffer11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/InputLayoutCache.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Query11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Renderer11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/renderer11_utils.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/RenderTarget11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/RenderStateCache.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/ShaderExecutable11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/SwapChain11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/TextureStorage11.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/VertexBuffer11.cpp
-} else {
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/BufferStorage11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Fence11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Image11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/IndexBuffer11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/InputLayoutCache.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Query11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/Renderer11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/renderer11_utils.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/RenderTarget11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/RenderStateCache.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/ShaderExecutable11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/SwapChain11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/TextureStorage11.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/VertexBuffer11.cpp
+}
+
+!winrt {
HEADERS += \
- $$ANGLE_DIR/src/libGLESv2/renderer/Blit.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/BufferStorage9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Fence9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Image9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/IndexBuffer9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Query9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/Renderer9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/renderer9_utils.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/RenderTarget9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/ShaderExecutable9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/SwapChain9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/TextureStorage9.h \
- $$ANGLE_DIR/src/libGLESv2/renderer/VertexBuffer9.h
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Blit.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/BufferStorage9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Fence9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Image9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/IndexBuffer9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Query9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Renderer9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/renderer9_utils.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/RenderTarget9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/ShaderExecutable9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/SwapChain9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/TextureStorage9.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/VertexBuffer9.h
SOURCES += \
- $$ANGLE_DIR/src/libGLESv2/renderer/Blit.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/BufferStorage9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Fence9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Image9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/IndexBuffer9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Query9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/Renderer9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/renderer9_utils.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/RenderTarget9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/ShaderExecutable9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/SwapChain9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/TextureStorage9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/VertexBuffer9.cpp \
- $$ANGLE_DIR/src/libGLESv2/renderer/VertexDeclarationCache.cpp
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Blit.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/BufferStorage9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Fence9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Image9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/IndexBuffer9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Query9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/Renderer9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/renderer9_utils.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/RenderTarget9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/ShaderExecutable9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/SwapChain9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/TextureStorage9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/VertexBuffer9.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/VertexDeclarationCache.cpp
}
!static {
@@ -167,10 +169,10 @@ float_converter.commands = python $$ANGLE_DIR/src/libGLESv2/Float16ToFloat32.py
QMAKE_EXTRA_TARGETS += float_converter
# Generate the shader header files.
-PS_BLIT_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/shaders/Blit.ps
-VS_BLIT_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/shaders/Blit.vs
-PASSTHROUGH_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/shaders/Passthrough11.hlsl
-CLEAR_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/shaders/Clear11.hlsl
+PS_BLIT_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/shaders/Blit.ps
+VS_BLIT_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/d3d9/shaders/Blit.vs
+PASSTHROUGH_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/shaders/Passthrough11.hlsl
+CLEAR_INPUT = $$ANGLE_DIR/src/libGLESv2/renderer/d3d11/shaders/Clear11.hlsl
PIXEL_SHADERS_BLIT = passthroughps luminanceps componentmaskps
PIXEL_SHADERS_PASSTHROUGH = PassthroughRGBA PassthroughRGB \
PassthroughLum PassthroughLumAlpha
@@ -178,61 +180,62 @@ PIXEL_SHADERS_CLEAR = ClearSingle ClearMultiple
VERTEX_SHADERS_BLIT = standardvs flipyvs
VERTEX_SHADERS_PASSTHROUGH = Passthrough
VERTEX_SHADERS_CLEAR = Clear
-SHADER_DIR = $$OUT_PWD/renderer/shaders/compiled
+SHADER_DIR_9 = $$OUT_PWD/renderer/d3d9/shaders/compiled
+SHADER_DIR_11 = $$OUT_PWD/renderer/d3d11/shaders/compiled
for (ps, PIXEL_SHADERS_BLIT) {
fxc_ps_$${ps}.commands = $$FXC /nologo /E $$ps /T ps_2_0 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_ps_$${ps}.output = $$SHADER_DIR/$${ps}.h
+ fxc_ps_$${ps}.output = $$SHADER_DIR_9/$${ps}.h
fxc_ps_$${ps}.input = PS_BLIT_INPUT
fxc_ps_$${ps}.dependency_type = TYPE_C
fxc_ps_$${ps}.variable_out = HEADERS
fxc_ps_$${ps}.CONFIG += target_predeps
- QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
+ !winrt: QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
}
for (ps, PIXEL_SHADERS_PASSTHROUGH) {
fxc_ps_$${ps}.commands = $$FXC /nologo /E PS_$$ps /T ps_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_ps_$${ps}.output = $$SHADER_DIR/$${ps}11ps.h
+ fxc_ps_$${ps}.output = $$SHADER_DIR_11/$${ps}11ps.h
fxc_ps_$${ps}.input = PASSTHROUGH_INPUT
fxc_ps_$${ps}.dependency_type = TYPE_C
fxc_ps_$${ps}.variable_out = HEADERS
fxc_ps_$${ps}.CONFIG += target_predeps
- QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
+ angle_d3d11: QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
}
for (ps, PIXEL_SHADERS_CLEAR) {
fxc_ps_$${ps}.commands = $$FXC /nologo /E PS_$$ps /T ps_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_ps_$${ps}.output = $$SHADER_DIR/$${ps}11ps.h
+ fxc_ps_$${ps}.output = $$SHADER_DIR_11/$${ps}11ps.h
fxc_ps_$${ps}.input = CLEAR_INPUT
fxc_ps_$${ps}.dependency_type = TYPE_C
fxc_ps_$${ps}.variable_out = HEADERS
fxc_ps_$${ps}.CONFIG += target_predeps
- QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
+ angle_d3d11: QMAKE_EXTRA_COMPILERS += fxc_ps_$${ps}
}
for (vs, VERTEX_SHADERS_BLIT) {
fxc_vs_$${vs}.commands = $$FXC /nologo /E $$vs /T vs_2_0 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_vs_$${vs}.output = $$SHADER_DIR/$${vs}.h
+ fxc_vs_$${vs}.output = $$SHADER_DIR_9/$${vs}.h
fxc_vs_$${vs}.input = VS_BLIT_INPUT
fxc_vs_$${vs}.dependency_type = TYPE_C
fxc_vs_$${vs}.variable_out = HEADERS
fxc_vs_$${vs}.CONFIG += target_predeps
- QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
+ !winrt: QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
}
for (vs, VERTEX_SHADERS_PASSTHROUGH) {
fxc_vs_$${vs}.commands = $$FXC /nologo /E VS_$$vs /T vs_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_vs_$${vs}.output = $$SHADER_DIR/$${vs}11vs.h
+ fxc_vs_$${vs}.output = $$SHADER_DIR_11/$${vs}11vs.h
fxc_vs_$${vs}.input = PASSTHROUGH_INPUT
fxc_vs_$${vs}.dependency_type = TYPE_C
fxc_vs_$${vs}.variable_out = HEADERS
fxc_vs_$${vs}.CONFIG += target_predeps
- QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
+ angle_d3d11: QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
}
for (vs, VERTEX_SHADERS_CLEAR) {
fxc_vs_$${vs}.commands = $$FXC /nologo /E VS_$$vs /T vs_4_0_level_9_1 /Fh ${QMAKE_FILE_OUT} ${QMAKE_FILE_NAME}
- fxc_vs_$${vs}.output = $$SHADER_DIR/$${vs}11vs.h
+ fxc_vs_$${vs}.output = $$SHADER_DIR_11/$${vs}11vs.h
fxc_vs_$${vs}.input = CLEAR_INPUT
fxc_vs_$${vs}.dependency_type = TYPE_C
fxc_vs_$${vs}.variable_out = HEADERS
fxc_vs_$${vs}.CONFIG += target_predeps
- QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
+ angle_d3d11: QMAKE_EXTRA_COMPILERS += fxc_vs_$${vs}
}
load(qt_installs)