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:
parent
bf30ca71bb
commit
6dfb4c8795
|
@ -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:
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue