summaryrefslogtreecommitdiffstats
path: root/src/angle/patches/0006-Make-DX9-DX11-mutually-exclusive.patch
blob: 1e618d43c7583c8bda7d78223dec5e73a0e2645e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
From c2eb5746cdf65091932558ac48ae1e6175d45a3c Mon Sep 17 00:00:00 2001
From: Andrew Knight <andrew.knight@digia.com>
Date: Sat, 14 Sep 2013 12:01:19 +0300
Subject: [PATCH] Make DX9/DX11 mutually exclusive

ANGLE supports selecting the renderer on creation, choosing between
D3D11 and D3D9 backends. This patch removes that feature, and makes the
D3D version a compile-time decision. This makes the binary size smaller
(no extra render is built) and ensures compatibility with Windows Runtime,
which supports only Direct3D 11.

Change-Id: Id9473e0e631721083fe4026d475e37603a144c37
---
 src/3rdparty/angle/src/common/RefCountObject.cpp   |  1 -
 src/3rdparty/angle/src/common/debug.cpp            |  4 +++
 src/3rdparty/angle/src/libGLESv2/Texture.cpp       |  6 +++-
 src/3rdparty/angle/src/libGLESv2/precompiled.h     |  3 ++
 .../angle/src/libGLESv2/renderer/Renderer.cpp      | 37 +++++++---------------
 5 files changed, 24 insertions(+), 27 deletions(-)

diff --git a/src/3rdparty/angle/src/common/RefCountObject.cpp b/src/3rdparty/angle/src/common/RefCountObject.cpp
index 0364adf..c1ef90c 100644
--- a/src/3rdparty/angle/src/common/RefCountObject.cpp
+++ b/src/3rdparty/angle/src/common/RefCountObject.cpp
@@ -1,4 +1,3 @@
-#include "precompiled.h"
 //
 // Copyright (c) 2002-2010 The ANGLE Project Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style license that can be
diff --git a/src/3rdparty/angle/src/common/debug.cpp b/src/3rdparty/angle/src/common/debug.cpp
index 2333740..9b93256 100644
--- a/src/3rdparty/angle/src/common/debug.cpp
+++ b/src/3rdparty/angle/src/common/debug.cpp
@@ -8,7 +8,11 @@
 
 #include "common/debug.h"
 #include "common/system.h"
+#ifndef ANGLE_ENABLE_D3D11
 #include <d3d9.h>
+#else
+typedef DWORD D3DCOLOR;
+#endif
 
 namespace gl
 {
diff --git a/src/3rdparty/angle/src/libGLESv2/Texture.cpp b/src/3rdparty/angle/src/libGLESv2/Texture.cpp
index ae83037..72c0a8a 100644
--- a/src/3rdparty/angle/src/libGLESv2/Texture.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/Texture.cpp
@@ -14,7 +14,11 @@
 #include "libGLESv2/main.h"
 #include "libGLESv2/mathutil.h"
 #include "libGLESv2/utilities.h"
-#include "libGLESv2/renderer/Blit.h"
+#ifndef ANGLE_ENABLE_D3D11
+#  include "libGLESv2/renderer/Blit.h"
+#else
+#  define D3DFMT_UNKNOWN DXGI_FORMAT_UNKNOWN
+#endif
 #include "libGLESv2/Renderbuffer.h"
 #include "libGLESv2/renderer/Image.h"
 #include "libGLESv2/renderer/Renderer.h"
diff --git a/src/3rdparty/angle/src/libGLESv2/precompiled.h b/src/3rdparty/angle/src/libGLESv2/precompiled.h
index a850d57..50dec6b 100644
--- a/src/3rdparty/angle/src/libGLESv2/precompiled.h
+++ b/src/3rdparty/angle/src/libGLESv2/precompiled.h
@@ -32,9 +32,12 @@
 #include <unordered_map>
 #include <vector>
 
+#ifndef ANGLE_ENABLE_D3D11
 #include <d3d9.h>
+#else
 #include <D3D11.h>
 #include <dxgi.h>
+#endif
 #include <D3Dcompiler.h>
 
 #ifdef _MSC_VER
diff --git a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
index d1d234b..21ad223 100644
--- a/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/3rdparty/angle/src/libGLESv2/renderer/Renderer.cpp
@@ -11,8 +11,11 @@
 #include "libGLESv2/main.h"
 #include "libGLESv2/Program.h"
 #include "libGLESv2/renderer/Renderer.h"
+#ifndef ANGLE_ENABLE_D3D11
 #include "libGLESv2/renderer/Renderer9.h"
+#else
 #include "libGLESv2/renderer/Renderer11.h"
+#endif
 #include "libGLESv2/utilities.h"
 #include "third_party/trace_event/trace_event.h"
 
@@ -21,6 +24,10 @@
 #define ANGLE_ENABLE_D3D11 0
 #endif
 
+#ifndef D3DERR_OUTOFVIDEOMEMORY
+#define D3DERR_OUTOFVIDEOMEMORY MAKE_HRESULT(1, 0x876, 380)
+#endif
+
 #ifdef __MINGW32__
 
 #ifndef D3DCOMPILER_DLL
@@ -192,34 +199,14 @@ rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayT
 {
     rx::Renderer *renderer = NULL;
     EGLint status = EGL_BAD_ALLOC;
-    
-    if (ANGLE_ENABLE_D3D11 ||
-        displayId == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE ||
-        displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
-    {
-        renderer = new rx::Renderer11(display, hDc);
-    
-        if (renderer)
-        {
-            status = renderer->initialize();
-        }
-
-        if (status == EGL_SUCCESS)
-        {
-            return renderer;
-        }
-        else if (displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
-        {
-            return NULL;
-        }
-
-        // Failed to create a D3D11 renderer, try creating a D3D9 renderer
-        delete renderer;
-    }
 
+#if ANGLE_ENABLE_D3D11
+    renderer = new rx::Renderer11(display, hDc);
+#else
     bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
     renderer = new rx::Renderer9(display, hDc, softwareDevice);
-    
+#endif
+
     if (renderer)
     {
         status = renderer->initialize();
-- 
1.8.1.msysgit.1