From ee9c4fe4e6421b3e13a55821a06a58abd93f9f3f Mon Sep 17 00:00:00 2001 From: Wander Lairson Costa Date: Tue, 14 Jul 2020 15:29:40 -0300 Subject: [PATCH] D3D: Make possible to build angle without D3D11 A few files inside the D3D11 tree are used by D3D9 and WGL backends. We add these files to the build system even when D3D11 is disabled. Also, we fix the use the of ANGLE_DEFAULT_D3D11 symbol. Bug: angleproject:4839 Change-Id: I981f4bfc60d973c02549caa737c5aed5ccf31282 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2298143 Reviewed-by: Geoff Lang Reviewed-by: Jamie Madill Commit-Queue: Geoff Lang --- AUTHORS | 1 + BUILD.gn | 8 +++++ doc/DevSetup.md | 13 ++++++++ src/libANGLE/renderer/d3d/DisplayD3D.cpp | 40 +++++++++++++++++++----- src/libGLESv2.gni | 12 +++++-- src/tests/BUILD.gn | 2 +- 6 files changed, 64 insertions(+), 12 deletions(-) diff --git a/AUTHORS b/AUTHORS index fa5073e73..4dd85a719 100644 --- a/AUTHORS +++ b/AUTHORS @@ -66,3 +66,4 @@ Le Hoang Quyen Ethan Lee Renaud Lepage Artem Bolgar +Wander Lairson Costa diff --git a/BUILD.gn b/BUILD.gn index 52cc09654..99ceaaf00 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -657,6 +657,14 @@ angle_source_set("libANGLE_base") { sources += libangle_d3d11_blit_shaders } + if (!angle_is_winuwp && (angle_enable_d3d11 || angle_enable_d3d9)) { + sources += libangle_d3d_win32_sources + } + + if (is_win && (angle_enable_gl || angle_enable_d3d11)) { + sources += libangle_gl_wgl_d3d11_common_sources + } + if (angle_enable_gl) { sources += libangle_gl_sources include_dirs += [ "src/third_party/khronos" ] diff --git a/doc/DevSetup.md b/doc/DevSetup.md index 21739dab0..ee1c9f320 100644 --- a/doc/DevSetup.md +++ b/doc/DevSetup.md @@ -111,6 +111,19 @@ To change the default D3D backend: 1. Open `src/libANGLE/renderer/d3d/DisplayD3D.cpp` 2. Locate the definition of `ANGLE_DEFAULT_D3D11` near the head of the file, and set it to your preference. +To remove any backend entirely: + + 1. Run `gn args ` + 2. Set the appropriate variable to `false`. Options are: + - `angle_enable_d3d9` + - `angle_enable_d3d11` + - `angle_enable_gl` + - `angle_enable_metal` + - `angle_enable_null` + - `angle_enable_vulkan` + - `angle_enable_essl` + - `angle_enable_glsl` + ### To Use ANGLE in Your Application On Windows: diff --git a/src/libANGLE/renderer/d3d/DisplayD3D.cpp b/src/libANGLE/renderer/d3d/DisplayD3D.cpp index bcc68442b..2f5e30436 100644 --- a/src/libANGLE/renderer/d3d/DisplayD3D.cpp +++ b/src/libANGLE/renderer/d3d/DisplayD3D.cpp @@ -61,20 +61,44 @@ egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer) attribMap.get(EGL_PLATFORM_ANGLE_TYPE_ANGLE, EGL_PLATFORM_ANGLE_TYPE_DEFAULT_ANGLE)); #if defined(ANGLE_ENABLE_D3D11) - if (nativeDisplay == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE || - nativeDisplay == EGL_D3D11_ONLY_DISPLAY_ANGLE || - requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE) - { - rendererCreationFunctions.push_back(CreateTypedRendererD3D); - } + const auto addD3D11 = nativeDisplay == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE || + nativeDisplay == EGL_D3D11_ONLY_DISPLAY_ANGLE || + requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_D3D11_ANGLE; #endif #if defined(ANGLE_ENABLE_D3D9) - if (nativeDisplay == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE || - requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE) + const auto addD3D9 = nativeDisplay == EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE || + requestedDisplayType == EGL_PLATFORM_ANGLE_TYPE_D3D9_ANGLE; +#endif + +#if ANGLE_DEFAULT_D3D11 +# if defined(ANGLE_ENABLE_D3D11) + if (addD3D11) + { + rendererCreationFunctions.push_back(CreateTypedRendererD3D); + } +# endif + +# if defined(ANGLE_ENABLE_D3D9) + if (addD3D9) { rendererCreationFunctions.push_back(CreateTypedRendererD3D); } +# endif +#else +# if defined(ANGLE_ENABLE_D3D9) + if (addD3D9) + { + rendererCreationFunctions.push_back(CreateTypedRendererD3D); + } +# endif + +# if defined(ANGLE_ENABLE_D3D11) + if (addD3D11) + { + rendererCreationFunctions.push_back(CreateTypedRendererD3D); + } +# endif #endif if (nativeDisplay != EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE && diff --git a/src/libGLESv2.gni b/src/libGLESv2.gni index 67db6d943..5aa6dbe31 100644 --- a/src/libGLESv2.gni +++ b/src/libGLESv2.gni @@ -624,9 +624,6 @@ libangle_d3d11_sources = [ "src/libANGLE/renderer/d3d/d3d11/VertexArray11.h", "src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.cpp", "src/libANGLE/renderer/d3d/d3d11/VertexBuffer11.h", - "src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp", - "src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.h", - "src/libANGLE/renderer/d3d/d3d11/dxgi_support_table_autogen.cpp", "src/libANGLE/renderer/d3d/d3d11/formatutils11.cpp", "src/libANGLE/renderer/d3d/d3d11/formatutils11.h", "src/libANGLE/renderer/d3d/d3d11/renderer11_utils.cpp", @@ -696,6 +693,9 @@ libangle_d3d11_win32_sources = [ "src/libANGLE/renderer/d3d/d3d11/converged/CompositorNativeWindow11.h", "src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow11Win32.cpp", "src/libANGLE/renderer/d3d/d3d11/win32/NativeWindow11Win32.h", +] + +libangle_d3d_win32_sources = [ "src/third_party/systeminfo/SystemInfo.cpp", "src/third_party/systeminfo/SystemInfo.h", ] @@ -801,6 +801,12 @@ libangle_gl_wgl_sources = [ "src/third_party/khronos/GL/wglext.h", ] +libangle_gl_wgl_d3d11_common_sources = [ + "src/libANGLE/renderer/d3d/d3d11/dxgi_format_map_autogen.cpp", + "src/libANGLE/renderer/d3d/d3d11/dxgi_support_table.h", + "src/libANGLE/renderer/d3d/d3d11/dxgi_support_table_autogen.cpp", +] + libangle_gl_glx_sources = [ "src/libANGLE/renderer/gl/glx/DisplayGLX.cpp", "src/libANGLE/renderer/gl/glx/DisplayGLX.h", diff --git a/src/tests/BUILD.gn b/src/tests/BUILD.gn index 0c3e76ee8..8b50a8109 100644 --- a/src/tests/BUILD.gn +++ b/src/tests/BUILD.gn @@ -199,7 +199,7 @@ if (is_win || is_linux || is_mac || is_android) { sources = angle_white_box_tests_sources main = "angle_end2end_tests_main" - if (is_win) { + if (is_win && angle_enable_d3d11) { sources += angle_white_box_tests_win_sources }