diff options
author | Gustavo Diaz Prado <a0273371@ti.com> | 2012-10-19 17:35:04 -0500 |
---|---|---|
committer | Daniel Levin <dendy@ti.com> | 2012-11-28 21:16:25 +0200 |
commit | b44a5af01a48f410a6e54f8a5c74b914a2c7c94b (patch) | |
tree | d8270854df988807b6ce2b9a4c2291e9d78ceaf6 /hwc | |
parent | 403cdba9efc550ea1b16f869cfbdbb38fc828f47 (diff) | |
download | hardware_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.c | 2 | ||||
-rw-r--r-- | hwc/rgz_2d.c | 9 |
2 files changed, 1 insertions, 10 deletions
@@ -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++; } |