present: Use crtc's screen present operation for syncing

Signed-off-by: Łukasz Spintzyk <lukasz.spintzyk@synaptics.com>
This commit is contained in:
Łukasz Spintzyk 2020-09-18 14:31:25 +02:00 committed by Povilas Kanapickas
parent d03c0de77b
commit 908deb0895
2 changed files with 15 additions and 2 deletions

View File

@ -78,6 +78,9 @@ present_check_flip(RRCrtcPtr crtc,
WindowPtr root = screen->root;
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
if (crtc) {
screen_priv = present_screen_priv(crtc->pScreen);
}
if (reason)
*reason = PRESENT_FLIP_REASON_UNKNOWN;
@ -177,11 +180,14 @@ static int
present_get_ust_msc(ScreenPtr screen, RRCrtcPtr crtc, uint64_t *ust, uint64_t *msc)
{
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
present_screen_priv_ptr crtc_screen_priv = screen_priv;
if (crtc)
crtc_screen_priv = present_screen_priv(crtc->pScreen);
if (crtc == NULL)
return present_fake_get_ust_msc(screen, ust, msc);
else
return (*screen_priv->info->get_ust_msc)(crtc, ust, msc);
return (*crtc_screen_priv->info->get_ust_msc)(crtc, ust, msc);
}
static void
@ -212,7 +218,7 @@ present_queue_vblank(ScreenPtr screen,
ret = present_fake_queue_vblank(screen, event_id, msc);
else
{
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
present_screen_priv_ptr screen_priv = present_screen_priv(crtc->pScreen);
ret = (*screen_priv->info->queue_vblank) (crtc, event_id, msc);
}
return ret;
@ -511,6 +517,9 @@ present_execute(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc)
WindowPtr window = vblank->window;
ScreenPtr screen = window->drawable.pScreen;
present_screen_priv_ptr screen_priv = present_screen_priv(screen);
if (vblank && vblank->crtc) {
screen_priv=present_screen_priv(vblank->crtc->pScreen);
}
if (present_execute_wait(vblank, crtc_msc))
return;

View File

@ -62,6 +62,10 @@ present_vblank_create(WindowPtr window,
present_vblank_ptr vblank;
PresentFlipReason reason = PRESENT_FLIP_REASON_UNKNOWN;
if (target_crtc) {
screen_priv = present_screen_priv(target_crtc->pScreen);
}
vblank = calloc (1, sizeof (present_vblank_rec));
if (!vblank)
return NULL;