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