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