diff options
author | Long Ling <longling@google.com> | 2020-11-24 19:19:16 -0800 |
---|---|---|
committer | Long Ling <longling@google.com> | 2020-11-25 13:41:41 -0800 |
commit | e30a2c2ddd2ea5d1ff70a5941428495a815cd56c (patch) | |
tree | b5edb163a2267b268b3d0610f20cc3769f2d004f /libhwc2.1/libdisplayinterface | |
parent | 2051c83dbba22f3a5ffe3f99d7576b4494519012 (diff) | |
download | gs101-e30a2c2ddd2ea5d1ff70a5941428495a815cd56c.tar.gz |
libhwc2.1 force layer color update if assigned plane changes
If a layer's assigned plane has changed, force to update the DPP's color
settings.
Bug: 174193808
Change-Id: Ie29f7865afec795de4a4196739946ccd6af15aa6
Diffstat (limited to 'libhwc2.1/libdisplayinterface')
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp | 16 | ||||
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h | 3 |
2 files changed, 11 insertions, 8 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp index 3e7416c..a5fc8b5 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.cpp @@ -548,10 +548,11 @@ int32_t ExynosDisplayDrmInterfaceModule::setPlaneColorBlob( const StageDataType &stage, const IDisplayColorGS101::IDpp &dpp, const uint32_t dppIndex, - ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq) + ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq, + bool forceUpdate) { /* dirty bit is valid only if enable is true */ - if (!prop.id() || (stage.enable && !stage.dirty)) + if (!prop.id() || (stage.enable && !stage.dirty && !forceUpdate)) return NO_ERROR; if (dppIndex >= mOldDppBlobs.size()) { @@ -587,7 +588,7 @@ int32_t ExynosDisplayDrmInterfaceModule::setPlaneColorBlob( } /* Skip setting when previous and current setting is same with 0 */ - if ((blobId == 0) && (oldDppBlobs.getBlob(type) == 0)) + if ((blobId == 0) && (oldDppBlobs.getBlob(type) == 0) && !forceUpdate) return ret; if ((ret = drmReq.atomicAddProperty(plane->id(), prop, blobId)) < 0) { @@ -654,32 +655,33 @@ int32_t ExynosDisplayDrmInterfaceModule::setPlaneColorSetting( const IDisplayColorGS101::IDpp &dpp = display->getDppForLayer(layer); const uint32_t dppIndex = static_cast<uint32_t>(display->getDppIndexForLayer(layer)); + bool planeChanged = display->checkAndSaveLayerPlaneId(layer, plane->id()); int ret = 0; if ((ret = setPlaneColorBlob(plane, plane->eotf_lut_property(), static_cast<uint32_t>(DppBlobs::EOTF), - dpp.EotfLut(), dpp, dppIndex, drmReq) != NO_ERROR)) { + dpp.EotfLut(), dpp, dppIndex, drmReq, planeChanged) != NO_ERROR)) { HWC_LOGE(mExynosDisplay, "%s: dpp[%d] set oetf blob fail", __func__, dppIndex); return ret; } if ((ret = setPlaneColorBlob(plane, plane->gammut_matrix_property(), static_cast<uint32_t>(DppBlobs::GM), - dpp.Gm(), dpp, dppIndex, drmReq) != NO_ERROR)) { + dpp.Gm(), dpp, dppIndex, drmReq, planeChanged) != NO_ERROR)) { HWC_LOGE(mExynosDisplay, "%s: dpp[%d] set GM blob fail", __func__, dppIndex); return ret; } if ((ret = setPlaneColorBlob(plane, plane->tone_mapping_property(), static_cast<uint32_t>(DppBlobs::DTM), - dpp.Dtm(), dpp, dppIndex, drmReq) != NO_ERROR)) { + dpp.Dtm(), dpp, dppIndex, drmReq, planeChanged) != NO_ERROR)) { HWC_LOGE(mExynosDisplay, "%s: dpp[%d] set DTM blob fail", __func__, dppIndex); return ret; } if ((ret = setPlaneColorBlob(plane, plane->oetf_lut_property(), static_cast<uint32_t>(DppBlobs::OETF), - dpp.OetfLut(), dpp, dppIndex, drmReq) != NO_ERROR)) { + dpp.OetfLut(), dpp, dppIndex, drmReq, planeChanged) != NO_ERROR)) { HWC_LOGE(mExynosDisplay, "%s: dpp[%d] set OETF blob fail", __func__, dppIndex); return ret; diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h index 03660d9..2d050cd 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterfaceModule.h @@ -120,7 +120,8 @@ class ExynosDisplayDrmInterfaceModule : public ExynosDisplayDrmInterface { const StageDataType &stage, const IDisplayColorGS101::IDpp &dpp, const uint32_t dppIndex, - ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq); + ExynosDisplayDrmInterface::DrmModeAtomicReq &drmReq, + bool forceUpdate); void parseBpcEnums(const DrmProperty& property); DqeBlobs mOldDqeBlobs; std::vector<DppBlobs> mOldDppBlobs; |