Commit bb96aefa by Jamie Madill Committed by Commit Bot

GN: Componentize D3D back-ends.

This also isolates headers for D3D9 / D3D11 from each other. Bug: angleproject:3943 Change-Id: I04edbe7db68461ae4fc78ac7f9c22451debcb768 Reviewed-on: https://chromium-review.googlesource.com/c/angle/angle/+/2405807 Commit-Queue: Jamie Madill <jmadill@chromium.org> Reviewed-by: 's avatarJonah Ryan-Davis <jonahr@google.com> Reviewed-by: 's avatarGeoff Lang <geofflang@chromium.org>
parent c99c22bb
...@@ -522,18 +522,20 @@ angle_source_set("angle_version") { ...@@ -522,18 +522,20 @@ angle_source_set("angle_version") {
config("angle_backend_config") { config("angle_backend_config") {
defines = [] defines = []
if (angle_enable_d3d9) {
defines += [ "ANGLE_ENABLE_D3D9" ]
}
if (angle_enable_d3d11) {
defines += [ "ANGLE_ENABLE_D3D11" ]
}
if (angle_delegate_workers) { if (angle_delegate_workers) {
defines += [ "ANGLE_DELEGATE_WORKERS" ] defines += [ "ANGLE_DELEGATE_WORKERS" ]
} }
configs = [] configs = []
if (angle_enable_d3d11) {
configs += [ "src/libANGLE/renderer/d3d:angle_d3d11_backend_config" ]
}
if (angle_enable_d3d9) {
configs += [ "src/libANGLE/renderer/d3d:angle_d3d9_backend_config" ]
}
if (angle_enable_gl) { if (angle_enable_gl) {
configs += [ "src/libANGLE/renderer/gl:angle_gl_backend_config" ] configs += [ "src/libANGLE/renderer/gl:angle_gl_backend_config" ]
} }
...@@ -556,9 +558,6 @@ config("libANGLE_config") { ...@@ -556,9 +558,6 @@ config("libANGLE_config") {
defines = [] defines = []
libs = [] libs = []
ldflags = [] ldflags = []
if (angle_enable_d3d9) {
ldflags += [ "/DELAYLOAD:d3d9.dll" ]
}
defines += [ "LIBANGLE_IMPLEMENTATION" ] defines += [ "LIBANGLE_IMPLEMENTATION" ]
if (is_win) { if (is_win) {
...@@ -656,15 +655,20 @@ angle_source_set("libANGLE_base") { ...@@ -656,15 +655,20 @@ angle_source_set("libANGLE_base") {
] ]
if (is_win) { if (is_win) {
if (angle_enable_d3d9) {
libs += [ "delayimp.lib" ]
}
libs += [ libs += [
"gdi32.lib", "gdi32.lib",
"user32.lib", "user32.lib",
] ]
} }
if (angle_enable_d3d11) {
public_deps += [ "src/libANGLE/renderer/d3d:angle_d3d11_backend" ]
}
if (angle_enable_d3d9) {
public_deps += [ "src/libANGLE/renderer/d3d:angle_d3d9_backend" ]
}
if (angle_enable_gl) { if (angle_enable_gl) {
public_deps += [ "src/libANGLE/renderer/gl:angle_gl_backend" ] public_deps += [ "src/libANGLE/renderer/gl:angle_gl_backend" ]
} }
...@@ -686,38 +690,6 @@ angle_source_set("libANGLE_base") { ...@@ -686,38 +690,6 @@ angle_source_set("libANGLE_base") {
suppressed_configs -= [ "//build/config/clang:find_bad_constructs" ] suppressed_configs -= [ "//build/config/clang:find_bad_constructs" ]
} }
# Shared D3D sources.
if (angle_enable_d3d9 || angle_enable_d3d11) {
sources += libangle_d3d_shared_sources
defines += [ "ANGLE_PRELOADED_D3DCOMPILER_MODULE_NAMES={ " + "\"d3dcompiler_47.dll\", \"d3dcompiler_46.dll\", \"d3dcompiler_43.dll\" }" ]
}
if (angle_enable_d3d9) {
sources += libangle_d3d9_sources
libs += [ "d3d9.lib" ]
}
if (angle_enable_d3d11) {
sources += libangle_d3d11_sources
if (angle_is_winuwp) {
sources += libangle_d3d11_winuwp_sources
} else {
sources += libangle_d3d11_win32_sources
}
libs += [ "dxguid.lib" ]
import("src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni")
sources += libangle_d3d11_blit_shaders
public_deps += [ ":angle_d3d_format_tables" ]
}
if (!angle_is_winuwp && (angle_enable_d3d11 || angle_enable_d3d9)) {
sources += libangle_d3d_win32_sources
}
if (is_mac) { if (is_mac) {
sources += libangle_mac_sources sources += libangle_mac_sources
} }
......
{ {
"src/libANGLE/renderer/d3d/d3d11/Blit11Helper_autogen.inc": "src/libANGLE/renderer/d3d/d3d11/Blit11Helper_autogen.inc":
"f69cf03a3d868a977fad9e9c0eb0652a", "f0e02210fb6b4d83d8a8e9e15287aa15",
"src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni": "src/libANGLE/renderer/d3d/d3d11/d3d11_blit_shaders_autogen.gni":
"329dbafc64b0cb578348819198abcfea", "8b45b3db86b36ccf9ea0a29c1030c55f",
"src/libANGLE/renderer/d3d/d3d11/gen_blit11helper.py": "src/libANGLE/renderer/d3d/d3d11/gen_blit11helper.py":
"704a82846928d3e21fc0794dff3a08f8" "d751f6a9e7da62ad02344300df12eed4"
} }
\ No newline at end of file
...@@ -22,14 +22,6 @@ ...@@ -22,14 +22,6 @@
#include "libANGLE/renderer/d3d/SurfaceD3D.h" #include "libANGLE/renderer/d3d/SurfaceD3D.h"
#include "libANGLE/renderer/d3d/SwapChainD3D.h" #include "libANGLE/renderer/d3d/SwapChainD3D.h"
#if defined(ANGLE_ENABLE_D3D9)
# include "libANGLE/renderer/d3d/d3d9/Renderer9.h"
#endif // ANGLE_ENABLE_D3D9
#if defined(ANGLE_ENABLE_D3D11)
# include "libANGLE/renderer/d3d/d3d11/Renderer11.h"
#endif // ANGLE_ENABLE_D3D11
#if !defined(ANGLE_DEFAULT_D3D11) #if !defined(ANGLE_DEFAULT_D3D11)
// Enables use of the Direct3D 11 API for a default display, when available // Enables use of the Direct3D 11 API for a default display, when available
# define ANGLE_DEFAULT_D3D11 1 # define ANGLE_DEFAULT_D3D11 1
...@@ -38,13 +30,7 @@ ...@@ -38,13 +30,7 @@
namespace rx namespace rx
{ {
typedef RendererD3D *(*CreateRendererD3DFunction)(egl::Display *); using CreateRendererD3DFunction = RendererD3D *(*)(egl::Display *);
template <typename RendererType>
static RendererD3D *CreateTypedRendererD3D(egl::Display *display)
{
return new RendererType(display);
}
egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer) egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer)
{ {
...@@ -75,28 +61,28 @@ egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer) ...@@ -75,28 +61,28 @@ egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer)
# if defined(ANGLE_ENABLE_D3D11) # if defined(ANGLE_ENABLE_D3D11)
if (addD3D11) if (addD3D11)
{ {
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); rendererCreationFunctions.push_back(CreateRenderer11);
} }
# endif # endif
# if defined(ANGLE_ENABLE_D3D9) # if defined(ANGLE_ENABLE_D3D9)
if (addD3D9) if (addD3D9)
{ {
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer9>); rendererCreationFunctions.push_back(CreateRenderer9);
} }
# endif # endif
#else #else
# if defined(ANGLE_ENABLE_D3D9) # if defined(ANGLE_ENABLE_D3D9)
if (addD3D9) if (addD3D9)
{ {
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer9>); rendererCreationFunctions.push_back(CreateRenderer9);
} }
# endif # endif
# if defined(ANGLE_ENABLE_D3D11) # if defined(ANGLE_ENABLE_D3D11)
if (addD3D11) if (addD3D11)
{ {
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); rendererCreationFunctions.push_back(CreateRenderer11);
} }
# endif # endif
#endif #endif
...@@ -109,17 +95,17 @@ egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer) ...@@ -109,17 +95,17 @@ egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer)
// the definition of ANGLE_DEFAULT_D3D11 // the definition of ANGLE_DEFAULT_D3D11
#if ANGLE_DEFAULT_D3D11 #if ANGLE_DEFAULT_D3D11
# if defined(ANGLE_ENABLE_D3D11) # if defined(ANGLE_ENABLE_D3D11)
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); rendererCreationFunctions.push_back(CreateRenderer11);
# endif # endif
# if defined(ANGLE_ENABLE_D3D9) # if defined(ANGLE_ENABLE_D3D9)
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer9>); rendererCreationFunctions.push_back(CreateRenderer9);
# endif # endif
#else #else
# if defined(ANGLE_ENABLE_D3D9) # if defined(ANGLE_ENABLE_D3D9)
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer9>); rendererCreationFunctions.push_back(CreateRenderer9);
# endif # endif
# if defined(ANGLE_ENABLE_D3D11) # if defined(ANGLE_ENABLE_D3D11)
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); rendererCreationFunctions.push_back(CreateRenderer11);
# endif # endif
#endif #endif
} }
...@@ -129,7 +115,7 @@ egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer) ...@@ -129,7 +115,7 @@ egl::Error CreateRendererD3D(egl::Display *display, RendererD3D **outRenderer)
#if defined(ANGLE_ENABLE_D3D11) #if defined(ANGLE_ENABLE_D3D11)
if (display->getDevice()->getType() == EGL_D3D11_DEVICE_ANGLE) if (display->getDevice()->getType() == EGL_D3D11_DEVICE_ANGLE)
{ {
rendererCreationFunctions.push_back(CreateTypedRendererD3D<Renderer11>); rendererCreationFunctions.push_back(CreateRenderer11);
} }
#endif #endif
} }
......
...@@ -110,6 +110,64 @@ class DisplayD3D : public DisplayImpl, public d3d::Context ...@@ -110,6 +110,64 @@ class DisplayD3D : public DisplayImpl, public d3d::Context
std::string mStoredErrorString; std::string mStoredErrorString;
}; };
// Possible reasons RendererD3D initialize can fail
enum D3D11InitError
{
// The renderer loaded successfully
D3D11_INIT_SUCCESS = 0,
// Failed to load the ANGLE & D3D compiler libraries
D3D11_INIT_COMPILER_ERROR,
// Failed to load a necessary DLL (non-compiler)
D3D11_INIT_MISSING_DEP,
// CreateDevice returned E_INVALIDARG
D3D11_INIT_CREATEDEVICE_INVALIDARG,
// CreateDevice failed with an error other than invalid arg
D3D11_INIT_CREATEDEVICE_ERROR,
// DXGI 1.2 required but not found
D3D11_INIT_INCOMPATIBLE_DXGI,
// Other initialization error
D3D11_INIT_OTHER_ERROR,
// CreateDevice returned E_FAIL
D3D11_INIT_CREATEDEVICE_FAIL,
// CreateDevice returned E_NOTIMPL
D3D11_INIT_CREATEDEVICE_NOTIMPL,
// CreateDevice returned E_OUTOFMEMORY
D3D11_INIT_CREATEDEVICE_OUTOFMEMORY,
// CreateDevice returned DXGI_ERROR_INVALID_CALL
D3D11_INIT_CREATEDEVICE_INVALIDCALL,
// CreateDevice returned DXGI_ERROR_SDK_COMPONENT_MISSING
D3D11_INIT_CREATEDEVICE_COMPONENTMISSING,
// CreateDevice returned DXGI_ERROR_WAS_STILL_DRAWING
D3D11_INIT_CREATEDEVICE_WASSTILLDRAWING,
// CreateDevice returned DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
D3D11_INIT_CREATEDEVICE_NOTAVAILABLE,
// CreateDevice returned DXGI_ERROR_DEVICE_HUNG
D3D11_INIT_CREATEDEVICE_DEVICEHUNG,
// CreateDevice returned NULL
D3D11_INIT_CREATEDEVICE_NULL,
NUM_D3D11_INIT_ERRORS
};
enum D3D9InitError
{
D3D9_INIT_SUCCESS = 0,
// Failed to load the D3D or ANGLE compiler
D3D9_INIT_COMPILER_ERROR,
// Failed to load a necessary DLL
D3D9_INIT_MISSING_DEP,
// Device creation error
D3D9_INIT_CREATE_DEVICE_ERROR,
// System does not meet minimum shader spec
D3D9_INIT_UNSUPPORTED_VERSION,
// System does not support stretchrect from textures
D3D9_INIT_UNSUPPORTED_STRETCHRECT,
// A call returned out of memory or device lost
D3D9_INIT_OUT_OF_MEMORY,
// Other unspecified error
D3D9_INIT_OTHER_ERROR,
NUM_D3D9_INIT_ERRORS
};
} // namespace rx } // namespace rx
#endif // LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_ #endif // LIBANGLE_RENDERER_D3D_DISPLAYD3D_H_
...@@ -440,6 +440,11 @@ class RendererD3D : public BufferFactoryD3D ...@@ -440,6 +440,11 @@ class RendererD3D : public BufferFactoryD3D
unsigned int GetBlendSampleMask(const gl::State &glState, int samples); unsigned int GetBlendSampleMask(const gl::State &glState, int samples);
bool InstancedPointSpritesActive(ProgramD3D *programD3D, gl::PrimitiveMode mode); bool InstancedPointSpritesActive(ProgramD3D *programD3D, gl::PrimitiveMode mode);
GLenum DefaultGLErrorCode(HRESULT hr); GLenum DefaultGLErrorCode(HRESULT hr);
// Define stubs so we don't need to include D3D9/D3D11 headers directly.
RendererD3D *CreateRenderer11(egl::Display *display);
RendererD3D *CreateRenderer9(egl::Display *display);
} // namespace rx } // namespace rx
#endif // LIBANGLE_RENDERER_D3D_RENDERERD3D_H_ #endif // LIBANGLE_RENDERER_D3D_RENDERERD3D_H_
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
#include "libANGLE/renderer/d3d/RenderTargetD3D.h" #include "libANGLE/renderer/d3d/RenderTargetD3D.h"
#include "libANGLE/renderer/d3d/RendererD3D.h" #include "libANGLE/renderer/d3d/RendererD3D.h"
#include "libANGLE/renderer/d3d/SwapChainD3D.h" #include "libANGLE/renderer/d3d/SwapChainD3D.h"
#include "libANGLE/renderer/d3d/d3d11/formatutils11.h"
#include <EGL/eglext.h> #include <EGL/eglext.h>
#include <tchar.h> #include <tchar.h>
......
// GENERATED FILE - DO NOT EDIT. // GENERATED FILE - DO NOT EDIT.
// Generated by gen_blit11helper.py. // Generated by gen_blit11helper.py.
// //
// Copyright 2019 The ANGLE Project Authors. All rights reserved. // Copyright 2020 The ANGLE Project Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
// //
......
...@@ -4218,4 +4218,9 @@ angle::Result Renderer11::getIncompleteTexture(const gl::Context *context, ...@@ -4218,4 +4218,9 @@ angle::Result Renderer11::getIncompleteTexture(const gl::Context *context,
{ {
return GetImplAs<Context11>(context)->getIncompleteTexture(context, type, textureOut); return GetImplAs<Context11>(context)->getIncompleteTexture(context, type, textureOut);
} }
RendererD3D *CreateRenderer11(egl::Display *display)
{
return new Renderer11(display);
}
} // namespace rx } // namespace rx
...@@ -72,44 +72,6 @@ enum ...@@ -72,44 +72,6 @@ enum
MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 = 1024 MAX_FRAGMENT_UNIFORM_VECTORS_D3D11 = 1024
}; };
// Possible reasons RendererD3D initialize can fail
enum D3D11InitError
{
// The renderer loaded successfully
D3D11_INIT_SUCCESS = 0,
// Failed to load the ANGLE & D3D compiler libraries
D3D11_INIT_COMPILER_ERROR,
// Failed to load a necessary DLL (non-compiler)
D3D11_INIT_MISSING_DEP,
// CreateDevice returned E_INVALIDARG
D3D11_INIT_CREATEDEVICE_INVALIDARG,
// CreateDevice failed with an error other than invalid arg
D3D11_INIT_CREATEDEVICE_ERROR,
// DXGI 1.2 required but not found
D3D11_INIT_INCOMPATIBLE_DXGI,
// Other initialization error
D3D11_INIT_OTHER_ERROR,
// CreateDevice returned E_FAIL
D3D11_INIT_CREATEDEVICE_FAIL,
// CreateDevice returned E_NOTIMPL
D3D11_INIT_CREATEDEVICE_NOTIMPL,
// CreateDevice returned E_OUTOFMEMORY
D3D11_INIT_CREATEDEVICE_OUTOFMEMORY,
// CreateDevice returned DXGI_ERROR_INVALID_CALL
D3D11_INIT_CREATEDEVICE_INVALIDCALL,
// CreateDevice returned DXGI_ERROR_SDK_COMPONENT_MISSING
D3D11_INIT_CREATEDEVICE_COMPONENTMISSING,
// CreateDevice returned DXGI_ERROR_WAS_STILL_DRAWING
D3D11_INIT_CREATEDEVICE_WASSTILLDRAWING,
// CreateDevice returned DXGI_ERROR_NOT_CURRENTLY_AVAILABLE
D3D11_INIT_CREATEDEVICE_NOTAVAILABLE,
// CreateDevice returned DXGI_ERROR_DEVICE_HUNG
D3D11_INIT_CREATEDEVICE_DEVICEHUNG,
// CreateDevice returned NULL
D3D11_INIT_CREATEDEVICE_NULL,
NUM_D3D11_INIT_ERRORS
};
class Renderer11 : public RendererD3D class Renderer11 : public RendererD3D
{ {
public: public:
......
...@@ -277,8 +277,8 @@ def get_shader_filenames(): ...@@ -277,8 +277,8 @@ def get_shader_filenames():
continue continue
if len(blitshader) == 3: if len(blitshader) == 3:
filenames.append( filenames.append(
(" \"src/libANGLE/renderer/d3d/d3d11/shaders/compiled/{0}\",").format( (" \"d3d11/shaders/compiled/{0}\",").format(blitshader[2].replace(
blitshader[2].replace("*", dimension.lower()))) "*", dimension.lower())))
return filenames return filenames
......
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include "libANGLE/formatutils.h" #include "libANGLE/formatutils.h"
#include "libANGLE/renderer/d3d/CompilerD3D.h" #include "libANGLE/renderer/d3d/CompilerD3D.h"
#include "libANGLE/renderer/d3d/DeviceD3D.h" #include "libANGLE/renderer/d3d/DeviceD3D.h"
#include "libANGLE/renderer/d3d/DisplayD3D.h"
#include "libANGLE/renderer/d3d/FramebufferD3D.h" #include "libANGLE/renderer/d3d/FramebufferD3D.h"
#include "libANGLE/renderer/d3d/IndexDataManager.h" #include "libANGLE/renderer/d3d/IndexDataManager.h"
#include "libANGLE/renderer/d3d/ProgramD3D.h" #include "libANGLE/renderer/d3d/ProgramD3D.h"
...@@ -3263,4 +3264,9 @@ angle::Result Renderer9::ensureVertexDataManagerInitialized(const gl::Context *c ...@@ -3263,4 +3264,9 @@ angle::Result Renderer9::ensureVertexDataManagerInitialized(const gl::Context *c
return angle::Result::Continue; return angle::Result::Continue;
} }
RendererD3D *CreateRenderer9(egl::Display *display)
{
return new Renderer9(display);
}
} // namespace rx } // namespace rx
...@@ -44,26 +44,6 @@ struct ClearParameters; ...@@ -44,26 +44,6 @@ struct ClearParameters;
struct D3DUniform; struct D3DUniform;
struct TranslatedAttribute; struct TranslatedAttribute;
enum D3D9InitError
{
D3D9_INIT_SUCCESS = 0,
// Failed to load the D3D or ANGLE compiler
D3D9_INIT_COMPILER_ERROR,
// Failed to load a necessary DLL
D3D9_INIT_MISSING_DEP,
// Device creation error
D3D9_INIT_CREATE_DEVICE_ERROR,
// System does not meet minimum shader spec
D3D9_INIT_UNSUPPORTED_VERSION,
// System does not support stretchrect from textures
D3D9_INIT_UNSUPPORTED_STRETCHRECT,
// A call returned out of memory or device lost
D3D9_INIT_OUT_OF_MEMORY,
// Other unspecified error
D3D9_INIT_OTHER_ERROR,
NUM_D3D9_INIT_ERRORS
};
class Renderer9 : public RendererD3D class Renderer9 : public RendererD3D
{ {
public: public:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment