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