present: Copy unflip contents back to the Screen Pixmap

As we unflip after the flip Window no longer passes the pixel ownership
test for the full Screen Pixmap, we can no longer utilize that Window to
copy the contents back to the backing pixmap. To first flip means that
the Window was originally backed by the Screen Pixmap and wholly covered
the Pixmap, thus we need to copy the last frame contents to the Screen
Pixmap when the flip chain is complete.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com>
(cherry picked from commit 806470b9f6)
This commit is contained in:
Chris Wilson 2015-02-06 08:25:42 +00:00 committed by Adam Jackson
parent 8b7e1f362b
commit 6cc61df989
1 changed files with 4 additions and 4 deletions

View File

@ -409,20 +409,20 @@ static void
present_unflip(ScreenPtr screen)
{
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
PixmapPtr pixmap = (*screen->GetScreenPixmap)(screen);
assert (!screen_priv->unflip_event_id);
assert (!screen_priv->flip_pending);
if (screen_priv->flip_window)
present_set_tree_pixmap(screen_priv->flip_window,
(*screen->GetScreenPixmap)(screen));
present_set_tree_pixmap(screen_priv->flip_window, pixmap);
present_set_tree_pixmap(screen->root, (*screen->GetScreenPixmap)(screen));
present_set_tree_pixmap(screen->root, pixmap);
/* Update the screen pixmap with the current flip pixmap contents
*/
if (screen_priv->flip_pixmap && screen_priv->flip_window) {
present_copy_region(&screen_priv->flip_window->drawable,
present_copy_region(&pixmap->drawable,
screen_priv->flip_pixmap,
NULL, 0, 0);
}