diff options
Diffstat (limited to 'widget/windows/GfxInfo.cpp')
-rw-r--r-- | widget/windows/GfxInfo.cpp | 47 |
1 files changed, 23 insertions, 24 deletions
diff --git a/widget/windows/GfxInfo.cpp b/widget/windows/GfxInfo.cpp index ae66e5feaa..633ed88921 100644 --- a/widget/windows/GfxInfo.cpp +++ b/widget/windows/GfxInfo.cpp @@ -1173,25 +1173,6 @@ static OperatingSystem WindowsVersionToOperatingSystem( } } -static bool OnlyAllowFeatureOnWhitelistedVendor(int32_t aFeature) { - switch (aFeature) { - // The GPU process doesn't need hardware acceleration and can run on - // devices that we normally block from not being on our whitelist. - case nsIGfxInfo::FEATURE_GPU_PROCESS: - // We can mostly assume that ANGLE will work - case nsIGfxInfo::FEATURE_DIRECT3D_11_ANGLE: - // Remote WebGL is needed for Win32k Lockdown, so it should be enabled - // regardless of HW support or not - case nsIGfxInfo::FEATURE_ALLOW_WEBGL_OUT_OF_PROCESS: - // Backdrop filter should generally work, especially if we fall back to - // Software WebRender because of an unknown vendor. - case nsIGfxInfo::FEATURE_BACKDROP_FILTER: - return false; - default: - return true; - } -} - // Return true if the CPU supports AVX, but the operating system does not. #if defined(_M_X64) static inline bool DetectBrokenAVX() { @@ -1920,12 +1901,16 @@ nsresult GfxInfo::GetFeatureStatusImpl( if (NS_FAILED(GetAdapterVendorID(adapterVendorID)) || NS_FAILED(GetAdapterDeviceID(adapterDeviceID)) || NS_FAILED(GetAdapterDriverVersion(adapterDriverVersionString))) { - aFailureId = "FEATURE_FAILURE_GET_ADAPTER"; - *aStatus = FEATURE_BLOCKED_DEVICE; + if (OnlyAllowFeatureOnKnownConfig(aFeature)) { + aFailureId = "FEATURE_FAILURE_GET_ADAPTER"; + *aStatus = FEATURE_BLOCKED_DEVICE; + } else { + *aStatus = FEATURE_STATUS_OK; + } return NS_OK; } - if (OnlyAllowFeatureOnWhitelistedVendor(aFeature) && + if (OnlyAllowFeatureOnKnownConfig(aFeature) && !adapterVendorID.Equals( GfxDriverInfo::GetDeviceVendor(DeviceVendor::Intel), nsCaseInsensitiveStringComparator) && @@ -1974,10 +1959,24 @@ nsresult GfxInfo::GetFeatureStatusImpl( return NS_OK; } + if (adapterDriverVersionString.Length() == 0) { + if (OnlyAllowFeatureOnKnownConfig(aFeature)) { + aFailureId = "FEATURE_FAILURE_EMPTY_DRIVER_VERSION"; + *aStatus = FEATURE_BLOCKED_DRIVER_VERSION; + } else { + *aStatus = FEATURE_STATUS_OK; + } + return NS_OK; + } + uint64_t driverVersion; if (!ParseDriverVersion(adapterDriverVersionString, &driverVersion)) { - aFailureId = "FEATURE_FAILURE_PARSE_DRIVER"; - *aStatus = FEATURE_BLOCKED_DRIVER_VERSION; + if (OnlyAllowFeatureOnKnownConfig(aFeature)) { + aFailureId = "FEATURE_FAILURE_PARSE_DRIVER"; + *aStatus = FEATURE_BLOCKED_DRIVER_VERSION; + } else { + *aStatus = FEATURE_STATUS_OK; + } return NS_OK; } } |