msm8960: hwc: Do not use fb handle in hwc_prepare

Do not use fb handle in prepare. Use displayFrame for dimensions,
align them and hardcode format.

b/8316155 - Implement HWComposer 1.3 w/ virtual display support
Change-Id: I5c494a74a807d3a52a1c88257494b58c583700f5
Signed-off-by: Daniel Jarai <jaraidaniel@gmail.com>
This commit is contained in:
Saurabh Shah 2013-10-29 16:12:12 -07:00 committed by followmsi
parent bf30ca71bb
commit 6dfb4c8795
2 changed files with 48 additions and 36 deletions

View File

@ -154,22 +154,18 @@ static int hwc_prepare_primary(hwc_composer_device_1 *dev,
if (LIKELY(list && list->numHwLayers > 1) &&
ctx->dpyAttr[dpy].isActive) {
reset_layer_prop(ctx, dpy, list->numHwLayers - 1);
uint32_t last = list->numHwLayers - 1;
hwc_layer_1_t *fbLayer = &list->hwLayers[last];
if(fbLayer->handle) {
setListStats(ctx, list, dpy);
int fbZOrder = ctx->mMDPComp[dpy]->prepare(ctx, list);
if(fbZOrder >= 0)
ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZOrder);
setListStats(ctx, list, dpy);
int fbZOrder = ctx->mMDPComp[dpy]->prepare(ctx, list);
if(fbZOrder >= 0)
ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZOrder);
/* Temporarily commenting out C2D until we support partial
copybit composition for mixed mode MDP
/* Temporarily commenting out C2D until we support partial
copybit composition for mixed mode MDP
// Use Copybit, when MDP comp fails
if((fbZOrder >= 0) && ctx->mCopyBit[dpy])
ctx->mCopyBit[dpy]->prepare(ctx, list, dpy);
*/
}
// Use Copybit, when MDP comp fails
if((fbZOrder >= 0) && ctx->mCopyBit[dpy])
ctx->mCopyBit[dpy]->prepare(ctx, list, dpy);
*/
}
return 0;
}
@ -182,23 +178,19 @@ static int hwc_prepare_external(hwc_composer_device_1 *dev,
ctx->dpyAttr[dpy].isActive &&
ctx->dpyAttr[dpy].connected) {
reset_layer_prop(ctx, dpy, list->numHwLayers - 1);
uint32_t last = list->numHwLayers - 1;
hwc_layer_1_t *fbLayer = &list->hwLayers[last];
if(!ctx->dpyAttr[dpy].isPause) {
if(fbLayer->handle) {
ctx->mExtDispConfiguring = false;
setListStats(ctx, list, dpy);
int fbZOrder = ctx->mMDPComp[dpy]->prepare(ctx, list);
if(fbZOrder >= 0)
ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZOrder);
ctx->mExtDispConfiguring = false;
setListStats(ctx, list, dpy);
int fbZOrder = ctx->mMDPComp[dpy]->prepare(ctx, list);
if(fbZOrder >= 0)
ctx->mFBUpdate[dpy]->prepare(ctx, list, fbZOrder);
/* Temporarily commenting out C2D until we support partial
copybit composition for mixed mode MDP
/* Temporarily commenting out C2D until we support partial
copybit composition for mixed mode MDP
if((fbZOrder >= 0) && ctx->mCopyBit[dpy])
ctx->mCopyBit[dpy]->prepare(ctx, list, dpy);
*/
}
if((fbZOrder >= 0) && ctx->mCopyBit[dpy])
ctx->mCopyBit[dpy]->prepare(ctx, list, dpy);
*/
} else {
// External Display is in Pause state.
// ToDo:

View File

@ -63,9 +63,19 @@ bool FBUpdateLowRes::configure(hwc_context_t *ctx, hwc_display_contents_1 *list,
hwc_layer_1_t *layer = &list->hwLayers[list->numHwLayers - 1];
if (LIKELY(ctx->mOverlay)) {
overlay::Overlay& ov = *(ctx->mOverlay);
private_handle_t *hnd = (private_handle_t *)layer->handle;
ovutils::Whf info(getWidth(hnd), getHeight(hnd),
ovutils::getMdpFormat(hnd->format), hnd->size);
hwc_rect_t displayFrame = layer->displayFrame;
int alignedWidth = 0;
int alignedHeight = 0;
getBufferSizeAndDimensions(displayFrame.right - displayFrame.left,
displayFrame.bottom - displayFrame.top,
HAL_PIXEL_FORMAT_RGBA_8888,
alignedWidth,
alignedHeight);
ovutils::Whf info(alignedWidth,
alignedHeight,
ovutils::getMdpFormat(HAL_PIXEL_FORMAT_RGBA_8888));
//Request an RGB pipe
ovutils::eDest dest = ov.nextPipe(ovutils::OV_MDP_PIPE_ANY, mDpy);
@ -105,7 +115,7 @@ bool FBUpdateLowRes::configure(hwc_context_t *ctx, hwc_display_contents_1 *list,
static_cast<ovutils::eTransform>(transform);
ov.setTransform(orient, dest);
hwc_rect_t displayFrame = sourceCrop;
displayFrame = sourceCrop;
ovutils::Dim dpos(displayFrame.left,
displayFrame.top,
displayFrame.right - displayFrame.left,
@ -167,9 +177,19 @@ bool FBUpdateHighRes::configure(hwc_context_t *ctx,
hwc_layer_1_t *layer = &list->hwLayers[list->numHwLayers - 1];
if (LIKELY(ctx->mOverlay)) {
overlay::Overlay& ov = *(ctx->mOverlay);
private_handle_t *hnd = (private_handle_t *)layer->handle;
ovutils::Whf info(getWidth(hnd), getHeight(hnd),
ovutils::getMdpFormat(hnd->format), hnd->size);
hwc_rect_t displayFrame = layer->displayFrame;
int alignedWidth = 0;
int alignedHeight = 0;
getBufferSizeAndDimensions(displayFrame.right - displayFrame.left,
displayFrame.bottom - displayFrame.top,
HAL_PIXEL_FORMAT_RGBA_8888,
alignedWidth,
alignedHeight);
ovutils::Whf info(alignedWidth,
alignedHeight,
ovutils::getMdpFormat(HAL_PIXEL_FORMAT_RGBA_8888));
//Request left RGB pipe
ovutils::eDest destL = ov.nextPipe(ovutils::OV_MDP_PIPE_RGB, mDpy);
@ -234,7 +254,7 @@ bool FBUpdateHighRes::configure(hwc_context_t *ctx,
ov.setTransform(orient, destL);
ov.setTransform(orient, destR);
hwc_rect_t displayFrame = sourceCrop;
displayFrame = sourceCrop;
//For FB left, top will always be 0
//That should also be the case if using 2 mixers for single display
ovutils::Dim dposL(displayFrame.left,