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