Add defines to enable or disable specific renderers.

BUG=angle:559

Change-Id: I88c168205b142701ec843aa394c82c3a5857ed0d
Reviewed-on: https://chromium-review.googlesource.com/185569
Reviewed-by: Jamie Madill <jmadill@chromium.org>
Reviewed-by: Shannon Woods <shannonwoods@chromium.org>
Tested-by: Geoff Lang <geofflang@chromium.org>
diff --git a/src/libGLESv2.gypi b/src/libGLESv2.gypi
index b8c856d..6cb9a1a 100644
--- a/src/libGLESv2.gypi
+++ b/src/libGLESv2.gypi
@@ -3,6 +3,11 @@
 # found in the LICENSE file.
 
 {
+    'variables':
+    {
+        'angle_enable_d3d9%': 1,
+        'angle_enable_d3d11%': 1,
+    },
     'target_defaults':
     {
         'defines':
@@ -33,21 +38,63 @@
                     [
                         '<!@(python <(angle_build_scripts_path)/enumerate_files.py \
                              -dirs common libGLESv2 third_party/murmurhash ../include \
-                             -types *.cpp *.h *.hlsl *.vs *.ps *.bat *.def *.rc)',
+                             -types *.cpp *.h *.hlsl *.vs *.ps *.bat *.def *.rc \
+                             -excludes */d3d/* */d3d9/* */d3d11/*)',
                     ],
                     # TODO(jschuh): http://crbug.com/167187 size_t -> int
                     'msvs_disabled_warnings': [ 4267 ],
-                    'msvs_settings':
-                    {
-                        'VCLinkerTool':
+
+                    'conditions':
+                    [
+                        ['angle_enable_d3d9==1',
                         {
-                            'AdditionalDependencies':
+                            'sources':
                             [
-                                'd3d9.lib',
-                                'dxguid.lib',
-                            ]
-                        }
-                    },
+                                '<!@(python <(angle_build_scripts_path)/enumerate_files.py \
+                                     -dirs libGLESv2/renderer/d3d libGLESv2/renderer/d3d9 \
+                                     -types *.cpp *.h *.vs *.ps *.bat)',
+                            ],
+                            'defines':
+                            [
+                                'ANGLE_ENABLE_D3D9',
+                            ],
+                            'msvs_settings':
+                            {
+                                'VCLinkerTool':
+                                {
+                                    'AdditionalDependencies':
+                                    [
+                                        'dxguid.lib',
+                                        'd3d9.lib',
+                                    ]
+                                }
+                            },
+                        }],
+                        ['angle_enable_d3d11==1',
+                        {
+                            'sources':
+                            [
+                                '<!@(python <(angle_build_scripts_path)/enumerate_files.py \
+                                     -dirs libGLESv2/renderer/d3d libGLESv2/renderer/d3d11 \
+                                     -types *.cpp *.h *.hlsl *.bat)',
+                            ],
+                            'defines':
+                            [
+                                'ANGLE_ENABLE_D3D11',
+                            ],
+                            'msvs_settings':
+                            {
+                                'VCLinkerTool':
+                                {
+                                    'AdditionalDependencies':
+                                    [
+                                        'dxguid.lib',
+                                    ]
+                                }
+                            },
+                        }],
+                    ],
+
                     'configurations':
                     {
                         'Debug':
@@ -56,6 +103,16 @@
                             [
                                 'ANGLE_ENABLE_PERF',
                             ],
+                            'msvs_settings':
+                            {
+                                'VCLinkerTool':
+                                {
+                                    'AdditionalDependencies':
+                                    [
+                                        'd3d9.lib',
+                                    ]
+                                }
+                            },
                         },
                     },
                 },
diff --git a/src/libGLESv2/precompiled.h b/src/libGLESv2/precompiled.h
index e380bfb..fed6bc8 100644
--- a/src/libGLESv2/precompiled.h
+++ b/src/libGLESv2/precompiled.h
@@ -37,7 +37,13 @@
 #include <unordered_map>
 #include <vector>
 
+#if defined(ANGLE_ENABLE_D3D9)
 #include <d3d9.h>
+#include <D3Dcompiler.h>
+#endif // ANGLE_ENABLE_D3D9
+
+#if defined(ANGLE_ENABLE_D3D11)
 #include <D3D11.h>
 #include <dxgi.h>
 #include <D3Dcompiler.h>
+#endif // ANGLE_ENABLE_D3D11
diff --git a/src/libGLESv2/renderer/Renderer.cpp b/src/libGLESv2/renderer/Renderer.cpp
index 78c4b2d..d24e90d 100644
--- a/src/libGLESv2/renderer/Renderer.cpp
+++ b/src/libGLESv2/renderer/Renderer.cpp
@@ -11,14 +11,20 @@
 #include "libGLESv2/main.h"
 #include "libGLESv2/Program.h"
 #include "libGLESv2/renderer/Renderer.h"
-#include "libGLESv2/renderer/d3d9/Renderer9.h"
-#include "libGLESv2/renderer/d3d11/Renderer11.h"
 #include "common/utilities.h"
 #include "third_party/trace_event/trace_event.h"
 
-#if !defined(ANGLE_ENABLE_D3D11)
+#if defined (ANGLE_ENABLE_D3D9)
+#include "libGLESv2/renderer/d3d9/Renderer9.h"
+#endif // ANGLE_ENABLE_D3D9
+
+#if defined (ANGLE_ENABLE_D3D11)
+#include "libGLESv2/renderer/d3d11/Renderer11.h"
+#endif // ANGLE_ENABLE_D3D11
+
+#if !defined(ANGLE_DEFAULT_D3D11)
 // Enables use of the Direct3D 11 API for a default display, when available
-#define ANGLE_ENABLE_D3D11 1
+#define ANGLE_DEFAULT_D3D11 1
 #endif
 
 namespace rx
@@ -36,45 +42,39 @@
 
 rx::Renderer *glCreateRenderer(egl::Display *display, HDC hDc, EGLNativeDisplayType displayId)
 {
-    rx::Renderer *renderer = NULL;
-    EGLint status = EGL_BAD_ALLOC;
-    
-    if (ANGLE_ENABLE_D3D11 ||
+#if defined(ANGLE_ENABLE_D3D11)
+    if (ANGLE_DEFAULT_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)
+        rx::Renderer11 *renderer = new rx::Renderer11(display, hDc);
+        if (renderer->initialize() == EGL_SUCCESS)
         {
             return renderer;
         }
-        else if (displayId == EGL_D3D11_ONLY_DISPLAY_ANGLE)
+        else
         {
-            return NULL;
+            // Failed to create a D3D11 renderer, try D3D9
+            SafeDelete(renderer);
         }
-
-        // Failed to create a D3D11 renderer, try creating a D3D9 renderer
-        delete renderer;
     }
+#endif
 
-    bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
-    renderer = new rx::Renderer9(display, hDc, softwareDevice);
-    
-    if (renderer)
+#if defined(ANGLE_ENABLE_D3D9)
+    if (displayId != EGL_D3D11_ONLY_DISPLAY_ANGLE)
     {
-        status = renderer->initialize();
+        bool softwareDevice = (displayId == EGL_SOFTWARE_DISPLAY_ANGLE);
+        rx::Renderer9 *renderer = new rx::Renderer9(display, hDc, softwareDevice);
+        if (renderer->initialize() == EGL_SUCCESS)
+        {
+            return renderer;
+        }
+        else
+        {
+            SafeDelete(renderer);
+        }
     }
-
-    if (status == EGL_SUCCESS)
-    {
-        return renderer;
-    }
+#endif
 
     return NULL;
 }
@@ -84,4 +84,4 @@
     delete renderer;
 }
 
-}
\ No newline at end of file
+}