Bug 1680087 - Disable webrender partial present on Mali-T6xx and T7xx. r=aosmond

Due to rendering issues reported on a Mali-T628 and Mali-T760, disable
partial present on all Mali-T6xx and T7xx devices. We know that not
all T6xx and T7xx devices are affected, so this is being cautious. The
driver version is probably more important than the GPU model. We
should make the block more precise once more is known about the bug.

Differential Revision: https://phabricator.services.mozilla.com/D104678
This commit is contained in:
Jamie Nicol 2021-02-10 13:10:38 +00:00
Родитель 2d9a1618aa
Коммит d636995f23
2 изменённых файлов: 30 добавлений и 4 удалений

Просмотреть файл

@ -390,6 +390,17 @@ void gfxConfigManager::ConfigureWebRender() {
if (mWrPartialPresent) {
if (mFeatureWr->IsEnabled() || mFeatureWrSoftware->IsEnabled()) {
mFeatureWrPartial->EnableByDefault();
nsString adapter;
mGfxInfo->GetAdapterDeviceID(adapter);
// Block partial present on Mali-T6xx and T7xx GPUs due to rendering
// issues. See bug 1680087.
if (adapter.Find("Mali-T6", /*ignoreCase*/ true) >= 0 ||
adapter.Find("Mali-T7", /*ignoreCase*/ true) >= 0) {
mFeatureWrPartial->Disable(FeatureStatus::Blocked,
"Partial present blocked on Mali-Txxx",
"FEATURE_FAILURE_PARTIAL_PRESENT_MALI"_ns);
}
}
}
}

Просмотреть файл

@ -26,6 +26,7 @@ class MockGfxInfo final : public nsIGfxInfo {
bool mHasMixedRefreshRate;
Maybe<bool> mHasBattery;
const char* mVendorId;
const char* mDeviceId;
// Default allows WebRender + compositor, and is desktop NVIDIA.
MockGfxInfo()
@ -35,7 +36,8 @@ class MockGfxInfo final : public nsIGfxInfo {
mMaxRefreshRate(-1),
mHasMixedRefreshRate(false),
mHasBattery(Some(false)),
mVendorId("0x10de") {}
mVendorId("0x10de"),
mDeviceId("") {}
NS_IMETHOD GetFeatureStatus(int32_t aFeature, nsACString& aFailureId,
int32_t* _retval) override {
@ -71,6 +73,14 @@ class MockGfxInfo final : public nsIGfxInfo {
return NS_OK;
}
NS_IMETHOD GetAdapterDeviceID(nsAString& aAdapterDeviceID) override {
if (!mDeviceId) {
return NS_ERROR_NOT_IMPLEMENTED;
}
aAdapterDeviceID.AssignASCII(mDeviceId);
return NS_OK;
}
NS_IMETHOD_(int32_t) GetMaxRefreshRate(bool* aMixed) override {
if (aMixed) {
*aMixed = mHasMixedRefreshRate;
@ -168,9 +178,6 @@ class MockGfxInfo final : public nsIGfxInfo {
NS_IMETHOD GetAdapterDriver(nsAString& aAdapterDriver) override {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHOD GetAdapterDeviceID(nsAString& aAdapterDeviceID) override {
return NS_ERROR_NOT_IMPLEMENTED;
}
NS_IMETHOD GetAdapterSubsysID(nsAString& aAdapterSubsysID) override {
return NS_ERROR_NOT_IMPLEMENTED;
}
@ -340,6 +347,14 @@ TEST_F(GfxConfigManager, WebRenderNoPartialPresent) {
EXPECT_FALSE(mFeatures.mWrSoftware.IsEnabled());
}
TEST_F(GfxConfigManager, WebRenderPartialPresentMali) {
mWrPartialPresent = true;
mMockGfxInfo->mDeviceId = "Mali-T760";
ConfigureWebRender();
EXPECT_FALSE(mFeatures.mWrPartial.IsEnabled());
}
TEST_F(GfxConfigManager, WebRenderScaledResolutionWithHwStretching) {
mScaledResolution = true;
ConfigureWebRender();