diff options
author | Long Ling <longling@google.com> | 2022-04-29 17:56:12 -0700 |
---|---|---|
committer | Long Ling <longling@google.com> | 2022-05-02 12:54:50 -0700 |
commit | 61ffcbc72ea00ce839238104af72a4cbb7883003 (patch) | |
tree | ba1c360d8113eca66af002ac2f0b1fba90039642 /libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | |
parent | 4bfb79ffe32109c6604409a1f88dee65e4cc2cea (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.cpp | 18 |
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(), |