diff options
Diffstat (limited to 'libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp')
-rw-r--r-- | libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp | 29 |
1 files changed, 19 insertions, 10 deletions
diff --git a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp index 7c7f9b0..bbf25a3 100644 --- a/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp +++ b/libhwc2.1/libdisplayinterface/ExynosDisplayDrmInterface.cpp @@ -574,15 +574,29 @@ int32_t ExynosDisplayDrmInterface::initDrmDevice(DrmDevice *drmDevice) __func__, mExynosDisplay->mType, mExynosDisplay->mIndex, drmDisplayId, mDrmCrtc->id(), mDrmConnector->id()); + /* Mapping ExynosMPP resource with DPP Planes */ + uint32_t numWindow = 0; for (uint32_t i = 0; i < mDrmDevice->planes().size(); i++) { auto &plane = mDrmDevice->planes().at(i); uint32_t plane_id = plane->id(); - ExynosMPP *exynosMPP = - mExynosDisplay->mResourceManager->getOtfMPPWithChannel(i); - if (exynosMPP == NULL) - HWC_LOGE(mExynosDisplay, "getOtfMPPWithChannel fail, ch(%d)", plane_id); - mExynosMPPsForPlane[plane_id] = exynosMPP; + + if (!plane->zpos_property().is_immutable()) { + /* Plane can be used for composition */ + ExynosMPP *exynosMPP = + mExynosDisplay->mResourceManager->getOtfMPPWithChannel(i); + if (exynosMPP == NULL) + HWC_LOGE(mExynosDisplay, "getOtfMPPWithChannel fail, ch(%d)", plane_id); + mExynosMPPsForPlane[plane_id] = exynosMPP; + numWindow++; + } else { + /* + * Plane is special purpose plane which cannot be used for compositon. + * It's zpos property is immutable. + */ + mExynosMPPsForPlane[plane_id] = NULL; + } } + setMaxWindowNum(numWindow); if (mExynosDisplay->mMaxWindowNum != getMaxWindowNum()) { ALOGE("%s:: Invalid max window number (mMaxWindowNum: %d, getMaxWindowNum(): %d", @@ -1894,11 +1908,6 @@ int32_t ExynosDisplayDrmInterface::setForcePanic() return 0; } -uint32_t ExynosDisplayDrmInterface::getMaxWindowNum() -{ - return mDrmDevice->planes().size(); -} - ExynosDisplayDrmInterface::DrmModeAtomicReq::DrmModeAtomicReq(ExynosDisplayDrmInterface *displayInterface) : mDrmDisplayInterface(displayInterface) { |