author | Benoit Jacob <bjacob@mozilla.com> |
Mon, 03 Nov 2014 17:55:00 -0500 | |
changeset 213949 | 3d0169c5795f9f050bb9d9001f01694dc253b637 |
parent 213948 | 9c8ca05b975a0f22e9b2b3d8eb211d4242fcb2a9 |
child 213950 | 7bb233454a290eec9b9fafdf0f13db120b62dd5e |
push id | 27768 |
push user | kwierso@gmail.com |
push date | Wed, 05 Nov 2014 02:19:03 +0000 |
treeherder | mozilla-central@a1823d3c7365 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | jrmuizel |
bugs | 1021265, 36484 |
milestone | 36.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/thebes/gfxWindowsPlatform.cpp +++ b/gfx/thebes/gfxWindowsPlatform.cpp @@ -19,16 +19,17 @@ #include "nsTArray.h" #include "nsIWindowsRegKey.h" #include "nsIFile.h" #include "plbase64.h" #include "nsIXULRuntime.h" #include "nsIGfxInfo.h" +#include "GfxDriverInfo.h" #include "gfxCrashReporterUtils.h" #include "gfxGDIFontList.h" #include "gfxGDIFont.h" #include "mozilla/layers/CompositorParent.h" // for CompositorParent::IsInCompositorThread #include "DeviceManagerD3D9.h" @@ -1502,24 +1503,37 @@ gfxWindowsPlatform::GetDXGIAdapter() // We leak this module everywhere, we might as well do so here as well. dxgiModule.disown(); return mAdapter; } // See bug 1083071. On some drivers, Direct3D 11 CreateShaderResourceView fails // with E_OUTOFMEMORY. -bool DoesD3D11DeviceSupportResourceSharing(ID3D11Device *device) +bool DoesD3D11DeviceWork(ID3D11Device *device) { static bool checked; static bool result; if (checked) return result; checked = true; + + if (GetModuleHandleW(L"dlumd32.dll") && GetModuleHandleW(L"igd10umd32.dll")) { + nsString displayLinkModuleVersionString; + gfxWindowsPlatform::GetDLLVersion(L"dlumd32.dll", displayLinkModuleVersionString); + uint64_t displayLinkModuleVersion; + if (!ParseDriverVersion(displayLinkModuleVersionString, &displayLinkModuleVersion)) { + return false; + } + if (displayLinkModuleVersion <= GFX_DRIVER_VERSION(8,6,1,36484)) { + return false; + } + } + RefPtr<ID3D11Texture2D> texture; D3D11_TEXTURE2D_DESC desc; desc.Width = 32; desc.Height = 32; desc.MipLevels = 1; desc.ArraySize = 1; desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM; desc.SampleDesc.Count = 1;
--- a/gfx/thebes/gfxWindowsPlatform.h +++ b/gfx/thebes/gfxWindowsPlatform.h @@ -300,11 +300,11 @@ private: mozilla::RefPtr<mozilla::layers::ReadbackManagerD3D11> mD3D11ReadbackManager; virtual void GetPlatformCMSOutputProfile(void* &mem, size_t &size); // TODO: unify this with mPrefFonts (NB: holds families, not fonts) in gfxPlatformFontList nsDataHashtable<nsCStringHashKey, nsTArray<nsRefPtr<gfxFontEntry> > > mPrefFonts; }; -bool DoesD3D11DeviceSupportResourceSharing(ID3D11Device *device); +bool DoesD3D11DeviceWork(ID3D11Device *device); #endif /* GFX_WINDOWS_PLATFORM_H */
--- a/widget/windows/nsWindow.cpp +++ b/widget/windows/nsWindow.cpp @@ -6743,23 +6743,22 @@ nsWindow::GetPreferredCompositorBackends mTransparencyMode == eTransparencyTransparent)) { if (prefs.mPreferOpenGL) { aHints.AppendElement(LayersBackend::LAYERS_OPENGL); } ID3D11Device* device = gfxWindowsPlatform::GetPlatform()->GetD3D11Device(); if (device && device->GetFeatureLevel() >= D3D_FEATURE_LEVEL_10_0 && - !DoesD3D11DeviceSupportResourceSharing(device)) { + !DoesD3D11DeviceWork(device)) { // bug 1083071 - bad things - fall back to basic layers // This should not happen aside from driver bugs, and in particular // should not happen on our test machines, so let's NS_ERROR to ensure // that we would catch it as a test failure. - NS_ERROR("Can't use Direct3D 11 because of a driver bug " - "causing resource sharing to fail"); + NS_ERROR("Can't use Direct3D 11 because of a driver bug"); } else { if (!prefs.mPreferD3D9) { aHints.AppendElement(LayersBackend::LAYERS_D3D11); } aHints.AppendElement(LayersBackend::LAYERS_D3D9); } } aHints.AppendElement(LayersBackend::LAYERS_BASIC);