present_priv.h revision 1b5d61b8
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
2635c4bbdfSmrg#include <X11/X.h>
2735c4bbdfSmrg#include "scrnintstr.h"
2835c4bbdfSmrg#include "misc.h"
2935c4bbdfSmrg#include "list.h"
3035c4bbdfSmrg#include "windowstr.h"
3135c4bbdfSmrg#include "dixstruct.h"
3235c4bbdfSmrg#include "present.h"
3335c4bbdfSmrg#include <syncsdk.h>
3435c4bbdfSmrg#include <syncsrv.h>
3535c4bbdfSmrg#include <xfixes.h>
3635c4bbdfSmrg#include <randrstr.h>
3735c4bbdfSmrg
381b5d61b8Smrg#if 0
391b5d61b8Smrg#define DebugPresent(x) ErrorF x
401b5d61b8Smrg#else
411b5d61b8Smrg#define DebugPresent(x)
421b5d61b8Smrg#endif
431b5d61b8Smrg
4435c4bbdfSmrgextern int present_request;
4535c4bbdfSmrg
4635c4bbdfSmrgextern DevPrivateKeyRec present_screen_private_key;
4735c4bbdfSmrg
4835c4bbdfSmrgtypedef struct present_fence *present_fence_ptr;
4935c4bbdfSmrg
5035c4bbdfSmrgtypedef struct present_notify present_notify_rec, *present_notify_ptr;
5135c4bbdfSmrg
5235c4bbdfSmrgstruct present_notify {
5335c4bbdfSmrg    struct xorg_list    window_list;
5435c4bbdfSmrg    WindowPtr           window;
5535c4bbdfSmrg    CARD32              serial;
5635c4bbdfSmrg};
5735c4bbdfSmrg
5835c4bbdfSmrgstruct present_vblank {
5935c4bbdfSmrg    struct xorg_list    window_list;
6035c4bbdfSmrg    struct xorg_list    event_queue;
6135c4bbdfSmrg    ScreenPtr           screen;
6235c4bbdfSmrg    WindowPtr           window;
6335c4bbdfSmrg    PixmapPtr           pixmap;
6435c4bbdfSmrg    RegionPtr           valid;
6535c4bbdfSmrg    RegionPtr           update;
6635c4bbdfSmrg    RRCrtcPtr           crtc;
6735c4bbdfSmrg    uint32_t            serial;
6835c4bbdfSmrg    int16_t             x_off;
6935c4bbdfSmrg    int16_t             y_off;
7035c4bbdfSmrg    CARD16              kind;
7135c4bbdfSmrg    uint64_t            event_id;
7235c4bbdfSmrg    uint64_t            target_msc;
7335c4bbdfSmrg    uint64_t            msc_offset;
7435c4bbdfSmrg    present_fence_ptr   idle_fence;
7535c4bbdfSmrg    present_fence_ptr   wait_fence;
7635c4bbdfSmrg    present_notify_ptr  notifies;
7735c4bbdfSmrg    int                 num_notifies;
7835c4bbdfSmrg    Bool                queued;         /* on present_exec_queue */
7935c4bbdfSmrg    Bool                requeue;        /* on queue, but target_msc has changed */
8035c4bbdfSmrg    Bool                flip;           /* planning on using flip */
8135c4bbdfSmrg    Bool                flip_ready;     /* wants to flip, but waiting for previous flip or unflip */
821b5d61b8Smrg    Bool                flip_idler;     /* driver explicitly permitted idling */
8335c4bbdfSmrg    Bool                sync_flip;      /* do flip synchronous to vblank */
8435c4bbdfSmrg    Bool                abort_flip;     /* aborting this flip */
851b5d61b8Smrg    PresentFlipReason   reason;         /* reason for which flip is not possible */
861b5d61b8Smrg    Bool                has_suboptimal; /* whether client can support SuboptimalCopy mode */
8735c4bbdfSmrg};
8835c4bbdfSmrg
891b5d61b8Smrgtypedef struct present_screen_priv present_screen_priv_rec, *present_screen_priv_ptr;
901b5d61b8Smrgtypedef struct present_window_priv present_window_priv_rec, *present_window_priv_ptr;
911b5d61b8Smrg
921b5d61b8Smrg/*
931b5d61b8Smrg * Mode hooks
941b5d61b8Smrg */
951b5d61b8Smrgtypedef uint32_t (*present_priv_query_capabilities_ptr)(present_screen_priv_ptr screen_priv);
961b5d61b8Smrgtypedef RRCrtcPtr (*present_priv_get_crtc_ptr)(present_screen_priv_ptr screen_priv,
971b5d61b8Smrg                                               WindowPtr window);
981b5d61b8Smrg
991b5d61b8Smrgtypedef Bool (*present_priv_check_flip_ptr)(RRCrtcPtr crtc,
1001b5d61b8Smrg                                            WindowPtr window,
1011b5d61b8Smrg                                            PixmapPtr pixmap,
1021b5d61b8Smrg                                            Bool sync_flip,
1031b5d61b8Smrg                                            RegionPtr valid,
1041b5d61b8Smrg                                            int16_t x_off,
1051b5d61b8Smrg                                            int16_t y_off,
1061b5d61b8Smrg                                            PresentFlipReason *reason);
1071b5d61b8Smrgtypedef void (*present_priv_check_flip_window_ptr)(WindowPtr window);
1081b5d61b8Smrgtypedef Bool (*present_priv_can_window_flip_ptr)(WindowPtr window);
1091b5d61b8Smrg
1101b5d61b8Smrgtypedef int (*present_priv_pixmap_ptr)(WindowPtr window,
1111b5d61b8Smrg                                       PixmapPtr pixmap,
1121b5d61b8Smrg                                       CARD32 serial,
1131b5d61b8Smrg                                       RegionPtr valid,
1141b5d61b8Smrg                                       RegionPtr update,
1151b5d61b8Smrg                                       int16_t x_off,
1161b5d61b8Smrg                                       int16_t y_off,
1171b5d61b8Smrg                                       RRCrtcPtr target_crtc,
1181b5d61b8Smrg                                       SyncFence *wait_fence,
1191b5d61b8Smrg                                       SyncFence *idle_fence,
1201b5d61b8Smrg                                       uint32_t options,
1211b5d61b8Smrg                                       uint64_t window_msc,
1221b5d61b8Smrg                                       uint64_t divisor,
1231b5d61b8Smrg                                       uint64_t remainder,
1241b5d61b8Smrg                                       present_notify_ptr notifies,
1251b5d61b8Smrg                                       int num_notifies);
1261b5d61b8Smrg
1271b5d61b8Smrgtypedef void (*present_priv_create_event_id_ptr)(present_window_priv_ptr window_priv,
1281b5d61b8Smrg                                                 present_vblank_ptr vblank);
1291b5d61b8Smrg
1301b5d61b8Smrgtypedef int (*present_priv_queue_vblank_ptr)(ScreenPtr screen,
1311b5d61b8Smrg                                             WindowPtr window,
1321b5d61b8Smrg                                             RRCrtcPtr crtc,
1331b5d61b8Smrg                                             uint64_t event_id,
1341b5d61b8Smrg                                             uint64_t msc);
1351b5d61b8Smrgtypedef void (*present_priv_flush_ptr)(WindowPtr window);
1361b5d61b8Smrgtypedef void (*present_priv_re_execute_ptr)(present_vblank_ptr vblank);
1371b5d61b8Smrg
1381b5d61b8Smrgtypedef void (*present_priv_abort_vblank_ptr)(ScreenPtr screen,
1391b5d61b8Smrg                                              WindowPtr window,
1401b5d61b8Smrg                                              RRCrtcPtr crtc,
1411b5d61b8Smrg                                              uint64_t event_id,
1421b5d61b8Smrg                                              uint64_t msc);
1431b5d61b8Smrgtypedef void (*present_priv_flip_destroy_ptr)(ScreenPtr screen);
1441b5d61b8Smrg
1451b5d61b8Smrgstruct present_screen_priv {
14635c4bbdfSmrg    CloseScreenProcPtr          CloseScreen;
14735c4bbdfSmrg    ConfigNotifyProcPtr         ConfigNotify;
14835c4bbdfSmrg    DestroyWindowProcPtr        DestroyWindow;
14935c4bbdfSmrg    ClipNotifyProcPtr           ClipNotify;
15035c4bbdfSmrg
15135c4bbdfSmrg    present_vblank_ptr          flip_pending;
15235c4bbdfSmrg    uint64_t                    unflip_event_id;
15335c4bbdfSmrg
15435c4bbdfSmrg    uint32_t                    fake_interval;
15535c4bbdfSmrg
15635c4bbdfSmrg    /* Currently active flipped pixmap and fence */
15735c4bbdfSmrg    RRCrtcPtr                   flip_crtc;
15835c4bbdfSmrg    WindowPtr                   flip_window;
15935c4bbdfSmrg    uint32_t                    flip_serial;
16035c4bbdfSmrg    PixmapPtr                   flip_pixmap;
16135c4bbdfSmrg    present_fence_ptr           flip_idle_fence;
16235c4bbdfSmrg    Bool                        flip_sync;
16335c4bbdfSmrg
16435c4bbdfSmrg    present_screen_info_ptr     info;
1651b5d61b8Smrg    present_wnmd_info_ptr       wnmd_info;
1661b5d61b8Smrg
1671b5d61b8Smrg    /* Mode hooks */
1681b5d61b8Smrg    present_priv_query_capabilities_ptr query_capabilities;
1691b5d61b8Smrg    present_priv_get_crtc_ptr           get_crtc;
1701b5d61b8Smrg
1711b5d61b8Smrg    present_priv_check_flip_ptr         check_flip;
1721b5d61b8Smrg    present_priv_check_flip_window_ptr  check_flip_window;
1731b5d61b8Smrg    present_priv_can_window_flip_ptr    can_window_flip;
1741b5d61b8Smrg
1751b5d61b8Smrg    present_priv_pixmap_ptr             present_pixmap;
1761b5d61b8Smrg    present_priv_create_event_id_ptr    create_event_id;
1771b5d61b8Smrg
1781b5d61b8Smrg    present_priv_queue_vblank_ptr       queue_vblank;
1791b5d61b8Smrg    present_priv_flush_ptr              flush;
1801b5d61b8Smrg    present_priv_re_execute_ptr         re_execute;
1811b5d61b8Smrg
1821b5d61b8Smrg    present_priv_abort_vblank_ptr       abort_vblank;
1831b5d61b8Smrg    present_priv_flip_destroy_ptr       flip_destroy;
1841b5d61b8Smrg};
18535c4bbdfSmrg
18635c4bbdfSmrg#define wrap(priv,real,mem,func) {\
18735c4bbdfSmrg    priv->mem = real->mem; \
18835c4bbdfSmrg    real->mem = func; \
18935c4bbdfSmrg}
19035c4bbdfSmrg
19135c4bbdfSmrg#define unwrap(priv,real,mem) {\
19235c4bbdfSmrg    real->mem = priv->mem; \
19335c4bbdfSmrg}
19435c4bbdfSmrg
19535c4bbdfSmrgstatic inline present_screen_priv_ptr
19635c4bbdfSmrgpresent_screen_priv(ScreenPtr screen)
19735c4bbdfSmrg{
19835c4bbdfSmrg    return (present_screen_priv_ptr)dixLookupPrivate(&(screen)->devPrivates, &present_screen_private_key);
19935c4bbdfSmrg}
20035c4bbdfSmrg
20135c4bbdfSmrg/*
20235c4bbdfSmrg * Each window has a list of clients and event masks
20335c4bbdfSmrg */
20435c4bbdfSmrgtypedef struct present_event *present_event_ptr;
20535c4bbdfSmrg
20635c4bbdfSmrgtypedef struct present_event {
20735c4bbdfSmrg    present_event_ptr next;
20835c4bbdfSmrg    ClientPtr client;
20935c4bbdfSmrg    WindowPtr window;
21035c4bbdfSmrg    XID id;
21135c4bbdfSmrg    int mask;
21235c4bbdfSmrg} present_event_rec;
21335c4bbdfSmrg
2141b5d61b8Smrgstruct present_window_priv {
2151b5d61b8Smrg    WindowPtr              window;
21635c4bbdfSmrg    present_event_ptr      events;
21735c4bbdfSmrg    RRCrtcPtr              crtc;        /* Last reported CRTC from get_ust_msc */
21835c4bbdfSmrg    uint64_t               msc_offset;
21935c4bbdfSmrg    uint64_t               msc;         /* Last reported MSC from the current crtc */
22035c4bbdfSmrg    struct xorg_list       vblank;
22135c4bbdfSmrg    struct xorg_list       notifies;
2221b5d61b8Smrg
2231b5d61b8Smrg    /* Used for window flips */
2241b5d61b8Smrg    uint64_t               event_id;
2251b5d61b8Smrg    struct xorg_list       exec_queue;
2261b5d61b8Smrg    struct xorg_list       flip_queue;
2271b5d61b8Smrg    struct xorg_list       idle_queue;
2281b5d61b8Smrg
2291b5d61b8Smrg    present_vblank_ptr     flip_pending;
2301b5d61b8Smrg    present_vblank_ptr     flip_active;
2311b5d61b8Smrg};
23235c4bbdfSmrg
23335c4bbdfSmrg#define PresentCrtcNeverSet     ((RRCrtcPtr) 1)
23435c4bbdfSmrg
23535c4bbdfSmrgextern DevPrivateKeyRec present_window_private_key;
23635c4bbdfSmrg
23735c4bbdfSmrgstatic inline present_window_priv_ptr
23835c4bbdfSmrgpresent_window_priv(WindowPtr window)
23935c4bbdfSmrg{
24035c4bbdfSmrg    return (present_window_priv_ptr)dixGetPrivate(&(window)->devPrivates, &present_window_private_key);
24135c4bbdfSmrg}
24235c4bbdfSmrg
24335c4bbdfSmrgpresent_window_priv_ptr
24435c4bbdfSmrgpresent_get_window_priv(WindowPtr window, Bool create);
24535c4bbdfSmrg
2461b5d61b8Smrg/*
2471b5d61b8Smrg * Returns:
2481b5d61b8Smrg * TRUE if the first MSC value is after the second one
2491b5d61b8Smrg * FALSE if the first MSC value is equal to or before the second one
2501b5d61b8Smrg */
2511b5d61b8Smrgstatic inline Bool
2521b5d61b8Smrgmsc_is_after(uint64_t test, uint64_t reference)
2531b5d61b8Smrg{
2541b5d61b8Smrg    return (int64_t)(test - reference) > 0;
2551b5d61b8Smrg}
2561b5d61b8Smrg
25735c4bbdfSmrg/*
25835c4bbdfSmrg * present.c
25935c4bbdfSmrg */
2601b5d61b8Smrguint32_t
2611b5d61b8Smrgpresent_query_capabilities(RRCrtcPtr crtc);
2621b5d61b8Smrg
2631b5d61b8SmrgRRCrtcPtr
2641b5d61b8Smrgpresent_get_crtc(WindowPtr window);
2651b5d61b8Smrg
2661b5d61b8Smrgvoid
2671b5d61b8Smrgpresent_copy_region(DrawablePtr drawable,
2681b5d61b8Smrg                    PixmapPtr pixmap,
2691b5d61b8Smrg                    RegionPtr update,
2701b5d61b8Smrg                    int16_t x_off,
2711b5d61b8Smrg                    int16_t y_off);
2721b5d61b8Smrg
2731b5d61b8Smrgvoid
2741b5d61b8Smrgpresent_pixmap_idle(PixmapPtr pixmap, WindowPtr window, CARD32 serial, struct present_fence *present_fence);
2751b5d61b8Smrg
2761b5d61b8Smrgvoid
2771b5d61b8Smrgpresent_set_tree_pixmap(WindowPtr window,
2781b5d61b8Smrg                        PixmapPtr expected,
2791b5d61b8Smrg                        PixmapPtr pixmap);
2801b5d61b8Smrg
2811b5d61b8Smrgvoid
2821b5d61b8Smrgpresent_adjust_timings(uint32_t options,
2831b5d61b8Smrg                       uint64_t *crtc_msc,
2841b5d61b8Smrg                       uint64_t *target_msc,
2851b5d61b8Smrg                       uint64_t divisor,
2861b5d61b8Smrg                       uint64_t remainder);
2871b5d61b8Smrg
28835c4bbdfSmrgint
28935c4bbdfSmrgpresent_pixmap(WindowPtr window,
29035c4bbdfSmrg               PixmapPtr pixmap,
29135c4bbdfSmrg               CARD32 serial,
29235c4bbdfSmrg               RegionPtr valid,
29335c4bbdfSmrg               RegionPtr update,
29435c4bbdfSmrg               int16_t x_off,
29535c4bbdfSmrg               int16_t y_off,
29635c4bbdfSmrg               RRCrtcPtr target_crtc,
29735c4bbdfSmrg               SyncFence *wait_fence,
29835c4bbdfSmrg               SyncFence *idle_fence,
29935c4bbdfSmrg               uint32_t options,
30035c4bbdfSmrg               uint64_t target_msc,
30135c4bbdfSmrg               uint64_t divisor,
30235c4bbdfSmrg               uint64_t remainder,
30335c4bbdfSmrg               present_notify_ptr notifies,
30435c4bbdfSmrg               int num_notifies);
30535c4bbdfSmrg
30635c4bbdfSmrgint
30735c4bbdfSmrgpresent_notify_msc(WindowPtr window,
30835c4bbdfSmrg                   CARD32 serial,
30935c4bbdfSmrg                   uint64_t target_msc,
31035c4bbdfSmrg                   uint64_t divisor,
31135c4bbdfSmrg                   uint64_t remainder);
31235c4bbdfSmrg
31335c4bbdfSmrg/*
31435c4bbdfSmrg * present_event.c
31535c4bbdfSmrg */
31635c4bbdfSmrg
31735c4bbdfSmrgvoid
31835c4bbdfSmrgpresent_free_events(WindowPtr window);
31935c4bbdfSmrg
32035c4bbdfSmrgvoid
32135c4bbdfSmrgpresent_send_config_notify(WindowPtr window, int x, int y, int w, int h, int bw, WindowPtr sibling);
32235c4bbdfSmrg
32335c4bbdfSmrgvoid
32435c4bbdfSmrgpresent_send_complete_notify(WindowPtr window, CARD8 kind, CARD8 mode, CARD32 serial, uint64_t ust, uint64_t msc);
32535c4bbdfSmrg
32635c4bbdfSmrgvoid
32735c4bbdfSmrgpresent_send_idle_notify(WindowPtr window, CARD32 serial, PixmapPtr pixmap, present_fence_ptr idle_fence);
32835c4bbdfSmrg
32935c4bbdfSmrgint
33035c4bbdfSmrgpresent_select_input(ClientPtr client,
33135c4bbdfSmrg                     CARD32 eid,
33235c4bbdfSmrg                     WindowPtr window,
33335c4bbdfSmrg                     CARD32 event_mask);
33435c4bbdfSmrg
33535c4bbdfSmrgBool
33635c4bbdfSmrgpresent_event_init(void);
33735c4bbdfSmrg
3381b5d61b8Smrg/*
3391b5d61b8Smrg * present_execute.c
3401b5d61b8Smrg */
3411b5d61b8SmrgBool
3421b5d61b8Smrgpresent_execute_wait(present_vblank_ptr vblank, uint64_t crtc_msc);
3431b5d61b8Smrg
3441b5d61b8Smrgvoid
3451b5d61b8Smrgpresent_execute_copy(present_vblank_ptr vblank, uint64_t crtc_msc);
3461b5d61b8Smrg
3471b5d61b8Smrgvoid
3481b5d61b8Smrgpresent_execute_post(present_vblank_ptr vblank, uint64_t ust, uint64_t crtc_msc);
3491b5d61b8Smrg
35035c4bbdfSmrg/*
35135c4bbdfSmrg * present_fake.c
35235c4bbdfSmrg */
35335c4bbdfSmrgint
35435c4bbdfSmrgpresent_fake_get_ust_msc(ScreenPtr screen, uint64_t *ust, uint64_t *msc);
35535c4bbdfSmrg
35635c4bbdfSmrgint
35735c4bbdfSmrgpresent_fake_queue_vblank(ScreenPtr screen, uint64_t event_id, uint64_t msc);
35835c4bbdfSmrg
35935c4bbdfSmrgvoid
36035c4bbdfSmrgpresent_fake_abort_vblank(ScreenPtr screen, uint64_t event_id, uint64_t msc);
36135c4bbdfSmrg
36235c4bbdfSmrgvoid
36335c4bbdfSmrgpresent_fake_screen_init(ScreenPtr screen);
36435c4bbdfSmrg
36535c4bbdfSmrgvoid
36635c4bbdfSmrgpresent_fake_queue_init(void);
36735c4bbdfSmrg
36835c4bbdfSmrg/*
36935c4bbdfSmrg * present_fence.c
37035c4bbdfSmrg */
37135c4bbdfSmrgstruct present_fence *
37235c4bbdfSmrgpresent_fence_create(SyncFence *sync_fence);
37335c4bbdfSmrg
37435c4bbdfSmrgvoid
37535c4bbdfSmrgpresent_fence_destroy(struct present_fence *present_fence);
37635c4bbdfSmrg
37735c4bbdfSmrgvoid
37835c4bbdfSmrgpresent_fence_set_triggered(struct present_fence *present_fence);
37935c4bbdfSmrg
38035c4bbdfSmrgBool
38135c4bbdfSmrgpresent_fence_check_triggered(struct present_fence *present_fence);
38235c4bbdfSmrg
38335c4bbdfSmrgvoid
38435c4bbdfSmrgpresent_fence_set_callback(struct present_fence *present_fence,
38535c4bbdfSmrg                           void (*callback)(void *param),
38635c4bbdfSmrg                           void *param);
38735c4bbdfSmrg
38835c4bbdfSmrgXID
38935c4bbdfSmrgpresent_fence_id(struct present_fence *present_fence);
39035c4bbdfSmrg
39135c4bbdfSmrg/*
39235c4bbdfSmrg * present_notify.c
39335c4bbdfSmrg */
39435c4bbdfSmrgvoid
39535c4bbdfSmrgpresent_clear_window_notifies(WindowPtr window);
39635c4bbdfSmrg
39735c4bbdfSmrgvoid
39835c4bbdfSmrgpresent_free_window_notify(present_notify_ptr notify);
39935c4bbdfSmrg
40035c4bbdfSmrgint
40135c4bbdfSmrgpresent_add_window_notify(present_notify_ptr notify);
40235c4bbdfSmrg
40335c4bbdfSmrgint
40435c4bbdfSmrgpresent_create_notifies(ClientPtr client, int num_notifies, xPresentNotify *x_notifies, present_notify_ptr *p_notifies);
40535c4bbdfSmrg
40635c4bbdfSmrgvoid
40735c4bbdfSmrgpresent_destroy_notifies(present_notify_ptr notifies, int num_notifies);
40835c4bbdfSmrg
40935c4bbdfSmrg/*
41035c4bbdfSmrg * present_redirect.c
41135c4bbdfSmrg */
41235c4bbdfSmrg
41335c4bbdfSmrgWindowPtr
41435c4bbdfSmrgpresent_redirect(ClientPtr client, WindowPtr target);
41535c4bbdfSmrg
41635c4bbdfSmrg/*
41735c4bbdfSmrg * present_request.c
41835c4bbdfSmrg */
41935c4bbdfSmrgint
42035c4bbdfSmrgproc_present_dispatch(ClientPtr client);
42135c4bbdfSmrg
42235c4bbdfSmrgint
42335c4bbdfSmrgsproc_present_dispatch(ClientPtr client);
42435c4bbdfSmrg
4251b5d61b8Smrg/*
4261b5d61b8Smrg * present_scmd.c
4271b5d61b8Smrg */
4281b5d61b8Smrgvoid
4291b5d61b8Smrgpresent_abort_vblank(ScreenPtr screen, RRCrtcPtr crtc, uint64_t event_id, uint64_t msc);
4301b5d61b8Smrg
4311b5d61b8Smrgvoid
4321b5d61b8Smrgpresent_flip_destroy(ScreenPtr screen);
4331b5d61b8Smrg
4341b5d61b8Smrgvoid
4351b5d61b8Smrgpresent_restore_screen_pixmap(ScreenPtr screen);
4361b5d61b8Smrg
4371b5d61b8Smrgvoid
4381b5d61b8Smrgpresent_set_abort_flip(ScreenPtr screen);
4391b5d61b8Smrg
4401b5d61b8SmrgBool
4411b5d61b8Smrgpresent_init(void);
4421b5d61b8Smrg
4431b5d61b8Smrgvoid
4441b5d61b8Smrgpresent_scmd_init_mode_hooks(present_screen_priv_ptr screen_priv);
4451b5d61b8Smrg
44635c4bbdfSmrg/*
44735c4bbdfSmrg * present_screen.c
44835c4bbdfSmrg */
44935c4bbdfSmrg
4501b5d61b8Smrg/*
4511b5d61b8Smrg * present_vblank.c
4521b5d61b8Smrg */
4531b5d61b8Smrgvoid
4541b5d61b8Smrgpresent_vblank_notify(present_vblank_ptr vblank, CARD8 kind, CARD8 mode, uint64_t ust, uint64_t crtc_msc);
4551b5d61b8Smrg
4561b5d61b8Smrgpresent_vblank_ptr
4571b5d61b8Smrgpresent_vblank_create(WindowPtr window,
4581b5d61b8Smrg                      PixmapPtr pixmap,
4591b5d61b8Smrg                      CARD32 serial,
4601b5d61b8Smrg                      RegionPtr valid,
4611b5d61b8Smrg                      RegionPtr update,
4621b5d61b8Smrg                      int16_t x_off,
4631b5d61b8Smrg                      int16_t y_off,
4641b5d61b8Smrg                      RRCrtcPtr target_crtc,
4651b5d61b8Smrg                      SyncFence *wait_fence,
4661b5d61b8Smrg                      SyncFence *idle_fence,
4671b5d61b8Smrg                      uint32_t options,
4681b5d61b8Smrg                      const uint32_t *capabilities,
4691b5d61b8Smrg                      present_notify_ptr notifies,
4701b5d61b8Smrg                      int num_notifies,
4711b5d61b8Smrg                      uint64_t *target_msc,
4721b5d61b8Smrg                      uint64_t crtc_msc);
4731b5d61b8Smrg
4741b5d61b8Smrgvoid
4751b5d61b8Smrgpresent_vblank_scrap(present_vblank_ptr vblank);
4761b5d61b8Smrg
4771b5d61b8Smrgvoid
4781b5d61b8Smrgpresent_vblank_destroy(present_vblank_ptr vblank);
4791b5d61b8Smrg
4801b5d61b8Smrg/*
4811b5d61b8Smrg * present_wnmd.c
4821b5d61b8Smrg */
4831b5d61b8Smrgvoid
4841b5d61b8Smrgpresent_wnmd_set_abort_flip(WindowPtr window);
4851b5d61b8Smrg
4861b5d61b8Smrgvoid
4871b5d61b8Smrgpresent_wnmd_init_mode_hooks(present_screen_priv_ptr screen_priv);
4881b5d61b8Smrg
48935c4bbdfSmrg#endif /*  _PRESENT_PRIV_H_ */
490