diff --git a/gfx/layers/d3d11/CompositorD3D11.cpp b/gfx/layers/d3d11/CompositorD3D11.cpp index 35ca0945eb3e..9f7132b7aa75 100644 --- a/gfx/layers/d3d11/CompositorD3D11.cpp +++ b/gfx/layers/d3d11/CompositorD3D11.cpp @@ -11,6 +11,7 @@ #include "gfxWindowsPlatform.h" #include "nsIWidget.h" +#include "nsIGfxInfo.h" #include "mozilla/layers/ImageHost.h" #include "mozilla/layers/ContentHost.h" #include "mozilla/layers/Effects.h" @@ -19,6 +20,7 @@ #include "gfxCrashReporterUtils.h" #include "gfxVR.h" #include "mozilla/gfx/StackArray.h" +#include "mozilla/Services.h" #include "mozilla/EnumeratedArray.h" @@ -1200,7 +1202,13 @@ CompositorD3D11::EndFrame() if (oldSize == mSize) { RefPtr chain; HRESULT hr = mSwapChain->QueryInterface((IDXGISwapChain1**)byRef(chain)); - if (SUCCEEDED(hr) && chain) { + nsString vendorID; + nsCOMPtr gfxInfo = services::GetGfxInfo(); + gfxInfo->GetAdapterVendorID(vendorID); + bool isNvidia = vendorID.EqualsLiteral("0x10de") && !gfxWindowsPlatform::GetPlatform()->IsWARP(); + if (SUCCEEDED(hr) && chain && !isNvidia) { + // Avoid partial present on Nvidia hardware to try to work around + // bug 1189940 DXGI_PRESENT_PARAMETERS params; PodZero(¶ms); params.DirtyRectsCount = mInvalidRegion.GetNumRects();