hwc: Partial update support for dual DSI panels with source
split. 1) When source split is enabled, both the panels are calibrated in a single coordinate system. So only one ROI is generated for the whole panel extending equally from the midpoint and populated for the left side. 2) Fixes a bug in mdpcomp where ROI generated for the frame is reset when a strategy fails. Change-Id: I47fa0e827985dd76d06dcbe464ef832cfc57a671
This commit is contained in:
@@ -635,7 +635,11 @@ static int hwc_set_primary(hwc_context_t *ctx, hwc_display_contents_1_t* list) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int lSplit = getLeftSplit(ctx, dpy);
|
/* When source split is enabled, right ROI will always be NULL since the
|
||||||
|
* ROI for the whole panel generated in a single coordinate system will
|
||||||
|
* be populuated in left ROI. So leave the right ROI untouched */
|
||||||
|
int lSplit = qdutils::MDPVersion::getInstance().isSrcSplit() ? 0
|
||||||
|
:getLeftSplit(ctx, dpy);
|
||||||
qhwc::ovutils::Dim lRoi = qhwc::ovutils::Dim(
|
qhwc::ovutils::Dim lRoi = qhwc::ovutils::Dim(
|
||||||
ctx->listStats[dpy].lRoi.left,
|
ctx->listStats[dpy].lRoi.left,
|
||||||
ctx->listStats[dpy].lRoi.top,
|
ctx->listStats[dpy].lRoi.top,
|
||||||
|
|||||||
@@ -217,9 +217,6 @@ void MDPComp::reset(hwc_context_t *ctx) {
|
|||||||
mCurrentFrame.reset(numLayers);
|
mCurrentFrame.reset(numLayers);
|
||||||
ctx->mOverlay->clear(mDpy);
|
ctx->mOverlay->clear(mDpy);
|
||||||
ctx->mLayerRotMap[mDpy]->clear();
|
ctx->mLayerRotMap[mDpy]->clear();
|
||||||
resetROI(ctx, mDpy);
|
|
||||||
memset(&mCurrentFrame.drop, 0, sizeof(mCurrentFrame.drop));
|
|
||||||
mCurrentFrame.dropCount = 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MDPComp::reset() {
|
void MDPComp::reset() {
|
||||||
|
|||||||
@@ -2634,7 +2634,13 @@ hwc_rect expandROIFromMidPoint(hwc_rect roi, hwc_rect fullFrame) {
|
|||||||
void resetROI(hwc_context_t *ctx, const int dpy) {
|
void resetROI(hwc_context_t *ctx, const int dpy) {
|
||||||
const int fbXRes = (int)ctx->dpyAttr[dpy].xres;
|
const int fbXRes = (int)ctx->dpyAttr[dpy].xres;
|
||||||
const int fbYRes = (int)ctx->dpyAttr[dpy].yres;
|
const int fbYRes = (int)ctx->dpyAttr[dpy].yres;
|
||||||
if(isDisplaySplit(ctx, dpy)) {
|
|
||||||
|
/* When source split is enabled, both the panels are calibrated
|
||||||
|
* in a single coordinate system. So only one ROI is generated
|
||||||
|
* for the whole panel extending equally from the midpoint and
|
||||||
|
* populated for the left side. */
|
||||||
|
if(!qdutils::MDPVersion::getInstance().isSrcSplit() &&
|
||||||
|
isDisplaySplit(ctx, dpy)) {
|
||||||
const int lSplit = getLeftSplit(ctx, dpy);
|
const int lSplit = getLeftSplit(ctx, dpy);
|
||||||
ctx->listStats[dpy].lRoi = (struct hwc_rect){0, 0, lSplit, fbYRes};
|
ctx->listStats[dpy].lRoi = (struct hwc_rect){0, 0, lSplit, fbYRes};
|
||||||
ctx->listStats[dpy].rRoi = (struct hwc_rect){lSplit, 0, fbXRes, fbYRes};
|
ctx->listStats[dpy].rRoi = (struct hwc_rect){lSplit, 0, fbXRes, fbYRes};
|
||||||
|
|||||||
Reference in New Issue
Block a user