135c4bbdfSmrg/* 235c4bbdfSmrg * Copyright © 2013 Keith Packard 335c4bbdfSmrg * 435c4bbdfSmrg * Permission to use, copy, modify, distribute, and sell this software and its 535c4bbdfSmrg * documentation for any purpose is hereby granted without fee, provided that 635c4bbdfSmrg * the above copyright notice appear in all copies and that both that copyright 735c4bbdfSmrg * notice and this permission notice appear in supporting documentation, and 835c4bbdfSmrg * that the name of the copyright holders not be used in advertising or 935c4bbdfSmrg * publicity pertaining to distribution of the software without specific, 1035c4bbdfSmrg * written prior permission. The copyright holders make no representations 1135c4bbdfSmrg * about the suitability of this software for any purpose. It is provided "as 1235c4bbdfSmrg * is" without express or implied warranty. 1335c4bbdfSmrg * 1435c4bbdfSmrg * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 1535c4bbdfSmrg * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 1635c4bbdfSmrg * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 1735c4bbdfSmrg * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 1835c4bbdfSmrg * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 1935c4bbdfSmrg * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 2035c4bbdfSmrg * OF THIS SOFTWARE. 2135c4bbdfSmrg */ 2235c4bbdfSmrg 2335c4bbdfSmrg#ifndef _PRESENT_PRIV_H_ 2435c4bbdfSmrg#define _PRESENT_PRIV_H_ 2535c4bbdfSmrg 26ed6184dfSmrg#include "dix-config.h" 2735c4bbdfSmrg#include <X11/X.h> 2835c4bbdfSmrg#include "scrnintstr.h" 2935c4bbdfSmrg#include "misc.h" 3035c4bbdfSmrg#include "list.h" 3135c4bbdfSmrg#include "windowstr.h" 3235c4bbdfSmrg#include "dixstruct.h" 3335c4bbdfSmrg#include "present.h" 3435c4bbdfSmrg#include <syncsdk.h> 3535c4bbdfSmrg#include <syncsrv.h> 3635c4bbdfSmrg#include <xfixes.h> 3735c4bbdfSmrg#include <randrstr.h> 38e23ec014Smrg#include <inttypes.h> 3935c4bbdfSmrg 401b5d61b8Smrg#if 0 411b5d61b8Smrg#define DebugPresent(x) ErrorF x 421b5d61b8Smrg#else 431b5d61b8Smrg#define DebugPresent(x) 441b5d61b8Smrg#endif 451b5d61b8Smrg 46eee80088Smrg/* XXX this belongs in presentproto */ 47eee80088Smrg#ifndef PresentWindowDestroyed 48eee80088Smrg#define PresentWindowDestroyed (1 << 0) 49eee80088Smrg#endif 50eee80088Smrg 5135c4bbdfSmrgextern int present_request; 5235c4bbdfSmrg 5335c4bbdfSmrgextern DevPrivateKeyRec present_screen_private_key; 5435c4bbdfSmrg 5535c4bbdfSmrgtypedef struct present_fence *present_fence_ptr; 5635c4bbdfSmrg 5735c4bbdfSmrgtypedef struct present_notify present_notify_rec, *present_notify_ptr; 5835c4bbdfSmrg 5935c4bbdfSmrgstruct present_notify { 6035c4bbdfSmrg struct xorg_list window_list; 6135c4bbdfSmrg WindowPtr window; 6235c4bbdfSmrg CARD32 serial; 6335c4bbdfSmrg}; 6435c4bbdfSmrg 6535c4bbdfSmrgstruct present_vblank { 6635c4bbdfSmrg struct xorg_list window_list; 6735c4bbdfSmrg struct xorg_list event_queue; 6835c4bbdfSmrg ScreenPtr screen; 6935c4bbdfSmrg WindowPtr window; 7035c4bbdfSmrg PixmapPtr pixmap; 7135c4bbdfSmrg RegionPtr valid; 7235c4bbdfSmrg RegionPtr update; 7335c4bbdfSmrg RRCrtcPtr crtc; 7435c4bbdfSmrg uint32_t serial; 7535c4bbdfSmrg int16_t x_off; 7635c4bbdfSmrg int16_t y_off; 7735c4bbdfSmrg CARD16 kind; 7835c4bbdfSmrg uint64_t event_id; 795a7dfde8Smrg uint64_t target_msc; /* target MSC when present should complete */ 805a7dfde8Smrg uint64_t exec_msc; /* MSC at which present can be executed */ 8135c4bbdfSmrg uint64_t msc_offset; 8235c4bbdfSmrg present_fence_ptr idle_fence; 8335c4bbdfSmrg present_fence_ptr wait_fence; 8435c4bbdfSmrg present_notify_ptr notifies; 8535c4bbdfSmrg int num_notifies; 8635c4bbdfSmrg Bool queued; /* on present_exec_queue */ 8735c4bbdfSmrg Bool flip; /* planning on using flip */ 8835c4bbdfSmrg Bool flip_ready; /* wants to flip, but waiting for previous flip or unflip */ 8935c4bbdfSmrg Bool sync_flip; /* do flip synchronous to vblank */ 9035c4bbdfSmrg Bool abort_flip; /* aborting this flip */ 911b5d61b8Smrg PresentFlipReason reason; /* reason for which flip is not possible */ 921b5d61b8Smrg Bool has_suboptimal; /* whether client can support SuboptimalCopy mode */ 9335c4bbdfSmrg}; 9435c4bbdfSmrg 951b5d61b8Smrgtypedef struct present_screen_priv present_screen_priv_rec, *present_screen_priv_ptr; 961b5d61b8Smrgtypedef struct present_window_priv present_window_priv_rec, *present_window_priv_ptr; 971b5d61b8Smrg 981b5d61b8Smrg/* 991b5d61b8Smrg * Mode hooks 1001b5d61b8Smrg */ 1011b5d61b8Smrgtypedef uint32_t (*present_priv_query_capabilities_ptr)(present_screen_priv_ptr screen_priv); 1021b5d61b8Smrgtypedef RRCrtcPtr (*present_priv_get_crtc_ptr)(present_screen_priv_ptr screen_priv, 1031b5d61b8Smrg WindowPtr window); 1041b5d61b8Smrg 1051b5d61b8Smrgtypedef Bool (*present_priv_check_flip_ptr)(RRCrtcPtr crtc, 1061b5d61b8Smrg WindowPtr window, 1071b5d61b8Smrg PixmapPtr pixmap, 1081b5d61b8Smrg Bool sync_flip, 1091b5d61b8Smrg RegionPtr valid, 1101b5d61b8Smrg int16_t x_off, 1111b5d61b8Smrg int16_t y_off, 1121b5d61b8Smrg PresentFlipReason *reason); 1131b5d61b8Smrgtypedef void (*present_priv_check_flip_window_ptr)(WindowPtr window); 1141b5d61b8Smrgtypedef Bool (*present_priv_can_window_flip_ptr)(WindowPtr window); 115ed6184dfSmrgtypedef void (*present_priv_clear_window_flip_ptr)(WindowPtr window); 1161b5d61b8Smrg 1171b5d61b8Smrgtypedef int (*present_priv_pixmap_ptr)(WindowPtr window, 1181b5d61b8Smrg PixmapPtr pixmap, 1191b5d61b8Smrg CARD32 serial, 1201b5d61b8Smrg RegionPtr valid, 1211b5d61b8Smrg RegionPtr update, 1221b5d61b8Smrg int16_t x_off, 1231b5d61b8Smrg int16_t y_off, 1241b5d61b8Smrg RRCrtcPtr target_crtc, 1251b5d61b8Smrg SyncFence *wait_fence, 1261b5d61b8Smrg SyncFence *idle_fence, 1271b5d61b8Smrg uint32_t options, 1281b5d61b8Smrg uint64_t window_msc, 1291b5d61b8Smrg uint64_t divisor, 1301b5d61b8Smrg uint64_t remainder, 1311b5d61b8Smrg present_notify_ptr notifies, 1321b5d61b8Smrg int num_notifies); 1331b5d61b8Smrg 1341b5d61b8Smrgtypedef int (*present_priv_queue_vblank_ptr)(ScreenPtr screen, 1351b5d61b8Smrg WindowPtr window, 1361b5d61b8Smrg RRCrtcPtr crtc, 1371b5d61b8Smrg uint64_t event_id, 1381b5d61b8Smrg uint64_t msc); 1391b5d61b8Smrgtypedef void (*present_priv_flush_ptr)(WindowPtr window); 1401b5d61b8Smrgtypedef void (*present_priv_re_execute_ptr)(present_vblank_ptr vblank); 1411b5d61b8Smrg 1421b5d61b8Smrgtypedef void (*present_priv_abort_vblank_ptr)(ScreenPtr screen, 1431b5d61b8Smrg WindowPtr window, 1441b5d61b8Smrg RRCrtcPtr crtc, 1451b5d61b8Smrg uint64_t event_id, 1461b5d61b8Smrg uint64_t msc); 1471b5d61b8Smrgtypedef void (*present_priv_flip_destroy_ptr)(ScreenPtr screen); 1481b5d61b8Smrg 1491b5d61b8Smrgstruct present_screen_priv { 15035c4bbdfSmrg CloseScreenProcPtr CloseScreen; 15135c4bbdfSmrg ConfigNotifyProcPtr ConfigNotify; 15235c4bbdfSmrg DestroyWindowProcPtr DestroyWindow; 15335c4bbdfSmrg ClipNotifyProcPtr ClipNotify; 15435c4bbdfSmrg 15535c4bbdfSmrg present_vblank_ptr flip_pending; 15635c4bbdfSmrg uint64_t unflip_event_id; 15735c4bbdfSmrg 15835c4bbdfSmrg uint32_t fake_interval; 15935c4bbdfSmrg 16035c4bbdfSmrg /* Currently active flipped pixmap and fence */ 16135c4bbdfSmrg RRCrtcPtr flip_crtc; 16235c4bbdfSmrg WindowPtr flip_window; 16335c4bbdfSmrg uint32_t flip_serial; 16435c4bbdfSmrg PixmapPtr flip_pixmap; 16535c4bbdfSmrg present_fence_ptr flip_idle_fence; 16635c4bbdfSmrg Bool flip_sync; 16735c4bbdfSmrg 16835c4bbdfSmrg present_screen_info_ptr info; 1691b5d61b8Smrg 1701b5d61b8Smrg /* Mode hooks */ 1711b5d61b8Smrg present_priv_query_capabilities_ptr query_capabilities; 1721b5d61b8Smrg present_priv_get_crtc_ptr get_crtc; 1731b5d61b8Smrg 1741b5d61b8Smrg present_priv_check_flip_ptr check_flip; 1751b5d61b8Smrg present_priv_check_flip_window_ptr check_flip_window; 1761b5d61b8Smrg present_priv_can_window_flip_ptr can_window_flip; 177ed6184dfSmrg present_priv_clear_window_flip_ptr clear_window_flip; 1781b5d61b8Smrg 1791b5d61b8Smrg present_priv_pixmap_ptr present_pixmap; 1801b5d61b8Smrg 1811b5d61b8Smrg present_priv_queue_vblank_ptr queue_vblank; 1821b5d61b8Smrg present_priv_flush_ptr flush; 1831b5d61b8Smrg present_priv_re_execute_ptr re_execute; 1841b5d61b8Smrg 1851b5d61b8Smrg present_priv_abort_vblank_ptr abort_vblank; 1861b5d61b8Smrg present_priv_flip_destroy_ptr flip_destroy; 1871b5d61b8Smrg}; 18835c4bbdfSmrg 18935c4bbdfSmrg#define wrap(priv,real,mem,func) {\ 19035c4bbdfSmrg priv->mem = real->mem; \ 19135c4bbdfSmrg real->mem = func; \ 19235c4bbdfSmrg} 19335c4bbdfSmrg 19435c4bbdfSmrg#define unwrap(priv,real,mem) {\ 19535c4bbdfSmrg real->mem = priv->mem; \ 19635c4bbdfSmrg} 19735c4bbdfSmrg 19835c4bbdfSmrgstatic inline present_screen_priv_ptr 19935c4bbdfSmrgpresent_screen_priv(ScreenPtr screen) 20035c4bbdfSmrg{ 20135c4bbdfSmrg return (present_screen_priv_ptr)dixLookupPrivate(&(screen)->devPrivates, &present_screen_private_key); 20235c4bbdfSmrg} 20335c4bbdfSmrg 20435c4bbdfSmrg/* 20535c4bbdfSmrg * Each window has a list of clients and event masks 20635c4bbdfSmrg */ 20735c4bbdfSmrgtypedef struct present_event *present_event_ptr; 20835c4bbdfSmrg 20935c4bbdfSmrgtypedef struct present_event { 21035c4bbdfSmrg present_event_ptr next; 21135c4bbdfSmrg ClientPtr client; 21235c4bbdfSmrg WindowPtr window; 21335c4bbdfSmrg XID id; 21435c4bbdfSmrg int mask; 21535c4bbdfSmrg} present_event_rec; 21635c4bbdfSmrg 2171b5d61b8Smrgstruct present_window_priv { 2181b5d61b8Smrg WindowPtr window; 21935c4bbdfSmrg present_event_ptr events; 22035c4bbdfSmrg RRCrtcPtr crtc; /* Last reported CRTC from get_ust_msc */ 22135c4bbdfSmrg uint64_t msc_offset; 22235c4bbdfSmrg uint64_t msc; /* Last reported MSC from the current crtc */ 22335c4bbdfSmrg struct xorg_list vblank; 22435c4bbdfSmrg struct xorg_list notifies; 2251b5d61b8Smrg}; 22635c4bbdfSmrg 22735c4bbdfSmrg#define PresentCrtcNeverSet ((RRCrtcPtr) 1) 22835c4bbdfSmrg 22935c4bbdfSmrgextern DevPrivateKeyRec present_window_private_key; 23035c4bbdfSmrg 23135c4bbdfSmrgstatic inline present_window_priv_ptr 23235c4bbdfSmrgpresent_window_priv(WindowPtr window) 23335c4bbdfSmrg{ 23435c4bbdfSmrg return (present_window_priv_ptr)dixGetPrivate(&(window)->devPrivates, &present_window_private_key); 23535c4bbdfSmrg} 23635c4bbdfSmrg 23735c4bbdfSmrgpresent_window_priv_ptr 23835c4bbdfSmrgpresent_get_window_priv(WindowPtr window, Bool create); 23935c4bbdfSmrg 2401b5d61b8Smrg/* 2411b5d61b8Smrg * Returns: 2421b5d61b8Smrg * TRUE if the first MSC value is after the second one 2431b5d61b8Smrg * FALSE if the first MSC value is equal to or before the second one 2441b5d61b8Smrg */ 2451b5d61b8Smrgstatic inline Bool 2461b5d61b8Smrgmsc_is_after(uint64_t test, uint64_t reference) 2471b5d61b8Smrg{ 2481b5d61b8Smrg return (int64_t)(test - reference) > 0; 2491b5d61b8Smrg} 2501b5d61b8Smrg 25135c4bbdfSmrg/* 25235c4bbdfSmrg * present.c 25335c4bbdfSmrg */ 2541b5d61b8Smrguint32_t 2551b5d61b8Smrgpresent_query_capabilities(RRCrtcPtr crtc); 2561b5d61b8Smrg 2571b5d61b8SmrgRRCrtcPtr 2581b5d61b8Smrgpresent_get_crtc(WindowPtr window); 2591b5d61b8Smrg 2601b5d61b8Smrgvoid 2611b5d61b8Smrgpresent_copy_region(DrawablePtr drawable, 2621b5d61b8Smrg PixmapPtr pixmap, 2631b5d61b8Smrg RegionPtr update, 2641b5d61b8Smrg int16_t x_off, 2651b5d61b8Smrg int16_t y_off); 2661b5d61b8Smrg 2671b5d61b8Smrgvoid 2681b5d61b8Smrgpresent_pixmap_idle(PixmapPtr pixmap, WindowPtr window, CARD32 serial, struct present_fence *present_fence); 2691b5d61b8Smrg 2701b5d61b8Smrgvoid 2711b5d61b8Smrgpresent_set_tree_pixmap(WindowPtr window, 2721b5d61b8Smrg PixmapPtr expected, 2731b5d61b8Smrg PixmapPtr pixmap); 2741b5d61b8Smrg 275ed6184dfSmrguint64_t 276ed6184dfSmrgpresent_get_target_msc(uint64_t target_msc_arg, 277ed6184dfSmrg uint64_t crtc_msc, 2781b5d61b8Smrg uint64_t divisor, 279ed6184dfSmrg uint64_t remainder, 280ed6184dfSmrg uint32_t options); 2811b5d61b8Smrg 28235c4bbdfSmrgint 28335c4bbdfSmrgpresent_pixmap(WindowPtr window, 28435c4bbdfSmrg PixmapPtr pixmap, 28535c4bbdfSmrg CARD32 serial, 28635c4bbdfSmrg RegionPtr valid, 28735c4bbdfSmrg RegionPtr update, 28835c4bbdfSmrg int16_t x_off, 28935c4bbdfSmrg int16_t y_off, 29035c4bbdfSmrg RRCrtcPtr target_crtc, 29135c4bbdfSmrg SyncFence *wait_fence, 29235c4bbdfSmrg SyncFence *idle_fence, 29335c4bbdfSmrg uint32_t options, 29435c4bbdfSmrg uint64_t target_msc, 29535c4bbdfSmrg uint64_t divisor, 29635c4bbdfSmrg uint64_t remainder, 29735c4bbdfSmrg present_notify_ptr notifies, 29835c4bbdfSmrg int num_notifies); 29935c4bbdfSmrg 30035c4bbdfSmrgint 30135c4bbdfSmrgpresent_notify_msc(WindowPtr window, 30235c4bbdfSmrg CARD32 serial, 30335c4bbdfSmrg uint64_t target_msc, 30435c4bbdfSmrg uint64_t divisor, 30535c4bbdfSmrg uint64_t remainder); 30635c4bbdfSmrg 30735c4bbdfSmrg/* 30835c4bbdfSmrg * present_event.c 30935c4bbdfSmrg */ 31035c4bbdfSmrg 31135c4bbdfSmrgvoid 31235c4bbdfSmrgpresent_free_events(WindowPtr window); 31335c4bbdfSmrg 31435c4bbdfSmrgvoid 315eee80088Smrgpresent_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling, CARD32 flags); 31635c4bbdfSmrg 31735c4bbdfSmrgvoid 31835c4bbdfSmrgpresent_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc); 31935c4bbdfSmrg 32035c4bbdfSmrgvoid 32135c4bbdfSmrgpresent_send_idle_notify(WindowPtr window, CARD32 serial, PixmapPtr pixmap, present_fence_ptr idle_fence); 32235c4bbdfSmrg 32335c4bbdfSmrgint 32435c4bbdfSmrgpresent_select_input(ClientPtr client, 32535c4bbdfSmrg CARD32 eid, 32635c4bbdfSmrg WindowPtr window, 32735c4bbdfSmrg CARD32 event_mask); 32835c4bbdfSmrg 32935c4bbdfSmrgBool 33035c4bbdfSmrgpresent_event_init(void); 33135c4bbdfSmrg 3321b5d61b8Smrg/* 3331b5d61b8Smrg * present_execute.c 3341b5d61b8Smrg */ 3351b5d61b8SmrgBool 3361b5d61b8Smrgpresent_execute_wait(present_vblank_ptr vblank, uint64_t crtc_msc); 3371b5d61b8Smrg 3381b5d61b8Smrgvoid 3391b5d61b8Smrgpresent_execute_copy(present_vblank_ptr vblank, uint64_t crtc_msc); 3401b5d61b8Smrg 3411b5d61b8Smrgvoid 3421b5d61b8Smrgpresent_execute_post(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc); 3431b5d61b8Smrg 34435c4bbdfSmrg/* 34535c4bbdfSmrg * present_fake.c 34635c4bbdfSmrg */ 34735c4bbdfSmrgint 34835c4bbdfSmrgpresent_fake_get_ust_msc(ScreenPtr screen, uint64_t *ust, uint64_t *msc); 34935c4bbdfSmrg 35035c4bbdfSmrgint 35135c4bbdfSmrgpresent_fake_queue_vblank(ScreenPtr screen, uint64_t event_id, uint64_t msc); 35235c4bbdfSmrg 35335c4bbdfSmrgvoid 35435c4bbdfSmrgpresent_fake_abort_vblank(ScreenPtr screen, uint64_t event_id, uint64_t msc); 35535c4bbdfSmrg 35635c4bbdfSmrgvoid 35735c4bbdfSmrgpresent_fake_screen_init(ScreenPtr screen); 35835c4bbdfSmrg 35935c4bbdfSmrgvoid 36035c4bbdfSmrgpresent_fake_queue_init(void); 36135c4bbdfSmrg 36235c4bbdfSmrg/* 36335c4bbdfSmrg * present_fence.c 36435c4bbdfSmrg */ 36535c4bbdfSmrgstruct present_fence * 36635c4bbdfSmrgpresent_fence_create(SyncFence *sync_fence); 36735c4bbdfSmrg 36835c4bbdfSmrgvoid 36935c4bbdfSmrgpresent_fence_destroy(struct present_fence *present_fence); 37035c4bbdfSmrg 37135c4bbdfSmrgvoid 37235c4bbdfSmrgpresent_fence_set_triggered(struct present_fence *present_fence); 37335c4bbdfSmrg 37435c4bbdfSmrgBool 37535c4bbdfSmrgpresent_fence_check_triggered(struct present_fence *present_fence); 37635c4bbdfSmrg 37735c4bbdfSmrgvoid 37835c4bbdfSmrgpresent_fence_set_callback(struct present_fence *present_fence, 37935c4bbdfSmrg void (*callback)(void *param), 38035c4bbdfSmrg void *param); 38135c4bbdfSmrg 38235c4bbdfSmrgXID 38335c4bbdfSmrgpresent_fence_id(struct present_fence *present_fence); 38435c4bbdfSmrg 38535c4bbdfSmrg/* 38635c4bbdfSmrg * present_notify.c 38735c4bbdfSmrg */ 38835c4bbdfSmrgvoid 38935c4bbdfSmrgpresent_clear_window_notifies(WindowPtr window); 39035c4bbdfSmrg 39135c4bbdfSmrgvoid 39235c4bbdfSmrgpresent_free_window_notify(present_notify_ptr notify); 39335c4bbdfSmrg 39435c4bbdfSmrgint 39535c4bbdfSmrgpresent_add_window_notify(present_notify_ptr notify); 39635c4bbdfSmrg 39735c4bbdfSmrgint 39835c4bbdfSmrgpresent_create_notifies(ClientPtr client, int num_notifies, xPresentNotify *x_notifies, present_notify_ptr *p_notifies); 39935c4bbdfSmrg 40035c4bbdfSmrgvoid 40135c4bbdfSmrgpresent_destroy_notifies(present_notify_ptr notifies, int num_notifies); 40235c4bbdfSmrg 40335c4bbdfSmrg/* 40435c4bbdfSmrg * present_redirect.c 40535c4bbdfSmrg */ 40635c4bbdfSmrg 40735c4bbdfSmrgWindowPtr 40835c4bbdfSmrgpresent_redirect(ClientPtr client, WindowPtr target); 40935c4bbdfSmrg 41035c4bbdfSmrg/* 41135c4bbdfSmrg * present_request.c 41235c4bbdfSmrg */ 41335c4bbdfSmrgint 41435c4bbdfSmrgproc_present_dispatch(ClientPtr client); 41535c4bbdfSmrg 41635c4bbdfSmrgint 41735c4bbdfSmrgsproc_present_dispatch(ClientPtr client); 41835c4bbdfSmrg 4191b5d61b8Smrg/* 4201b5d61b8Smrg * present_scmd.c 4211b5d61b8Smrg */ 4221b5d61b8Smrgvoid 4231b5d61b8Smrgpresent_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64_t msc); 4241b5d61b8Smrg 4251b5d61b8Smrgvoid 4261b5d61b8Smrgpresent_flip_destroy(ScreenPtr screen); 4271b5d61b8Smrg 4281b5d61b8Smrgvoid 4291b5d61b8Smrgpresent_restore_screen_pixmap(ScreenPtr screen); 4301b5d61b8Smrg 4311b5d61b8Smrgvoid 4321b5d61b8Smrgpresent_set_abort_flip(ScreenPtr screen); 4331b5d61b8Smrg 4341b5d61b8SmrgBool 4351b5d61b8Smrgpresent_init(void); 4361b5d61b8Smrg 4371b5d61b8Smrgvoid 4381b5d61b8Smrgpresent_scmd_init_mode_hooks(present_screen_priv_ptr screen_priv); 4391b5d61b8Smrg 44035c4bbdfSmrg/* 44135c4bbdfSmrg * present_screen.c 44235c4bbdfSmrg */ 443ed6184dfSmrgBool 444ed6184dfSmrgpresent_screen_register_priv_keys(void); 445ed6184dfSmrg 446ed6184dfSmrgpresent_screen_priv_ptr 447ed6184dfSmrgpresent_screen_priv_init(ScreenPtr screen); 44835c4bbdfSmrg 4491b5d61b8Smrg/* 4501b5d61b8Smrg * present_vblank.c 4511b5d61b8Smrg */ 4521b5d61b8Smrgvoid 4531b5d61b8Smrgpresent_vblank_notify(present_vblank_ptr vblank, CARD8 kind, CARD8 mode, uint64_t ust, uint64_t crtc_msc); 4541b5d61b8Smrg 455ed6184dfSmrgBool 456ed6184dfSmrgpresent_vblank_init(present_vblank_ptr vblank, 457ed6184dfSmrg WindowPtr window, 458ed6184dfSmrg PixmapPtr pixmap, 459ed6184dfSmrg CARD32 serial, 460ed6184dfSmrg RegionPtr valid, 461ed6184dfSmrg RegionPtr update, 462ed6184dfSmrg int16_t x_off, 463ed6184dfSmrg int16_t y_off, 464ed6184dfSmrg RRCrtcPtr target_crtc, 465ed6184dfSmrg SyncFence *wait_fence, 466ed6184dfSmrg SyncFence *idle_fence, 467ed6184dfSmrg uint32_t options, 468ed6184dfSmrg const uint32_t capabilities, 469ed6184dfSmrg present_notify_ptr notifies, 470ed6184dfSmrg int num_notifies, 471ed6184dfSmrg uint64_t target_msc, 472ed6184dfSmrg uint64_t crtc_msc); 473ed6184dfSmrg 4741b5d61b8Smrgpresent_vblank_ptr 4751b5d61b8Smrgpresent_vblank_create(WindowPtr window, 4761b5d61b8Smrg PixmapPtr pixmap, 4771b5d61b8Smrg CARD32 serial, 4781b5d61b8Smrg RegionPtr valid, 4791b5d61b8Smrg RegionPtr update, 4801b5d61b8Smrg int16_t x_off, 4811b5d61b8Smrg int16_t y_off, 4821b5d61b8Smrg RRCrtcPtr target_crtc, 4831b5d61b8Smrg SyncFence *wait_fence, 4841b5d61b8Smrg SyncFence *idle_fence, 4851b5d61b8Smrg uint32_t options, 486ed6184dfSmrg const uint32_t capabilities, 4871b5d61b8Smrg present_notify_ptr notifies, 4881b5d61b8Smrg int num_notifies, 4895a7dfde8Smrg uint64_t target_msc, 4901b5d61b8Smrg uint64_t crtc_msc); 4911b5d61b8Smrg 4921b5d61b8Smrgvoid 4931b5d61b8Smrgpresent_vblank_scrap(present_vblank_ptr vblank); 4941b5d61b8Smrg 4951b5d61b8Smrgvoid 4961b5d61b8Smrgpresent_vblank_destroy(present_vblank_ptr vblank); 4971b5d61b8Smrg 49835c4bbdfSmrg#endif /* _PRESENT_PRIV_H_ */ 499