summaryrefslogtreecommitdiff
path: root/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
diff options
context:
space:
mode:
authorLong Ling <longling@google.com>2022-04-29 17:56:12 -0700
committerLong Ling <longling@google.com>2022-05-02 12:54:50 -0700
commit61ffcbc72ea00ce839238104af72a4cbb7883003 (patch)
treeba1c360d8113eca66af002ac2f0b1fba90039642 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
parent4bfb79ffe32109c6604409a1f88dee65e4cc2cea (diff)
libhwc2.1: support solid color layer dimming in HWC
Bug: 230570414 Change-Id: I6ced84b99542959d32e414bc847c6a9981109fdb
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r--libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp18
1 files changed, 12 insertions, 6 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
index 00fe96f..0c5a4f2 100644
--- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
+++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp
@@ -1605,10 +1605,14 @@ int32_t ExynosDisplayDrmInterface::updateColorSettings(DrmModeAtomicReq &drmReq,
}
auto &plane = mDrmDevice->planes().at(channelId);
- if ((ret = setPlaneColorSetting(drmReq, plane, config)) != 0) {
+ uint32_t solidColor = config.color;
+ if ((ret = setPlaneColorSetting(drmReq, plane, config, solidColor)) != 0) {
HWC_LOGE(mExynosDisplay, "Failed to set plane color setting, config[%zu]", i);
return ret;
}
+ if (config.state == config.WIN_STATE_COLOR && solidColor != config.color) {
+ config.color = solidColor;
+ }
}
}
@@ -1693,6 +1697,13 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData()
return ret;
}
+ // Update of color settings could change layer's solid color. So it should
+ // be called before use of layer's solid color.
+ if ((ret = updateColorSettings(drmReq, dqeEnable)) != 0) {
+ HWC_LOGE(mExynosDisplay, "failed to update color settings (%d)", ret);
+ return ret;
+ }
+
for (size_t i = 0; i < mExynosDisplay->mDpuData.configs.size(); i++) {
exynos_win_config_data& config = mExynosDisplay->mDpuData.configs[i];
if ((config.state == config.WIN_STATE_BUFFER) ||
@@ -1791,11 +1802,6 @@ int32_t ExynosDisplayDrmInterface::deliverWinConfigData()
return ret;
}
- if ((ret = updateColorSettings(drmReq, dqeEnable)) != 0) {
- HWC_LOGE(mExynosDisplay, "failed to update color settings (%d)", ret);
- return ret;
- }
-
if (mDrmConnector->mipi_sync().id() && (mipi_sync_type != 0)) {
ATRACE_NAME("mipi_sync"); // mark this commit
if ((ret = drmReq.atomicAddProperty(mDrmConnector->id(),