mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-25 05:41:12 +00:00
Bug 1269387. Port D3D11 ANGLE configuration to gfxConfig. r=dvander
This commit is contained in:
parent
4098575167
commit
e1beb97b75
@ -20,6 +20,7 @@ namespace gfx {
|
||||
_(D3D11_COMPOSITING, Feature, "Direct3D11 Compositing") \
|
||||
_(D3D9_COMPOSITING, Feature, "Direct3D9 Compositing") \
|
||||
_(DIRECT2D, Feature, "Direct2D") \
|
||||
_(D3D11_ANGLE, Feature, "Direct3D11 ANGLE") \
|
||||
/* Add new entries above this comment */
|
||||
|
||||
enum class Feature : uint32_t {
|
||||
|
@ -4,6 +4,7 @@
|
||||
|
||||
#include "GLLibraryEGL.h"
|
||||
|
||||
#include "gfxConfig.h"
|
||||
#include "gfxCrashReporterUtils.h"
|
||||
#include "gfxUtils.h"
|
||||
#include "mozilla/Preferences.h"
|
||||
@ -169,21 +170,20 @@ GetAndInitDisplayForAccelANGLE(GLLibraryEGL& egl)
|
||||
{
|
||||
EGLDisplay ret = 0;
|
||||
|
||||
// D3D11 ANGLE only works with OMTC; there's a bug in the non-OMTC layer
|
||||
// manager, and it's pointless to try to fix it. We also don't try
|
||||
// D3D11 ANGLE if the layer manager is prefering D3D9 (hrm, do we care?)
|
||||
if (!gfxPrefs::LayersOffMainThreadCompositionForceDisabled() &&
|
||||
!gfxPrefs::LayersPreferD3D9())
|
||||
{
|
||||
FeatureState& d3d11ANGLE = gfxConfig::GetFeature(Feature::D3D11_ANGLE);
|
||||
|
||||
if (!gfxPrefs::WebGLANGLETryD3D11())
|
||||
d3d11ANGLE.UserDisable("User disabled D3D11 ANGLE by pref");
|
||||
|
||||
if (gfxPrefs::WebGLANGLEForceD3D11())
|
||||
d3d11ANGLE.UserForceEnable("User force-enabled D3D11 ANGLE on disabled hardware");
|
||||
|
||||
if (gfxConfig::IsForcedOnByUser(Feature::D3D11_ANGLE))
|
||||
return GetAndInitDisplay(egl, LOCAL_EGL_D3D11_ONLY_DISPLAY_ANGLE);
|
||||
|
||||
if (gfxPrefs::WebGLANGLETryD3D11() &&
|
||||
gfxPlatform::GetPlatform()->CanUseDirect3D11ANGLE())
|
||||
{
|
||||
if (d3d11ANGLE.IsEnabled()) {
|
||||
ret = GetAndInitDisplay(egl, LOCAL_EGL_D3D11_ELSE_D3D9_DISPLAY_ANGLE);
|
||||
}
|
||||
}
|
||||
|
||||
if (!ret) {
|
||||
ret = GetAndInitDisplay(egl, EGL_DEFAULT_DISPLAY);
|
||||
|
@ -95,8 +95,6 @@ enum eGfxLog {
|
||||
// when searching through pref langs, max number of pref langs
|
||||
const uint32_t kMaxLenPrefLangList = 32;
|
||||
|
||||
extern bool gANGLESupportsD3D11;
|
||||
|
||||
#define UNINITIALIZED_VALUE (-1)
|
||||
|
||||
inline const char*
|
||||
@ -450,7 +448,6 @@ public:
|
||||
static bool OffMainThreadCompositingEnabled();
|
||||
|
||||
virtual bool CanUseHardwareVideoDecoding();
|
||||
virtual bool CanUseDirect3D11ANGLE() { return false; }
|
||||
|
||||
// Returns a prioritized list of all available compositor backends.
|
||||
void GetCompositorBackends(bool useAcceleration, nsTArray<mozilla::layers::LayersBackend>& aBackends);
|
||||
|
@ -428,12 +428,6 @@ gfxWindowsPlatform::CanUseHardwareVideoDecoding()
|
||||
return !IsWARP() && gfxPlatform::CanUseHardwareVideoDecoding();
|
||||
}
|
||||
|
||||
bool
|
||||
gfxWindowsPlatform::CanUseDirect3D11ANGLE()
|
||||
{
|
||||
return gANGLESupportsD3D11 && gfxConfig::IsEnabled(Feature::D3D11_COMPOSITING);
|
||||
}
|
||||
|
||||
bool
|
||||
gfxWindowsPlatform::InitDWriteSupport()
|
||||
{
|
||||
@ -1578,12 +1572,10 @@ bool DoesD3D11DeviceWork()
|
||||
&displayLinkModuleVersion)) {
|
||||
gfxCriticalError() << "DisplayLink: could not parse version "
|
||||
<< checkModules[i];
|
||||
gANGLESupportsD3D11 = false;
|
||||
return false;
|
||||
}
|
||||
if (displayLinkModuleVersion <= V(8,6,1,36484)) {
|
||||
gfxCriticalError(CriticalLog::DefaultOptions(false)) << "DisplayLink: too old version " << displayLinkModuleVersionString.get();
|
||||
gANGLESupportsD3D11 = false;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
@ -2119,8 +2111,16 @@ gfxWindowsPlatform::AttemptD3D11DeviceCreation(FeatureState& d3d11)
|
||||
// GetDeviceRemovedReason to return weird values.
|
||||
mCompositorD3D11TextureSharingWorks = ::DoesD3D11TextureSharingWork(mD3D11Device);
|
||||
|
||||
if (!mCompositorD3D11TextureSharingWorks || DoesRenderTargetViewNeedsRecreating(mD3D11Device)) {
|
||||
gANGLESupportsD3D11 = false;
|
||||
if (!mCompositorD3D11TextureSharingWorks) {
|
||||
gfxConfig::SetFailed(Feature::D3D11_ANGLE,
|
||||
FeatureStatus::Broken,
|
||||
"Texture sharing doesn't work");
|
||||
}
|
||||
|
||||
if (DoesRenderTargetViewNeedsRecreating(mD3D11Device)) {
|
||||
gfxConfig::SetFailed(Feature::D3D11_ANGLE,
|
||||
FeatureStatus::Broken,
|
||||
"RenderTargetViews need recreating");
|
||||
}
|
||||
|
||||
mD3D11Device->SetExceptionMode(0);
|
||||
@ -2367,6 +2367,12 @@ gfxWindowsPlatform::InitializeDevices()
|
||||
InitializeD3D11();
|
||||
InitializeD2D();
|
||||
|
||||
if (!gfxConfig::IsEnabled(Feature::D3D11_COMPOSITING)) {
|
||||
gfxConfig::DisableByDefault(Feature::D3D11_ANGLE, FeatureStatus::Disabled, "D3D11 compositing is disabled");
|
||||
} else {
|
||||
gfxConfig::EnableByDefault(Feature::D3D11_ANGLE);
|
||||
}
|
||||
|
||||
if (!gfxConfig::IsEnabled(Feature::DIRECT2D)) {
|
||||
if (XRE_IsContentProcess() && GetParentDevicePrefs().useD2D1()) {
|
||||
RecordContentDeviceFailure(TelemetryDeviceCode::D2D1);
|
||||
|
@ -97,8 +97,6 @@ struct ClearTypeParameterInfo {
|
||||
int32_t enhancedContrast;
|
||||
};
|
||||
|
||||
extern bool gANGLESupportsD3D11;
|
||||
|
||||
class gfxWindowsPlatform : public gfxPlatform {
|
||||
public:
|
||||
enum TextRenderingMode {
|
||||
@ -262,8 +260,6 @@ public:
|
||||
}
|
||||
bool SupportsPluginDirectDXGIDrawing();
|
||||
|
||||
virtual bool CanUseDirect3D11ANGLE();
|
||||
|
||||
protected:
|
||||
bool AccelerateLayersByDefault() override {
|
||||
return true;
|
||||
|
Loading…
Reference in New Issue
Block a user