diff options
author | HyunKyung Kim <hk310.kim@samsung.com> | 2021-06-21 19:59:04 +0000 |
---|---|---|
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | 2021-06-21 19:59:04 +0000 |
commit | c8fdcf12bf4cef3c4b74d41570592aca327c5a3a (patch) | |
tree | 71d65f83f8e5567f748621102c8cb5197c8e7df4 | |
parent | a8177792ea37bcaa3e022dc818c0b48b44df98ae (diff) | |
parent | 6ac7fed9a52c4e4ba67ab5a2adc5dcce04af43ab (diff) | |
download | gs101-c8fdcf12bf4cef3c4b74d41570592aca327c5a3a.tar.gz |
libhwc2.1: Force display color setting after readback am: 6ac7fed9a5
Original change: https://googleplex-android-review.googlesource.com/c/platform/hardware/google/graphics/gs101/+/14665973
Change-Id: Ibd48e3ba9ac45232ff3720991021f4a71afba2c2
4 files changed, 25 insertions, 6 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp index 4e1973c..b68f448 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp @@ -419,7 +419,9 @@ int32_t ExynosDisplayDrmInterfaceModule::setDisplayColorBlob( ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq) { /* dirty bit is valid only if enable is true */ - if (!prop.id() || (stage.enable && !stage.dirty)) + if (!prop.id()) + return NO_ERROR; + if (!mForceDisplayColorSetting && stage.enable && !stage.dirty) return NO_ERROR; int32_t ret = 0; @@ -478,8 +480,9 @@ int32_t ExynosDisplayDrmInterfaceModule::setDisplayColorBlob( int32_t ExynosDisplayDrmInterfaceModule::setDisplayColorSetting( ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq) { - if ((mColorSettingChanged == false) || - (isPrimary() == false)) + if (isPrimary() == false) + return NO_ERROR; + if (!mForceDisplayColorSetting && !mColorSettingChanged) return NO_ERROR; ExynosPrimaryDisplayModule* display = diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h index aa35ef1..36efc8c 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h @@ -35,8 +35,10 @@ class ExynosDisplayDrmInterfaceModule : public ExynosDisplayDrmInterface { ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq, const std::unique_ptr<DrmPlane> &plane, const exynos_win_config_data &config); - void setColorSettingChanged(bool changed) { - mColorSettingChanged = changed; }; + void setColorSettingChanged(bool changed, bool forceDisplay = false) { + mColorSettingChanged = changed; + mForceDisplayColorSetting = forceDisplay; + }; void destroyOldBlobs(std::vector<uint32_t> &oldBlobs); int32_t createCgcBlobFromIDqe(const IDisplayColorGS101::IDqe &dqe, @@ -132,6 +134,7 @@ class ExynosDisplayDrmInterfaceModule : public ExynosDisplayDrmInterface { mOldDppBlobs.emplace_back(mDrmDevice, planes[ix]->id()); }; bool mColorSettingChanged = false; + bool mForceDisplayColorSetting = false; enum Bpc_Type { BPC_UNSPECIFIED = 0, BPC_8, diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp index 0a4a6d0..4d75ebc 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp @@ -357,12 +357,24 @@ int ExynosPrimaryDisplayModule::deliverWinConfigData() ExynosDisplayDrmInterfaceModule *moduleDisplayInterface = (ExynosDisplayDrmInterfaceModule*)(mDisplayInterface.get()); + bool forceDisplayColorSetting = false; + if (!mDisplaySceneInfo.displaySettingDelivered) + forceDisplayColorSetting = true; + moduleDisplayInterface->setColorSettingChanged( - mDisplaySceneInfo.needDisplayColorSetting()); + mDisplaySceneInfo.needDisplayColorSetting(), + forceDisplayColorSetting); ret = ExynosDisplay::deliverWinConfigData(); checkAtcAnimation(); + + if (mDpuData.enable_readback && + !mDpuData.readback_info.requested_from_service) + mDisplaySceneInfo.displaySettingDelivered = false; + else + mDisplaySceneInfo.displaySettingDelivered = true; + return ret; } diff --git a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h index 2e47355..dc4ccc4 100644 --- a/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h +++ b/libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h @@ -127,6 +127,7 @@ class ExynosPrimaryDisplayModule : public ExynosPrimaryDisplay { uint32_t planeId; }; bool colorSettingChanged = false; + bool displaySettingDelivered = false; DisplayScene displayScene; /* |