From dadd73f13f66894aa6626032a400513aa9a4cd14 Mon Sep 17 00:00:00 2001 From: Jeykumar Sankaran Date: Thu, 5 Jan 2012 18:56:27 -0800 Subject: [PATCH] libcopybit: Disable copybit blending for opaque layers This change disables copybit blending when surface flinger sets HWC_BLENDING_NONE for a layer. Change-Id: Ie86a2d5c9e3d3dab1bc7a0a3cc31bff7afe604da --- libcopybit/copybit_c2d.cpp | 5 ++++- libhwcomposer/hwcomposer.cpp | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/libcopybit/copybit_c2d.cpp b/libcopybit/copybit_c2d.cpp index 274ad7d..c6745a4 100644 --- a/libcopybit/copybit_c2d.cpp +++ b/libcopybit/copybit_c2d.cpp @@ -1276,7 +1276,10 @@ static int stretch_copybit( struct copybit_rect_t const *src_rect, struct copybit_region_t const *region) { - return stretch_copybit_internal(dev, dst, src, dst_rect, src_rect, region, true); + struct copybit_context_t* ctx = (struct copybit_context_t*)dev; + bool needsBlending = (ctx->blitState.global_alpha != 0); + return stretch_copybit_internal(dev, dst, src, dst_rect, src_rect, + region, needsBlending); } /** Perform a blit type operation */ diff --git a/libhwcomposer/hwcomposer.cpp b/libhwcomposer/hwcomposer.cpp index b953193..4ea2961 100755 --- a/libhwcomposer/hwcomposer.cpp +++ b/libhwcomposer/hwcomposer.cpp @@ -1100,7 +1100,7 @@ static int drawLayerUsingCopybit(hwc_composer_device_t *dev, hwc_layer_t *layer, copybit->set_parameter(copybit, COPYBIT_FRAMEBUFFER_HEIGHT, renderBuffer->height); copybit->set_parameter(copybit, COPYBIT_TRANSFORM, layer->transform); copybit->set_parameter(copybit, COPYBIT_PLANE_ALPHA, - (layer->blending == HWC_BLENDING_NONE) ? 0xFF : layer->alpha); + (layer->blending == HWC_BLENDING_NONE) ? 0x0 : layer->alpha); copybit->set_parameter(copybit, COPYBIT_PREMULTIPLIED_ALPHA, (layer->blending == HWC_BLENDING_PREMULT)? COPYBIT_ENABLE : COPYBIT_DISABLE); err = copybit->stretch(copybit, &dst, &src, &dstRect, &srcRect, ©bitRegion);