summaryrefslogtreecommitdiffstats
path: root/src/angle
diff options
context:
space:
mode:
authorAndrew Knight <andrew.knight@digia.com>2014-09-25 13:22:55 +0300
committerAndrew Knight <andrew.knight@digia.com>2014-09-29 16:09:29 +0200
commit311157c3c6849e8efccd88f7594bb34c570a6780 (patch)
treea50c252b638488326529c0e69aa05e42abce7462 /src/angle
parent04d3a89e20d49a3b5015b071bfdedc81973b090c (diff)
ANGLE: Upgrade to 2.1~abce76206141
Upgrade to address issues discovered since the last upgrade. Patch notes: 0000-General-fixes-for-ANGLE-2.1.patch added removal of the unused third-party tracing functions 0003-Fix-compilation-with-MinGW-gcc-64-bit.patch removed as it is no longer needed 0011-ANGLE-Fix-compilation-error-on-MinGW-caused-by-trace.patch removed as it is no longer needed 0016-ANGLE-Fix-compilation-with-MinGW-D3D11.patch now supports MinGW 64-bit [ChangeLog][Third-party libraries] ANGLE updated to 2.1~f8602ad91e4f Task-number: QTBUG-40649 Task-number: QTBUG-40658 Task-number: QTBUG-41031 Task-number: QTBUG-41081 Task-number: QTBUG-41308 Task-number: QTBUG-41563 Change-Id: I9f776c8d5cb94ddb12d608a8d5630bfc54437bea Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com> Reviewed-by: Oliver Wolff <oliver.wolff@digia.com> Reviewed-by: Kai Koehne <kai.koehne@digia.com>
Diffstat (limited to 'src/angle')
-rw-r--r--src/angle/patches/0000-General-fixes-for-ANGLE-2.1.patch1437
-rw-r--r--src/angle/patches/0001-Fix-compilation-for-MSVC-2008-and-std-tuple.patch10
-rw-r--r--src/angle/patches/0002-Fix-compilation-of-ANGLE-with-mingw-tdm64-gcc-4.8.1.patch17
-rw-r--r--src/angle/patches/0003-Fix-compilation-with-MinGW-gcc-64-bit.patch35
-rw-r--r--src/angle/patches/0004-Make-it-possible-to-link-ANGLE-statically-for-single.patch12
-rw-r--r--src/angle/patches/0005-Fix-build-when-SSE2-is-not-available.patch18
-rw-r--r--src/angle/patches/0006-Fix-compilation-of-libGLESv2-with-older-MinGW-w64-he.patch12
-rw-r--r--src/angle/patches/0007-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch14
-rw-r--r--src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-or-t.patch24
-rw-r--r--src/angle/patches/0009-ANGLE-Support-WinRT.patch198
-rw-r--r--src/angle/patches/0010-ANGLE-Enable-D3D11-for-feature-level-9-cards.patch358
-rw-r--r--src/angle/patches/0011-ANGLE-Fix-compilation-error-on-MinGW-caused-by-trace.patch38
-rw-r--r--src/angle/patches/0012-ANGLE-fix-semantic-index-lookup.patch16
-rw-r--r--src/angle/patches/0013-ANGLE-Add-support-for-querying-platform-device.patch12
-rw-r--r--src/angle/patches/0014-Let-ANGLE-use-multithreaded-devices-if-necessary.patch26
-rw-r--r--src/angle/patches/0015-ANGLE-Fix-angle-d3d11-on-MSVC2010.patch254
-rw-r--r--src/angle/patches/0016-ANGLE-Fix-compilation-with-MinGW-D3D11.patch296
-rw-r--r--src/angle/src/common/common.pri3
-rw-r--r--src/angle/src/compiler/translator.pro8
-rw-r--r--src/angle/src/libGLESv2/libGLESv2.pro19
20 files changed, 1934 insertions, 873 deletions
diff --git a/src/angle/patches/0000-General-fixes-for-ANGLE-2.1.patch b/src/angle/patches/0000-General-fixes-for-ANGLE-2.1.patch
index 570ae63767..d5e3697c4f 100644
--- a/src/angle/patches/0000-General-fixes-for-ANGLE-2.1.patch
+++ b/src/angle/patches/0000-General-fixes-for-ANGLE-2.1.patch
@@ -1,44 +1,47 @@
-From 7597b9363748afc84d682dd9ef5bc8bc272812f3 Mon Sep 17 00:00:00 2001
+From f409f6837ce80d722eb6d2ff178b61b713d3e8c7 Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Tue, 5 Aug 2014 09:21:44 +0300
+Date: Thu, 25 Sep 2014 13:23:19 +0300
Subject: [PATCH] General fixes for ANGLE 2.1
- Fix commit.h include (use hard-coded version)
- Fix undefined intptr_t in egl.h and eglext.h
-- Fix export mismatch caused by angle_gl.h
+- Fix export mismatch in libEGL.cpp and libGLESv2.cpp
- Remove D3D9 d3dcompiler.h include requirement in the translator
- Normalize all precompiled shader names and includes
+- Remove third-party event tracing; it was hardly used in ANGLE
+ and not enabled in Qt builds anyway.
Change-Id: I22254aed62e89a26756ca0784bae95909189c0f9
---
- src/3rdparty/angle/include/EGL/egl.h | 2 +-
- src/3rdparty/angle/include/EGL/eglext.h | 2 +-
- src/3rdparty/angle/include/angle_gl.h | 3 +
- src/3rdparty/angle/src/common/platform.h | 5 +-
- src/3rdparty/angle/src/common/version.h | 2 +-
- src/3rdparty/angle/src/libEGL/Config.h | 1 -
- src/3rdparty/angle/src/libEGL/Display.cpp | 3 +-
- src/3rdparty/angle/src/libEGL/Surface.h | 1 -
- src/3rdparty/angle/src/libEGL/main.h | 1 +
- src/3rdparty/angle/src/libGLESv2/Context.h | 1 -
- src/3rdparty/angle/src/libGLESv2/formatutils.h | 2 +-
- src/3rdparty/angle/src/libGLESv2/main.h | 3 +
- src/3rdparty/angle/src/libGLESv2/precompiled.h | 1 +
- .../angle/src/libGLESv2/renderer/IndexRangeCache.h | 2 +-
- .../angle/src/libGLESv2/renderer/Renderer.h | 1 +
- .../angle/src/libGLESv2/renderer/copyimage.h | 2 +-
- .../src/libGLESv2/renderer/d3d/HLSLCompiler.cpp | 2 +
- .../src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp | 66 +++++++++++-----------
- .../src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp | 12 ++--
- .../renderer/d3d/d3d11/PixelTransfer11.cpp | 10 ++--
- .../libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp | 6 +-
- .../renderer/d3d/d3d11/shaders/Clear11.hlsl | 4 ++
- .../src/libGLESv2/renderer/d3d/d3d9/Blit9.cpp | 20 +++----
- .../src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp | 4 +-
- .../src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp | 2 +-
- .../libGLESv2/renderer/d3d/d3d9/shaders/Blit.ps | 6 +-
- .../libGLESv2/renderer/d3d/d3d9/shaders/Blit.vs | 4 +-
- 27 files changed, 92 insertions(+), 76 deletions(-)
+ src/3rdparty/angle/include/EGL/egl.h | 2 +-
+ src/3rdparty/angle/include/EGL/eglext.h | 2 +-
+ src/3rdparty/angle/src/common/event_tracer.cpp | 49 --
+ src/3rdparty/angle/src/common/event_tracer.h | 43 --
+ src/3rdparty/angle/src/common/version.h | 2 +-
+ src/3rdparty/angle/src/libEGL/libEGL.cpp | 3 +
+ src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp | 5 +
+ src/3rdparty/angle/src/libGLESv2/libGLESv2.def | 3 -
+ .../angle/src/libGLESv2/libGLESv2_mingw32.def | 3 -
+ src/3rdparty/angle/src/libGLESv2/libGLESv2d.def | 3 -
+ .../angle/src/libGLESv2/libGLESv2d_mingw32.def | 3 -
+ .../angle/src/libGLESv2/renderer/Renderer.cpp | 1 -
+ .../angle/src/libGLESv2/renderer/SwapChain.h | 4 -
+ .../src/libGLESv2/renderer/d3d/HLSLCompiler.cpp | 6 +-
+ .../src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp | 66 +-
+ .../src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp | 12 +-
+ .../renderer/d3d/d3d11/PixelTransfer11.cpp | 10 +-
+ .../libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp | 4 +-
+ .../renderer/d3d/d3d11/shaders/Clear11.hlsl | 4 +
+ .../src/libGLESv2/renderer/d3d/d3d9/Blit9.cpp | 20 +-
+ .../src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp | 12 -
+ .../libGLESv2/renderer/d3d/d3d9/shaders/Blit.ps | 6 +-
+ .../libGLESv2/renderer/d3d/d3d9/shaders/Blit.vs | 4 +-
+ .../src/third_party/trace_event/trace_event.h | 826 ---------------------
+ src/angle/src/common/common.pri | 2 -
+ 25 files changed, 80 insertions(+), 1015 deletions(-)
+ delete mode 100644 src/3rdparty/angle/src/common/event_tracer.cpp
+ delete mode 100644 src/3rdparty/angle/src/common/event_tracer.h
+ delete mode 100644 src/3rdparty/angle/src/third_party/trace_event/trace_event.h
diff --git a/src/3rdparty/angle/include/EGL/egl.h b/src/3rdparty/angle/include/EGL/egl.h
index 12590a0..ab2f0cd 100644
@@ -66,43 +69,110 @@ index 9e29605..989359b 100644
typedef EGLSyncKHR (EGLAPIENTRYP PFNEGLCREATESYNC64KHRPROC) (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
#ifdef EGL_EGLEXT_PROTOTYPES
EGLAPI EGLSyncKHR EGLAPIENTRY eglCreateSync64KHR (EGLDisplay dpy, EGLenum type, const EGLAttribKHR *attrib_list);
-diff --git a/src/3rdparty/angle/include/angle_gl.h b/src/3rdparty/angle/include/angle_gl.h
-index d093f75..663aa25 100644
---- a/src/3rdparty/angle/include/angle_gl.h
-+++ b/src/3rdparty/angle/include/angle_gl.h
-@@ -10,6 +10,9 @@
- #ifndef ANGLE_GL_H_
- #define ANGLE_GL_H_
-
-+#define GL_GLEXT_PROTOTYPES
-+#define GL_APICALL
-+
- #include "GLES2/gl2.h"
- #include "GLES2/gl2ext.h"
- #include "GLES3/gl3.h"
-diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h
-index d07297d..aa0b985 100644
---- a/src/3rdparty/angle/src/common/platform.h
-+++ b/src/3rdparty/angle/src/common/platform.h
-@@ -49,7 +49,6 @@
-
- # if defined(ANGLE_ENABLE_D3D9) || defined(ANGLE_ENABLE_PERF)
- # include <d3d9.h>
--# include <d3dcompiler.h>
- # endif
-
- # if defined(ANGLE_ENABLE_D3D11)
-@@ -62,6 +61,10 @@
-
- # undef near
- # undef far
-+# undef NEAR
-+# define NEAR
-+# undef FAR
-+# define FAR
- #endif
-
- #endif // COMMON_PLATFORM_H_
+diff --git a/src/3rdparty/angle/src/common/event_tracer.cpp b/src/3rdparty/angle/src/common/event_tracer.cpp
+deleted file mode 100644
+index 353c69d..0000000
+--- a/src/3rdparty/angle/src/common/event_tracer.cpp
++++ /dev/null
+@@ -1,49 +0,0 @@
+-// 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
+-// found in the LICENSE file.
+-
+-#include "common/event_tracer.h"
+-
+-namespace gl
+-{
+-
+-GetCategoryEnabledFlagFunc g_getCategoryEnabledFlag;
+-AddTraceEventFunc g_addTraceEvent;
+-
+-} // namespace gl
+-
+-extern "C" {
+-
+-void TRACE_ENTRY SetTraceFunctionPointers(GetCategoryEnabledFlagFunc getCategoryEnabledFlag,
+- AddTraceEventFunc addTraceEvent)
+-{
+- gl::g_getCategoryEnabledFlag = getCategoryEnabledFlag;
+- gl::g_addTraceEvent = addTraceEvent;
+-}
+-
+-} // extern "C"
+-
+-namespace gl
+-{
+-
+-const unsigned char* TraceGetTraceCategoryEnabledFlag(const char* name)
+-{
+- if (g_getCategoryEnabledFlag)
+- {
+- return g_getCategoryEnabledFlag(name);
+- }
+- static unsigned char disabled = 0;
+- return &disabled;
+-}
+-
+-void TraceAddTraceEvent(char phase, const unsigned char* categoryGroupEnabled, const char* name, unsigned long long id,
+- int numArgs, const char** argNames, const unsigned char* argTypes,
+- const unsigned long long* argValues, unsigned char flags)
+-{
+- if (g_addTraceEvent)
+- {
+- g_addTraceEvent(phase, categoryGroupEnabled, name, id, numArgs, argNames, argTypes, argValues, flags);
+- }
+-}
+-
+-} // namespace gl
+diff --git a/src/3rdparty/angle/src/common/event_tracer.h b/src/3rdparty/angle/src/common/event_tracer.h
+deleted file mode 100644
+index fa97435..0000000
+--- a/src/3rdparty/angle/src/common/event_tracer.h
++++ /dev/null
+@@ -1,43 +0,0 @@
+-// 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
+-// found in the LICENSE file.
+-
+-#ifndef COMMON_EVENT_TRACER_H_
+-#define COMMON_EVENT_TRACER_H_
+-
+-#include "common/platform.h"
+-
+-#if !defined(TRACE_ENTRY)
+-# ifdef ANGLE_PLATFORM_WINDOWS
+-# define TRACE_ENTRY __stdcall
+-# else
+-# define TRACE_ENTRY
+-# endif // ANGLE_PLATFORM_WINDOWS
+-#endif //TRACE_ENTRY
+-
+-extern "C" {
+-
+-typedef const unsigned char* (*GetCategoryEnabledFlagFunc)(const char* name);
+-typedef void (*AddTraceEventFunc)(char phase, const unsigned char* categoryGroupEnabled, const char* name,
+- unsigned long long id, int numArgs, const char** argNames,
+- const unsigned char* argTypes, const unsigned long long* argValues,
+- unsigned char flags);
+-
+-// extern "C" so that it has a reasonable name for GetProcAddress.
+-void TRACE_ENTRY SetTraceFunctionPointers(GetCategoryEnabledFlagFunc get_category_enabled_flag,
+- AddTraceEventFunc add_trace_event_func);
+-
+-}
+-
+-namespace gl
+-{
+-
+-const unsigned char* TraceGetTraceCategoryEnabledFlag(const char* name);
+-
+-void TraceAddTraceEvent(char phase, const unsigned char* categoryGroupEnabled, const char* name, unsigned long long id,
+- int numArgs, const char** argNames, const unsigned char* argTypes,
+- const unsigned long long* argValues, unsigned char flags);
+-
+-}
+-
+-#endif // COMMON_EVENT_TRACER_H_
diff --git a/src/3rdparty/angle/src/common/version.h b/src/3rdparty/angle/src/common/version.h
index d9148d1..f01e024 100644
--- a/src/3rdparty/angle/src/common/version.h
@@ -113,163 +183,146 @@ index d9148d1..f01e024 100644
#define ANGLE_MAJOR_VERSION 2
#define ANGLE_MINOR_VERSION 1
-diff --git a/src/3rdparty/angle/src/libEGL/Config.h b/src/3rdparty/angle/src/libEGL/Config.h
-index 680337b..9844114 100644
---- a/src/3rdparty/angle/src/libEGL/Config.h
-+++ b/src/3rdparty/angle/src/libEGL/Config.h
-@@ -11,7 +11,6 @@
- #ifndef INCLUDE_CONFIG_H_
- #define INCLUDE_CONFIG_H_
-
--#define EGLAPI
- #include <EGL/egl.h>
+diff --git a/src/3rdparty/angle/src/libEGL/libEGL.cpp b/src/3rdparty/angle/src/libEGL/libEGL.cpp
+index f9a4780..7ce2b93 100644
+--- a/src/3rdparty/angle/src/libEGL/libEGL.cpp
++++ b/src/3rdparty/angle/src/libEGL/libEGL.cpp
+@@ -6,6 +6,9 @@
- #include <set>
-diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
-index 43d9b26..459648c 100644
---- a/src/3rdparty/angle/src/libEGL/Display.cpp
-+++ b/src/3rdparty/angle/src/libEGL/Display.cpp
-@@ -14,6 +14,7 @@
- #include <map>
- #include <vector>
- #include <sstream>
-+#include <iterator>
+ // libEGL.cpp: Implements the exported EGL functions.
+
++#undef EGLAPI
++#define EGLAPI
++
+ #include <exception>
#include "common/debug.h"
- #include "common/mathutil.h"
-@@ -552,7 +553,7 @@ void Display::initDisplayExtensionString()
- }
+diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
+index 198c0ee..07f5d47 100644
+--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2.cpp
+@@ -6,6 +6,10 @@
- // TODO: complete support for the EGL_KHR_create_context extension
-- extensions.push_back("EGL_KHR_create_context");
-+ //extensions.push_back("EGL_KHR_create_context");
-
- std::ostringstream stream;
- std::copy(extensions.begin(), extensions.end(), std::ostream_iterator<std::string>(stream, " "));
-diff --git a/src/3rdparty/angle/src/libEGL/Surface.h b/src/3rdparty/angle/src/libEGL/Surface.h
-index 2361fcd..3caf620 100644
---- a/src/3rdparty/angle/src/libEGL/Surface.h
-+++ b/src/3rdparty/angle/src/libEGL/Surface.h
-@@ -11,7 +11,6 @@
- #ifndef LIBEGL_SURFACE_H_
- #define LIBEGL_SURFACE_H_
-
--#define EGLAPI
- #include <EGL/egl.h>
+ // libGLESv2.cpp: Implements the exported OpenGL ES 2.0 functions.
- #include "common/angleutils.h"
-diff --git a/src/3rdparty/angle/src/libEGL/main.h b/src/3rdparty/angle/src/libEGL/main.h
-index 77da8f0..6030fb6 100644
---- a/src/3rdparty/angle/src/libEGL/main.h
-+++ b/src/3rdparty/angle/src/libEGL/main.h
-@@ -9,6 +9,7 @@
- #ifndef LIBEGL_MAIN_H_
- #define LIBEGL_MAIN_H_
++#undef GL_APICALL
++#define GL_APICALL
++#define GL_GLEXT_PROTOTYPES
++
+ #include "common/version.h"
+ #include "common/utilities.h"
-+#undef EGLAPI
- #define EGLAPI
- #include <EGL/egl.h>
- #include <EGL/eglext.h>
-diff --git a/src/3rdparty/angle/src/libGLESv2/Context.h b/src/3rdparty/angle/src/libGLESv2/Context.h
-index 4b7e59e..6c93c74 100644
---- a/src/3rdparty/angle/src/libGLESv2/Context.h
-+++ b/src/3rdparty/angle/src/libGLESv2/Context.h
-@@ -11,7 +11,6 @@
- #define LIBGLESV2_CONTEXT_H_
-
- #include "angle_gl.h"
--#include <EGL/egl.h>
-
- #include <string>
- #include <set>
-diff --git a/src/3rdparty/angle/src/libGLESv2/formatutils.h b/src/3rdparty/angle/src/libGLESv2/formatutils.h
-index fb4d2a3..2f59279 100644
---- a/src/3rdparty/angle/src/libGLESv2/formatutils.h
-+++ b/src/3rdparty/angle/src/libGLESv2/formatutils.h
-@@ -85,4 +85,4 @@ ColorWriteFunction GetColorWriteFunction(GLenum format, GLenum type);
+@@ -30,6 +34,7 @@
+ #include "libGLESv2/validationES3.h"
+ #include "libGLESv2/queryconversions.h"
- }
++
+ extern "C"
+ {
--#endif LIBGLESV2_FORMATUTILS_H_
-+#endif // LIBGLESV2_FORMATUTILS_H_
-diff --git a/src/3rdparty/angle/src/libGLESv2/main.h b/src/3rdparty/angle/src/libGLESv2/main.h
-index 372b03f..c117039 100644
---- a/src/3rdparty/angle/src/libGLESv2/main.h
-+++ b/src/3rdparty/angle/src/libGLESv2/main.h
-@@ -10,6 +10,9 @@
- #define LIBGLESV2_MAIN_H_
+diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2.def
+index 88dceb3..33557eb 100644
+--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2.def
++++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2.def
+@@ -294,6 +294,3 @@ EXPORTS
+ glBindTexImage @158 NONAME
+ glCreateRenderer @177 NONAME
+ glDestroyRenderer @178 NONAME
+-
+- ; Setting up TRACE macro callbacks
+- SetTraceFunctionPointers @284
+diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def
+index d6272c4d..18ffcf6 100644
+--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def
++++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2_mingw32.def
+@@ -294,6 +294,3 @@ EXPORTS
+ glBindTexImage@4 @158 NONAME
+ glCreateRenderer @177 NONAME
+ glDestroyRenderer @178 NONAME
+-
+- ; Setting up TRACE macro callbacks
+- SetTraceFunctionPointers@8 @284
+diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def
+index d301aa0..120371e 100644
+--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def
++++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2d.def
+@@ -294,6 +294,3 @@ EXPORTS
+ glBindTexImage @158 NONAME
+ glCreateRenderer @177 NONAME
+ glDestroyRenderer @178 NONAME
+-
+- ; Setting up TRACE macro callbacks
+- SetTraceFunctionPointers @284
+diff --git a/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def b/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def
+index a82d629..8c1306a 100644
+--- a/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def
++++ b/src/3rdparty/angle/src/libGLESv2/libGLESv2d_mingw32.def
+@@ -294,6 +294,3 @@ EXPORTS
+ glBindTexImage@4 @158 NONAME
+ glCreateRenderer @177 NONAME
+ glDestroyRenderer @178 NONAME
+-
+- ; Setting up TRACE macro callbacks
+- SetTraceFunctionPointers@8 @284
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+index df43012..910d028 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+@@ -10,7 +10,6 @@
+ #include "libGLESv2/Program.h"
+ #include "libGLESv2/renderer/Renderer.h"
+ #include "common/utilities.h"
+-#include "third_party/trace_event/trace_event.h"
+ #include "libGLESv2/Shader.h"
- #include "common/debug.h"
-+#undef EGLAPI
-+#define EGLAPI
-+#include <EGL/egl.h>
+ #if defined (ANGLE_ENABLE_D3D9)
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
+index c53b2af..12be9b3 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
+@@ -16,10 +16,6 @@
+ #include <GLES2/gl2.h>
+ #include <EGL/egl.h>
- namespace egl
+-#if !defined(ANGLE_FORCE_VSYNC_OFF)
+-#define ANGLE_FORCE_VSYNC_OFF 0
+-#endif
+-
+ namespace rx
{
-diff --git a/src/3rdparty/angle/src/libGLESv2/precompiled.h b/src/3rdparty/angle/src/libGLESv2/precompiled.h
-index cc935a1..0404eab 100644
---- a/src/3rdparty/angle/src/libGLESv2/precompiled.h
-+++ b/src/3rdparty/angle/src/libGLESv2/precompiled.h
-@@ -29,3 +29,4 @@
- #include <string>
- #include <unordered_map>
- #include <vector>
-+#include <iterator>
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.h b/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.h
-index 4318e2b..837a44a 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/IndexRangeCache.h
-@@ -56,4 +56,4 @@ class IndexRangeCache
-
- }
--#endif LIBGLESV2_RENDERER_INDEXRANGECACHE_H
-+#endif // LIBGLESV2_RENDERER_INDEXRANGECACHE_H
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
-index f1c7b49..be3ba29 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
-@@ -15,6 +15,7 @@
- #include "libGLESv2/Caps.h"
-
- #if !defined(ANGLE_COMPILE_OPTIMIZATION_LEVEL)
-+#include <d3dcompiler.h>
- // WARNING: D3DCOMPILE_OPTIMIZATION_LEVEL3 may lead to a DX9 shader compiler hang.
- // It should only be used selectively to work around specific bugs.
- #define ANGLE_COMPILE_OPTIMIZATION_LEVEL D3DCOMPILE_OPTIMIZATION_LEVEL1
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.h b/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.h
-index 2f37e1c..9b94404 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.h
-@@ -30,7 +30,7 @@ void WriteColor(const void *source, void *dest)
- template <typename sourceType, typename destType, typename colorDataType>
- void CopyPixel(const void *source, void *dest)
- {
-- colorType temp;
-+ colorDataType temp;
- ReadColor<sourceType, colorDataType>(source, &temp);
- WriteColor<destType, colorDataType>(&temp, dest);
- }
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-index 5613919..499ed52 100644
+index df2e46c..acbd852 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-@@ -7,6 +7,8 @@
+@@ -10,8 +10,6 @@
- #include "third_party/trace_event/trace_event.h"
+ #include "common/utilities.h"
-+#include <d3dcompiler.h>
-+
+-#include "third_party/trace_event/trace_event.h"
+-
namespace rx
{
+@@ -28,7 +26,11 @@ HLSLCompiler::~HLSLCompiler()
+
+ bool HLSLCompiler::initialize()
+ {
++<<<<<<< HEAD
+ TRACE_EVENT0("gpu", "initializeCompiler");
++=======
++#if !defined(ANGLE_PLATFORM_WINRT)
++>>>>>>> 429814a... ANGLE: remove event tracing
+ #if defined(ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES)
+ // Find a D3DCompiler module that had already been loaded based on a predefined list of versions.
+ static const char *d3dCompilerNames[] = ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp
-index 446149c..79a6543 100644
+index 3bdb9e7..72820a4 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp
-@@ -14,39 +14,39 @@
- #include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
- #include "libGLESv2/renderer/d3d/d3d11/formatutils11.h"
+@@ -13,39 +13,39 @@
+ #include "libGLESv2/main.h"
+ #include "libGLESv2/formatutils.h"
-#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/passthrough2d11vs.h"
-#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/passthroughdepth2d11ps.h"
@@ -341,13 +394,13 @@ index 446149c..79a6543 100644
#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/swizzlef2dps.h"
#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/swizzlei2dps.h"
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
-index 656cd94..9cd0b7d 100644
+index c60b7a6..5caa427 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
-@@ -16,14 +16,14 @@
- #include "libGLESv2/Framebuffer.h"
+@@ -15,14 +15,14 @@
#include "libGLESv2/FramebufferAttachment.h"
+ // Precompiled shaders
-#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/clearfloat11vs.h"
-#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/clearfloat11ps.h"
+#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/clearfloatvs.h"
@@ -366,10 +419,10 @@ index 656cd94..9cd0b7d 100644
namespace rx
{
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp
-index 1ca456c..67540bb 100644
+index f54bacc..edaafec 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp
-@@ -23,11 +23,11 @@
+@@ -22,11 +22,11 @@
#include "libGLESv2/Context.h"
// Precompiled shaders
@@ -387,13 +440,13 @@ index 1ca456c..67540bb 100644
namespace rx
{
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
-index ed0c4ae..98166f0 100644
+index 5ec132e..50dae4e 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
@@ -12,8 +12,8 @@
- #include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
- #include "libGLESv2/renderer/d3d/d3d11/formatutils11.h"
#include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
+
+ // Precompiled shaders
-#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/passthrough2d11vs.h"
-#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/passthroughrgba2d11ps.h"
+#include "libGLESv2/renderer/d3d/d3d11/shaders/compiled/passthrough2dvs.h"
@@ -401,15 +454,6 @@ index ed0c4ae..98166f0 100644
namespace rx
{
-@@ -584,7 +584,7 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
- // Draw
- deviceContext->Draw(4, 0);
-
--#ifdef ANGLE_FORCE_VSYNC_OFF
-+#if ANGLE_FORCE_VSYNC_OFF
- result = mSwapChain->Present(0, 0);
- #else
- result = mSwapChain->Present(mSwapInterval, 0);
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/shaders/Clear11.hlsl b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/shaders/Clear11.hlsl
index 6deef2b..b4cf380 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/shaders/Clear11.hlsl
@@ -441,10 +485,10 @@ index 6deef2b..b4cf380 100644
}
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Blit9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Blit9.cpp
-index 2d72729..f486e5a 100644
+index 80503d5..f061a32 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Blit9.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Blit9.cpp
-@@ -28,20 +28,20 @@ namespace
+@@ -27,20 +27,20 @@ namespace
const BYTE* const g_shaderCode[] =
{
@@ -476,40 +520,95 @@ index 2d72729..f486e5a 100644
}
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
-index 69c3feb..491c27a 100644
+index 73c1abc..e8564bd 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
-@@ -205,7 +205,7 @@ EGLint Renderer9::initialize()
+@@ -39,8 +39,6 @@
+
+ #include "common/utilities.h"
+
+-#include "third_party/trace_event/trace_event.h"
+-
+ #include <sstream>
+
+ // Can also be enabled by defining FORCE_REF_RAST in the project's predefined macros
+@@ -190,7 +188,6 @@ EGLint Renderer9::initialize()
+ return EGL_NOT_INITIALIZED;
+ }
+
+- TRACE_EVENT0("gpu", "GetModuleHandle_d3d9");
+ mD3d9Module = GetModuleHandle(TEXT("d3d9.dll"));
+
+ if (mD3d9Module == NULL)
+@@ -207,14 +204,12 @@ EGLint Renderer9::initialize()
+ // desktop. Direct3D9Ex is available in Windows Vista and later if suitable drivers are available.
+ if (ANGLE_ENABLE_D3D9EX && Direct3DCreate9ExPtr && SUCCEEDED(Direct3DCreate9ExPtr(D3D_SDK_VERSION, &mD3d9Ex)))
{
- TRACE_EVENT0("gpu", "D3d9Ex_QueryInterface");
+- TRACE_EVENT0("gpu", "D3d9Ex_QueryInterface");
ASSERT(mD3d9Ex);
-- mD3d9Ex->QueryInterface(__uuidof(IDirect3D9), reinterpret_cast<void**>(&mD3d9));
-+ mD3d9Ex->QueryInterface(IID_IDirect3D9, reinterpret_cast<void**>(&mD3d9));
+ mD3d9Ex->QueryInterface(__uuidof(IDirect3D9), reinterpret_cast<void**>(&mD3d9));
ASSERT(mD3d9);
}
else
-@@ -343,7 +343,7 @@ EGLint Renderer9::initialize()
+ {
+- TRACE_EVENT0("gpu", "Direct3DCreate9");
+ mD3d9 = Direct3DCreate9(D3D_SDK_VERSION);
+ }
+
+@@ -233,7 +228,6 @@ EGLint Renderer9::initialize()
+
+ // Give up on getting device caps after about one second.
+ {
+- TRACE_EVENT0("gpu", "GetDeviceCaps");
+ for (int i = 0; i < 10; ++i)
+ {
+ result = mD3d9->GetDeviceCaps(mAdapter, mDeviceType, &mDeviceCaps);
+@@ -268,7 +262,6 @@ EGLint Renderer9::initialize()
+ }
+
+ {
+- TRACE_EVENT0("gpu", "GetAdapterIdentifier");
+ mD3d9->GetAdapterIdentifier(mAdapter, 0, &mAdapterIdentifier);
+ }
+
+@@ -305,7 +298,6 @@ EGLint Renderer9::initialize()
+ static const TCHAR className[] = TEXT("STATIC");
+
+ {
+- TRACE_EVENT0("gpu", "CreateWindowEx");
+ mDeviceWindow = CreateWindowEx(WS_EX_NOACTIVATE, className, windowName, WS_DISABLED | WS_POPUP, 0, 0, 1, 1, HWND_MESSAGE, NULL, GetModuleHandle(NULL), NULL);
+ }
+
+@@ -313,7 +305,6 @@ EGLint Renderer9::initialize()
+ DWORD behaviorFlags = D3DCREATE_FPU_PRESERVE | D3DCREATE_NOWINDOWCHANGES;
+
+ {
+- TRACE_EVENT0("gpu", "D3d9_CreateDevice");
+ result = mD3d9->CreateDevice(mAdapter, mDeviceType, mDeviceWindow, behaviorFlags | D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, &presentParameters, &mDevice);
+ }
+ if (result == D3DERR_OUTOFVIDEOMEMORY || result == E_OUTOFMEMORY || result == D3DERR_DEVICELOST)
+@@ -323,7 +314,6 @@ EGLint Renderer9::initialize()
+
+ if (FAILED(result))
+ {
+- TRACE_EVENT0("gpu", "D3d9_CreateDevice2");
+ result = mD3d9->CreateDevice(mAdapter, mDeviceType, mDeviceWindow, behaviorFlags | D3DCREATE_SOFTWARE_VERTEXPROCESSING, &presentParameters, &mDevice);
+
+ if (FAILED(result))
+@@ -335,13 +325,11 @@ EGLint Renderer9::initialize()
+
if (mD3d9Ex)
{
- TRACE_EVENT0("gpu", "mDevice_QueryInterface");
-- result = mDevice->QueryInterface(__uuidof(IDirect3DDevice9Ex), (void**)&mDeviceEx);
-+ result = mDevice->QueryInterface(IID_IDirect3DDevice9Ex, (void**)&mDeviceEx);
+- TRACE_EVENT0("gpu", "mDevice_QueryInterface");
+ result = mDevice->QueryInterface(__uuidof(IDirect3DDevice9Ex), (void**)&mDeviceEx);
ASSERT(SUCCEEDED(result));
}
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp
-index aef80a7..4a17acf 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp
-@@ -50,7 +50,7 @@ void SwapChain9::release()
-
- static DWORD convertInterval(EGLint interval)
- {
--#ifdef ANGLE_FORCE_VSYNC_OFF
-+#if ANGLE_FORCE_VSYNC_OFF
- return D3DPRESENT_INTERVAL_IMMEDIATE;
- #else
- switch(interval)
+ {
+- TRACE_EVENT0("gpu", "ShaderCache initialize");
+ mVertexShaderCache.initialize(mDevice);
+ mPixelShaderCache.initialize(mDevice);
+ }
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/shaders/Blit.ps b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/shaders/Blit.ps
index dc357d0..eb43eb3 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/shaders/Blit.ps
@@ -563,6 +662,858 @@ index 3a36980..3bd611b 100644
{
VS_OUTPUT Out;
+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
+deleted file mode 100644
+index 1880056..0000000
+--- a/src/3rdparty/angle/src/third_party/trace_event/trace_event.h
++++ /dev/null
+@@ -1,826 +0,0 @@
+-// Copyright (c) 2013 The Chromium Authors. All rights reserved.
+-// Use of this source code is governed by a BSD-style license that can be
+-// found in the LICENSE file.
+-
+-// Trace events are for tracking application performance and resource usage.
+-// Macros are provided to track:
+-// Begin and end of function calls
+-// Counters
+-//
+-// Events are issued against categories. Whereas LOG's
+-// categories are statically defined, TRACE categories are created
+-// implicitly with a string. For example:
+-// TRACE_EVENT_INSTANT0("MY_SUBSYSTEM", "SomeImportantEvent")
+-//
+-// Events can be INSTANT, or can be pairs of BEGIN and END in the same scope:
+-// TRACE_EVENT_BEGIN0("MY_SUBSYSTEM", "SomethingCostly")
+-// doSomethingCostly()
+-// TRACE_EVENT_END0("MY_SUBSYSTEM", "SomethingCostly")
+-// Note: our tools can't always determine the correct BEGIN/END pairs unless
+-// these are used in the same scope. Use ASYNC_BEGIN/ASYNC_END macros if you need them
+-// to be in separate scopes.
+-//
+-// A common use case is to trace entire function scopes. This
+-// issues a trace BEGIN and END automatically:
+-// void doSomethingCostly() {
+-// TRACE_EVENT0("MY_SUBSYSTEM", "doSomethingCostly");
+-// ...
+-// }
+-//
+-// Additional parameters can be associated with an event:
+-// void doSomethingCostly2(int howMuch) {
+-// TRACE_EVENT1("MY_SUBSYSTEM", "doSomethingCostly",
+-// "howMuch", howMuch);
+-// ...
+-// }
+-//
+-// The trace system will automatically add to this information the
+-// current process id, thread id, and a timestamp in microseconds.
+-//
+-// To trace an asynchronous procedure such as an IPC send/receive, use ASYNC_BEGIN and
+-// ASYNC_END:
+-// [single threaded sender code]
+-// static int send_count = 0;
+-// ++send_count;
+-// TRACE_EVENT_ASYNC_BEGIN0("ipc", "message", send_count);
+-// Send(new MyMessage(send_count));
+-// [receive code]
+-// void OnMyMessage(send_count) {
+-// TRACE_EVENT_ASYNC_END0("ipc", "message", send_count);
+-// }
+-// The third parameter is a unique ID to match ASYNC_BEGIN/ASYNC_END pairs.
+-// ASYNC_BEGIN and ASYNC_END can occur on any thread of any traced process. Pointers can
+-// be used for the ID parameter, and they will be mangled internally so that
+-// the same pointer on two different processes will not match. For example:
+-// class MyTracedClass {
+-// public:
+-// MyTracedClass() {
+-// TRACE_EVENT_ASYNC_BEGIN0("category", "MyTracedClass", this);
+-// }
+-// ~MyTracedClass() {
+-// TRACE_EVENT_ASYNC_END0("category", "MyTracedClass", this);
+-// }
+-// }
+-//
+-// Trace event also supports counters, which is a way to track a quantity
+-// as it varies over time. Counters are created with the following macro:
+-// TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter", g_myCounterValue);
+-//
+-// Counters are process-specific. The macro itself can be issued from any
+-// thread, however.
+-//
+-// Sometimes, you want to track two counters at once. You can do this with two
+-// counter macros:
+-// TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter0", g_myCounterValue[0]);
+-// TRACE_COUNTER1("MY_SUBSYSTEM", "myCounter1", g_myCounterValue[1]);
+-// Or you can do it with a combined macro:
+-// TRACE_COUNTER2("MY_SUBSYSTEM", "myCounter",
+-// "bytesPinned", g_myCounterValue[0],
+-// "bytesAllocated", g_myCounterValue[1]);
+-// This indicates to the tracing UI that these counters should be displayed
+-// in a single graph, as a summed area chart.
+-//
+-// Since counters are in a global namespace, you may want to disembiguate with a
+-// unique ID, by using the TRACE_COUNTER_ID* variations.
+-//
+-// By default, trace collection is compiled in, but turned off at runtime.
+-// Collecting trace data is the responsibility of the embedding
+-// application. In Chrome's case, navigating to about:tracing will turn on
+-// tracing and display data collected across all active processes.
+-//
+-//
+-// Memory scoping note:
+-// Tracing copies the pointers, not the string content, of the strings passed
+-// in for category, name, and arg_names. Thus, the following code will
+-// cause problems:
+-// char* str = strdup("impprtantName");
+-// TRACE_EVENT_INSTANT0("SUBSYSTEM", str); // BAD!
+-// free(str); // Trace system now has dangling pointer
+-//
+-// To avoid this issue with the |name| and |arg_name| parameters, use the
+-// TRACE_EVENT_COPY_XXX overloads of the macros at additional runtime overhead.
+-// Notes: The category must always be in a long-lived char* (i.e. static const).
+-// The |arg_values|, when used, are always deep copied with the _COPY
+-// macros.
+-//
+-// When are string argument values copied:
+-// const char* arg_values are only referenced by default:
+-// TRACE_EVENT1("category", "name",
+-// "arg1", "literal string is only referenced");
+-// Use TRACE_STR_COPY to force copying of a const char*:
+-// TRACE_EVENT1("category", "name",
+-// "arg1", TRACE_STR_COPY("string will be copied"));
+-// std::string arg_values are always copied:
+-// TRACE_EVENT1("category", "name",
+-// "arg1", std::string("string will be copied"));
+-//
+-//
+-// Thread Safety:
+-// A thread safe singleton and mutex are used for thread safety. Category
+-// enabled flags are used to limit the performance impact when the system
+-// is not enabled.
+-//
+-// TRACE_EVENT macros first cache a pointer to a category. The categories are
+-// statically allocated and safe at all times, even after exit. Fetching a
+-// category is protected by the TraceLog::lock_. Multiple threads initializing
+-// the static variable is safe, as they will be serialized by the lock and
+-// multiple calls will return the same pointer to the category.
+-//
+-// Then the category_enabled flag is checked. This is a unsigned char, and
+-// not intended to be multithread safe. It optimizes access to addTraceEvent
+-// which is threadsafe internally via TraceLog::lock_. The enabled flag may
+-// cause some threads to incorrectly call or skip calling addTraceEvent near
+-// the time of the system being enabled or disabled. This is acceptable as
+-// we tolerate some data loss while the system is being enabled/disabled and
+-// because addTraceEvent is threadsafe internally and checks the enabled state
+-// again under lock.
+-//
+-// Without the use of these static category pointers and enabled flags all
+-// trace points would carry a significant performance cost of aquiring a lock
+-// and resolving the category.
+-
+-#ifndef COMMON_TRACE_EVENT_H_
+-#define COMMON_TRACE_EVENT_H_
+-
+-#include <string>
+-
+-#include "common/event_tracer.h"
+-
+-// By default, const char* argument values are assumed to have long-lived scope
+-// and will not be copied. Use this macro to force a const char* to be copied.
+-#define TRACE_STR_COPY(str) \
+- WebCore::TraceEvent::TraceStringWithCopy(str)
+-
+-// Records a pair of begin and end events called "name" for the current
+-// scope, with 0, 1 or 2 associated arguments. If the category is not
+-// enabled, then this does nothing.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-#define TRACE_EVENT0(category, name) \
+- INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name)
+-#define TRACE_EVENT1(category, name, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, arg1_name, arg1_val)
+-#define TRACE_EVENT2(category, name, arg1_name, arg1_val, arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, arg1_name, arg1_val, \
+- arg2_name, arg2_val)
+-
+-// Records a single event called "name" immediately, with 0, 1 or 2
+-// associated arguments. If the category is not enabled, then this
+-// does nothing.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-#define TRACE_EVENT_INSTANT0(category, name) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \
+- category, name, TRACE_EVENT_FLAG_NONE)
+-#define TRACE_EVENT_INSTANT1(category, name, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \
+- category, name, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val)
+-#define TRACE_EVENT_INSTANT2(category, name, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \
+- category, name, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \
+- arg2_name, arg2_val)
+-#define TRACE_EVENT_COPY_INSTANT0(category, name) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \
+- category, name, TRACE_EVENT_FLAG_COPY)
+-#define TRACE_EVENT_COPY_INSTANT1(category, name, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \
+- category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val)
+-#define TRACE_EVENT_COPY_INSTANT2(category, name, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_INSTANT, \
+- category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \
+- arg2_name, arg2_val)
+-
+-// Records a single BEGIN event called "name" immediately, with 0, 1 or 2
+-// associated arguments. If the category is not enabled, then this
+-// does nothing.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-#define TRACE_EVENT_BEGIN0(category, name) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \
+- category, name, TRACE_EVENT_FLAG_NONE)
+-#define TRACE_EVENT_BEGIN1(category, name, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \
+- category, name, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val)
+-#define TRACE_EVENT_BEGIN2(category, name, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \
+- category, name, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \
+- arg2_name, arg2_val)
+-#define TRACE_EVENT_COPY_BEGIN0(category, name) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \
+- category, name, TRACE_EVENT_FLAG_COPY)
+-#define TRACE_EVENT_COPY_BEGIN1(category, name, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \
+- category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val)
+-#define TRACE_EVENT_COPY_BEGIN2(category, name, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_BEGIN, \
+- category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \
+- arg2_name, arg2_val)
+-
+-// Records a single END event for "name" immediately. If the category
+-// is not enabled, then this does nothing.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-#define TRACE_EVENT_END0(category, name) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
+- category, name, TRACE_EVENT_FLAG_NONE)
+-#define TRACE_EVENT_END1(category, name, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
+- category, name, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val)
+-#define TRACE_EVENT_END2(category, name, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
+- category, name, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \
+- arg2_name, arg2_val)
+-#define TRACE_EVENT_COPY_END0(category, name) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
+- category, name, TRACE_EVENT_FLAG_COPY)
+-#define TRACE_EVENT_COPY_END1(category, name, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
+- category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val)
+-#define TRACE_EVENT_COPY_END2(category, name, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_END, \
+- category, name, TRACE_EVENT_FLAG_COPY, arg1_name, arg1_val, \
+- arg2_name, arg2_val)
+-
+-// Records the value of a counter called "name" immediately. Value
+-// must be representable as a 32 bit integer.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-#define TRACE_COUNTER1(category, name, value) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, TRACE_EVENT_FLAG_NONE, \
+- "value", static_cast<int>(value))
+-#define TRACE_COPY_COUNTER1(category, name, value) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, TRACE_EVENT_FLAG_COPY, \
+- "value", static_cast<int>(value))
+-
+-// Records the values of a multi-parted counter called "name" immediately.
+-// The UI will treat value1 and value2 as parts of a whole, displaying their
+-// values as a stacked-bar chart.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-#define TRACE_COUNTER2(category, name, value1_name, value1_val, \
+- value2_name, value2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, TRACE_EVENT_FLAG_NONE, \
+- value1_name, static_cast<int>(value1_val), \
+- value2_name, static_cast<int>(value2_val))
+-#define TRACE_COPY_COUNTER2(category, name, value1_name, value1_val, \
+- value2_name, value2_val) \
+- INTERNAL_TRACE_EVENT_ADD(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, TRACE_EVENT_FLAG_COPY, \
+- value1_name, static_cast<int>(value1_val), \
+- value2_name, static_cast<int>(value2_val))
+-
+-// Records the value of a counter called "name" immediately. Value
+-// must be representable as a 32 bit integer.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-// - |id| is used to disambiguate counters with the same name. It must either
+-// be a pointer or an integer value up to 64 bits. If it's a pointer, the bits
+-// will be xored with a hash of the process ID so that the same pointer on
+-// two different processes will not collide.
+-#define TRACE_COUNTER_ID1(category, name, id, value) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, \
+- "value", static_cast<int>(value))
+-#define TRACE_COPY_COUNTER_ID1(category, name, id, value) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, \
+- "value", static_cast<int>(value))
+-
+-// Records the values of a multi-parted counter called "name" immediately.
+-// The UI will treat value1 and value2 as parts of a whole, displaying their
+-// values as a stacked-bar chart.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-// - |id| is used to disambiguate counters with the same name. It must either
+-// be a pointer or an integer value up to 64 bits. If it's a pointer, the bits
+-// will be xored with a hash of the process ID so that the same pointer on
+-// two different processes will not collide.
+-#define TRACE_COUNTER_ID2(category, name, id, value1_name, value1_val, \
+- value2_name, value2_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, \
+- value1_name, static_cast<int>(value1_val), \
+- value2_name, static_cast<int>(value2_val))
+-#define TRACE_COPY_COUNTER_ID2(category, name, id, value1_name, value1_val, \
+- value2_name, value2_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, \
+- value1_name, static_cast<int>(value1_val), \
+- value2_name, static_cast<int>(value2_val))
+-
+-// Records a single ASYNC_BEGIN event called "name" immediately, with 0, 1 or 2
+-// associated arguments. If the category is not enabled, then this
+-// does nothing.
+-// - category and name strings must have application lifetime (statics or
+-// literals). They may not include " chars.
+-// - |id| is used to match the ASYNC_BEGIN event with the ASYNC_END event. ASYNC
+-// events are considered to match if their category, name and id values all
+-// match. |id| must either be a pointer or an integer value up to 64 bits. If
+-// it's a pointer, the bits will be xored with a hash of the process ID so
+-// that the same pointer on two different processes will not collide.
+-// An asynchronous operation can consist of multiple phases. The first phase is
+-// defined by the ASYNC_BEGIN calls. Additional phases can be defined using the
+-// ASYNC_STEP_BEGIN macros. When the operation completes, call ASYNC_END.
+-// An async operation can span threads and processes, but all events in that
+-// operation must use the same |name| and |id|. Each event can have its own
+-// args.
+-#define TRACE_EVENT_ASYNC_BEGIN0(category, name, id) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \
+- category, name, id, TRACE_EVENT_FLAG_NONE)
+-#define TRACE_EVENT_ASYNC_BEGIN1(category, name, id, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val)
+-#define TRACE_EVENT_ASYNC_BEGIN2(category, name, id, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, \
+- arg1_name, arg1_val, arg2_name, arg2_val)
+-#define TRACE_EVENT_COPY_ASYNC_BEGIN0(category, name, id) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \
+- category, name, id, TRACE_EVENT_FLAG_COPY)
+-#define TRACE_EVENT_COPY_ASYNC_BEGIN1(category, name, id, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, \
+- arg1_name, arg1_val)
+-#define TRACE_EVENT_COPY_ASYNC_BEGIN2(category, name, id, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_BEGIN, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, \
+- arg1_name, arg1_val, arg2_name, arg2_val)
+-
+-// Records a single ASYNC_STEP event for |step| immediately. If the category
+-// is not enabled, then this does nothing. The |name| and |id| must match the
+-// ASYNC_BEGIN event above. The |step| param identifies this step within the
+-// async event. This should be called at the beginning of the next phase of an
+-// asynchronous operation.
+-#define TRACE_EVENT_ASYNC_STEP0(category, name, id, step) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, "step", step)
+-#define TRACE_EVENT_ASYNC_STEP1(category, name, id, step, \
+- arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, "step", step, \
+- arg1_name, arg1_val)
+-#define TRACE_EVENT_COPY_ASYNC_STEP0(category, name, id, step) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, "step", step)
+-#define TRACE_EVENT_COPY_ASYNC_STEP1(category, name, id, step, \
+- arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_STEP, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, "step", step, \
+- arg1_name, arg1_val)
+-
+-// Records a single ASYNC_END event for "name" immediately. If the category
+-// is not enabled, then this does nothing.
+-#define TRACE_EVENT_ASYNC_END0(category, name, id) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \
+- category, name, id, TRACE_EVENT_FLAG_NONE)
+-#define TRACE_EVENT_ASYNC_END1(category, name, id, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val)
+-#define TRACE_EVENT_ASYNC_END2(category, name, id, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \
+- category, name, id, TRACE_EVENT_FLAG_NONE, \
+- arg1_name, arg1_val, arg2_name, arg2_val)
+-#define TRACE_EVENT_COPY_ASYNC_END0(category, name, id) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \
+- category, name, id, TRACE_EVENT_FLAG_COPY)
+-#define TRACE_EVENT_COPY_ASYNC_END1(category, name, id, arg1_name, arg1_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, \
+- arg1_name, arg1_val)
+-#define TRACE_EVENT_COPY_ASYNC_END2(category, name, id, arg1_name, arg1_val, \
+- arg2_name, arg2_val) \
+- INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_ASYNC_END, \
+- category, name, id, TRACE_EVENT_FLAG_COPY, \
+- arg1_name, arg1_val, arg2_name, arg2_val)
+-
+-// Creates a scope of a sampling state with the given category and name (both must
+-// be constant strings). These states are intended for a sampling profiler.
+-// Implementation note: we store category and name together because we don't
+-// want the inconsistency/expense of storing two pointers.
+-// |thread_bucket| is [0..2] and is used to statically isolate samples in one
+-// thread from others.
+-//
+-// { // The sampling state is set within this scope.
+-// TRACE_EVENT_SAMPLING_STATE_SCOPE_FOR_BUCKET(0, "category", "name");
+-// ...;
+-// }
+-#define TRACE_EVENT_SCOPED_SAMPLING_STATE_FOR_BUCKET(bucket_number, category, name) \
+- TraceEvent::SamplingStateScope<bucket_number> traceEventSamplingScope(category "\0" name);
+-
+-// Returns a current sampling state of the given bucket.
+-// The format of the returned string is "category\0name".
+-#define TRACE_EVENT_GET_SAMPLING_STATE_FOR_BUCKET(bucket_number) \
+- TraceEvent::SamplingStateScope<bucket_number>::current()
+-
+-// Sets a current sampling state of the given bucket.
+-// |category| and |name| have to be constant strings.
+-#define TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(bucket_number, category, name) \
+- TraceEvent::SamplingStateScope<bucket_number>::set(category "\0" name)
+-
+-// Sets a current sampling state of the given bucket.
+-// |categoryAndName| doesn't need to be a constant string.
+-// The format of the string is "category\0name".
+-#define TRACE_EVENT_SET_NONCONST_SAMPLING_STATE_FOR_BUCKET(bucket_number, categoryAndName) \
+- TraceEvent::SamplingStateScope<bucket_number>::set(categoryAndName)
+-
+-// Syntactic sugars for the sampling tracing in the main thread.
+-#define TRACE_EVENT_SCOPED_SAMPLING_STATE(category, name) \
+- TRACE_EVENT_SCOPED_SAMPLING_STATE_FOR_BUCKET(0, category, name)
+-#define TRACE_EVENT_GET_SAMPLING_STATE() \
+- TRACE_EVENT_GET_SAMPLING_STATE_FOR_BUCKET(0)
+-#define TRACE_EVENT_SET_SAMPLING_STATE(category, name) \
+- TRACE_EVENT_SET_SAMPLING_STATE_FOR_BUCKET(0, category, name)
+-#define TRACE_EVENT_SET_NONCONST_SAMPLING_STATE(categoryAndName) \
+- TRACE_EVENT_SET_NONCONST_SAMPLING_STATE_FOR_BUCKET(0, categoryAndName)
+-
+-////////////////////////////////////////////////////////////////////////////////
+-// Implementation specific tracing API definitions.
+-
+-// Get a pointer to the enabled state of the given trace category. Only
+-// long-lived literal strings should be given as the category name. The returned
+-// pointer can be held permanently in a local static for example. If the
+-// unsigned char is non-zero, tracing is enabled. If tracing is enabled,
+-// TRACE_EVENT_API_ADD_TRACE_EVENT can be called. It's OK if tracing is disabled
+-// between the load of the tracing state and the call to
+-// TRACE_EVENT_API_ADD_TRACE_EVENT, because this flag only provides an early out
+-// for best performance when tracing is disabled.
+-// const unsigned char*
+-// TRACE_EVENT_API_GET_CATEGORY_ENABLED(const char* category_name)
+-#define TRACE_EVENT_API_GET_CATEGORY_ENABLED \
+- gl::TraceGetTraceCategoryEnabledFlag
+-
+-// Add a trace event to the platform tracing system.
+-// void TRACE_EVENT_API_ADD_TRACE_EVENT(
+-// char phase,
+-// const unsigned char* category_enabled,
+-// const char* name,
+-// unsigned long long id,
+-// int num_args,
+-// const char** arg_names,
+-// const unsigned char* arg_types,
+-// const unsigned long long* arg_values,
+-// unsigned char flags)
+-#define TRACE_EVENT_API_ADD_TRACE_EVENT \
+- gl::TraceAddTraceEvent
+-
+-////////////////////////////////////////////////////////////////////////////////
+-
+-// Implementation detail: trace event macros create temporary variables
+-// to keep instrumentation overhead low. These macros give each temporary
+-// variable a unique name based on the line number to prevent name collissions.
+-#define INTERNAL_TRACE_EVENT_UID3(a, b) \
+- trace_event_unique_##a##b
+-#define INTERNAL_TRACE_EVENT_UID2(a, b) \
+- INTERNAL_TRACE_EVENT_UID3(a, b)
+-#define INTERNALTRACEEVENTUID(name_prefix) \
+- INTERNAL_TRACE_EVENT_UID2(name_prefix, __LINE__)
+-
+-// Implementation detail: internal macro to create static category.
+-#define INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category) \
+- static const unsigned char* INTERNALTRACEEVENTUID(catstatic) = 0; \
+- if (!INTERNALTRACEEVENTUID(catstatic)) \
+- INTERNALTRACEEVENTUID(catstatic) = \
+- TRACE_EVENT_API_GET_CATEGORY_ENABLED(category);
+-
+-// Implementation detail: internal macro to create static category and add
+-// event if the category is enabled.
+-#define INTERNAL_TRACE_EVENT_ADD(phase, category, name, flags, ...) \
+- do { \
+- INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
+- if (*INTERNALTRACEEVENTUID(catstatic)) { \
+- gl::TraceEvent::addTraceEvent( \
+- phase, INTERNALTRACEEVENTUID(catstatic), name, \
+- gl::TraceEvent::noEventId, flags, ##__VA_ARGS__); \
+- } \
+- } while (0)
+-
+-// Implementation detail: internal macro to create static category and add begin
+-// event if the category is enabled. Also adds the end event when the scope
+-// ends.
+-#define INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, ...) \
+- INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
+- gl::TraceEvent::TraceEndOnScopeClose \
+- INTERNALTRACEEVENTUID(profileScope); \
+- if (*INTERNALTRACEEVENTUID(catstatic)) { \
+- gl::TraceEvent::addTraceEvent( \
+- TRACE_EVENT_PHASE_BEGIN, \
+- INTERNALTRACEEVENTUID(catstatic), \
+- name, gl::TraceEvent::noEventId, \
+- TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \
+- INTERNALTRACEEVENTUID(profileScope).initialize( \
+- INTERNALTRACEEVENTUID(catstatic), name); \
+- }
+-
+-// Implementation detail: internal macro to create static category and add
+-// event if the category is enabled.
+-#define INTERNAL_TRACE_EVENT_ADD_WITH_ID(phase, category, name, id, flags, \
+- ...) \
+- do { \
+- INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
+- if (*INTERNALTRACEEVENTUID(catstatic)) { \
+- unsigned char traceEventFlags = flags | TRACE_EVENT_FLAG_HAS_ID; \
+- gl::TraceEvent::TraceID traceEventTraceID( \
+- id, &traceEventFlags); \
+- gl::TraceEvent::addTraceEvent( \
+- phase, INTERNALTRACEEVENTUID(catstatic), \
+- name, traceEventTraceID.data(), traceEventFlags, \
+- ##__VA_ARGS__); \
+- } \
+- } while (0)
+-
+-// Notes regarding the following definitions:
+-// New values can be added and propagated to third party libraries, but existing
+-// definitions must never be changed, because third party libraries may use old
+-// definitions.
+-
+-// Phase indicates the nature of an event entry. E.g. part of a begin/end pair.
+-#define TRACE_EVENT_PHASE_BEGIN ('B')
+-#define TRACE_EVENT_PHASE_END ('E')
+-#define TRACE_EVENT_PHASE_INSTANT ('I')
+-#define TRACE_EVENT_PHASE_ASYNC_BEGIN ('S')
+-#define TRACE_EVENT_PHASE_ASYNC_STEP ('T')
+-#define TRACE_EVENT_PHASE_ASYNC_END ('F')
+-#define TRACE_EVENT_PHASE_METADATA ('M')
+-#define TRACE_EVENT_PHASE_COUNTER ('C')
+-#define TRACE_EVENT_PHASE_SAMPLE ('P')
+-
+-// Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT.
+-#define TRACE_EVENT_FLAG_NONE (static_cast<unsigned char>(0))
+-#define TRACE_EVENT_FLAG_COPY (static_cast<unsigned char>(1 << 0))
+-#define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned char>(1 << 1))
+-#define TRACE_EVENT_FLAG_MANGLE_ID (static_cast<unsigned char>(1 << 2))
+-
+-// Type values for identifying types in the TraceValue union.
+-#define TRACE_VALUE_TYPE_BOOL (static_cast<unsigned char>(1))
+-#define TRACE_VALUE_TYPE_UINT (static_cast<unsigned char>(2))
+-#define TRACE_VALUE_TYPE_INT (static_cast<unsigned char>(3))
+-#define TRACE_VALUE_TYPE_DOUBLE (static_cast<unsigned char>(4))
+-#define TRACE_VALUE_TYPE_POINTER (static_cast<unsigned char>(5))
+-#define TRACE_VALUE_TYPE_STRING (static_cast<unsigned char>(6))
+-#define TRACE_VALUE_TYPE_COPY_STRING (static_cast<unsigned char>(7))
+-
+-
+-namespace gl {
+-
+-namespace TraceEvent {
+-
+-// Specify these values when the corresponding argument of addTraceEvent is not
+-// used.
+-const int zeroNumArgs = 0;
+-const unsigned long long noEventId = 0;
+-
+-// TraceID encapsulates an ID that can either be an integer or pointer. Pointers
+-// are mangled with the Process ID so that they are unlikely to collide when the
+-// same pointer is used on different processes.
+-class TraceID {
+-public:
+- explicit TraceID(const void* id, unsigned char* flags) :
+- m_data(static_cast<unsigned long long>(reinterpret_cast<unsigned long>(id)))
+- {
+- *flags |= TRACE_EVENT_FLAG_MANGLE_ID;
+- }
+- explicit TraceID(unsigned long long id, unsigned char* flags) : m_data(id) { (void)flags; }
+- explicit TraceID(unsigned long id, unsigned char* flags) : m_data(id) { (void)flags; }
+- explicit TraceID(unsigned int id, unsigned char* flags) : m_data(id) { (void)flags; }
+- explicit TraceID(unsigned short id, unsigned char* flags) : m_data(id) { (void)flags; }
+- explicit TraceID(unsigned char id, unsigned char* flags) : m_data(id) { (void)flags; }
+- explicit TraceID(long long id, unsigned char* flags) :
+- m_data(static_cast<unsigned long long>(id)) { (void)flags; }
+- explicit TraceID(long id, unsigned char* flags) :
+- m_data(static_cast<unsigned long long>(id)) { (void)flags; }
+- explicit TraceID(int id, unsigned char* flags) :
+- m_data(static_cast<unsigned long long>(id)) { (void)flags; }
+- explicit TraceID(short id, unsigned char* flags) :
+- m_data(static_cast<unsigned long long>(id)) { (void)flags; }
+- explicit TraceID(signed char id, unsigned char* flags) :
+- m_data(static_cast<unsigned long long>(id)) { (void)flags; }
+-
+- unsigned long long data() const { return m_data; }
+-
+-private:
+- unsigned long long m_data;
+-};
+-
+-// Simple union to store various types as unsigned long long.
+-union TraceValueUnion {
+- bool m_bool;
+- unsigned long long m_uint;
+- long long m_int;
+- double m_double;
+- const void* m_pointer;
+- const char* m_string;
+-};
+-
+-// Simple container for const char* that should be copied instead of retained.
+-class TraceStringWithCopy {
+-public:
+- explicit TraceStringWithCopy(const char* str) : m_str(str) { }
+- operator const char* () const { return m_str; }
+-private:
+- const char* m_str;
+-};
+-
+-// Define setTraceValue for each allowed type. It stores the type and
+-// value in the return arguments. This allows this API to avoid declaring any
+-// structures so that it is portable to third_party libraries.
+-#define INTERNAL_DECLARE_SET_TRACE_VALUE(actual_type, \
+- union_member, \
+- value_type_id) \
+- static inline void setTraceValue(actual_type arg, \
+- unsigned char* type, \
+- unsigned long long* value) { \
+- TraceValueUnion typeValue; \
+- typeValue.union_member = arg; \
+- *type = value_type_id; \
+- *value = typeValue.m_uint; \
+- }
+-// Simpler form for int types that can be safely casted.
+-#define INTERNAL_DECLARE_SET_TRACE_VALUE_INT(actual_type, \
+- value_type_id) \
+- static inline void setTraceValue(actual_type arg, \
+- unsigned char* type, \
+- unsigned long long* value) { \
+- *type = value_type_id; \
+- *value = static_cast<unsigned long long>(arg); \
+- }
+-
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned long long, TRACE_VALUE_TYPE_UINT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned int, TRACE_VALUE_TYPE_UINT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned short, TRACE_VALUE_TYPE_UINT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(unsigned char, TRACE_VALUE_TYPE_UINT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(long long, TRACE_VALUE_TYPE_INT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(int, TRACE_VALUE_TYPE_INT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(short, TRACE_VALUE_TYPE_INT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE_INT(signed char, TRACE_VALUE_TYPE_INT)
+-INTERNAL_DECLARE_SET_TRACE_VALUE(bool, m_bool, TRACE_VALUE_TYPE_BOOL)
+-INTERNAL_DECLARE_SET_TRACE_VALUE(double, m_double, TRACE_VALUE_TYPE_DOUBLE)
+-INTERNAL_DECLARE_SET_TRACE_VALUE(const void*, m_pointer,
+- TRACE_VALUE_TYPE_POINTER)
+-INTERNAL_DECLARE_SET_TRACE_VALUE(const char*, m_string,
+- TRACE_VALUE_TYPE_STRING)
+-INTERNAL_DECLARE_SET_TRACE_VALUE(const TraceStringWithCopy&, m_string,
+- TRACE_VALUE_TYPE_COPY_STRING)
+-
+-#undef INTERNAL_DECLARE_SET_TRACE_VALUE
+-#undef INTERNAL_DECLARE_SET_TRACE_VALUE_INT
+-
+-static inline void setTraceValue(const std::string& arg,
+- unsigned char* type,
+- unsigned long long* value) {
+- TraceValueUnion typeValue;
+- typeValue.m_string = arg.data();
+- *type = TRACE_VALUE_TYPE_COPY_STRING;
+- *value = typeValue.m_uint;
+-}
+-
+-// These addTraceEvent template functions are defined here instead of in the
+-// macro, because the arg values could be temporary string objects. In order to
+-// store pointers to the internal c_str and pass through to the tracing API, the
+-// arg values must live throughout these procedures.
+-
+-static inline void addTraceEvent(char phase,
+- const unsigned char* categoryEnabled,
+- const char* name,
+- unsigned long long id,
+- unsigned char flags) {
+- TRACE_EVENT_API_ADD_TRACE_EVENT(
+- phase, categoryEnabled, name, id,
+- zeroNumArgs, 0, 0, 0,
+- flags);
+-}
+-
+-template<class ARG1_TYPE>
+-static inline void addTraceEvent(char phase,
+- const unsigned char* categoryEnabled,
+- const char* name,
+- unsigned long long id,
+- unsigned char flags,
+- const char* arg1Name,
+- const ARG1_TYPE& arg1Val) {
+- const int numArgs = 1;
+- unsigned char argTypes[1];
+- unsigned long long argValues[1];
+- setTraceValue(arg1Val, &argTypes[0], &argValues[0]);
+- TRACE_EVENT_API_ADD_TRACE_EVENT(
+- phase, categoryEnabled, name, id,
+- numArgs, &arg1Name, argTypes, argValues,
+- flags);
+-}
+-
+-template<class ARG1_TYPE, class ARG2_TYPE>
+-static inline void addTraceEvent(char phase,
+- const unsigned char* categoryEnabled,
+- const char* name,
+- unsigned long long id,
+- unsigned char flags,
+- const char* arg1Name,
+- const ARG1_TYPE& arg1Val,
+- const char* arg2Name,
+- const ARG2_TYPE& arg2Val) {
+- const int numArgs = 2;
+- const char* argNames[2] = { arg1Name, arg2Name };
+- unsigned char argTypes[2];
+- unsigned long long argValues[2];
+- setTraceValue(arg1Val, &argTypes[0], &argValues[0]);
+- setTraceValue(arg2Val, &argTypes[1], &argValues[1]);
+- return TRACE_EVENT_API_ADD_TRACE_EVENT(
+- phase, categoryEnabled, name, id,
+- numArgs, argNames, argTypes, argValues,
+- flags);
+-}
+-
+-// Used by TRACE_EVENTx macro. Do not use directly.
+-class TraceEndOnScopeClose {
+-public:
+- // Note: members of m_data intentionally left uninitialized. See initialize.
+- TraceEndOnScopeClose() : m_pdata(0) { }
+- ~TraceEndOnScopeClose()
+- {
+- if (m_pdata)
+- addEventIfEnabled();
+- }
+-
+- void initialize(const unsigned char* categoryEnabled,
+- const char* name)
+- {
+- m_data.categoryEnabled = categoryEnabled;
+- m_data.name = name;
+- m_pdata = &m_data;
+- }
+-
+-private:
+- // Add the end event if the category is still enabled.
+- void addEventIfEnabled()
+- {
+- // Only called when m_pdata is non-null.
+- if (*m_pdata->categoryEnabled) {
+- TRACE_EVENT_API_ADD_TRACE_EVENT(
+- TRACE_EVENT_PHASE_END,
+- m_pdata->categoryEnabled,
+- m_pdata->name, noEventId,
+- zeroNumArgs, 0, 0, 0,
+- TRACE_EVENT_FLAG_NONE);
+- }
+- }
+-
+- // This Data struct workaround is to avoid initializing all the members
+- // in Data during construction of this object, since this object is always
+- // constructed, even when tracing is disabled. If the members of Data were
+- // members of this class instead, compiler warnings occur about potential
+- // uninitialized accesses.
+- struct Data {
+- const unsigned char* categoryEnabled;
+- const char* name;
+- };
+- Data* m_pdata;
+- Data m_data;
+-};
+-
+-// TraceEventSamplingStateScope records the current sampling state
+-// and sets a new sampling state. When the scope exists, it restores
+-// the sampling state having recorded.
+-template<size_t BucketNumber>
+-class SamplingStateScope {
+-public:
+- SamplingStateScope(const char* categoryAndName)
+- {
+- m_previousState = SamplingStateScope<BucketNumber>::current();
+- SamplingStateScope<BucketNumber>::set(categoryAndName);
+- }
+-
+- ~SamplingStateScope()
+- {
+- SamplingStateScope<BucketNumber>::set(m_previousState);
+- }
+-
+- // FIXME: Make load/store to traceSamplingState[] thread-safe and atomic.
+- static inline const char* current()
+- {
+- return reinterpret_cast<const char*>(*gl::traceSamplingState[BucketNumber]);
+- }
+- static inline void set(const char* categoryAndName)
+- {
+- *gl::traceSamplingState[BucketNumber] = reinterpret_cast<long>(const_cast<char*>(categoryAndName));
+- }
+-
+-private:
+- const char* m_previousState;
+-};
+-
+-} // namespace TraceEvent
+-
+-} // namespace gl
+-
+-#endif
+diff --git a/src/angle/src/common/common.pri b/src/angle/src/common/common.pri
+index fd1c31c..8baedc5 100644
+--- a/src/angle/src/common/common.pri
++++ b/src/angle/src/common/common.pri
+@@ -51,7 +51,6 @@ static: DEFINES *= QT_OPENGL_ES_2_ANGLE_STATIC
+ HEADERS += \
+ $$ANGLE_DIR/src/common/angleutils.h \
+ $$ANGLE_DIR/src/common/debug.h \
+- $$ANGLE_DIR/src/common/event_tracer.h \
+ $$ANGLE_DIR/src/common/mathutil.h \
+ $$ANGLE_DIR/src/common/platform.h \
+ $$ANGLE_DIR/src/common/RefCountObject.h \
+@@ -61,7 +60,6 @@ HEADERS += \
+ SOURCES += \
+ $$ANGLE_DIR/src/common/angleutils.cpp \
+ $$ANGLE_DIR/src/common/debug.cpp \
+- $$ANGLE_DIR/src/common/event_tracer.cpp \
+ $$ANGLE_DIR/src/common/RefCountObject.cpp \
+ $$ANGLE_DIR/src/common/tls.cpp
+
--
1.9.0.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 0c04bf7fb2..f2252540eb 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,7 +1,7 @@
-From da7db59c7a004bb8247dcd64e468b689f3cce163 Mon Sep 17 00:00:00 2001
+From 3ea314039783d2e6e558cb10aa86dbf278631eef Mon Sep 17 00:00:00 2001
From: Thomas Hartmann <Thomas.Hartmann@digia.com>
-Date: Sat, 28 Jun 2014 16:42:22 +0300
-Subject: [PATCH 01/12] Fix compilation for MSVC 2008 and std::tuple
+Date: Tue, 16 Sep 2014 23:24:24 +0300
+Subject: [PATCH 01/16] Fix compilation for MSVC 2008 and std::tuple
For MSVC 2008 make_tuple is in the tr1 namespace.
@@ -11,10 +11,10 @@ Change-Id: I4a51f6cabdf068993869b404b12ed1484a21a9d4
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 14410d0..e957d96 100644
+index d472e14..f68ac38 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)
+@@ -111,7 +111,11 @@ IndexRangeCache::IndexRange::IndexRange(GLenum typ, intptr_t off, GLsizei c)
bool IndexRangeCache::IndexRange::operator<(const IndexRange& rhs) const
{
diff --git a/src/angle/patches/0002-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 c26b825b10..322d121149 100644
--- a/src/angle/patches/0002-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,7 +1,7 @@
-From 21257ea437264c4e7302265d895a2f9331bb7282 Mon Sep 17 00:00:00 2001
+From 9f1217589c029d2f91e863c54f7f9d52ef496f71 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@digia.com>
-Date: Sat, 28 Jun 2014 16:47:10 +0300
-Subject: [PATCH 02/12] Fix compilation of ANGLE with mingw-tdm64 gcc 4.8.1
+Date: Tue, 16 Sep 2014 23:33:42 +0300
+Subject: [PATCH 02/16] Fix compilation of ANGLE with mingw-tdm64 gcc 4.8.1
Do not rely on sprintf_s being declared/defined. This also fixes
deployment to Windows XP.
@@ -12,23 +12,22 @@ commit proposed upstream.
Task-number: QTBUG-36242
Change-Id: I520e2f61aeab34963e7a57baafd413c7db93f110
---
- src/3rdparty/angle/src/libEGL/Display.cpp | 3 +--
- 1 file changed, 1 insertion(+), 2 deletions(-)
+ src/3rdparty/angle/src/libEGL/Display.cpp | 2 +-
+ 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 459648c..a87bfe8 100644
+index ecf3395..aaebdb3 100644
--- a/src/3rdparty/angle/src/libEGL/Display.cpp
+++ b/src/3rdparty/angle/src/libEGL/Display.cpp
-@@ -596,8 +596,7 @@ void Display::initVendorString()
+@@ -597,7 +597,7 @@ void Display::initVendorString()
if (mRenderer && mRenderer->getLUID(&adapterLuid))
{
char adapterLuidString[64];
- sprintf_s(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
--
+ snprintf(adapterLuidString, sizeof(adapterLuidString), " (adapter LUID: %08x%08x)", adapterLuid.HighPart, adapterLuid.LowPart);
+
mVendorString += adapterLuidString;
}
- }
--
1.9.0.msysgit.0
diff --git a/src/angle/patches/0003-Fix-compilation-with-MinGW-gcc-64-bit.patch b/src/angle/patches/0003-Fix-compilation-with-MinGW-gcc-64-bit.patch
deleted file mode 100644
index 24eb2c3c79..0000000000
--- a/src/angle/patches/0003-Fix-compilation-with-MinGW-gcc-64-bit.patch
+++ /dev/null
@@ -1,35 +0,0 @@
-From 6611792d6ff11ef875d0ae3e9fd1a116ad832a39 Mon Sep 17 00:00:00 2001
-From: Kai Koehne <kai.koehne@digia.com>
-Date: Sat, 28 Jun 2014 16:50:57 +0300
-Subject: [PATCH 03/12] Fix compilation with MinGW gcc 64 bit
-
-Fix compilation of ANGLE with gcc 4.8.0 64 bit: The
-
- reinterpret_cast<unsigned long>(void*)
-
-was causing
-
- error: cast from 'const void*' to 'long unsigned int' loses precision
-
-Task-number: QTBUG-34395
-Change-Id: Ibde75dd4b5536f3827bdf0ab02a15e93a1a8a4f0
----
- src/3rdparty/angle/src/third_party/trace_event/trace_event.h | 2 +-
- 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 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
-@@ -587,7 +587,7 @@ const unsigned long long noEventId = 0;
- class TraceID {
- public:
- explicit TraceID(const void* id, unsigned char* flags) :
-- m_data(static_cast<unsigned long long>(reinterpret_cast<unsigned long>(id)))
-+ m_data(reinterpret_cast<unsigned long long>(id))
- {
- *flags |= TRACE_EVENT_FLAG_MANGLE_ID;
- }
---
-1.9.0.msysgit.0
-
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
index 960b939896..1dfe6154e7 100644
--- 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
@@ -1,7 +1,7 @@
-From 6706ecec3897bf1c6cbfa6891ee9edbde6b64dd0 Mon Sep 17 00:00:00 2001
+From cb00356bad800ca2397301cb8b79ad0b097bddd8 Mon Sep 17 00:00:00 2001
From: Friedemann Kleint <Friedemann.Kleint@digia.com>
-Date: Sat, 28 Jun 2014 17:00:55 +0300
-Subject: [PATCH 04/12] Make it possible to link ANGLE statically for
+Date: Tue, 16 Sep 2014 23:43:00 +0300
+Subject: [PATCH 04/16] Make it possible to link ANGLE statically for
single-thread use.
Fix exports and provide static instances of thread-local
@@ -66,10 +66,10 @@ index 0f8439c..8a1baef 100644
void setCurrentError(EGLint error)
diff --git a/src/3rdparty/angle/src/libGLESv2/main.cpp b/src/3rdparty/angle/src/libGLESv2/main.cpp
-index 81e70a4..5a45ec3 100644
+index 4444d1a..1c577bc 100644
--- a/src/3rdparty/angle/src/libGLESv2/main.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/main.cpp
-@@ -47,6 +47,8 @@ void DeallocateCurrent()
+@@ -46,6 +46,8 @@ void DeallocateCurrent()
}
@@ -78,7 +78,7 @@ index 81e70a4..5a45ec3 100644
extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved)
{
switch (reason)
-@@ -83,16 +85,24 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
+@@ -82,16 +84,24 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
return TRUE;
}
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 1dbf7d387f..78c3e0fbe8 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,7 +1,7 @@
-From 747d31f25883f6b9203245a498acf9945accdc0d Mon Sep 17 00:00:00 2001
+From df225c023963f37737b7e2d020c8f89a5d5f878e Mon Sep 17 00:00:00 2001
From: Andy Shaw <andy.shaw@digia.com>
-Date: Sat, 28 Jun 2014 17:06:45 +0300
-Subject: [PATCH 05/12] Fix build when SSE2 is not available.
+Date: Tue, 16 Sep 2014 23:49:50 +0300
+Subject: [PATCH 05/16] Fix build when SSE2 is not available.
Although SSE2 support is detected at runtime it still may not be
available at build time, so we have to ensure it only uses SSE2
@@ -14,7 +14,7 @@ Change-Id: I86c45a6466ab4cec79aa0f62b0d5230a78ad825a
2 files changed, 10 insertions(+)
diff --git a/src/3rdparty/angle/src/common/mathutil.h b/src/3rdparty/angle/src/common/mathutil.h
-index 58f9b4c..f32663f 100644
+index ffcb908..52f2bc1 100644
--- a/src/3rdparty/angle/src/common/mathutil.h
+++ b/src/3rdparty/angle/src/common/mathutil.h
@@ -118,6 +118,7 @@ inline bool supportsSSE2()
@@ -34,10 +34,10 @@ index 58f9b4c..f32663f 100644
checked = true;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/loadimageSSE2.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/loadimageSSE2.cpp
-index 9c83894..dcf347d 100644
+index cc20d94..f777b30 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/loadimageSSE2.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/loadimageSSE2.cpp
-@@ -11,6 +11,10 @@
+@@ -10,6 +10,10 @@
#include "libGLESv2/renderer/loadimage.h"
@@ -48,7 +48,7 @@ index 9c83894..dcf347d 100644
namespace rx
{
-@@ -18,6 +22,7 @@ void LoadA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth,
+@@ -17,6 +21,7 @@ void LoadA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth,
const uint8_t *input, size_t inputRowPitch, size_t inputDepthPitch,
uint8_t *output, size_t outputRowPitch, size_t outputDepthPitch)
{
@@ -56,7 +56,7 @@ index 9c83894..dcf347d 100644
__m128i zeroWide = _mm_setzero_si128();
for (size_t z = 0; z < depth; z++)
-@@ -55,12 +60,14 @@ void LoadA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth,
+@@ -54,12 +59,14 @@ void LoadA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth,
}
}
}
@@ -71,7 +71,7 @@ index 9c83894..dcf347d 100644
__m128i brMask = _mm_set1_epi32(0x00ff00ff);
for (size_t z = 0; z < depth; z++)
-@@ -100,6 +107,7 @@ void LoadRGBA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth,
+@@ -99,6 +106,7 @@ void LoadRGBA8ToBGRA8_SSE2(size_t width, size_t height, size_t depth,
}
}
}
diff --git a/src/angle/patches/0006-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 df057c01ee..e60bebd233 100644
--- a/src/angle/patches/0006-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,7 @@
-From 7609185310c081cbe396c993ccc84f2c43674281 Mon Sep 17 00:00:00 2001
+From 2a8568e6f44731df96f6567ffcc59a65ad2b3f29 Mon Sep 17 00:00:00 2001
From: Kai Koehne <kai.koehne@digia.com>
-Date: Sat, 28 Jun 2014 17:11:04 +0300
-Subject: [PATCH 06/12] Fix compilation of libGLESv2 with older MinGW-w64
+Date: Tue, 16 Sep 2014 23:55:25 +0300
+Subject: [PATCH 06/16] Fix compilation of libGLESv2 with older MinGW-w64
headers
Fix compilation of libGLESv2 for mingw-headers predating MinGW-w64
@@ -19,12 +19,12 @@ Change-Id: I31272a1a991c4fc0f1611f8fb7510be51d6bb925
1 file changed, 15 insertions(+)
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-index 499ed52..1df6a5e 100644
+index acbd852..eb0dfa5 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-@@ -9,6 +9,21 @@
+@@ -10,6 +10,21 @@
- #include <d3dcompiler.h>
+ #include "common/utilities.h"
+#if defined(__MINGW32__) && !defined(D3DCOMPILER_DLL)
+
diff --git a/src/angle/patches/0007-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch b/src/angle/patches/0007-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch
index 1a06cd0bec..c796ebc95e 100644
--- a/src/angle/patches/0007-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch
+++ b/src/angle/patches/0007-Fix-ANGLE-build-with-Microsoft-Visual-Studio-14-CTP.patch
@@ -1,7 +1,7 @@
-From 0cd67655973e4e05f041bbfaafc8ce376cc8332c Mon Sep 17 00:00:00 2001
+From 76152feea8265f40fec8c6e53f976dbd82fb6c80 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
-Date: Fri, 4 Jul 2014 09:20:06 +0300
-Subject: [PATCH 07/12] Fix ANGLE build with Microsoft Visual Studio "14" CTP
+Date: Tue, 16 Sep 2014 23:56:43 +0300
+Subject: [PATCH 07/16] Fix ANGLE build with Microsoft Visual Studio "14" CTP
This version has a few new C99 support added, including snprintf.
@@ -11,12 +11,12 @@ Change-Id: I5776456fd94254a64f08791f59bc775cb24c9b7f
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/3rdparty/angle/src/common/angleutils.h b/src/3rdparty/angle/src/common/angleutils.h
-index 7701a42..d94b4f5 100644
+index 50a4132..ddbbd5f 100644
--- a/src/3rdparty/angle/src/common/angleutils.h
+++ b/src/3rdparty/angle/src/common/angleutils.h
-@@ -131,7 +131,7 @@ inline std::string Str(int i)
- return strstr.str();
- }
+@@ -135,7 +135,7 @@ inline std::string Str(int i)
+ std::string FormatString(const char *fmt, va_list vararg);
+ std::string FormatString(const char *fmt, ...);
-#if defined(_MSC_VER)
+#if defined(_MSC_VER) && _MSC_VER < 1900
diff --git a/src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-or-t.patch b/src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-or-t.patch
index 55d1307601..7c821580d0 100644
--- a/src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-or-t.patch
+++ b/src/angle/patches/0008-ANGLE-Dynamically-load-D3D-compiler-from-a-list-or-t.patch
@@ -1,7 +1,7 @@
-From a3196fcfe7dd7aff5e5fa07d1a9bbf2c72fc0b41 Mon Sep 17 00:00:00 2001
+From 4f6dd1f7cdce3340723cc23e0aea27b156fa3497 Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Fri, 4 Jul 2014 08:39:54 +0300
-Subject: [PATCH 08/12] ANGLE: Dynamically load D3D compiler from a list or the
+Date: Tue, 16 Sep 2014 23:59:40 +0300
+Subject: [PATCH 08/16] ANGLE: Dynamically load D3D compiler from a list or the
environment
If the default compiler cannot be found, load it from a list of DLL names,
@@ -11,14 +11,14 @@ QT_D3DCOMPILER_DLL.
Change-Id: I0d7a8a8a36cc571836f8fa59ea14513b9b19c19b
---
- .../src/libGLESv2/renderer/d3d/HLSLCompiler.cpp | 31 +++++++++++++++++++---
- 1 file changed, 28 insertions(+), 3 deletions(-)
+ .../src/libGLESv2/renderer/d3d/HLSLCompiler.cpp | 27 +++++++++++++++++++---
+ 1 file changed, 24 insertions(+), 3 deletions(-)
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-index 1df6a5e..31942e6 100644
+index eb0dfa5..5715d5f 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-@@ -24,6 +24,14 @@ typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const
+@@ -25,6 +25,10 @@ typedef HRESULT (WINAPI *pD3DCompile)(const void *data, SIZE_T data_size, const
#endif // __MINGW32__ && !D3DCOMPILER_DLL
@@ -26,14 +26,10 @@ index 1df6a5e..31942e6 100644
+#define QT_D3DCOMPILER_DLL D3DCOMPILER_DLL
+#endif
+
-+#ifndef LoadLibrary
-+#define LoadLibrary(dll) LoadPackagedLibrary(dll, NULL)
-+#endif
-+
namespace rx
{
-@@ -54,10 +62,27 @@ bool HLSLCompiler::initialize()
+@@ -59,10 +63,27 @@ bool HLSLCompiler::initialize()
}
#endif // ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES
@@ -58,8 +54,8 @@ index 1df6a5e..31942e6 100644
{
- // Load the version of the D3DCompiler DLL associated with the Direct3D version ANGLE was built with.
- mD3DCompilerModule = LoadLibrary(D3DCOMPILER_DLL);
-+ mD3dCompilerModule = LoadLibrary(compilerDlls[i]);
-+ if (mD3dCompilerModule)
++ mD3DCompilerModule = LoadLibrary(compilerDlls[i]);
++ if (mD3DCompilerModule)
+ break;
}
diff --git a/src/angle/patches/0009-ANGLE-Support-WinRT.patch b/src/angle/patches/0009-ANGLE-Support-WinRT.patch
index 5630f7f9ce..f4bae46b63 100644
--- a/src/angle/patches/0009-ANGLE-Support-WinRT.patch
+++ b/src/angle/patches/0009-ANGLE-Support-WinRT.patch
@@ -1,7 +1,7 @@
-From be5e9dcf8a4cb23368b30f743082630bdccc7376 Mon Sep 17 00:00:00 2001
+From 7ff7dd46f54e23ae309887366bf477de9c33005b Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Tue, 5 Aug 2014 09:31:32 +0300
-Subject: [PATCH 09/12] ANGLE: Support WinRT
+Date: Wed, 17 Sep 2014 00:58:29 +0300
+Subject: [PATCH 09/16] ANGLE: Support WinRT
This enables EGL for WinRT's native types, and adjusts some codepaths
to accommodate differences between desktop Windows and WinRT.
@@ -23,21 +23,21 @@ Reviewed-by: Friedemann Kleint <Friedemann.Kleint@digia.com>
src/3rdparty/angle/src/libEGL/Display.cpp | 13 +-
src/3rdparty/angle/src/libEGL/Display.h | 6 +-
src/3rdparty/angle/src/libEGL/Surface.cpp | 185 ++++++++++++++++++++-
- src/3rdparty/angle/src/libEGL/Surface.h | 39 ++++-
+ src/3rdparty/angle/src/libEGL/Surface.h | 37 ++++-
src/3rdparty/angle/src/libEGL/libEGL.cpp | 8 +-
src/3rdparty/angle/src/libEGL/main.cpp | 21 +++
src/3rdparty/angle/src/libGLESv2/main.cpp | 20 +++
src/3rdparty/angle/src/libGLESv2/main.h | 4 +
.../angle/src/libGLESv2/renderer/Renderer.h | 2 +-
.../angle/src/libGLESv2/renderer/SwapChain.h | 15 +-
- .../src/libGLESv2/renderer/d3d/HLSLCompiler.cpp | 12 +-
+ .../src/libGLESv2/renderer/d3d/HLSLCompiler.cpp | 11 +-
.../libGLESv2/renderer/d3d/d3d11/Renderer11.cpp | 13 +-
.../src/libGLESv2/renderer/d3d/d3d11/Renderer11.h | 4 +-
- .../libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp | 76 +++++++--
+ .../libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp | 73 ++++++--
.../src/libGLESv2/renderer/d3d/d3d11/SwapChain11.h | 6 +-
.../src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp | 2 +-
.../src/libGLESv2/renderer/d3d/d3d9/SwapChain9.h | 2 +-
- 22 files changed, 486 insertions(+), 49 deletions(-)
+ 22 files changed, 481 insertions(+), 48 deletions(-)
diff --git a/src/3rdparty/angle/include/EGL/eglplatform.h b/src/3rdparty/angle/include/EGL/eglplatform.h
index 3ab8844..ea9f577 100644
@@ -61,7 +61,7 @@ index 3ab8844..ea9f577 100644
#define WIN32_LEAN_AND_MEAN 1
#endif
diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h
-index aa0b985..e16e7ac 100644
+index d07297d..387ba41 100644
--- a/src/3rdparty/angle/src/common/platform.h
+++ b/src/3rdparty/angle/src/common/platform.h
@@ -11,6 +11,9 @@
@@ -240,10 +240,10 @@ index 405f119..4b8e325 100644
DWORD pathLen = GetTempPathA(sizeof(path) / sizeof(path[0]), path);
if (pathLen == 0)
diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
-index a87bfe8..7cd83c3 100644
+index aaebdb3..ba09631 100644
--- a/src/3rdparty/angle/src/libEGL/Display.cpp
+++ b/src/3rdparty/angle/src/libEGL/Display.cpp
-@@ -57,6 +57,10 @@ Display::Display(EGLNativeDisplayType displayId, EGLint displayType)
+@@ -56,6 +56,10 @@ Display::Display(EGLNativeDisplayType displayId, EGLint displayType)
mRequestedDisplayType(displayType),
mRenderer(NULL)
{
@@ -254,7 +254,7 @@ index a87bfe8..7cd83c3 100644
}
Display::~Display()
-@@ -69,6 +73,11 @@ Display::~Display()
+@@ -68,6 +72,11 @@ Display::~Display()
{
displays->erase(iter);
}
@@ -266,7 +266,7 @@ index a87bfe8..7cd83c3 100644
}
bool Display::initialize()
-@@ -193,7 +202,7 @@ bool Display::getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value)
+@@ -192,7 +201,7 @@ bool Display::getConfigAttrib(EGLConfig config, EGLint attribute, EGLint *value)
@@ -275,7 +275,7 @@ index a87bfe8..7cd83c3 100644
{
const Config *configuration = mConfigSet.get(config);
EGLint postSubBufferSupported = EGL_FALSE;
-@@ -494,7 +503,7 @@ bool Display::isValidSurface(egl::Surface *surface)
+@@ -493,7 +502,7 @@ bool Display::isValidSurface(egl::Surface *surface)
return mSurfaceSet.find(surface) != mSurfaceSet.end();
}
@@ -630,7 +630,7 @@ index 13b0f20..fa79961 100644
+
}
diff --git a/src/3rdparty/angle/src/libEGL/Surface.h b/src/3rdparty/angle/src/libEGL/Surface.h
-index 3caf620..ebffce8 100644
+index 24c66b7..ebffce8fe 100644
--- a/src/3rdparty/angle/src/libEGL/Surface.h
+++ b/src/3rdparty/angle/src/libEGL/Surface.h
@@ -15,6 +15,20 @@
@@ -700,9 +700,8 @@ index 3caf620..ebffce8 100644
EGLint mSwapInterval;
EGLint mPostSubBufferSupported;
EGLint mFixedSize;
--
+ EGLint mSwapFlags;
-+
+
bool mSwapIntervalDirty;
gl::Texture2D *mTexture;
+#if defined(ANGLE_PLATFORM_WINRT)
@@ -717,10 +716,10 @@ index 3caf620..ebffce8 100644
}
diff --git a/src/3rdparty/angle/src/libEGL/libEGL.cpp b/src/3rdparty/angle/src/libEGL/libEGL.cpp
-index 23df448..a08e1ed 100644
+index 7ce2b93..7ea11c5 100644
--- a/src/3rdparty/angle/src/libEGL/libEGL.cpp
+++ b/src/3rdparty/angle/src/libEGL/libEGL.cpp
-@@ -10,6 +10,7 @@
+@@ -13,6 +13,7 @@
#include "common/debug.h"
#include "common/version.h"
@@ -728,7 +727,7 @@ index 23df448..a08e1ed 100644
#include "libGLESv2/Context.h"
#include "libGLESv2/Texture.h"
#include "libGLESv2/main.h"
-@@ -117,12 +118,13 @@ EGLDisplay __stdcall eglGetPlatformDisplayEXT(EGLenum platform, void *native_dis
+@@ -120,12 +121,13 @@ EGLDisplay __stdcall eglGetPlatformDisplayEXT(EGLenum platform, void *native_dis
}
EGLNativeDisplayType displayId = static_cast<EGLNativeDisplayType>(native_display);
@@ -743,7 +742,7 @@ index 23df448..a08e1ed 100644
EGLint requestedDisplayType = EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE;
if (attrib_list)
-@@ -324,14 +326,16 @@ EGLSurface __stdcall eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EG
+@@ -327,14 +329,16 @@ EGLSurface __stdcall eglCreateWindowSurface(EGLDisplay dpy, EGLConfig config, EG
return EGL_NO_SURFACE;
}
@@ -762,7 +761,7 @@ index 23df448..a08e1ed 100644
EGLSurface __stdcall eglCreatePbufferSurface(EGLDisplay dpy, EGLConfig config, const EGLint *attrib_list)
diff --git a/src/3rdparty/angle/src/libEGL/main.cpp b/src/3rdparty/angle/src/libEGL/main.cpp
-index 8a1baef..5788af7 100644
+index 8a1baef..e74737e 100644
--- a/src/3rdparty/angle/src/libEGL/main.cpp
+++ b/src/3rdparty/angle/src/libEGL/main.cpp
@@ -11,6 +11,9 @@
@@ -812,22 +811,21 @@ index 8a1baef..5788af7 100644
currentTLS = CreateTLSIndex();
if (currentTLS == TLS_OUT_OF_INDEXES)
{
-@@ -91,8 +110,10 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
+@@ -86,7 +105,9 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
break;
- case DLL_PROCESS_DETACH:
+ case DLL_THREAD_DETACH:
{
+#if !defined(ANGLE_PLATFORM_WINRT)
egl::DeallocateCurrent();
- DestroyTLSIndex(currentTLS);
+#endif
}
break;
- default:
+ case DLL_PROCESS_DETACH:
diff --git a/src/3rdparty/angle/src/libGLESv2/main.cpp b/src/3rdparty/angle/src/libGLESv2/main.cpp
-index 5a45ec3..8820700 100644
+index 1c577bc..51447e2 100644
--- a/src/3rdparty/angle/src/libGLESv2/main.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/main.cpp
-@@ -12,6 +12,9 @@
+@@ -11,6 +11,9 @@
#include "common/tls.h"
@@ -837,7 +835,7 @@ index 5a45ec3..8820700 100644
static TLSIndex currentTLS = TLS_OUT_OF_INDEXES;
namespace gl
-@@ -19,6 +22,12 @@ namespace gl
+@@ -18,6 +21,12 @@ namespace gl
Current *AllocateCurrent()
{
@@ -850,7 +848,7 @@ index 5a45ec3..8820700 100644
ASSERT(currentTLS != TLS_OUT_OF_INDEXES);
if (currentTLS == TLS_OUT_OF_INDEXES)
{
-@@ -40,6 +49,12 @@ Current *AllocateCurrent()
+@@ -39,6 +48,12 @@ Current *AllocateCurrent()
void DeallocateCurrent()
{
@@ -863,7 +861,7 @@ index 5a45ec3..8820700 100644
Current *current = reinterpret_cast<Current*>(GetTLSValue(currentTLS));
SafeDelete(current);
SetTLSValue(currentTLS, NULL);
-@@ -55,6 +70,9 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
+@@ -54,6 +69,9 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
{
case DLL_PROCESS_ATTACH:
{
@@ -873,7 +871,7 @@ index 5a45ec3..8820700 100644
currentTLS = CreateTLSIndex();
if (currentTLS == TLS_OUT_OF_INDEXES)
{
-@@ -74,8 +92,10 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
+@@ -73,8 +91,10 @@ extern "C" BOOL WINAPI DllMain(HINSTANCE instance, DWORD reason, LPVOID reserved
break;
case DLL_PROCESS_DETACH:
{
@@ -885,11 +883,11 @@ index 5a45ec3..8820700 100644
break;
default:
diff --git a/src/3rdparty/angle/src/libGLESv2/main.h b/src/3rdparty/angle/src/libGLESv2/main.h
-index c117039..df28ea4 100644
+index 684c302..c30ad33 100644
--- a/src/3rdparty/angle/src/libGLESv2/main.h
+++ b/src/3rdparty/angle/src/libGLESv2/main.h
@@ -14,6 +14,10 @@
- #define EGLAPI
+ #include <GLES2/gl2.h>
#include <EGL/egl.h>
+#ifndef Sleep
@@ -900,31 +898,28 @@ index c117039..df28ea4 100644
{
class Display;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
-index be3ba29..f1e0fd2 100644
+index 7adbea2..b224974 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.h
-@@ -106,7 +106,7 @@ class Renderer
+@@ -107,7 +107,7 @@ class Renderer
virtual void sync(bool block) = 0;
- virtual SwapChain *createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat) = 0;
+ virtual SwapChain *createSwapChain(EGLNativeWindowType window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat) = 0;
- virtual void generateSwizzle(gl::Texture *texture) = 0;
- virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler) = 0;
+ virtual gl::Error generateSwizzle(gl::Texture *texture) = 0;
+ virtual gl::Error setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler) = 0;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
-index f09f19b..77546f8 100644
+index 12be9b3..1ec702f 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/SwapChain.h
-@@ -10,6 +10,7 @@
- #ifndef LIBGLESV2_RENDERER_SWAPCHAIN_H_
- #define LIBGLESV2_RENDERER_SWAPCHAIN_H_
+@@ -15,14 +15,23 @@
+ #include <GLES2/gl2.h>
+ #include <EGL/egl.h>
+#include <EGL/eglplatform.h>
- #include "common/angleutils.h"
- #if !defined(ANGLE_FORCE_VSYNC_OFF)
-@@ -19,10 +20,18 @@
namespace rx
{
@@ -961,37 +956,30 @@ index f09f19b..77546f8 100644
const GLenum mDepthBufferFormat;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-index 31942e6..e3b88d5 100644
+index 5715d5f..d013197 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp
-@@ -4,6 +4,7 @@
+@@ -9,6 +9,7 @@
#include "libGLESv2/main.h"
#include "common/utilities.h"
+#include "common/platform.h"
- #include "third_party/trace_event/trace_event.h"
+ #if defined(__MINGW32__) && !defined(D3DCOMPILER_DLL)
+
+@@ -45,11 +46,7 @@ HLSLCompiler::~HLSLCompiler()
-@@ -49,6 +50,7 @@ HLSLCompiler::~HLSLCompiler()
bool HLSLCompiler::initialize()
{
- TRACE_EVENT0("gpu", "initializeCompiler");
-+#if !defined(ANGLE_PLATFORM_WINRT)
+-<<<<<<< HEAD
+- TRACE_EVENT0("gpu", "initializeCompiler");
+-=======
+ #if !defined(ANGLE_PLATFORM_WINRT)
+->>>>>>> 429814a... ANGLE: remove event tracing
#if defined(ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES)
// Find a D3DCompiler module that had already been loaded based on a predefined list of versions.
static const char *d3dCompilerNames[] = ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES;
-@@ -80,8 +82,8 @@ bool HLSLCompiler::initialize()
- // Load the first available known compiler DLL
- for (int i = 0; compilerDlls[i]; ++i)
- {
-- mD3dCompilerModule = LoadLibrary(compilerDlls[i]);
-- if (mD3dCompilerModule)
-+ mD3DCompilerModule = LoadLibrary(compilerDlls[i]);
-+ if (mD3DCompilerModule)
- break;
- }
-
-@@ -93,7 +95,9 @@ bool HLSLCompiler::initialize()
+@@ -94,7 +91,9 @@ bool HLSLCompiler::initialize()
mD3DCompileFunc = reinterpret_cast<CompileFuncPtr>(GetProcAddress(mD3DCompilerModule, "D3DCompile"));
ASSERT(mD3DCompileFunc);
@@ -1002,7 +990,7 @@ index 31942e6..e3b88d5 100644
return mD3DCompileFunc != NULL;
}
-@@ -110,7 +114,9 @@ void HLSLCompiler::release()
+@@ -111,7 +110,9 @@ void HLSLCompiler::release()
ShaderBlob *HLSLCompiler::compileToBinary(gl::InfoLog &infoLog, const char *hlsl, const char *profile,
const UINT optimizationFlags[], const char *flagNames[], int attempts) const
{
@@ -1013,18 +1001,18 @@ index 31942e6..e3b88d5 100644
if (!hlsl)
{
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-index a48a2cd..36d9a8f 100644
+index ed880c3..0bb7489 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-@@ -9,6 +9,7 @@
+@@ -6,6 +6,7 @@
+
+ // Renderer11.cpp: Implements a back-end specific class for the D3D11 renderer.
- #include "libGLESv2/main.h"
- #include "common/utilities.h"
+#include "common/platform.h"
+ #include "libGLESv2/main.h"
#include "libGLESv2/Buffer.h"
#include "libGLESv2/FramebufferAttachment.h"
- #include "libGLESv2/ProgramBinary.h"
-@@ -129,6 +130,7 @@ EGLint Renderer11::initialize()
+@@ -135,6 +136,7 @@ EGLint Renderer11::initialize()
return EGL_NOT_INITIALIZED;
}
@@ -1032,7 +1020,7 @@ index a48a2cd..36d9a8f 100644
mDxgiModule = LoadLibrary(TEXT("dxgi.dll"));
mD3d11Module = LoadLibrary(TEXT("d3d11.dll"));
-@@ -147,6 +149,7 @@ EGLint Renderer11::initialize()
+@@ -153,6 +155,7 @@ EGLint Renderer11::initialize()
ERR("Could not retrieve D3D11CreateDevice address - aborting!\n");
return EGL_NOT_INITIALIZED;
}
@@ -1040,7 +1028,7 @@ index a48a2cd..36d9a8f 100644
D3D_FEATURE_LEVEL featureLevels[] =
{
-@@ -201,7 +204,7 @@ EGLint Renderer11::initialize()
+@@ -207,7 +210,7 @@ EGLint Renderer11::initialize()
}
}
@@ -1049,7 +1037,7 @@ index a48a2cd..36d9a8f 100644
// In order to create a swap chain for an HWND owned by another process, DXGI 1.2 is required.
// The easiest way to check is to query for a IDXGIDevice2.
bool requireDXGI1_2 = false;
-@@ -231,8 +234,12 @@ EGLint Renderer11::initialize()
+@@ -237,8 +240,12 @@ EGLint Renderer11::initialize()
}
#endif
@@ -1063,7 +1051,7 @@ index a48a2cd..36d9a8f 100644
if (FAILED(result))
{
-@@ -413,7 +420,7 @@ void Renderer11::sync(bool block)
+@@ -408,7 +415,7 @@ void Renderer11::sync(bool block)
}
}
@@ -1073,7 +1061,7 @@ index a48a2cd..36d9a8f 100644
return new rx::SwapChain11(this, window, shareHandle, backBufferFormat, depthBufferFormat);
}
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
-index 73a3fc2..618972d 100644
+index d309f14..b86f5e5 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
@@ -57,7 +57,7 @@ class Renderer11 : public Renderer
@@ -1083,9 +1071,9 @@ index 73a3fc2..618972d 100644
- virtual SwapChain *createSwapChain(HWND window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat);
+ virtual SwapChain *createSwapChain(EGLNativeWindowType window, HANDLE shareHandle, GLenum backBufferFormat, GLenum depthBufferFormat);
- virtual void generateSwizzle(gl::Texture *texture);
- virtual void setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
-@@ -238,7 +238,7 @@ class Renderer11 : public Renderer
+ virtual gl::Error generateSwizzle(gl::Texture *texture);
+ virtual gl::Error setSamplerState(gl::SamplerType type, int index, const gl::SamplerState &sampler);
+@@ -222,7 +222,7 @@ class Renderer11 : public Renderer
HMODULE mD3d11Module;
HMODULE mDxgiModule;
@@ -1095,17 +1083,17 @@ index 73a3fc2..618972d 100644
HLSLCompiler mCompiler;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
-index 98166f0..0341df1 100644
+index 50dae4e..787c511 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
-@@ -9,6 +9,7 @@
+@@ -6,6 +6,7 @@
- #include "libGLESv2/renderer/d3d/d3d11/SwapChain11.h"
+ // SwapChain11.cpp: Implements a back-end specific class for the D3D11 swap chain.
+#include "common/platform.h"
+ #include "libGLESv2/renderer/d3d/d3d11/SwapChain11.h"
#include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
#include "libGLESv2/renderer/d3d/d3d11/formatutils11.h"
- #include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
@@ -18,7 +19,7 @@
namespace rx
{
@@ -1124,14 +1112,14 @@ index 98166f0..0341df1 100644
mSwapInterval = 0;
mAppCreatedShareHandle = mShareHandle != NULL;
mPassThroughResourcesInit = false;
-@@ -91,6 +94,7 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
- ASSERT(backbufferWidth >= 1);
+@@ -92,6 +95,7 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
ASSERT(backbufferHeight >= 1);
-+#if !defined(ANGLE_PLATFORM_WINRT)
// Preserve the render target content
++#if !defined(ANGLE_PLATFORM_WINRT)
ID3D11Texture2D *previousOffscreenTexture = mOffscreenTexture;
if (previousOffscreenTexture)
+ {
@@ -99,6 +103,7 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
}
const int previousWidth = mWidth;
@@ -1140,7 +1128,7 @@ index 98166f0..0341df1 100644
releaseOffscreenTexture();
-@@ -277,7 +282,12 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
+@@ -281,7 +286,12 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
mWidth = backbufferWidth;
mHeight = backbufferHeight;
@@ -1153,7 +1141,7 @@ index 98166f0..0341df1 100644
if (previousOffscreenTexture != NULL)
{
D3D11_BOX sourceBox = {0};
-@@ -296,9 +306,10 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
+@@ -300,9 +310,10 @@ EGLint SwapChain11::resetOffscreenTexture(int backbufferWidth, int backbufferHei
if (mSwapChain)
{
@@ -1165,7 +1153,7 @@ index 98166f0..0341df1 100644
return EGL_SUCCESS;
}
-@@ -325,8 +336,15 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
+@@ -329,8 +340,15 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
SafeRelease(mBackBufferRTView);
// Resize swap chain
@@ -1176,31 +1164,29 @@ index 98166f0..0341df1 100644
+#else
+ const int bufferCount = 2;
+#endif
- DXGI_FORMAT backbufferDXGIFormat = gl_d3d11::GetTexFormat(mBackBufferFormat);
-- HRESULT result = mSwapChain->ResizeBuffers(1, backbufferWidth, backbufferHeight, backbufferDXGIFormat, 0);
-+ result = mSwapChain->ResizeBuffers(bufferCount, backbufferWidth, backbufferHeight, backbufferDXGIFormat, 0);
+ const d3d11::TextureFormat &backbufferFormatInfo = d3d11::GetTextureFormatInfo(mBackBufferFormat);
+- HRESULT result = mSwapChain->ResizeBuffers(1, backbufferWidth, backbufferHeight, backbufferFormatInfo.texFormat, 0);
++ result = mSwapChain->ResizeBuffers(bufferCount, backbufferWidth, backbufferHeight, backbufferFormatInfo.texFormat, 0);
if (FAILED(result))
{
-@@ -342,7 +360,7 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
+@@ -346,6 +364,7 @@ EGLint SwapChain11::resize(EGLint backbufferWidth, EGLint backbufferHeight)
return EGL_BAD_ALLOC;
}
}
--
+#endif
+
result = mSwapChain->GetBuffer(0, __uuidof(ID3D11Texture2D), (LPVOID*)&mBackBufferTexture);
ASSERT(SUCCEEDED(result));
- if (SUCCEEDED(result))
-@@ -392,7 +410,7 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
- if (mWindow)
- {
+@@ -399,6 +418,7 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
+
IDXGIFactory *factory = mRenderer->getDxgiFactory();
--
+
+#if !defined(ANGLE_PLATFORM_WINRT)
DXGI_SWAP_CHAIN_DESC swapChainDesc = {0};
swapChainDesc.BufferDesc.Width = backbufferWidth;
swapChainDesc.BufferDesc.Height = backbufferHeight;
-@@ -411,6 +429,37 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
+@@ -417,7 +437,37 @@ EGLint SwapChain11::reset(int backbufferWidth, int backbufferHeight, EGLint swap
swapChainDesc.Flags = 0;
HRESULT result = factory->CreateSwapChain(device, &swapChainDesc, &mSwapChain);
@@ -1212,7 +1198,7 @@ index 98166f0..0341df1 100644
+ DXGI_SWAP_CHAIN_DESC1 swapChainDesc = {0};
+ swapChainDesc.Width = 0;
+ swapChainDesc.Height = 0;
-+ swapChainDesc.Format = gl_d3d11::GetTexFormat(mBackBufferFormat);
++ swapChainDesc.Format = backbufferFormatInfo.texFormat;
+ swapChainDesc.SampleDesc.Count = 1;
+ swapChainDesc.SampleDesc.Quality = 0;
+ swapChainDesc.BufferUsage = DXGI_USAGE_RENDER_TARGET_OUTPUT;
@@ -1226,7 +1212,7 @@ index 98166f0..0341df1 100644
+ swapChainDesc.BufferCount = 1;
+ swapChainDesc.SwapEffect = DXGI_SWAP_EFFECT_DISCARD;
+#endif
-+
+
+ IDXGISwapChain1 *swapChain;
+ result = factory2->CreateSwapChainForCoreWindow(device, mWindow, &swapChainDesc, NULL, &swapChain);
+ mSwapChain = swapChain;
@@ -1235,10 +1221,10 @@ index 98166f0..0341df1 100644
+ mViewportWidth = swapChainDesc.Width;
+ mViewportHeight = swapChainDesc.Height;
+#endif
-
if (FAILED(result))
{
-@@ -507,7 +556,7 @@ void SwapChain11::initPassThroughResources()
+ ERR("Could not create additional swap chains or offscreen surfaces: %08lX", result);
+@@ -513,7 +563,7 @@ void SwapChain11::initPassThroughResources()
}
// parameters should be validated/clamped by caller
@@ -1247,7 +1233,7 @@ index 98166f0..0341df1 100644
{
if (!mSwapChain)
{
-@@ -538,10 +587,13 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
+@@ -544,10 +594,13 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
float u2 = (x + width) / float(mWidth);
float v2 = (y + height) / float(mHeight);
@@ -1265,7 +1251,7 @@ index 98166f0..0341df1 100644
deviceContext->Unmap(mQuadVB, 0);
-@@ -571,8 +623,8 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
+@@ -577,8 +630,8 @@ EGLint SwapChain11::swapRect(EGLint x, EGLint y, EGLint width, EGLint height)
D3D11_VIEWPORT viewport;
viewport.TopLeftX = 0;
viewport.TopLeftY = 0;
@@ -1306,10 +1292,10 @@ index fb0afd7..b30b785 100644
unsigned int mSwapInterval;
bool mPassThroughResourcesInit;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp
-index 4a17acf..c6567b6 100644
+index f702b79..0aeaabb 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/SwapChain9.cpp
-@@ -236,7 +236,7 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
+@@ -238,7 +238,7 @@ EGLint SwapChain9::reset(int backbufferWidth, int backbufferHeight, EGLint swapI
}
// parameters should be validated/clamped by caller
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
index b17f07c00b..297d5adc84 100644
--- 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
@@ -1,7 +1,7 @@
-From cda47c3e09db62c0af7d94537ec51aca5a728db9 Mon Sep 17 00:00:00 2001
+From 0e8aa60332e17f284804dc1b89a9db5795a92ecb Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Mon, 4 Aug 2014 23:51:59 +0300
-Subject: [PATCH 10/12] ANGLE: Enable D3D11 for feature level 9 cards
+Date: Wed, 17 Sep 2014 21:17:39 +0300
+Subject: [PATCH 10/16] ANGLE: Enable D3D11 for feature level 9 cards
Enable use of ANGLE on lower-end hardware, such as Surface RT and
Windows Phone 8.
@@ -9,21 +9,22 @@ Windows Phone 8.
Change-Id: Ice536802e4eedc1d264abd0dd65960638fce59e4
---
src/3rdparty/angle/src/libGLESv2/angletypes.cpp | 4 +-
- .../src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp | 65 +++---
+ .../src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp | 73 +++----
.../src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp | 4 +-
.../src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp | 8 +-
.../renderer/d3d/d3d11/PixelTransfer11.cpp | 7 +-
- .../libGLESv2/renderer/d3d/d3d11/Renderer11.cpp | 246 ++++++++++++++-------
+ .../libGLESv2/renderer/d3d/d3d11/Renderer11.cpp | 209 +++++++++++++--------
.../src/libGLESv2/renderer/d3d/d3d11/Renderer11.h | 1 +
.../renderer/d3d/d3d11/TextureStorage11.cpp | 2 +-
.../libGLESv2/renderer/d3d/d3d11/formatutils11.cpp | 4 +-
- 9 files changed, 219 insertions(+), 122 deletions(-)
+ .../renderer/d3d/d3d11/renderer11_utils.cpp | 2 +-
+ 10 files changed, 190 insertions(+), 124 deletions(-)
diff --git a/src/3rdparty/angle/src/libGLESv2/angletypes.cpp b/src/3rdparty/angle/src/libGLESv2/angletypes.cpp
-index ec5521e..bc929c7 100644
+index 06618d5..bb6425d 100644
--- a/src/3rdparty/angle/src/libGLESv2/angletypes.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/angletypes.cpp
-@@ -23,8 +23,8 @@ SamplerState::SamplerState()
+@@ -22,8 +22,8 @@ SamplerState::SamplerState()
maxAnisotropy(1.0f),
baseLevel(0),
maxLevel(1000),
@@ -35,10 +36,10 @@ index ec5521e..bc929c7 100644
compareFunc(GL_LEQUAL),
swizzleRed(GL_RED),
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp
-index 79a6543..9b0f336 100644
+index 72820a4..d43e65e 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Blit11.cpp
-@@ -210,7 +210,7 @@ Blit11::Blit11(rx::Renderer11 *renderer)
+@@ -209,7 +209,7 @@ Blit11::Blit11(rx::Renderer11 *renderer)
pointSamplerDesc.BorderColor[2] = 0.0f;
pointSamplerDesc.BorderColor[3] = 0.0f;
pointSamplerDesc.MinLOD = 0.0f;
@@ -47,7 +48,7 @@ index 79a6543..9b0f336 100644
result = device->CreateSamplerState(&pointSamplerDesc, &mPointSampler);
ASSERT(SUCCEEDED(result));
-@@ -229,7 +229,7 @@ Blit11::Blit11(rx::Renderer11 *renderer)
+@@ -228,7 +228,7 @@ Blit11::Blit11(rx::Renderer11 *renderer)
linearSamplerDesc.BorderColor[2] = 0.0f;
linearSamplerDesc.BorderColor[3] = 0.0f;
linearSamplerDesc.MinLOD = 0.0f;
@@ -56,7 +57,7 @@ index 79a6543..9b0f336 100644
result = device->CreateSamplerState(&linearSamplerDesc, &mLinearSampler);
ASSERT(SUCCEEDED(result));
-@@ -291,28 +291,32 @@ Blit11::Blit11(rx::Renderer11 *renderer)
+@@ -290,28 +290,31 @@ Blit11::Blit11(rx::Renderer11 *renderer)
ASSERT(SUCCEEDED(result));
d3d11::SetDebugName(mQuad2DVS, "Blit11 2D vertex shader");
@@ -71,30 +72,32 @@ index 79a6543..9b0f336 100644
- { "LAYER", 0, DXGI_FORMAT_R32_UINT, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0 },
- { "TEXCOORD", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
- };
+-
+- result = device->CreateInputLayout(quad3DLayout, ArraySize(quad3DLayout), g_VS_Passthrough3D, ArraySize(g_VS_Passthrough3D), &mQuad3DIL);
+- ASSERT(SUCCEEDED(result));
+- d3d11::SetDebugName(mQuad3DIL, "Blit11 3D input layout");
+ result = device->CreatePixelShader(g_PS_PassthroughDepth2D, ArraySize(g_PS_PassthroughDepth2D), NULL, &mDepthPS);
+ ASSERT(SUCCEEDED(result));
+ d3d11::SetDebugName(mDepthPS, "Blit11 2D depth pixel shader");
-- result = device->CreateInputLayout(quad3DLayout, ArraySize(quad3DLayout), g_VS_Passthrough3D, ArraySize(g_VS_Passthrough3D), &mQuad3DIL);
+- result = device->CreateVertexShader(g_VS_Passthrough3D, ArraySize(g_VS_Passthrough3D), NULL, &mQuad3DVS);
- ASSERT(SUCCEEDED(result));
-- d3d11::SetDebugName(mQuad3DIL, "Blit11 3D input layout");
+- d3d11::SetDebugName(mQuad3DVS, "Blit11 3D vertex shader");
+-
+- result = device->CreateGeometryShader(g_GS_Passthrough3D, ArraySize(g_GS_Passthrough3D), NULL, &mQuad3DGS);
+- ASSERT(SUCCEEDED(result));
+- d3d11::SetDebugName(mQuad3DGS, "Renderer11 copy 3D texture geometry shader");
+ D3D11_INPUT_ELEMENT_DESC quad3DLayout[] =
+ {
+ { "POSITION", 0, DXGI_FORMAT_R32G32_FLOAT, 0, 0, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "LAYER", 0, DXGI_FORMAT_R32_UINT, 0, 8, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ { "TEXCOORD", 0, DXGI_FORMAT_R32G32B32_FLOAT, 0, 12, D3D11_INPUT_PER_VERTEX_DATA, 0 },
+ };
-
-- result = device->CreateVertexShader(g_VS_Passthrough3D, ArraySize(g_VS_Passthrough3D), NULL, &mQuad3DVS);
-- ASSERT(SUCCEEDED(result));
-- d3d11::SetDebugName(mQuad3DVS, "Blit11 3D vertex shader");
++
+ result = device->CreateInputLayout(quad3DLayout, ArraySize(quad3DLayout), g_VS_Passthrough3D, ArraySize(g_VS_Passthrough3D), &mQuad3DIL);
+ ASSERT(SUCCEEDED(result));
+ d3d11::SetDebugName(mQuad3DIL, "Blit11 3D input layout");
-
-- result = device->CreateGeometryShader(g_GS_Passthrough3D, ArraySize(g_GS_Passthrough3D), NULL, &mQuad3DGS);
-- ASSERT(SUCCEEDED(result));
-- d3d11::SetDebugName(mQuad3DGS, "Renderer11 copy 3D texture geometry shader");
++
+ result = device->CreateVertexShader(g_VS_Passthrough3D, ArraySize(g_VS_Passthrough3D), NULL, &mQuad3DVS);
+ ASSERT(SUCCEEDED(result));
+ d3d11::SetDebugName(mQuad3DVS, "Blit11 3D vertex shader");
@@ -102,12 +105,11 @@ index 79a6543..9b0f336 100644
+ result = device->CreateGeometryShader(g_GS_Passthrough3D, ArraySize(g_GS_Passthrough3D), NULL, &mQuad3DGS);
+ ASSERT(SUCCEEDED(result));
+ d3d11::SetDebugName(mQuad3DGS, "Renderer11 copy 3D texture geometry shader");
-+
+ }
buildShaderMap();
-@@ -970,21 +974,27 @@ void Blit11::buildShaderMap()
+@@ -972,40 +975,44 @@ void Blit11::buildShaderMap()
ID3D11Device *device = mRenderer->getDevice();
add2DBlitShaderToMap(GL_RGBA, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA2D, "Blit11 2D RGBA pixel shader" ));
@@ -115,12 +117,18 @@ index 79a6543..9b0f336 100644
- add2DBlitShaderToMap(GL_RGBA_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRGBA2DI, "Blit11 2D RGBA I pixel shader" ));
add2DBlitShaderToMap(GL_BGRA_EXT, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA2D, "Blit11 2D BGRA pixel shader" ));
add2DBlitShaderToMap(GL_RGB, false, d3d11::CompilePS(device, g_PS_PassthroughRGB2D, "Blit11 2D RGB pixel shader" ));
-+ add2DBlitShaderToMap(GL_RG, false, d3d11::CompilePS(device, g_PS_PassthroughRG2D, "Blit11 2D RG pixel shader" ));
-+ add2DBlitShaderToMap(GL_RED, false, d3d11::CompilePS(device, g_PS_PassthroughR2D, "Blit11 2D R pixel shader" ));
-+ add2DBlitShaderToMap(GL_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA2D, "Blit11 2D alpha pixel shader" ));
-+ add2DBlitShaderToMap(GL_LUMINANCE, false, d3d11::CompilePS(device, g_PS_PassthroughLum2D, "Blit11 2D lum pixel shader" ));
-+ add2DBlitShaderToMap(GL_LUMINANCE_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughLumAlpha2D, "Blit11 2D luminance alpha pixel shader"));
-+
+- add2DBlitShaderToMap(GL_RGB_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRGB2DUI, "Blit11 2D RGB UI pixel shader" ));
+- add2DBlitShaderToMap(GL_RGB_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRGB2DI, "Blit11 2D RGB I pixel shader" ));
+ add2DBlitShaderToMap(GL_RG, false, d3d11::CompilePS(device, g_PS_PassthroughRG2D, "Blit11 2D RG pixel shader" ));
+- add2DBlitShaderToMap(GL_RG_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRG2DUI, "Blit11 2D RG UI pixel shader" ));
+- add2DBlitShaderToMap(GL_RG_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRG2DI, "Blit11 2D RG I pixel shader" ));
+ add2DBlitShaderToMap(GL_RED, false, d3d11::CompilePS(device, g_PS_PassthroughR2D, "Blit11 2D R pixel shader" ));
+- add2DBlitShaderToMap(GL_RED_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughR2DUI, "Blit11 2D R UI pixel shader" ));
+- add2DBlitShaderToMap(GL_RED_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughR2DI, "Blit11 2D R I pixel shader" ));
+ add2DBlitShaderToMap(GL_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA2D, "Blit11 2D alpha pixel shader" ));
+ add2DBlitShaderToMap(GL_LUMINANCE, false, d3d11::CompilePS(device, g_PS_PassthroughLum2D, "Blit11 2D lum pixel shader" ));
+ add2DBlitShaderToMap(GL_LUMINANCE_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughLumAlpha2D, "Blit11 2D luminance alpha pixel shader"));
+
+ addSwizzleShaderToMap(GL_FLOAT, D3D_SRV_DIMENSION_TEXTURE2D, d3d11::CompilePS(device, g_PS_SwizzleF2D, "Blit11 2D F swizzle pixel shader" ));
+
+ if (mRenderer->isLevel9())
@@ -128,21 +136,28 @@ index 79a6543..9b0f336 100644
+
+ add2DBlitShaderToMap(GL_RGBA_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA2DUI, "Blit11 2D RGBA UI pixel shader" ));
+ add2DBlitShaderToMap(GL_RGBA_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRGBA2DI, "Blit11 2D RGBA I pixel shader" ));
- add2DBlitShaderToMap(GL_RGB_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRGB2DUI, "Blit11 2D RGB UI pixel shader" ));
- add2DBlitShaderToMap(GL_RGB_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRGB2DI, "Blit11 2D RGB I pixel shader" ));
-- add2DBlitShaderToMap(GL_RG, false, d3d11::CompilePS(device, g_PS_PassthroughRG2D, "Blit11 2D RG pixel shader" ));
- add2DBlitShaderToMap(GL_RG_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRG2DUI, "Blit11 2D RG UI pixel shader" ));
- add2DBlitShaderToMap(GL_RG_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRG2DI, "Blit11 2D RG I pixel shader" ));
-- add2DBlitShaderToMap(GL_RED, false, d3d11::CompilePS(device, g_PS_PassthroughR2D, "Blit11 2D R pixel shader" ));
- add2DBlitShaderToMap(GL_RED_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughR2DUI, "Blit11 2D R UI pixel shader" ));
- add2DBlitShaderToMap(GL_RED_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughR2DI, "Blit11 2D R I pixel shader" ));
-- add2DBlitShaderToMap(GL_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA2D, "Blit11 2D alpha pixel shader" ));
-- add2DBlitShaderToMap(GL_LUMINANCE, false, d3d11::CompilePS(device, g_PS_PassthroughLum2D, "Blit11 2D lum pixel shader" ));
-- add2DBlitShaderToMap(GL_LUMINANCE_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughLumAlpha2D, "Blit11 2D luminance alpha pixel shader"));
-
++ add2DBlitShaderToMap(GL_RGB_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRGB2DUI, "Blit11 2D RGB UI pixel shader" ));
++ add2DBlitShaderToMap(GL_RGB_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRGB2DI, "Blit11 2D RGB I pixel shader" ));
++ add2DBlitShaderToMap(GL_RG_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRG2DUI, "Blit11 2D RG UI pixel shader" ));
++ add2DBlitShaderToMap(GL_RG_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRG2DI, "Blit11 2D RG I pixel shader" ));
++ add2DBlitShaderToMap(GL_RED_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughR2DUI, "Blit11 2D R UI pixel shader" ));
++ add2DBlitShaderToMap(GL_RED_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughR2DI, "Blit11 2D R I pixel shader" ));
add3DBlitShaderToMap(GL_RGBA, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA3D, "Blit11 3D RGBA pixel shader" ));
add3DBlitShaderToMap(GL_RGBA_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA3DUI, "Blit11 3D UI RGBA pixel shader" ));
-@@ -1003,7 +1013,6 @@ void Blit11::buildShaderMap()
+ add3DBlitShaderToMap(GL_RGBA_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRGBA3DI, "Blit11 3D I RGBA pixel shader" ));
+ add3DBlitShaderToMap(GL_BGRA_EXT, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA3D, "Blit11 3D BGRA pixel shader" ));
+ add3DBlitShaderToMap(GL_RGB, false, d3d11::CompilePS(device, g_PS_PassthroughRGB3D, "Blit11 3D RGB pixel shader" ));
++ add3DBlitShaderToMap(GL_RG, false, d3d11::CompilePS(device, g_PS_PassthroughRG3D, "Blit11 3D RG pixel shader" ));
+ add3DBlitShaderToMap(GL_RGB_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRGB3DUI, "Blit11 3D RGB UI pixel shader" ));
+ add3DBlitShaderToMap(GL_RGB_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRGB3DI, "Blit11 3D RGB I pixel shader" ));
+- add3DBlitShaderToMap(GL_RG, false, d3d11::CompilePS(device, g_PS_PassthroughRG3D, "Blit11 3D RG pixel shader" ));
++ add3DBlitShaderToMap(GL_RED, false, d3d11::CompilePS(device, g_PS_PassthroughR3D, "Blit11 3D R pixel shader" ));
+ add3DBlitShaderToMap(GL_RG_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughRG3DUI, "Blit11 3D RG UI pixel shader" ));
+ add3DBlitShaderToMap(GL_RG_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughRG3DI, "Blit11 3D RG I pixel shader" ));
+- add3DBlitShaderToMap(GL_RED, false, d3d11::CompilePS(device, g_PS_PassthroughR3D, "Blit11 3D R pixel shader" ));
+ add3DBlitShaderToMap(GL_RED_INTEGER, false, d3d11::CompilePS(device, g_PS_PassthroughR3DUI, "Blit11 3D R UI pixel shader" ));
+ add3DBlitShaderToMap(GL_RED_INTEGER, true, d3d11::CompilePS(device, g_PS_PassthroughR3DI, "Blit11 3D R I pixel shader" ));
+ add3DBlitShaderToMap(GL_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughRGBA3D, "Blit11 3D alpha pixel shader" ));
add3DBlitShaderToMap(GL_LUMINANCE, false, d3d11::CompilePS(device, g_PS_PassthroughLum3D, "Blit11 3D luminance pixel shader" ));
add3DBlitShaderToMap(GL_LUMINANCE_ALPHA, false, d3d11::CompilePS(device, g_PS_PassthroughLumAlpha3D, "Blit11 3D luminance alpha pixel shader"));
@@ -151,25 +166,25 @@ index 79a6543..9b0f336 100644
addSwizzleShaderToMap(GL_INT, D3D_SRV_DIMENSION_TEXTURE2D, d3d11::CompilePS(device, g_PS_SwizzleI2D, "Blit11 2D I swizzle pixel shader" ));
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp
-index b677fb5..352da96 100644
+index 43ce5ba..ecd4d46 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp
-@@ -711,7 +711,9 @@ void Buffer11::NativeBuffer11::fillBufferDesc(D3D11_BUFFER_DESC* bufferDesc, Ren
+@@ -747,7 +747,9 @@ void Buffer11::NativeBuffer11::fillBufferDesc(D3D11_BUFFER_DESC* bufferDesc, Ren
case BUFFER_USAGE_VERTEX_OR_TRANSFORM_FEEDBACK:
bufferDesc->Usage = D3D11_USAGE_DEFAULT;
- bufferDesc->BindFlags = D3D11_BIND_VERTEX_BUFFER | D3D11_BIND_STREAM_OUTPUT;
+ bufferDesc->BindFlags = D3D11_BIND_VERTEX_BUFFER;
-+ if (renderer->getMaxTransformFeedbackBuffers() > 0)
++ if (!static_cast<Renderer11 *>(renderer)->isLevel9())
+ bufferDesc->BindFlags |= D3D11_BIND_STREAM_OUTPUT;
bufferDesc->CPUAccessFlags = 0;
break;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
-index 9cd0b7d..8db5ea2 100644
+index 5caa427..765d34f 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
-@@ -105,7 +105,7 @@ Clear11::Clear11(Renderer11 *renderer)
+@@ -104,7 +104,7 @@ Clear11::Clear11(Renderer11 *renderer)
rsDesc.DepthBias = 0;
rsDesc.DepthBiasClamp = 0.0f;
rsDesc.SlopeScaledDepthBias = 0.0f;
@@ -178,13 +193,13 @@ index 9cd0b7d..8db5ea2 100644
rsDesc.ScissorEnable = FALSE;
rsDesc.MultisampleEnable = FALSE;
rsDesc.AntialiasedLineEnable = FALSE;
-@@ -115,6 +115,12 @@ Clear11::Clear11(Renderer11 *renderer)
+@@ -114,6 +114,12 @@ Clear11::Clear11(Renderer11 *renderer)
d3d11::SetDebugName(mRasterizerState, "Clear11 masked clear rasterizer state");
mFloatClearShader = CreateClearShader(device, DXGI_FORMAT_R32G32B32A32_FLOAT, g_VS_ClearFloat, g_PS_ClearFloat);
+ if (mRenderer->isLevel9()) {
-+ mUintClearShader = { 0 };
-+ mIntClearShader = { 0 };
++ memset(&mUintClearShader, 0, sizeof(ClearShader));
++ memset(&mIntClearShader, 0, sizeof(ClearShader));
+ return;
+ }
+
@@ -192,10 +207,10 @@ index 9cd0b7d..8db5ea2 100644
mIntClearShader = CreateClearShader(device, DXGI_FORMAT_R32G32B32A32_SINT, g_VS_ClearSint, g_PS_ClearSint );
}
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp
-index 67540bb..0704034 100644
+index edaafec..a4e84f9 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/PixelTransfer11.cpp
-@@ -89,13 +89,16 @@ PixelTransfer11::PixelTransfer11(Renderer11 *renderer)
+@@ -88,13 +88,16 @@ PixelTransfer11::PixelTransfer11(Renderer11 *renderer)
ASSERT(SUCCEEDED(result));
d3d11::SetDebugName(mParamsConstantBuffer, "PixelTransfer11 constant buffer");
@@ -215,10 +230,10 @@ index 67540bb..0704034 100644
PixelTransfer11::~PixelTransfer11()
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-index 36d9a8f..17a13f9 100644
+index 0bb7489..b4b26a8 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-@@ -156,6 +156,11 @@ EGLint Renderer11::initialize()
+@@ -162,6 +162,11 @@ EGLint Renderer11::initialize()
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
@@ -230,7 +245,7 @@ index 36d9a8f..17a13f9 100644
};
D3D_DRIVER_TYPE driverType = D3D_DRIVER_TYPE_HARDWARE;
-@@ -1114,6 +1119,84 @@ void Renderer11::drawElements(GLenum mode, GLsizei count, GLenum type, const GLv
+@@ -1112,6 +1117,84 @@ gl::Error Renderer11::drawElements(GLenum mode, GLsizei count, GLenum type, cons
}
}
@@ -312,10 +327,10 @@ index 36d9a8f..17a13f9 100644
+ }
+}
+
- void Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer)
+ gl::Error Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices, int minIndex, gl::Buffer *elementArrayBuffer)
{
// Get the raw indices for an indexed draw
-@@ -1125,10 +1208,13 @@ void Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices,
+@@ -1123,10 +1206,13 @@ gl::Error Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *ind
indices = static_cast<const GLubyte*>(storage->getData()) + offset;
}
@@ -325,12 +340,12 @@ index 36d9a8f..17a13f9 100644
if (!mLineLoopIB)
{
mLineLoopIB = new StreamingIndexBufferInterface(this);
-- if (!mLineLoopIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT))
-+ if (!mLineLoopIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, indexType))
+- gl::Error error = mLineLoopIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT);
++ gl::Error error = mLineLoopIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, indexType);
+ if (error.isError())
{
- delete mLineLoopIB;
- mLineLoopIB = NULL;
-@@ -1141,14 +1227,15 @@ void Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices,
+ SafeDelete(mLineLoopIB);
+@@ -1137,7 +1223,8 @@ gl::Error Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *ind
// Checked by Renderer11::applyPrimitiveType
ASSERT(count >= 0);
@@ -338,19 +353,10 @@ index 36d9a8f..17a13f9 100644
+ int indexTypeSize = indexType == GL_UNSIGNED_SHORT ? sizeof(unsigned short) : sizeof(unsigned int);
+ if (static_cast<unsigned int>(count) + 1 > (std::numeric_limits<unsigned int>::max() / indexTypeSize))
{
- ERR("Could not create a 32-bit looping index buffer for GL_LINE_LOOP, too many indices required.");
- return gl::error(GL_OUT_OF_MEMORY);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create a 32-bit looping index buffer for GL_LINE_LOOP, too many indices required.");
}
-
-- const unsigned int spaceNeeded = (static_cast<unsigned int>(count) + 1) * sizeof(unsigned int);
-- if (!mLineLoopIB->reserveBufferSpace(spaceNeeded, GL_UNSIGNED_INT))
-+ const unsigned int spaceNeeded = (static_cast<unsigned int>(count) + 1) * indexTypeSize;
-+ if (!mLineLoopIB->reserveBufferSpace(spaceNeeded, indexType))
- {
- ERR("Could not reserve enough space in looping index buffer for GL_LINE_LOOP.");
- return gl::error(GL_OUT_OF_MEMORY);
-@@ -1162,42 +1249,12 @@ void Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *indices,
- return gl::error(GL_OUT_OF_MEMORY);
+@@ -1157,42 +1244,12 @@ gl::Error Renderer11::drawLineLoop(GLsizei count, GLenum type, const GLvoid *ind
+ return error;
}
- unsigned int *data = reinterpret_cast<unsigned int*>(mappedMemory);
@@ -393,10 +399,10 @@ index 36d9a8f..17a13f9 100644
- default: UNREACHABLE();
- }
-
- if (!mLineLoopIB->unmapBuffer())
+ error = mLineLoopIB->unmapBuffer();
+ if (error.isError())
{
- ERR("Could not unmap index buffer for GL_LINE_LOOP.");
-@@ -1230,10 +1287,12 @@ void Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *indic
+@@ -1227,10 +1284,12 @@ gl::Error Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *
indices = static_cast<const GLubyte*>(storage->getData()) + offset;
}
@@ -405,12 +411,12 @@ index 36d9a8f..17a13f9 100644
if (!mTriangleFanIB)
{
mTriangleFanIB = new StreamingIndexBufferInterface(this);
-- if (!mTriangleFanIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT))
-+ if (!mTriangleFanIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, indexType))
+- gl::Error error = mTriangleFanIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, GL_UNSIGNED_INT);
++ gl::Error error = mTriangleFanIB->reserveBufferSpace(INITIAL_INDEX_BUFFER_SIZE, indexType);
+ if (error.isError())
{
- delete mTriangleFanIB;
- mTriangleFanIB = NULL;
-@@ -1248,14 +1307,15 @@ void Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *indic
+ SafeDelete(mTriangleFanIB);
+@@ -1243,13 +1302,14 @@ gl::Error Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *
const unsigned int numTris = count - 2;
@@ -418,27 +424,26 @@ index 36d9a8f..17a13f9 100644
+ int indexTypeSize = indexType == GL_UNSIGNED_SHORT ? sizeof(unsigned short) : sizeof(unsigned int);
+ if (numTris > (std::numeric_limits<unsigned int>::max() / (indexTypeSize * 3)))
{
- ERR("Could not create a scratch index buffer for GL_TRIANGLE_FAN, too many indices required.");
- return gl::error(GL_OUT_OF_MEMORY);
+ return gl::Error(GL_OUT_OF_MEMORY, "Failed to create a scratch index buffer for GL_TRIANGLE_FAN, too many indices required.");
}
- const unsigned int spaceNeeded = (numTris * 3) * sizeof(unsigned int);
-- if (!mTriangleFanIB->reserveBufferSpace(spaceNeeded, GL_UNSIGNED_INT))
+- gl::Error error = mTriangleFanIB->reserveBufferSpace(spaceNeeded, GL_UNSIGNED_INT);
+ const unsigned int spaceNeeded = (numTris * 3) * indexTypeSize;
-+ if (!mTriangleFanIB->reserveBufferSpace(spaceNeeded, indexType))
++ gl::Error error = mTriangleFanIB->reserveBufferSpace(spaceNeeded, indexType);
+ if (error.isError())
{
- ERR("Could not reserve enough space in scratch index buffer for GL_TRIANGLE_FAN.");
- return gl::error(GL_OUT_OF_MEMORY);
-@@ -1269,46 +1329,12 @@ void Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *indic
- return gl::error(GL_OUT_OF_MEMORY);
+ return error;
+@@ -1263,45 +1323,12 @@ gl::Error Renderer11::drawTriangleFan(GLsizei count, GLenum type, const GLvoid *
+ return error;
}
- unsigned int *data = reinterpret_cast<unsigned int*>(mappedMemory);
+- unsigned int indexBufferOffset = offset;
+ if (indexType == GL_UNSIGNED_SHORT)
+ fillTriangleFanIndices(type, numTris, indices, reinterpret_cast<unsigned short*>(mappedMemory));
+ else
+ fillTriangleFanIndices(type, numTris, indices, reinterpret_cast<unsigned int*>(mappedMemory));
- unsigned int indexBufferOffset = offset;
- switch (type)
- {
@@ -476,11 +481,11 @@ index 36d9a8f..17a13f9 100644
- break;
- default: UNREACHABLE();
- }
--
- if (!mTriangleFanIB->unmapBuffer())
- {
- ERR("Could not unmap scratch index buffer for GL_TRIANGLE_FAN.");
-@@ -1550,7 +1576,7 @@ void Renderer11::applyUniforms(const gl::ProgramBinary &programBinary)
++ unsigned int indexBufferOffset = offset;
+
+ error = mTriangleFanIB->unmapBuffer();
+ if (error.isError())
+@@ -1549,7 +1576,7 @@ gl::Error Renderer11::applyUniforms(const gl::ProgramBinary &programBinary)
}
// needed for the point sprite geometry shader
@@ -489,7 +494,7 @@ index 36d9a8f..17a13f9 100644
{
mDeviceContext->GSSetConstantBuffers(0, 1, &mDriverConstantBufferPS);
mCurrentGeometryConstantBuffer = mDriverConstantBufferPS;
-@@ -1700,6 +1726,11 @@ bool Renderer11::testDeviceResettable()
+@@ -1711,6 +1738,11 @@ bool Renderer11::testDeviceResettable()
D3D_FEATURE_LEVEL_11_0,
D3D_FEATURE_LEVEL_10_1,
D3D_FEATURE_LEVEL_10_0,
@@ -501,102 +506,7 @@ index 36d9a8f..17a13f9 100644
};
ID3D11Device* dummyDevice;
-@@ -1817,6 +1848,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;
- }
-@@ -1840,14 +1875,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;
- }
-
-@@ -1864,6 +1899,11 @@ unsigned int Renderer11::getMaxVaryingVectors() const
- return D3D10_1_VS_OUTPUT_REGISTER_COUNT - getReservedVaryings();
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_VS_OUTPUT_REGISTER_COUNT - getReservedVaryings();
-+ case D3D_FEATURE_LEVEL_9_3:
-+ return 10 - getReservedVaryings();
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 8 - getReservedVaryings();
- default: UNREACHABLE();
- return 0;
- }
-@@ -1881,6 +1921,10 @@ unsigned int Renderer11::getMaxVertexShaderUniformBuffers() const
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - getReservedVertexUniformBuffers();
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 0;
- default: UNREACHABLE();
- return 0;
- }
-@@ -1898,6 +1942,10 @@ unsigned int Renderer11::getMaxFragmentShaderUniformBuffers() const
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - getReservedFragmentUniformBuffers();
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 0;
- default: UNREACHABLE();
- return 0;
- }
-@@ -1935,6 +1983,10 @@ unsigned int Renderer11::getMaxTransformFeedbackBuffers() const
- return D3D10_1_SO_BUFFER_SLOT_COUNT;
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_SO_BUFFER_SLOT_COUNT;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 0;
- default: UNREACHABLE();
- return 0;
- }
-@@ -1951,6 +2003,10 @@ unsigned int Renderer11::getMaxTransformFeedbackSeparateComponents() const
- // D3D 10 and 10.1 only allow one output per output slot if an output slot other than zero
- // is used.
- return 4;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 0;
- default: UNREACHABLE();
- return 0;
- }
-@@ -1973,6 +2029,10 @@ unsigned int Renderer11::getMaxUniformBufferSize() const
- case D3D_FEATURE_LEVEL_10_1:
- case D3D_FEATURE_LEVEL_10_0:
- return D3D10_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
-+ case D3D_FEATURE_LEVEL_9_3:
-+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return 0;
- default: UNREACHABLE();
- return 0;
- }
-@@ -2021,7 +2081,11 @@ int Renderer11::getMajorShaderModel() const
+@@ -1862,7 +1894,10 @@ 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
@@ -604,12 +514,11 @@ index 36d9a8f..17a13f9 100644
+ case D3D_FEATURE_LEVEL_10_0:
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
-+ case D3D_FEATURE_LEVEL_9_1:
-+ return D3D10_SHADER_MAJOR_VERSION; // 4
++ case D3D_FEATURE_LEVEL_9_1: return D3D10_SHADER_MAJOR_VERSION; // 4
default: UNREACHABLE(); return 0;
}
}
-@@ -2032,7 +2096,10 @@ int Renderer11::getMinorShaderModel() const
+@@ -1873,7 +1908,10 @@ 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
@@ -621,7 +530,7 @@ index 36d9a8f..17a13f9 100644
default: UNREACHABLE(); return 0;
}
}
-@@ -2615,6 +2682,15 @@ ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const ch
+@@ -2387,6 +2425,15 @@ ShaderExecutable *Renderer11::compileToExecutable(gl::InfoLog &infoLog, const ch
case D3D_FEATURE_LEVEL_10_0:
profileVersion = "4_0";
break;
@@ -638,10 +547,10 @@ index 36d9a8f..17a13f9 100644
UNREACHABLE();
return NULL;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
-index 618972d..a31f15e 100644
+index b86f5e5..2a53fa1 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
-@@ -199,6 +199,7 @@ class Renderer11 : public Renderer
+@@ -184,6 +184,7 @@ class Renderer11 : public Renderer
ID3D11Device *getDevice() { return mDevice; }
ID3D11DeviceContext *getDeviceContext() { return mDeviceContext; };
IDXGIFactory *getDxgiFactory() { return mDxgiFactory; };
@@ -650,40 +559,53 @@ index 618972d..a31f15e 100644
Blit11 *getBlitter() { return mBlit; }
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp
-index 65e0e63..00b81b7 100644
+index 3f0cd5b..91e7147 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/TextureStorage11.cpp
-@@ -441,7 +441,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, GLenum internalform
+@@ -472,7 +472,7 @@ TextureStorage11_2D::TextureStorage11_2D(Renderer *renderer, GLenum internalform
D3D11_TEXTURE2D_DESC desc;
desc.Width = width; // Compressed texture size constraints?
desc.Height = height;
- desc.MipLevels = ((levels > 0) ? (mTopLevel + levels) : 0);
-+ desc.MipLevels = mRenderer->isLevel9() ? 1 : ((levels > 0) ? (mTopLevel + levels) : 0);
++ desc.MipLevels = desc.MipLevels = mRenderer->isLevel9() ? 1 : ((levels > 0) ? (mTopLevel + levels) : 0);
desc.ArraySize = 1;
desc.Format = mTextureFormat;
desc.SampleDesc.Count = 1;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/formatutils11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/formatutils11.cpp
-index a300c2e..c991fd4 100644
+index 1ea916d..c078287 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/formatutils11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/formatutils11.cpp
-@@ -106,7 +106,7 @@ static D3D11ES3FormatMap BuildD3D11FormatMap()
+@@ -557,7 +557,7 @@ D3D11LoadFunctionMap BuildD3D11LoadFunctionMap()
+ InsertLoadFunction(&map, GL_ALPHA, GL_HALF_FLOAT_OES, LoadA16FToRGBA16F );
// From GL_EXT_texture_storage
- // | GL internal format | | D3D11 texture format | D3D11 SRV format | D3D11 RTV format | D3D11 DSV format |
-- map.insert(D3D11ES3FormatPair(GL_ALPHA8_EXT, D3D11FormatInfo(DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_UNKNOWN )));
-+ map.insert(D3D11ES3FormatPair(GL_ALPHA8_EXT, D3D11FormatInfo(DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN )));
- map.insert(D3D11ES3FormatPair(GL_LUMINANCE8_EXT, D3D11FormatInfo(DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN )));
- map.insert(D3D11ES3FormatPair(GL_ALPHA32F_EXT, D3D11FormatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN )));
- map.insert(D3D11ES3FormatPair(GL_LUMINANCE32F_EXT, D3D11FormatInfo(DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN )));
-@@ -309,7 +309,7 @@ D3D11LoadFunctionMap buildD3D11LoadFunctionMap()
- insertLoadFunction(&map, GL_ALPHA, GL_HALF_FLOAT_OES, LoadA16FToRGBA16F );
+- InsertLoadFunction(&map, GL_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 1> );
++ InsertLoadFunction(&map, GL_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadA8ToRGBA8 );
+ InsertLoadFunction(&map, GL_LUMINANCE8_EXT, GL_UNSIGNED_BYTE, LoadL8ToRGBA8 );
+ InsertLoadFunction(&map, GL_LUMINANCE8_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadLA8ToRGBA8 );
+ InsertLoadFunction(&map, GL_ALPHA32F_EXT, GL_FLOAT, LoadA32FToRGBA32F );
+@@ -795,7 +795,7 @@ static D3D11ES3FormatMap BuildD3D11FormatMap()
// From GL_EXT_texture_storage
-- insertLoadFunction(&map, GL_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadToNative<GLubyte, 1> );
-+ insertLoadFunction(&map, GL_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadA8ToBGRA8 );
- insertLoadFunction(&map, GL_LUMINANCE8_EXT, GL_UNSIGNED_BYTE, LoadL8ToRGBA8 );
- insertLoadFunction(&map, GL_LUMINANCE8_ALPHA8_EXT, GL_UNSIGNED_BYTE, LoadLA8ToRGBA8 );
- insertLoadFunction(&map, GL_ALPHA32F_EXT, GL_FLOAT, LoadA32FToRGBA32F );
+ // | GL internal format | D3D11 texture format | D3D11 SRV format | D3D11 RTV format | D3D11 DSV format |
+- InsertD3D11FormatInfo(&map, GL_ALPHA8_EXT, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_A8_UNORM, DXGI_FORMAT_UNKNOWN );
++ InsertD3D11FormatInfo(&map, GL_ALPHA8_EXT, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN );
+ InsertD3D11FormatInfo(&map, GL_LUMINANCE8_EXT, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_R8G8B8A8_UNORM, DXGI_FORMAT_UNKNOWN );
+ InsertD3D11FormatInfo(&map, GL_ALPHA32F_EXT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN );
+ InsertD3D11FormatInfo(&map, GL_LUMINANCE32F_EXT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_R32G32B32A32_FLOAT, DXGI_FORMAT_UNKNOWN );
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
+index b1867fb..06a22eb 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
+@@ -283,7 +283,7 @@ static bool GetNPOTTextureSupport(D3D_FEATURE_LEVEL featureLevel)
+ // From http://msdn.microsoft.com/en-us/library/windows/desktop/ff476876.aspx
+ case D3D_FEATURE_LEVEL_9_3:
+ case D3D_FEATURE_LEVEL_9_2:
+- case D3D_FEATURE_LEVEL_9_1: return false;
++ case D3D_FEATURE_LEVEL_9_1: return true; // Provided that mipmaps & wrap modes are not used
+
+ default: UNREACHABLE(); return false;
+ }
--
1.9.0.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
deleted file mode 100644
index 72221117c4..0000000000
--- a/src/angle/patches/0011-ANGLE-Fix-compilation-error-on-MinGW-caused-by-trace.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From a814e99f287ff19317ab1651428a5fa330aefd08 Mon Sep 17 00:00:00 2001
-From: Andrew Knight <andrew.knight@digia.com>
-Date: Wed, 2 Jul 2014 08:33:00 +0300
-Subject: [PATCH 11/12] 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.9.0.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
index 2ce3b32721..35d525fb2d 100644
--- a/src/angle/patches/0012-ANGLE-fix-semantic-index-lookup.patch
+++ b/src/angle/patches/0012-ANGLE-fix-semantic-index-lookup.patch
@@ -1,7 +1,7 @@
-From 107c66f691b824edfa63e8c7e578603b5ecb0d0e Mon Sep 17 00:00:00 2001
+From 9e167b788cc9de1d963fd3fc2145848a6ccc0fa8 Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Mon, 4 Aug 2014 23:53:47 +0300
-Subject: [PATCH 12/12] ANGLE: fix semantic index lookup
+Date: Mon, 22 Sep 2014 23:13:16 +0300
+Subject: [PATCH 12/16] 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
@@ -14,10 +14,10 @@ Change-Id: I75d05ed707f56c45210e3dcbc277f894e3dc5a48
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 38a6604..9fad5fb 100644
+index 1085346..3f6d9e0 100644
--- a/src/3rdparty/angle/src/libGLESv2/ProgramBinary.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/ProgramBinary.cpp
-@@ -2814,7 +2814,7 @@ void ProgramBinary::sortAttributesByLayout(rx::TranslatedAttribute attributes[MA
+@@ -2788,7 +2788,7 @@ void ProgramBinary::sortAttributesByLayout(rx::TranslatedAttribute attributes[MA
for (int i = 0; i < MAX_VERTEX_ATTRIBS; i++)
{
int oldIndex = mAttributesByLayout[i];
@@ -27,10 +27,10 @@ index 38a6604..9fad5fb 100644
}
}
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/InputLayoutCache.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/InputLayoutCache.cpp
-index a10f64e..3536faf 100644
+index b006c04..d835e4f 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/InputLayoutCache.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/InputLayoutCache.cpp
-@@ -114,10 +114,10 @@ GLenum InputLayoutCache::applyVertexBuffers(TranslatedAttribute attributes[gl::M
+@@ -112,10 +112,10 @@ gl::Error InputLayoutCache::applyVertexBuffers(TranslatedAttribute attributes[gl
// 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;
@@ -40,7 +40,7 @@ index a10f64e..3536faf 100644
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 = dxgiFormat;
+ ilKey.elements[ilKey.elementCount].desc.Format = vertexFormatInfo.nativeFormat;
ilKey.elements[ilKey.elementCount].desc.InputSlot = i;
ilKey.elements[ilKey.elementCount].desc.AlignedByteOffset = 0;
--
diff --git a/src/angle/patches/0013-ANGLE-Add-support-for-querying-platform-device.patch b/src/angle/patches/0013-ANGLE-Add-support-for-querying-platform-device.patch
index 7079b464a9..00e32186f0 100644
--- a/src/angle/patches/0013-ANGLE-Add-support-for-querying-platform-device.patch
+++ b/src/angle/patches/0013-ANGLE-Add-support-for-querying-platform-device.patch
@@ -1,7 +1,7 @@
-From f506d5b7f03110fd31466ca20e46375f1316ac41 Mon Sep 17 00:00:00 2001
+From 3499339ab768017458d3b5295af3742a0f6015db Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Mon, 28 Jul 2014 10:14:09 +0300
-Subject: [PATCH] ANGLE: Add support for querying platform device
+Date: Mon, 22 Sep 2014 23:15:26 +0300
+Subject: [PATCH 13/16] ANGLE: Add support for querying platform device
The EGL_EXT_device_base extension allows for querying the platform
device of the graphics hardware via eglQueryDisplayAttribEXT().
@@ -20,10 +20,10 @@ Change-Id: Ibdf228d81d6604e56db9dd8597d7cd2983ebc428
1 file changed, 37 insertions(+), 10 deletions(-)
diff --git a/src/3rdparty/angle/src/libEGL/libEGL.cpp b/src/3rdparty/angle/src/libEGL/libEGL.cpp
-index a08e1ed..c236d52 100644
+index 7ea11c5..c2e0fd6 100644
--- a/src/3rdparty/angle/src/libEGL/libEGL.cpp
+++ b/src/3rdparty/angle/src/libEGL/libEGL.cpp
-@@ -15,6 +15,9 @@
+@@ -18,6 +18,9 @@
#include "libGLESv2/Texture.h"
#include "libGLESv2/main.h"
#include "libGLESv2/renderer/SwapChain.h"
@@ -33,7 +33,7 @@ index a08e1ed..c236d52 100644
#include "libEGL/main.h"
#include "libEGL/Display.h"
-@@ -481,24 +484,48 @@ EGLBoolean __stdcall eglQuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surf
+@@ -484,24 +487,48 @@ EGLBoolean __stdcall eglQuerySurfacePointerANGLE(EGLDisplay dpy, EGLSurface surf
egl::Display *display = static_cast<egl::Display*>(dpy);
egl::Surface *eglSurface = (egl::Surface*)surface;
diff --git a/src/angle/patches/0014-Let-ANGLE-use-multithreaded-devices-if-necessary.patch b/src/angle/patches/0014-Let-ANGLE-use-multithreaded-devices-if-necessary.patch
index 1e60f0c54a..b884f7b549 100644
--- a/src/angle/patches/0014-Let-ANGLE-use-multithreaded-devices-if-necessary.patch
+++ b/src/angle/patches/0014-Let-ANGLE-use-multithreaded-devices-if-necessary.patch
@@ -1,7 +1,7 @@
-From d52fac0c0b5d12cd117ae4b871f0ac6a202755ad Mon Sep 17 00:00:00 2001
-From: =?UTF-8?q?Michael=20Br=C3=BCning?= <michael.bruning@digia.com>
-Date: Wed, 27 Aug 2014 12:42:00 +0200
-Subject: [PATCH] Let ANGLE use multithreaded devices if necessary.
+From a3046fef7f754f06937161e779ce0a651e77317b Mon Sep 17 00:00:00 2001
+From: Michael Bruning <michael.bruning@digia.com>
+Date: Mon, 22 Sep 2014 23:23:40 +0300
+Subject: [PATCH 14/16] Let ANGLE use multithreaded devices if necessary.
This is needed to prevent lock-ups in application that use ANGLE from
multiple threads, as e.g. QtWebEngine based applications do.
@@ -17,10 +17,10 @@ Change-Id: Ibd5a5c75eb68af567d420d9a35efb3490c93b27c
3 files changed, 18 insertions(+)
diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h
-index e16e7ac..cedc6f2 100644
+index 387ba41..7d0d957 100644
--- a/src/3rdparty/angle/src/common/platform.h
+++ b/src/3rdparty/angle/src/common/platform.h
-@@ -56,6 +56,7 @@
+@@ -57,6 +57,7 @@
# if defined(ANGLE_ENABLE_D3D11)
# include <d3d10_1.h>
@@ -29,12 +29,12 @@ index e16e7ac..cedc6f2 100644
# include <dxgi.h>
# include <dxgi1_2.h>
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-index 17a13f9..651b065 100644
+index b4b26a8..bd07ee1 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-@@ -305,6 +305,19 @@ EGLint Renderer11::initialize()
- mMaxSupportedSamples = std::max(mMaxSupportedSamples, support.maxSupportedSamples);
+@@ -301,6 +301,19 @@ EGLint Renderer11::initialize()
}
+ #endif
+#if !defined(ANGLE_PLATFORM_WINRT)
+ static wchar_t *qt_d3dcreate_multihreaded_var = _wgetenv(L"QT_D3DCREATE_MULTITHREADED");
@@ -53,10 +53,10 @@ index 17a13f9..651b065 100644
return EGL_SUCCESS;
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
-index 491c27a..2c8a79f 100644
+index e8564bd..1d52705 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
-@@ -319,6 +319,10 @@ EGLint Renderer9::initialize()
+@@ -304,6 +304,10 @@ EGLint Renderer9::initialize()
D3DPRESENT_PARAMETERS presentParameters = getDefaultPresentParameters();
DWORD behaviorFlags = D3DCREATE_FPU_PRESERVE | D3DCREATE_NOWINDOWCHANGES;
@@ -65,8 +65,8 @@ index 491c27a..2c8a79f 100644
+ behaviorFlags |= D3DCREATE_MULTITHREADED;
+
{
- TRACE_EVENT0("gpu", "D3d9_CreateDevice");
result = mD3d9->CreateDevice(mAdapter, mDeviceType, mDeviceWindow, behaviorFlags | D3DCREATE_HARDWARE_VERTEXPROCESSING | D3DCREATE_PUREDEVICE, &presentParameters, &mDevice);
+ }
--
-1.8.3.2
+1.9.0.msysgit.0
diff --git a/src/angle/patches/0015-ANGLE-Fix-angle-d3d11-on-MSVC2010.patch b/src/angle/patches/0015-ANGLE-Fix-angle-d3d11-on-MSVC2010.patch
index dcff4a323e..7d914766a0 100644
--- a/src/angle/patches/0015-ANGLE-Fix-angle-d3d11-on-MSVC2010.patch
+++ b/src/angle/patches/0015-ANGLE-Fix-angle-d3d11-on-MSVC2010.patch
@@ -1,54 +1,50 @@
-From bfcd8298f9ba074116de434bf252ea95be968a20 Mon Sep 17 00:00:00 2001
+From 373b3f67352e9a6f599c6a9dd9aee3b4836e0a3f Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Mon, 1 Sep 2014 12:11:17 +0300
-Subject: [PATCH] ANGLE: Fix -angle-d3d11 on MSVC2010
+Date: Mon, 22 Sep 2014 23:41:48 +0300
+Subject: [PATCH 15/16] ANGLE: Fix -angle-d3d11 on MSVC2010
Allow the D3D11 renderer to build with the June 2010 DirectX SDK.
Change-Id: I2343acedab16845d6a0d4a53cf3145f583efc4a7
---
- src/3rdparty/angle/src/common/platform.h | 2 +
- .../src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp | 4 +-
- .../renderer/d3d/d3d11/renderer11_utils.cpp | 49 ++++++++++++++++++++++
- 3 files changed, 53 insertions(+), 2 deletions(-)
+ src/3rdparty/angle/src/common/platform.h | 6 ++
+ .../renderer/d3d/d3d11/renderer11_utils.cpp | 89 ++++++++++++++++++++++
+ 2 files changed, 95 insertions(+)
diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h
-index cedc6f2..44c5c7c 100644
+index 7d0d957..3c619f3 100644
--- a/src/3rdparty/angle/src/common/platform.h
+++ b/src/3rdparty/angle/src/common/platform.h
-@@ -59,8 +59,10 @@
+@@ -52,7 +52,9 @@
+
+ # if defined(ANGLE_ENABLE_D3D9) || defined(ANGLE_ENABLE_PERF)
+ # include <d3d9.h>
++# if !defined(COMPILER_IMPLEMENTATION)
+ # include <d3dcompiler.h>
++# endif
+ # endif
+
+ # if defined(ANGLE_ENABLE_D3D11)
+@@ -60,8 +62,12 @@
# include <d3d10.h>
# include <d3d11.h>
# include <dxgi.h>
+# if _MSC_VER >= 1700
# include <dxgi1_2.h>
++# endif
++# if !defined(COMPILER_IMPLEMENTATION)
# include <d3dcompiler.h>
+# endif
# endif
# undef near
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
-index 8db5ea2..5121950 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Clear11.cpp
-@@ -116,8 +116,8 @@ Clear11::Clear11(Renderer11 *renderer)
-
- mFloatClearShader = CreateClearShader(device, DXGI_FORMAT_R32G32B32A32_FLOAT, g_VS_ClearFloat, g_PS_ClearFloat);
- if (mRenderer->isLevel9()) {
-- mUintClearShader = { 0 };
-- mIntClearShader = { 0 };
-+ memset(&mUintClearShader, 0, sizeof(ClearShader));
-+ memset(&mIntClearShader, 0, sizeof(ClearShader));
- return;
- }
-
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
-index d3d135f..8e0c21b 100644
+index 06a22eb..345fd24 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
-@@ -12,6 +12,31 @@
- #include "libGLESv2/renderer/d3d/d3d11/formatutils11.h"
- #include "common/debug.h"
+@@ -17,6 +17,37 @@
+
+ #include <algorithm>
+#ifndef D3D_FL9_1_DEFAULT_MAX_ANISOTROPY
+# define D3D_FL9_1_DEFAULT_MAX_ANISOTROPY 2
@@ -59,6 +55,12 @@ index d3d135f..8e0c21b 100644
+#ifndef D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT
+# define D3D_FL9_3_SIMULTANEOUS_RENDER_TARGET_COUNT 4
+#endif
++#ifndef D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT
++# define D3D_FL9_1_IA_PRIMITIVE_MAX_COUNT 65535
++#endif
++#ifndef D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT
++# define D3D_FL9_2_IA_PRIMITIVE_MAX_COUNT 1048575
++#endif
+#ifndef D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION
+# define D3D_FL9_1_REQ_TEXTURECUBE_DIMENSION 512
+#endif
@@ -78,7 +80,7 @@ index d3d135f..8e0c21b 100644
namespace rx
{
-@@ -273,7 +298,9 @@ static bool GetNPOTTextureSupport(D3D_FEATURE_LEVEL featureLevel)
+@@ -275,7 +306,9 @@ static bool GetNPOTTextureSupport(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -88,7 +90,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0:
case D3D_FEATURE_LEVEL_10_1:
case D3D_FEATURE_LEVEL_10_0: return true;
-@@ -291,7 +318,9 @@ static float GetMaximumAnisotropy(D3D_FEATURE_LEVEL featureLevel)
+@@ -293,7 +326,9 @@ static float GetMaximumAnisotropy(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -98,7 +100,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0: return D3D11_MAX_MAXANISOTROPY;
case D3D_FEATURE_LEVEL_10_1:
-@@ -311,7 +340,9 @@ static bool GetOcclusionQuerySupport(D3D_FEATURE_LEVEL featureLevel)
+@@ -313,7 +348,9 @@ static bool GetOcclusionQuerySupport(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -108,7 +110,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0:
case D3D_FEATURE_LEVEL_10_1:
case D3D_FEATURE_LEVEL_10_0: return true;
-@@ -331,7 +362,9 @@ static bool GetEventQuerySupport(D3D_FEATURE_LEVEL featureLevel)
+@@ -333,7 +370,9 @@ static bool GetEventQuerySupport(D3D_FEATURE_LEVEL featureLevel)
switch (featureLevel)
{
@@ -118,7 +120,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0:
case D3D_FEATURE_LEVEL_10_1:
case D3D_FEATURE_LEVEL_10_0:
-@@ -349,7 +382,9 @@ static bool GetInstancingSupport(D3D_FEATURE_LEVEL featureLevel)
+@@ -351,7 +390,9 @@ static bool GetInstancingSupport(D3D_FEATURE_LEVEL featureLevel)
switch (featureLevel)
{
@@ -128,7 +130,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0:
case D3D_FEATURE_LEVEL_10_1:
case D3D_FEATURE_LEVEL_10_0:
-@@ -372,7 +407,9 @@ static bool GetDerivativeInstructionSupport(D3D_FEATURE_LEVEL featureLevel)
+@@ -374,7 +415,9 @@ static bool GetDerivativeInstructionSupport(D3D_FEATURE_LEVEL featureLevel)
switch (featureLevel)
{
@@ -138,7 +140,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0:
case D3D_FEATURE_LEVEL_10_1:
case D3D_FEATURE_LEVEL_10_0:
-@@ -390,7 +427,9 @@ static size_t GetMaximumSimultaneousRenderTargets(D3D_FEATURE_LEVEL featureLevel
+@@ -392,7 +435,9 @@ static size_t GetMaximumSimultaneousRenderTargets(D3D_FEATURE_LEVEL featureLevel
switch (featureLevel)
{
@@ -147,8 +149,8 @@ index d3d135f..8e0c21b 100644
+#endif
case D3D_FEATURE_LEVEL_11_0: return D3D11_SIMULTANEOUS_RENDER_TARGET_COUNT;
- // FIXME(geofflang): Work around NVIDIA driver bug by repacking buffers
-@@ -409,7 +448,9 @@ static size_t GetMaximum2DTextureSize(D3D_FEATURE_LEVEL featureLevel)
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -410,7 +455,9 @@ static size_t GetMaximum2DTextureSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -158,7 +160,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_U_OR_V_DIMENSION;
case D3D_FEATURE_LEVEL_10_1:
-@@ -427,7 +468,9 @@ static size_t GetMaximumCubeMapTextureSize(D3D_FEATURE_LEVEL featureLevel)
+@@ -428,7 +475,9 @@ static size_t GetMaximumCubeMapTextureSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -168,7 +170,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURECUBE_DIMENSION;
case D3D_FEATURE_LEVEL_10_1:
-@@ -445,7 +488,9 @@ static size_t GetMaximum2DTextureArraySize(D3D_FEATURE_LEVEL featureLevel)
+@@ -446,7 +495,9 @@ static size_t GetMaximum2DTextureArraySize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -178,7 +180,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE2D_ARRAY_AXIS_DIMENSION;
case D3D_FEATURE_LEVEL_10_1:
-@@ -463,7 +508,9 @@ static size_t GetMaximum3DTextureSize(D3D_FEATURE_LEVEL featureLevel)
+@@ -464,7 +515,9 @@ static size_t GetMaximum3DTextureSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -188,7 +190,7 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION;
case D3D_FEATURE_LEVEL_10_1:
-@@ -481,7 +528,9 @@ static size_t GetMaximumViewportSize(D3D_FEATURE_LEVEL featureLevel)
+@@ -482,7 +535,9 @@ static size_t GetMaximumViewportSize(D3D_FEATURE_LEVEL featureLevel)
{
switch (featureLevel)
{
@@ -198,6 +200,176 @@ index d3d135f..8e0c21b 100644
case D3D_FEATURE_LEVEL_11_0: return D3D11_VIEWPORT_BOUNDS_MAX;
case D3D_FEATURE_LEVEL_10_1:
+@@ -506,7 +561,9 @@ static size_t GetMaximumDrawIndexedIndexCount(D3D_FEATURE_LEVEL featureLevel)
+
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return std::numeric_limits<GLint>::max();
+@@ -528,7 +585,9 @@ static size_t GetMaximumDrawVertexCount(D3D_FEATURE_LEVEL featureLevel)
+
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0:
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return std::numeric_limits<GLint>::max();
+@@ -545,7 +604,9 @@ static size_t GetMaximumVertexInputSlots(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_STANDARD_VERTEX_ELEMENT_COUNT;
+
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT;
+@@ -565,7 +626,9 @@ static size_t GetMaximumVertexUniformVectors(D3D_FEATURE_LEVEL featureLevel)
+ // TODO(geofflang): Remove hard-coded limit once the gl-uniform-arrays test can pass
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return 1024; // D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -590,7 +653,9 @@ static size_t GetMaximumVertexUniformBlocks(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - GetReservedVertexUniformBuffers();
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -617,7 +682,9 @@ static size_t GetMaximumVertexOutputVectors(D3D_FEATURE_LEVEL featureLevel)
+
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors();
+
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_VS_OUTPUT_REGISTER_COUNT - GetReservedVertexOutputVectors();
+@@ -636,7 +703,9 @@ static size_t GetMaximumVertexTextureUnits(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT;
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -658,7 +727,9 @@ static size_t GetMaximumPixelUniformVectors(D3D_FEATURE_LEVEL featureLevel)
+ // TODO(geofflang): Remove hard-coded limit once the gl-uniform-arrays test can pass
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return 1024; // D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT;
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -683,7 +754,9 @@ static size_t GetMaximumPixelUniformBlocks(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT - GetReservedPixelUniformBuffers();
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -702,7 +775,9 @@ static size_t GetMaximumPixelInputVectors(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_PS_INPUT_REGISTER_COUNT - GetReservedVertexOutputVectors();
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -721,7 +796,9 @@ static size_t GetMaximumPixelTextureUnits(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT;
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -740,7 +817,9 @@ static int GetMinimumTexelOffset(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE;
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -759,7 +838,9 @@ static int GetMaximumTexelOffset(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE;
+ case D3D_FEATURE_LEVEL_10_1:
+ case D3D_FEATURE_LEVEL_10_0: return D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE;
+@@ -782,7 +863,9 @@ static size_t GetMaximumConstantBufferSize(D3D_FEATURE_LEVEL featureLevel)
+
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT * bytesPerComponent;
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -801,7 +884,9 @@ static size_t GetMaximumStreamOutputBuffers(D3D_FEATURE_LEVEL featureLevel)
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return D3D11_SO_BUFFER_SLOT_COUNT;
+
+ case D3D_FEATURE_LEVEL_10_1: return D3D10_1_SO_BUFFER_SLOT_COUNT;
+@@ -819,7 +904,9 @@ static size_t GetMaximumStreamOutputInterleavedComponenets(D3D_FEATURE_LEVEL fea
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0:
+
+ case D3D_FEATURE_LEVEL_10_1:
+@@ -837,7 +924,9 @@ static size_t GetMaximumStreamOutputSeparateCompeonents(D3D_FEATURE_LEVEL featur
+ {
+ switch (featureLevel)
+ {
++#if _MSC_VER >= 1700
+ case D3D_FEATURE_LEVEL_11_1:
++#endif
+ case D3D_FEATURE_LEVEL_11_0: return GetMaximumStreamOutputInterleavedComponenets(featureLevel) /
+ GetMaximumStreamOutputBuffers(featureLevel);
+
--
1.9.0.msysgit.0
diff --git a/src/angle/patches/0016-ANGLE-Fix-compilation-with-MinGW-D3D11.patch b/src/angle/patches/0016-ANGLE-Fix-compilation-with-MinGW-D3D11.patch
index 3cf6c67d16..2ea528018d 100644
--- a/src/angle/patches/0016-ANGLE-Fix-compilation-with-MinGW-D3D11.patch
+++ b/src/angle/patches/0016-ANGLE-Fix-compilation-with-MinGW-D3D11.patch
@@ -1,27 +1,73 @@
-From ac4e9bb72ca22fd39bfc43f087108694db2ae8ac Mon Sep 17 00:00:00 2001
+From 75c39e9020f062d155097f6b49aebbc12970b1e8 Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
-Date: Thu, 4 Sep 2014 15:32:17 +0300
-Subject: [PATCH] ANGLE: Fix compilation with MinGW + D3D11
+Date: Tue, 23 Sep 2014 23:39:14 +0300
+Subject: [PATCH 16/16] ANGLE: Fix compilation with MinGW + D3D11
Provide workarounds for things GCC doesn't like, and define a number
of macros not found in the MinGW headers.
Change-Id: I254c208209c0071fae5efb6727f2b3cfd5542da6
---
- src/3rdparty/angle/src/libGLESv2/Context.cpp | 4 ++--
- .../src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp | 4 ++++
- .../src/libGLESv2/renderer/d3d/d3d11/Query11.cpp | 8 +++++++
- .../libGLESv2/renderer/d3d/d3d11/RenderTarget11.h | 2 +-
- .../libGLESv2/renderer/d3d/d3d11/Renderer11.cpp | 27 +++++++++++++++++++++-
- .../src/libGLESv2/renderer/d3d/d3d11/Renderer11.h | 2 +-
- .../renderer/d3d/d3d11/renderer11_utils.cpp | 11 ++++++++-
- 7 files changed, 52 insertions(+), 6 deletions(-)
+ src/3rdparty/angle/src/common/platform.h | 11 +++++
+ src/3rdparty/angle/src/libEGL/Display.cpp | 1 +
+ src/3rdparty/angle/src/libGLESv2/Context.cpp | 5 +-
+ src/3rdparty/angle/src/libGLESv2/angletypes.h | 1 +
+ .../angle/src/libGLESv2/renderer/copyimage.inl | 2 +-
+ .../src/libGLESv2/renderer/d3d/TextureD3D.cpp | 4 +-
+ .../libGLESv2/renderer/d3d/d3d11/Renderer11.cpp | 2 +-
+ .../libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp | 2 +-
+ .../renderer/d3d/d3d11/renderer11_utils.cpp | 53 +++++++++++++++++++++-
+ .../src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp | 4 +-
+ src/3rdparty/angle/src/libGLESv2/validationES.cpp | 2 +-
+ 11 files changed, 76 insertions(+), 11 deletions(-)
+diff --git a/src/3rdparty/angle/src/common/platform.h b/src/3rdparty/angle/src/common/platform.h
+index 3c619f3..b53394f 100644
+--- a/src/3rdparty/angle/src/common/platform.h
++++ b/src/3rdparty/angle/src/common/platform.h
+@@ -68,6 +68,17 @@
+ # if !defined(COMPILER_IMPLEMENTATION)
+ # include <d3dcompiler.h>
+ # endif
++# if defined(__MINGW32__)
++typedef enum D3D11_MAP_FLAG
++{
++ D3D11_MAP_FLAG_DO_NOT_WAIT = 0x100000L
++} D3D11_MAP_FLAG;
++typedef struct D3D11_QUERY_DATA_SO_STATISTICS
++{
++ UINT64 NumPrimitivesWritten;
++ UINT64 PrimitivesStorageNeeded;
++} D3D11_QUERY_DATA_SO_STATISTICS;
++# endif
+ # endif
+
+ # undef near
+diff --git a/src/3rdparty/angle/src/libEGL/Display.cpp b/src/3rdparty/angle/src/libEGL/Display.cpp
+index ba09631..5a50e4b 100644
+--- a/src/3rdparty/angle/src/libEGL/Display.cpp
++++ b/src/3rdparty/angle/src/libEGL/Display.cpp
+@@ -14,6 +14,7 @@
+ #include <map>
+ #include <vector>
+ #include <sstream>
++#include <iterator>
+
+ #include "common/debug.h"
+ #include "common/mathutil.h"
diff --git a/src/3rdparty/angle/src/libGLESv2/Context.cpp b/src/3rdparty/angle/src/libGLESv2/Context.cpp
-index 8201acd..99df85b 100644
+index 04c7616..5342de1 100644
--- a/src/3rdparty/angle/src/libGLESv2/Context.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/Context.cpp
-@@ -368,7 +368,7 @@ void Context::deleteFenceSync(GLsync fenceSync)
+@@ -33,6 +33,7 @@
+ #include "libEGL/Surface.h"
+
+ #include <sstream>
++#include <iterator>
+
+ namespace gl
+ {
+@@ -354,7 +355,7 @@ void Context::deleteFenceSync(GLsync fenceSync)
// wait commands finish. However, since the name becomes invalid, we cannot query the fence,
// and since our API is currently designed for being called from a single thread, we can delete
// the fence immediately.
@@ -30,7 +76,7 @@ index 8201acd..99df85b 100644
}
void Context::deleteVertexArray(GLuint vertexArray)
-@@ -474,7 +474,7 @@ Renderbuffer *Context::getRenderbuffer(GLuint handle)
+@@ -460,7 +461,7 @@ Renderbuffer *Context::getRenderbuffer(GLuint handle)
FenceSync *Context::getFenceSync(GLsync handle) const
{
@@ -39,87 +85,58 @@ index 8201acd..99df85b 100644
}
VertexArray *Context::getVertexArray(GLuint handle) const
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp
-index 352da96..1301124 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Buffer11.cpp
-@@ -12,6 +12,10 @@
- #include "libGLESv2/renderer/d3d/d3d11/Renderer11.h"
- #include "libGLESv2/renderer/d3d/d3d11/formatutils11.h"
-
-+#if defined(__MINGW32__) && !defined(D3D11_MAP_FLAG_DO_NOT_WAIT)
-+# define D3D11_MAP_FLAG_DO_NOT_WAIT 0x100000L
-+#endif
-+
- namespace rx
- {
+diff --git a/src/3rdparty/angle/src/libGLESv2/angletypes.h b/src/3rdparty/angle/src/libGLESv2/angletypes.h
+index 922053e..642a6ec 100644
+--- a/src/3rdparty/angle/src/libGLESv2/angletypes.h
++++ b/src/3rdparty/angle/src/libGLESv2/angletypes.h
+@@ -11,6 +11,7 @@
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Query11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Query11.cpp
-index 17cf5ca..e5e0032 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Query11.cpp
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Query11.cpp
-@@ -12,6 +12,14 @@
- #include "libGLESv2/renderer/d3d/d3d11/renderer11_utils.h"
- #include "libGLESv2/main.h"
+ #include "libGLESv2/constants.h"
+ #include "common/RefCountObject.h"
++#include <float.h>
-+#if defined(__MINGW32__) // Provide undefined struct
-+typedef struct D3D11_QUERY_DATA_SO_STATISTICS
-+{
-+ UINT64 NumPrimitivesWritten;
-+ UINT64 PrimitivesStorageNeeded;
-+} D3D11_QUERY_DATA_SO_STATISTICS;
-+#endif
-+
- namespace rx
+ namespace gl
{
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.inl b/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.inl
+index ea6970c..0498cf7 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.inl
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/copyimage.inl
+@@ -24,7 +24,7 @@ inline void WriteColor(const uint8_t *source, uint8_t *dest)
+ template <typename sourceType, typename destType, typename colorDataType>
+ inline void CopyPixel(const uint8_t *source, uint8_t *dest)
+ {
+- colorType temp;
++ colorDataType temp;
+ ReadColor<sourceType, colorDataType>(source, &temp);
+ WriteColor<destType, colorDataType>(&temp, dest);
+ }
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/TextureD3D.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/TextureD3D.cpp
+index 2650913..96c8497 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/TextureD3D.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/TextureD3D.cpp
+@@ -129,7 +129,7 @@ bool TextureD3D::subImage(GLint xoffset, GLint yoffset, GLint zoffset, GLsizei w
+ if (unpack.pixelBuffer.id() != 0)
+ {
+ gl::Buffer *pixelBuffer = unpack.pixelBuffer.get();
+- unsigned int offset = reinterpret_cast<unsigned int>(pixels);
++ ptrdiff_t offset = reinterpret_cast<ptrdiff_t>(pixels);
+ // TODO: setImage/subImage is the only place outside of renderer that asks for a buffers raw data.
+ // This functionality should be moved into renderer and the getData method of BufferImpl removed.
+ const void *bufferData = pixelBuffer->getImplementation()->getData();
+@@ -186,7 +186,7 @@ bool TextureD3D::fastUnpackPixels(const gl::PixelUnpackState &unpack, const void
+ // to create a render target.
+ ASSERT(mRenderer->supportsFastCopyBufferToTexture(sizedInternalFormat));
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/RenderTarget11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/RenderTarget11.h
-index ba9f76e..8218295 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/RenderTarget11.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/RenderTarget11.h
-@@ -51,4 +51,4 @@ class RenderTarget11 : public RenderTarget
+- unsigned int offset = reinterpret_cast<unsigned int>(pixels);
++ ptrdiff_t offset = reinterpret_cast<ptrdiff_t>(pixels);
+ return mRenderer->fastCopyBufferToTexture(unpack, offset, destRenderTarget, sizedInternalFormat, type, destArea);
}
-
--#endif LIBGLESV2_RENDERER_RENDERTARGET11_H_
-+#endif // LIBGLESV2_RENDERER_RENDERTARGET11_H_
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-index 651b065..3ba0cc7 100644
+index bd07ee1..b29b2ef 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.cpp
-@@ -49,6 +49,31 @@
- #define ANGLE_SUPPRESS_D3D11_HAZARD_WARNINGS 1
- #endif
-
-+#ifndef D3D11_PS_INPUT_REGISTER_COUNT
-+# define D3D11_PS_INPUT_REGISTER_COUNT 32
-+#endif
-+#ifndef D3D10_1_VS_OUTPUT_REGISTER_COUNT
-+# define D3D10_1_VS_OUTPUT_REGISTER_COUNT 32
-+#endif
-+#ifndef D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT
-+# define D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT 14
-+#endif
-+#ifndef D3D11_SO_BUFFER_SLOT_COUNT
-+# define D3D11_SO_BUFFER_SLOT_COUNT 4
-+#endif
-+#ifndef D3D10_1_SO_BUFFER_SLOT_COUNT
-+# define D3D10_1_SO_BUFFER_SLOT_COUNT 4
-+#endif
-+#ifndef D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT
-+# define D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT 4096
-+#endif
-+#ifndef D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP
-+# define D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP 32
-+#endif
-+#ifndef D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP
-+# define D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP 32
-+#endif
-+
- namespace rx
- {
- static const DXGI_FORMAT RenderTargetFormats[] =
-@@ -275,7 +300,7 @@ EGLint Renderer11::initialize()
+@@ -281,7 +281,7 @@ EGLint Renderer11::initialize()
}
// Disable some spurious D3D11 debug warnings to prevent them from flooding the output log
@@ -128,24 +145,24 @@ index 651b065..3ba0cc7 100644
ID3D11InfoQueue *infoQueue;
result = mDevice->QueryInterface(__uuidof(ID3D11InfoQueue), (void **)&infoQueue);
-diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
-index a31f15e..b54f75d 100644
---- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
-+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/Renderer11.h
-@@ -261,7 +261,7 @@ class Renderer11 : public Renderer
- };
- MultisampleSupportInfo getMultisampleSupportInfo(DXGI_FORMAT format);
-
-- typedef std::unordered_map<DXGI_FORMAT, MultisampleSupportInfo> MultisampleSupportMap;
-+ typedef std::unordered_map<GLenum, MultisampleSupportInfo> MultisampleSupportMap;
- MultisampleSupportMap mMultisampleSupportMap;
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
+index 787c511..4b29be0 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/SwapChain11.cpp
+@@ -537,7 +537,7 @@ void SwapChain11::initPassThroughResources()
+ samplerDesc.BorderColor[2] = 0.0f;
+ samplerDesc.BorderColor[3] = 0.0f;
+ samplerDesc.MinLOD = 0;
+- samplerDesc.MaxLOD = D3D11_FLOAT32_MAX;
++ samplerDesc.MaxLOD = FLT_MAX;
- unsigned int mMaxSupportedSamples;
+ result = device->CreateSamplerState(&samplerDesc, &mPassThroughSampler);
+ ASSERT(SUCCEEDED(result));
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
-index 8e0c21b..d914a82 100644
+index 345fd24..2af97e7 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d11/renderer11_utils.cpp
-@@ -36,6 +36,15 @@
+@@ -47,6 +47,57 @@
#ifndef D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION
# define D3D_FL9_3_REQ_TEXTURE2D_U_OR_V_DIMENSION 4096
#endif
@@ -158,10 +175,52 @@ index 8e0c21b..d914a82 100644
+#ifndef D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION
+# define D3D11_REQ_TEXTURE3D_U_V_OR_W_DIMENSION 2048
+#endif
++#ifndef D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP
++# define D3D11_REQ_DRAWINDEXED_INDEX_COUNT_2_TO_EXP 32
++#endif
++#ifndef D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP
++# define D3D11_REQ_DRAW_VERTEX_COUNT_2_TO_EXP 32
++#endif
++#ifndef D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT
++# define D3D10_1_STANDARD_VERTEX_ELEMENT_COUNT 32
++#endif
++#ifndef D3D11_STANDARD_VERTEX_ELEMENT_COUNT
++# define D3D11_STANDARD_VERTEX_ELEMENT_COUNT 32
++#endif
++#ifndef D3D10_1_SO_BUFFER_SLOT_COUNT
++# define D3D10_1_SO_BUFFER_SLOT_COUNT 4
++#endif
++#ifndef D3D11_SO_BUFFER_SLOT_COUNT
++# define D3D11_SO_BUFFER_SLOT_COUNT 4
++#endif
++#ifndef D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT
++# define D3D11_COMMONSHADER_CONSTANT_BUFFER_API_SLOT_COUNT 14
++#endif
++#ifndef D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT
++# define D3D11_COMMONSHADER_SAMPLER_SLOT_COUNT 16
++#endif
++#ifndef D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE
++# define D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_NEGATIVE -8
++#endif
++#ifndef D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE
++# define D3D11_COMMONSHADER_TEXEL_OFFSET_MAX_POSITIVE 7
++#endif
++#ifndef D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT
++# define D3D11_REQ_CONSTANT_BUFFER_ELEMENT_COUNT 4096
++#endif
++#ifndef D3D11_PS_INPUT_REGISTER_COUNT
++# define D3D11_PS_INPUT_REGISTER_COUNT 32
++#endif
++#ifndef D3D10_1_VS_OUTPUT_REGISTER_COUNT
++# define D3D10_1_VS_OUTPUT_REGISTER_COUNT 32
++#endif
++#ifndef D3D11_VS_OUTPUT_REGISTER_COUNT
++# define D3D11_VS_OUTPUT_REGISTER_COUNT 32
++#endif
namespace rx
{
-@@ -671,7 +680,7 @@ void SetPositionLayerTexCoord3DVertex(PositionLayerTexCoord3DVertex* vertex, flo
+@@ -1147,7 +1198,7 @@ void SetPositionLayerTexCoord3DVertex(PositionLayerTexCoord3DVertex* vertex, flo
HRESULT SetDebugName(ID3D11DeviceChild *resource, const char *name)
{
@@ -170,6 +229,41 @@ index 8e0c21b..d914a82 100644
return resource->SetPrivateData(WKPDID_D3DDebugObjectName, strlen(name), name);
#else
return S_OK;
+diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
+index 1d52705..d63f9b8 100644
+--- a/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/renderer/d3d/d3d9/Renderer9.cpp
+@@ -205,7 +205,7 @@ EGLint Renderer9::initialize()
+ if (ANGLE_ENABLE_D3D9EX && Direct3DCreate9ExPtr && SUCCEEDED(Direct3DCreate9ExPtr(D3D_SDK_VERSION, &mD3d9Ex)))
+ {
+ ASSERT(mD3d9Ex);
+- mD3d9Ex->QueryInterface(__uuidof(IDirect3D9), reinterpret_cast<void**>(&mD3d9));
++ mD3d9Ex->QueryInterface(IID_IDirect3D9, reinterpret_cast<void**>(&mD3d9));
+ ASSERT(mD3d9);
+ }
+ else
+@@ -329,7 +329,7 @@ EGLint Renderer9::initialize()
+
+ if (mD3d9Ex)
+ {
+- result = mDevice->QueryInterface(__uuidof(IDirect3DDevice9Ex), (void**)&mDeviceEx);
++ result = mDevice->QueryInterface(IID_IDirect3DDevice9Ex, (void**)&mDeviceEx);
+ ASSERT(SUCCEEDED(result));
+ }
+
+diff --git a/src/3rdparty/angle/src/libGLESv2/validationES.cpp b/src/3rdparty/angle/src/libGLESv2/validationES.cpp
+index 1b6180d..f79bc97 100644
+--- a/src/3rdparty/angle/src/libGLESv2/validationES.cpp
++++ b/src/3rdparty/angle/src/libGLESv2/validationES.cpp
+@@ -1667,7 +1667,7 @@ bool ValidateDrawElements(Context *context, GLenum mode, GLsizei count, GLenum t
+ // TODO: also disable index checking on back-ends that are robust to out-of-range accesses.
+ if (elementArrayBuffer)
+ {
+- unsigned int offset = reinterpret_cast<unsigned int>(indices);
++ GLint64 offset = reinterpret_cast<GLint64>(indices);
+ if (!elementArrayBuffer->getIndexRangeCache()->findRange(type, offset, count, indexRangeOut, NULL))
+ {
+ const void *dataPointer = elementArrayBuffer->getImplementation()->getData();
--
1.9.0.msysgit.0
diff --git a/src/angle/src/common/common.pri b/src/angle/src/common/common.pri
index 43ac3ee8db..8baedc5e4c 100644
--- a/src/angle/src/common/common.pri
+++ b/src/angle/src/common/common.pri
@@ -51,7 +51,6 @@ static: DEFINES *= QT_OPENGL_ES_2_ANGLE_STATIC
HEADERS += \
$$ANGLE_DIR/src/common/angleutils.h \
$$ANGLE_DIR/src/common/debug.h \
- $$ANGLE_DIR/src/common/event_tracer.h \
$$ANGLE_DIR/src/common/mathutil.h \
$$ANGLE_DIR/src/common/platform.h \
$$ANGLE_DIR/src/common/RefCountObject.h \
@@ -59,8 +58,8 @@ HEADERS += \
$$ANGLE_DIR/src/common/version.h
SOURCES += \
+ $$ANGLE_DIR/src/common/angleutils.cpp \
$$ANGLE_DIR/src/common/debug.cpp \
- $$ANGLE_DIR/src/common/event_tracer.cpp \
$$ANGLE_DIR/src/common/RefCountObject.cpp \
$$ANGLE_DIR/src/common/tls.cpp
diff --git a/src/angle/src/compiler/translator.pro b/src/angle/src/compiler/translator.pro
index 104eac5de3..6f0128d6de 100644
--- a/src/angle/src/compiler/translator.pro
+++ b/src/angle/src/compiler/translator.pro
@@ -16,11 +16,11 @@ BISON_SOURCES = $$ANGLE_DIR/src/compiler/translator/glslang.y
HEADERS += \
$$ANGLE_DIR/include/GLSLANG/ResourceLimits.h \
$$ANGLE_DIR/include/GLSLANG/ShaderLang.h \
+ $$ANGLE_DIR/include/GLSLANG/ShaderVars.h \
$$ANGLE_DIR/src/common/angleutils.h \
$$ANGLE_DIR/src/common/blocklayout.h \
$$ANGLE_DIR/src/common/debug.h \
$$ANGLE_DIR/src/common/platform.h \
- $$ANGLE_DIR/src/common/shadervars.h \
$$ANGLE_DIR/src/common/tls.h \
$$ANGLE_DIR/src/common/utilities.h \
$$ANGLE_DIR/src/compiler/translator/BaseTypes.h \
@@ -46,7 +46,7 @@ HEADERS += \
$$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/IntermNode.h \
$$ANGLE_DIR/src/compiler/translator/LoopInfo.h \
$$ANGLE_DIR/src/compiler/translator/MMap.h \
$$ANGLE_DIR/src/compiler/translator/NodeSearch.h \
@@ -59,6 +59,7 @@ HEADERS += \
$$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/RegenerateStructNames.h \
$$ANGLE_DIR/src/compiler/translator/RemoveTree.h \
$$ANGLE_DIR/src/compiler/translator/RenameFunction.h \
$$ANGLE_DIR/src/compiler/translator/RewriteElseBlocks.h \
@@ -108,6 +109,7 @@ SOURCES += \
$$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/IntermNode.cpp \
$$ANGLE_DIR/src/compiler/translator/intermOut.cpp \
$$ANGLE_DIR/src/compiler/translator/IntermTraverse.cpp \
$$ANGLE_DIR/src/compiler/translator/LoopInfo.cpp \
@@ -119,11 +121,13 @@ SOURCES += \
$$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/RegenerateStructNames.cpp \
$$ANGLE_DIR/src/compiler/translator/RemoveTree.cpp \
$$ANGLE_DIR/src/compiler/translator/RewriteElseBlocks.cpp \
$$ANGLE_DIR/src/compiler/translator/ScalarizeVecAndMatConstructorArgs.cpp \
$$ANGLE_DIR/src/compiler/translator/SearchSymbol.cpp \
$$ANGLE_DIR/src/compiler/translator/ShaderLang.cpp \
+ $$ANGLE_DIR/src/compiler/translator/ShaderVars.cpp \
$$ANGLE_DIR/src/compiler/translator/StructureHLSL.cpp \
$$ANGLE_DIR/src/compiler/translator/SymbolTable.cpp \
$$ANGLE_DIR/src/compiler/translator/timing/RestrictFragmentShaderTiming.cpp \
diff --git a/src/angle/src/libGLESv2/libGLESv2.pro b/src/angle/src/libGLESv2/libGLESv2.pro
index 2e84df0d39..c0f7982e6c 100644
--- a/src/angle/src/libGLESv2/libGLESv2.pro
+++ b/src/angle/src/libGLESv2/libGLESv2.pro
@@ -29,14 +29,14 @@ HEADERS += \
$$ANGLE_DIR/src/libGLESv2/Buffer.h \
$$ANGLE_DIR/src/libGLESv2/Caps.h \
$$ANGLE_DIR/src/libGLESv2/Context.h \
- $$ANGLE_DIR/src/libGLESv2/DynamicHLSL.h \
+ $$ANGLE_DIR/src/libGLESv2/Error.h \
$$ANGLE_DIR/src/libGLESv2/Fence.h \
$$ANGLE_DIR/src/libGLESv2/formatutils.h \
$$ANGLE_DIR/src/libGLESv2/Framebuffer.h \
$$ANGLE_DIR/src/libGLESv2/FramebufferAttachment.h \
$$ANGLE_DIR/src/libGLESv2/HandleAllocator.h \
+ $$ANGLE_DIR/src/libGLESv2/ImageIndex.h \
$$ANGLE_DIR/src/libGLESv2/main.h \
- $$ANGLE_DIR/src/libGLESv2/precompiled.h \
$$ANGLE_DIR/src/libGLESv2/Program.h \
$$ANGLE_DIR/src/libGLESv2/ProgramBinary.h \
$$ANGLE_DIR/src/libGLESv2/Query.h \
@@ -46,13 +46,17 @@ HEADERS += \
$$ANGLE_DIR/src/libGLESv2/renderer/copyimage.h \
$$ANGLE_DIR/src/libGLESv2/renderer/copyvertex.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/BufferD3D.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/DynamicHLSL.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/HLSLCompiler.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/ImageD3D.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/IndexBuffer.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/IndexDataManager.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/MemoryBuffer.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/ProgramD3D.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/ShaderD3D.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/TextureD3D.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/TextureStorage.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/TransformFeedbackD3D.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/VertexArrayImpl.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/VertexBuffer.h \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/vertexconversion.h \
@@ -63,12 +67,15 @@ HEADERS += \
$$ANGLE_DIR/src/libGLESv2/renderer/imageformats.h \
$$ANGLE_DIR/src/libGLESv2/renderer/IndexCacheRange.h \
$$ANGLE_DIR/src/libGLESv2/renderer/loadimage.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/ProgramImpl.h \
$$ANGLE_DIR/src/libGLESv2/renderer/QueryImpl.h \
$$ANGLE_DIR/src/libGLESv2/renderer/Renderer.h \
$$ANGLE_DIR/src/libGLESv2/renderer/RenderTarget.h \
$$ANGLE_DIR/src/libGLESv2/renderer/ShaderExecutable.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/ShaderImpl.h \
$$ANGLE_DIR/src/libGLESv2/renderer/SwapChain.h \
$$ANGLE_DIR/src/libGLESv2/renderer/TextureImpl.h \
+ $$ANGLE_DIR/src/libGLESv2/renderer/TextureFeedbackImpl.h \
$$ANGLE_DIR/src/libGLESv2/renderer/VertexDeclarationCache.h \
$$ANGLE_DIR/src/libGLESv2/resource.h \
$$ANGLE_DIR/src/libGLESv2/ResourceManager.h \
@@ -95,13 +102,14 @@ SOURCES += \
$$ANGLE_DIR/src/libGLESv2/Buffer.cpp \
$$ANGLE_DIR/src/libGLESv2/Caps.cpp \
$$ANGLE_DIR/src/libGLESv2/Context.cpp \
- $$ANGLE_DIR/src/libGLESv2/DynamicHLSL.cpp \
+ $$ANGLE_DIR/src/libGLESv2/Error.cpp \
$$ANGLE_DIR/src/libGLESv2/Fence.cpp \
$$ANGLE_DIR/src/libGLESv2/Float16ToFloat32.cpp \
$$ANGLE_DIR/src/libGLESv2/Framebuffer.cpp \
$$ANGLE_DIR/src/libGLESv2/FramebufferAttachment.cpp \
$$ANGLE_DIR/src/libGLESv2/formatutils.cpp \
$$ANGLE_DIR/src/libGLESv2/HandleAllocator.cpp \
+ $$ANGLE_DIR/src/libGLESv2/ImageIndex.cpp \
$$ANGLE_DIR/src/libGLESv2/libGLESv2.cpp \
$$ANGLE_DIR/src/libGLESv2/main.cpp \
$$ANGLE_DIR/src/libGLESv2/Program.cpp \
@@ -121,7 +129,6 @@ SOURCES += \
$$ANGLE_DIR/src/libGLESv2/validationES3.cpp \
$$ANGLE_DIR/src/libGLESv2/VertexArray.cpp \
$$ANGLE_DIR/src/libGLESv2/VertexAttribute.cpp \
- $$ANGLE_DIR/src/libGLESv2/precompiled.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/copyimage.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/loadimage.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/loadimageSSE2.cpp \
@@ -129,13 +136,17 @@ SOURCES += \
$$ANGLE_DIR/src/libGLESv2/renderer/IndexRangeCache.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/Renderer.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/BufferD3D.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/DynamicHLSL.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/HLSLCompiler.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/ImageD3D.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/IndexBuffer.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/IndexDataManager.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/MemoryBuffer.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/ProgramD3D.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/ShaderD3D.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/TextureD3D.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/TextureStorage.cpp \
+ $$ANGLE_DIR/src/libGLESv2/renderer/d3d/TransformFeedbackD3D.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/VertexBuffer.cpp \
$$ANGLE_DIR/src/libGLESv2/renderer/d3d/VertexDataManager.cpp