summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHyunKyung Kim <hk310.kim@samsung.com>2021-06-21 19:59:04 +0000
committerAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>2021-06-21 19:59:04 +0000
commitc8fdcf12bf4cef3c4b74d41570592aca327c5a3a (patch)
tree71d65f83f8e5567f748621102c8cb5197c8e7df4
parenta8177792ea37bcaa3e022dc818c0b48b44df98ae (diff)
parent6ac7fed9a52c4e4ba67ab5a2adc5dcce04af43ab (diff)
downloadgs101-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
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp9
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h7
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.cpp14
-rw-r--r--libhwc2.1/libmaindisplay/ExynosPrimaryDisplayModule.h1
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;
/*