void NV11SyncToVBlank(PixmapPtr ppix, BoxPtr box) { ScrnInfoPtr pScrn = xf86Screens[ppix->drawable.pScreen->myNum]; NVPtr pNv = NVPTR(pScrn); struct nouveau_channel *chan = pNv->chan; int crtcs; if (!nouveau_exa_pixmap_is_onscreen(ppix)) return; crtcs = nv_window_belongs_to_crtc(pScrn, box->x1, box->y1, box->x2 - box->x1, box->y2 - box->y1); if (!crtcs) return; BEGIN_NV04(chan, SUBC_BLIT(0x0000012C), 1); OUT_RING (chan, 0); BEGIN_NV04(chan, SUBC_BLIT(0x00000134), 1); OUT_RING (chan, ffs(crtcs) - 1); BEGIN_NV04(chan, SUBC_BLIT(0x00000100), 1); OUT_RING (chan, 0); BEGIN_NV04(chan, SUBC_BLIT(0x00000130), 1); OUT_RING (chan, 0); }
static Bool can_sync_to_vblank(DrawablePtr draw) { ScrnInfoPtr scrn = xf86ScreenToScrn(draw->pScreen); NVPtr pNv = NVPTR(scrn); return pNv->glx_vblank && nv_window_belongs_to_crtc(scrn, draw->x, draw->y, draw->width, draw->height); }