summaryrefslogtreecommitdiffstats
path: root/hwc
diff options
context:
space:
mode:
authorGustavo Diaz Prado <a0273371@ti.com>2012-10-19 17:35:04 -0500
committerDaniel Levin <dendy@ti.com>2012-11-28 21:16:25 +0200
commitb44a5af01a48f410a6e54f8a5c74b914a2c7c94b (patch)
treed8270854df988807b6ce2b9a4c2291e9d78ceaf6 /hwc
parent403cdba9efc550ea1b16f869cfbdbb38fc828f47 (diff)
downloadhardware_ti_omap4-b44a5af01a48f410a6e54f8a5c74b914a2c7c94b.zip
hardware_ti_omap4-b44a5af01a48f410a6e54f8a5c74b914a2c7c94b.tar.gz
hardware_ti_omap4-b44a5af01a48f410a6e54f8a5c74b914a2c7c94b.tar.bz2
hwc: Avoid blits when cloning to TV
The workaround to avoid blits when playing a video was not allowing the blitter to be used when using only the LCD (single display). It was found by the display team the stuttering issue with video playback is not GC320 but rather a bug in dsscomp to manage correctly the synchronization when using multiple displays. This patch revisits the workaround by not allowing to blit when multiple displays are used but allowing all blits with a single display use case. This allows not only to prevent the stuttering when playing a video (with the TV connected), it also allows any application that refreshes the screen constantly to not stutter (like a 3D game) by using the GPU to compose instead of the blitter. The reason why the GPU performs better with the TV connected is the compositor gets blocked on the availability of the flip chain buffers, thus preventing very short periods of time between posts caused by the VSYNC drifting of both displays not being handled correctly by dsscomp. With this change a more consistent framerate is achieved when cloning to TV. Change-Id: Iedc93c3528095fcf24f4a34b8ac13744ece2b576 Signed-off-by: Gustavo Diaz Prado <a0273371@ti.com>
Diffstat (limited to 'hwc')
-rw-r--r--hwc/hwc.c2
-rw-r--r--hwc/rgz_2d.c9
2 files changed, 1 insertions, 10 deletions
diff --git a/hwc/hwc.c b/hwc/hwc.c
index d94d8f2..e27ef00 100644
--- a/hwc/hwc.c
+++ b/hwc/hwc.c
@@ -1532,7 +1532,7 @@ static void blit_reset(omap4_hwc_device_t *hwc_dev)
static int blit_layers(omap4_hwc_device_t *hwc_dev, hwc_layer_list_t *list, int bufoff)
{
/* Do not blit if this frame will be composed entirely by the GPU */
- if (!list || hwc_dev->force_sgx)
+ if (!list || hwc_dev->force_sgx || hwc_dev->ext.mirror.enabled)
goto err_out;
int rgz_in_op;
diff --git a/hwc/rgz_2d.c b/hwc/rgz_2d.c
index bc13119..a9d2130 100644
--- a/hwc/rgz_2d.c
+++ b/hwc/rgz_2d.c
@@ -1224,15 +1224,6 @@ static int rgz_in_hwccheck(rgz_in_params_t *p, rgz_t *rgz)
*/
int l, memidx = 0;
for (l = 0; l < layerno; l++) {
- /*
- * Workaround: If a NV12 layer is present in the list, don't even try
- * to blit. There is a performance degradation while playing video and
- * using GC at the same time.
- */
- IMG_native_handle_t *handle = (IMG_native_handle_t *)layers[l].handle;
- if (!(layers[l].flags & HWC_SKIP_LAYER) && handle && is_NV12(handle->iFormat))
- return -1;
-
if (layers[l].compositionType == HWC_OVERLAY)
memidx++;
}