diff options
Diffstat (limited to 'src/angle')
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) |