presentproto.txt revision 68872e7f
1 The Present Extension 2 Version 1.3 3 2023-06-13 4 5 Keith Packard 6 keithp@keithp.com 7 Intel Corporation 8 91. Introduction 10 11The Present extension provides a way for applications to update their 12window contents from a pixmap in a well defined fashion, synchronizing 13with the display refresh and potentially using a more efficient 14mechanism than copying the contents of the source pixmap. 15 161.1. Future Present extension versions 17 18This document includes speculation about future 'redirect' support 19within the Present extension. All such information is subject to 20change and is provided only as an aid to further Present development. 21 221.2. Acknowledgments 23 24Eric Anholt <eric@anholt.net> 25Owen Taylor <otaylor@redhat.com> 26James Jones <jajones@nvidia.com> 27Louis-Francis Ratté-Boulianne <lfrb@collabora.com> 28 29 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 30 312. Data Types 32 33PRESENTEVENTID { XID } 34 35 Defines a unique event delivery target for Present 36 events. Multiple event IDs can be allocated to provide 37 multiple distinct event delivery contexts. 38 39PRESENTNOTIFY { 40 window: WINDOW 41 serial: CARD32 42 } 43 44 A list of these is passed to PresentPixmap; when the indicated 45 PresentPixmap completes, PresentCompletNotify events will be 46 delivered both to the PresentPixmap window/serial parameter as 47 well as each of the entries in the list of PRESENTNOTIFY parameter. 48 49PRESENTEVENTTYPE { PresentConfigureNotify, 50 PresentCompleteNotify, 51 PresentIdleNotify } 52 53PRESENTEVENTMASK { PresentConfigureNotifyMask, 54 PresentCompleteNotifyMask, 55 PresentIdleNotifyMask } 56 57PRESENTOPTION { PresentOptionAsync, 58 PresentOptionCopy, 59 PresentOptionUST, 60 PresentOptionSuboptimal, 61 PresentOptionAsyncMayTear } 62 63PRESENTCAPABILITY { PresentCapabilityAsync, 64 PresentCapabilityFence, 65 PresentCapabilityUST, 66 PresentCapabilityAsyncMayTear } 67 68PRESENTCOMPLETEKIND { PresentCompleteKindPixmap, 69 PresentCompleteKindMSCNotify } 70 71PRESENTCOMPLETEMODE { PresentCompleteModeCopy, 72 PresentCompleteModeFlip, 73 PresentCompleteModeSkip, 74 PresentCompleteModeSuboptimalCopy } 75 76The Present extension also uses the Sync extension Fence data type to 77provide synchronization for pixmaps. 78 792.1. Data Types proposed for a later Present extension version 80 81PRESENTEVENTTYPE { ... 82 PresentRedirectNotify } 83 84PRESENTEVENTMASK { ... 85 PresentSubredirectNotifyMask } 86 87 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 88 893. Errors 90 91EventID 92 A value for an EventID argument does not name a defined EventID 93 94 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 95 965. Events 97 98ConfigureNotify events inform clients about window configuration 99changes which can affect the allocation of window-related buffers. 100 101CompleteNotify events inform clients about the completion of a pending 102PresentPixmap request. 103 104IdleNotify events inform clients when pixmaps are available for re-use. 105 1065.1. Events proposed for a later Present extension version 107 108RedirectNotify events inform clients about other clients PresentPixmap 109requests. 110 111 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 112 1136. Extension Initialization 114 115The name of this extension is "Present" 116 117┌─── 118 PresentQueryVersion 119 client-major-version: CARD32 120 client-minor-version: CARD32 121 ▶ 122 major-version: CARD32 123 minor-version: CARD32 124└─── 125 126 The client sends the highest supported version to the server 127 and the server sends the highest version it supports, but no 128 higher than the requested version. Major versions changes can 129 introduce incompatibilities in existing functionality, minor 130 version changes introduce only backward compatible changes. 131 It is the clients responsibility to ensure that the server 132 supports a version which is compatible with its expectations. 133 134 Backwards compatible changes include addition of new 135 requests. 136 137 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 138 1397. Extension Requests 140 141┌─── 142 PresentPixmap 143 window: WINDOW 144 pixmap: PIXMAP 145 serial: CARD32 146 valid-area: REGION or None 147 update-area: REGION or None 148 x-off, y-off: INT16 149 target-crtc: CRTC or None 150 wait-fence: FENCE 151 idle-fence: FENCE 152 options: SETofPRESENTOPTION 153 target-msc: CARD64 154 divisor: CARD64 155 remainder: CARD64 156 notifies: LISTofPRESENTNOTIFY 157└─── 158 Errors: Window, Pixmap, Match 159 160 Provides new content for the specified window, to be made 161 visible at the specified time (defined by 'target-msc', 'divisor' 162 and 'remainder'). If the depth of 'pixmap' and 'window' do not 163 match, a Match error will be generated. 164 165 'serial' is an arbitrary client-specified value which will 166 be returned in the associated PresentCompleteNotify event so 167 that the client can associate the event and request. 168 169 'valid-area' defines the portion of 'pixmap' which contains 170 valid window contents, or None if the pixmap contains valid 171 contents for the whole window. 172 173 'update-area' defines the subset of the window to be updated, 174 or None if the whole window is to be updated. 175 176 PresentPixmap may use any region of 'pixmap' which contains 177 'update-area' and which is contained by 'valid-area'. In other 178 words, areas inside 'update-area' will be presented from 179 'pixmap', areas outside 'valid-area' will not be presented 180 from 'pixmap' and areas inside 'valid-area' but outside 181 'update-area' may or may not be presented at the discretion of 182 the X server. 183 184 'x-off' and 'y-off' define the location in the window where 185 the 0,0 location of the pixmap will be presented. valid-area 186 and update-area are relative to the pixmap. 187 188 PresentPixmap will block until 'wait-fence' is triggered. 189 190 When the X server has finished using 'pixmap' for this 191 operation, it will send a PresentIdleNotify event and arrange 192 for any 'idle-fence' to be triggered. This may be at any time 193 following the PresentPixmap request -- the contents may be 194 immediately copied to another buffer, copied just in time for 195 the vblank interrupt or the pixmap may be used directly for 196 display (in which case it will be busy until some future 197 PresentPixmap operation). 198 199 If 'idle-fence' is not None, then the client guarantees to the 200 X server that it will wait for that fence to be signalled 201 before it uses the pixmap again. If 'idle-fence' is None, then 202 the X server must arrange for the pixmap to be re-usable by 203 the client as soon as the PresentIdleNotify event has been 204 received. Note that if PresentCapabilityFence is set for the 205 associated CRTC, then clients should use fences to improve 206 overall system performance. If PresentCapabilityFence is not 207 set, then using fences offers no benefit, but also no cost. 208 209 If 'target-msc' is greater than the current msc for 'window', 210 the presentation will occur at (or after) the 'target-msc' 211 field. Otherwise, the presentation will occur after the next 212 field where msc % 'divisor' == 'remainder'. 213 214 If 'target-crtc' is None, then the X server will choose a 215 suitable CRTC for synchronization. 216 217 If 'options' contains PresentOptionAsync, and the 'target-msc' 218 is less than or equal to the current msc for 'window', then 219 the operation will be performed as soon as possible, not 220 necessarily waiting for the next vertical blank interval. If 221 the target-crtc does not support PresentCapabilityAsyncMayTear, 222 this may result in tearing. 223 224 If the target-crtc supports PresentCapabilityAsyncMayTear, 225 'options' contains PresentOptionAsyncMayTear, and the 'target-msc' 226 is less than or equal to the current msc for 'window', then 227 the operation will be performed as soon as possible, not 228 necessarily waiting for the next vertical blank interval, and 229 possibly resulting in tearing. 230 231 If 'options' contains PresentOptionCopy, then 'pixmap' will be 232 idle, and 'idle-fence' triggered as soon as the operation occurs. 233 234 If 'options' contains PresentOptionUST, then target-msc, 235 divisor and remainder will all be interpreted as UST values 236 instead of MSC values and the frame update will be scheduled 237 for the specified UST time, If the target-crtc supports 238 PresentCapabilityUST, then the swap time will be as close to 239 the target time as the driver can manage. Otherwise, the 240 server will take the target UST time and convert it to a 241 suitable target MSC value. 242 243 If 'options' contains PresentOptionSuboptimal, then the 244 PresentCompleteNotify event can have mode 245 PresentCompleteModeSuboptimalCopy as the client supports it. 246 247 After the presentation occurs, a PresentCompleteNotify event 248 with kind PresentCompleteKindPixmap will be generated, both to 249 'window' as well as all members of 'notifies'. 250 251 If 'window' is destroyed before the presentation occurs, then 252 the presentation action will not be completed. 253 254 PresentPixmap holds a reference to 'pixmap' until the 255 presentation occurs, so 'pixmap' may be immediately freed 256 after the request executes, even if that is before the 257 presentation occurs. 258 259 If 'idle-fence' is destroyed before the presentation occurs, 260 then idle-fence will not be signaled but the presentation will 261 occur normally. 262 263 If 'wait-fence' is destroyed before it becomes triggered, then 264 the presentation operation will no longer wait for it and will 265 occur when the other conditions are satisfied. 266 267┌─── 268 PresentNotifyMSC 269 window: WINDOW 270 serial: CARD32 271 target-msc: CARD64 272 divisor: CARD64 273 remainder: CARD64 274└─── 275 Errors: Window 276 277 Delivers a PresentCompleteNotifyEvent with kind 278 PresentCompleteKindNotifyMSC after the time specified by 279 'target-msc', 'divisor' and 'remainder'. 280 281 'serial' is an arbitrary client-specified value which will be 282 returned in the event so that the client can associate the 283 event and request. 284 285 If 'target-msc' is greater than the current msc for 'window', 286 the event will be delivered at (or after) the 'target-msc' 287 field. Otherwise, the event delivery will occur after the next 288 field where msc % 'divisor' == 'remainder'. 289 290 If 'window' is destroyed before the event is delivered, then 291 the event delivery will not be completed. 292 293┌─── 294 PresentSelectInput 295 event-id: PRESENTEVENTID 296 window: WINDOW 297 eventMask: SETofPRESENTEVENT 298└─── 299 Errors: Window, Value, Match, IDchoice, Access 300 301 Selects the set of Present events to be delivered for the 302 specified window and event context. PresentSelectInput can 303 create, modify, or delete event contexts. An event context is 304 associated with a specific window; using an existing event 305 context with a different window generates a Match error. 306 307 If eventContext specifies an existing event context, then if 308 eventMask is empty, PresentSelectInput deletes the specified 309 context, otherwise the specified event context is changed to 310 select a different set of events. 311 312 If eventContext is an unused XID, then if eventMask is empty 313 no operation is performed. Otherwise, a new event context is 314 created selecting the specified events. 315 316┌─── 317 PresentQueryCapabilities 318 target: CRTC or WINDOW 319 ▶ 320 capabilities: SETofPRESENTCAPABILITY 321└─── 322 Errors: Window, CRTC 323 324 Returns the supported capabilities for the target CRTC. If 325 'target' is a CRTC, then it is used as the target CRTC. If 326 'target' is a WINDOW, then the target CRTC is selected by the 327 X server from among the CRTCs on the screen specified by the window. 328 329 PresentCapabilityAsyncMayTear means that the target device may be 330 able to flip the scanout buffer mid-frame instead of waiting for 331 a vertical blank interval. The precise latency between the flip 332 request and the actual scanout transition is not defined by this 333 specification, but is intended to be no more than a few 334 scanlines. 335 336 If PresentCapabilityAsyncMayTear is not supported, 337 PresentCapabilityAsync means the same as 338 PresentCapabilityAsyncMayTear described above. 339 340 If PresentCapabilityAsyncMayTear is supported, 341 PresentCapabilityAsync means that even if there is already a flip 342 pending in the target device, it may be possible to replace that 343 flip before the next vertical blank interval. The scanout buffer 344 does not change mid-frame though, i.e. there is no tearing. 345 346 PresentCapabilityFence means that the target device can take 347 advantage of SyncFences in the Present operations to improve 348 GPU throughput. The driver must operate correctly in the 349 absence of fences, but may have reduced performance. Using 350 fences for drivers not advertising this capability should have 351 no performance impact. 352 353 PresentCapabilityUST means that the target device can scanout 354 the image at an arbitrary UST time value, and is not driven by 355 a periodic scanout timer. Applications specifying UST times 356 for PresentPixmap can expect that their image will appear to 357 the user within a short amount of time from that specified in 358 the request. The precise accuracy of the scanout time is not 359 defined by the extension, but is expected to be on the order 360 of milliseconds or less. 361 362 3637.1 Requests proposed for a later Present extension version 364 365 These are not part of the standard and represent future plans 366 for the Present extension. 367 368┌─── 369 PresentSelectInput 370 ... 371└─── 372 ... 373 374 Specifying PresentSubredirectNotify Mask causes PresentPixmap 375 requests on any child of 'window' from other clients to 376 generate PresentRedirectNotify events to 'window' instead of 377 actually performing the operation. However, only one client at 378 a time can select for PresentRedirect on a window. An attempt 379 to violate this restriction results in an Access error. 380 381 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 382 3838. Extension Events 384 385┌─── 386 PresentConfigureNotify 387 type: CARD8 XGE event type (35) 388 extension: CARD8 Present extension request number 389 sequence-number: CARD16 390 length: CARD32 2 391 evtype: CARD16 Present_ConfigureNotify 392 eventID: PRESENTEVENTID 393 window: WINDOW 394 x: INT16 395 y: INT16 396 width: CARD16 397 height: CARD16 398 off_x: INT16 399 off_y: INT16 400 pixmap_width: CARD16 401 pixmap_height: CARD16 402 pixmap_flags: CARD32 403└─── 404 405 PresentConfigureNotify events are sent when the window 406 configuration changes if PresentSelectInput has requested 407 it. PresentConfigureNotify events are XGE events and so do not 408 have a unique event type. 409 410 'x' and 'y' are the parent-relative location of 'window'. 411 412┌─── 413 PresentCompleteNotify 414 type: CARD8 XGE event type (35) 415 extension: CARD8 Present extension request number 416 sequence-number: CARD16 417 length: CARD32 2 418 evtype: PRESENTEVENTTYPE PresentCompleteNotify 419 eventID: PRESENTEVENTID 420 window: WINDOW 421 kind: PRESENTCOMPLETEKIND 422 mode: PRESENTCOMPLETEMODE 423 serial: CARD32 424 ust: CARD64 425 msc: CARD64 426└─── 427 428 CompleteNotify events are delivered when a PresentPixmap or 429 PresentNotifyMSC operation has completed. 430 431 'kind' is PresentCompleteKindPixmap when generated by a 432 PresentPixmap operation completion or 433 PresentCompleteKindNotifyMsc when generated by a 434 PresentNotifyMSC operation completion. 435 436 'mode' is PresentCompleteModeCopy when the source pixmap 437 contents are taken from the pixmap and the pixmap is idle 438 immediately after the presentation completes. 'mode' is 439 PresentCompleteModeSuboptimalCopy when the source pixmap 440 contents are copied but it would be possible to flip the 441 pixmap if the buffer format/modifier was different (options 442 given to PresentPixmap must contain PresentOptionSuboptimal). 443 'mode' is PresentCompleteModeFlip when the pixmap remains in-use 444 even after the presentation completes. It will become idle no 445 later than when the next PresentPixmap operation targeting the 446 same window by any client completes. If the presentation 447 operation was skipped because some later operation made it 448 irrelevant, then 'mode' will be PresentCompleteModeSkip. 449 450 'serial' is the value provided in the generating PresentPixmap 451 request. 452 453 'msc' and 'ust' indicate the frame count and system time when 454 the presentation actually occurred. 455 456┌─── 457 PresentIdleNotify 458 type: CARD8 XGE event type (35) 459 extension: CARD8 Present extension request number 460 sequence-number: CARD16 461 length: CARD32 0 462 evtype: PRESENTEVENTTYPE PresentIdleNotify 463 eventID: PRESENTEVENTID 464 window: WINDOW 465 serial: CARD32 466 pixmap: PIXMAP 467 idle-fence: FENCE 468└─── 469 470 IdleNotify events are delivered when a pixmap used in a 471 PresentPixmap operation may be re-used by the client. 472 473 'window' is the window from the PresentPixmap to which this 474 event is delivered. 475 476 'serial' is the value provided in the associated PresentPixmap 477 request. 478 479 'pixmap' is the pixmap which is ready for re-use. 480 481 'idle-fence' is the fence which was provided in the 482 originating PresentPixmap request and is used to synchronize 483 rendering between the client and the X server's use of the 484 buffer. If not None, then the client must wait for the fence 485 to be signaled before using the pixmap. 486 4878.1. Extension Events proposed for a later Present extension version 488 489┌─── 490 PresentRedirectNotify 491 type: CARD8 XGE event type (35) 492 extension: CARD8 Present extension request number 493 sequence-number: CARD16 494 length: CARD32 17 + 2 n 495 evtype: CARD16 Present_RedirectNotify 496 update-window: BOOL 497 498 eventID: PRESENTEVENTID 499 event-window: WINDOW 500 window: WINDOW 501 pixmap: PIXMAP 502 serial: CARD32 503 504 valid-area: REGION 505 update-area: REGION 506 valid-rect: RECTANGLE 507 update-rect: RECTANGLE 508 x-off, y-off: INT16 509 target-crtc: CRTC 510 wait-fence: FENCE 511 idle-fence: FENCE 512 options: SETofPRESENTOPTION 513 target-msc: CARD64 514 divisor: CARD64 515 remainder: CARD64 516 notifies: LISTofPRESENTNOTIFY 517└─── 518 519 RedirectNotify events are delivered when the client has 520 selected for SubredirectNotify the parent of the target 521 window. All of the values provided to the PresentPixmap 522 request are provided. If the client simply passes these 523 parameters back to the X server, the effect will be as if the 524 original client executed the request. 525 526 If 'update-window' is TRUE, then there are clients who have 527 requested composite automatic redirect on the window and who 528 presumably expect the window buffer to eventually contain 529 the application provided contents. The compositing manager 530 should at least occasionally update the window buffer with 531 suitable contents. The precise update interval is left to the 532 discretion of the client receiving this event. 533 534 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 535 5369. Extension Versioning 537 538 1.0: First published version 539 540 1.2: Added PresentCompleteModeSuboptimalCopy flag and 541 PresentOptionSuboptimal option 542 543 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 544 545 54610. Relationship with other extensions 547 548As an extension designed to support other extensions, there is 549naturally some interactions with other extensions. 550 55110.1 GLX 552 553GLX is both an application interface and an X extension. OpenGL 554applications using the GLX API will use the GLX extension and may use 555the Present extension to display application contents. 556 55710.2 DRI3 558 559The DRI3 extension provides a way to share direct rendered pixel data 560with the X server as X pixmaps. When used in conjunction with Present, 561they provide a complete direct rendering solution for OpenGL or other 562APIs. 563 56410.3 DRI2 565 566Present provides similar functionality to the DRI2SwapBuffers and 567requests, however Present uses X pixmaps to refer to the new window 568contents instead of the DRI2 buffer attachments. 569 570Present and DRI3 are designed in conjunction to replace DRI2. 571 57210.4 XvMC / Xv 573 574It might be nice to be able to use YUV formatted objects as Present 575sources. 576 577 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 578 579Appendix A. Protocol Encoding 580 581Syntactic Conventions 582 583This document uses the same syntactic conventions as the core X 584protocol encoding document. 585 586 587A.1 Common Types 588┌─── 589 PresentEventType 590 0 PresentConfigureNotify 591 1 PresentCompleteNotify 592 2 PresentIdleNotify 593└─── 594 595┌─── 596 PresentEventMask 597 1 PresentConfigureNotifyMask 598 2 PresentCompleteNotifyMask 599 4 PresentIdleNotifyMask 600└─── 601 602┌─── 603 PresentOption 604 1 PresentOptionAsync 605 2 PresentOptionCopy; 606 4 PresentOptionUST 607 8 PresentOptionSuboptimal 608 16 PresentOptionAsyncMayTear 609└─── 610 611┌─── 612 PresentCapability 613 1 PresentCapabilityAsync 614 2 PresentCapabilityFence 615 4 PresentCapabilityUST 616 8 PresentCapabilityAsyncMayTear 617└─── 618 619┌─── 620 PresentCompleteKind 621 0 PresentCompleteKindPixmap 622 1 PresentCompleteKindMSCNotify 623└─── 624 625┌─── 626 PresentCompleteMode 627 0 PresentCompleteModeCopy 628 1 PresentCompleteModeFlip 629 2 PresentCompleteModeSkip 630 3 PresentCompleteModeSuboptimalCopy 631└─── 632 633┌─── 634 PresentNotify 635 4 Window window 636 4 CARD32 serial 637└─── 638 639A.1.1 Common Types proposed for a later Present extension version 640 641┌─── 642 PresentEventType 643 ... 644 3 PresentRedirectNotify 645└─── 646 647┌─── 648 PresentEventMask 649 ... 650 8 PresentSubredirectNotifyMask 651└─── 652 653A.2 Protocol Requests 654 655┌─── 656 PresentQueryVersion 657 1 CARD8 major opcode 658 1 0 Present opcode 659 2 3 length 660 4 CARD32 major version 661 4 CARD32 minor version 662 ▶ 663 1 1 Reply 664 1 unused 665 2 CARD16 sequence number 666 4 0 reply length 667 4 CARD32 major version 668 4 CARD32 minor version 669 16 unused 670└─── 671 672┌─── 673 PresentPixmap 674 1 CARD8 major opcode 675 1 1 Present opcode 676 2 18+2n length 677 4 Window window 678 4 Pixmap pixmap 679 4 CARD32 serial 680 4 Region valid-area 681 4 Region update-area 682 2 INT16 x-off 683 2 INT16 y-off 684 4 CRTC target-crtc 685 4 SyncFence wait-fence 686 4 SyncFence idle-fence 687 4 CARD32 options 688 4 unused 689 8 CARD64 target-msc 690 8 CARD64 divisor 691 8 CARD64 remainder 692 8n LISTofPresentNotify notifies 693└─── 694 695┌─── 696 PresentNotifyMSC 697 1 CARD8 major opcode 698 1 2 Present opcode 699 2 10 length 700 4 Window window 701 4 CARD32 serial 702 4 unused 703 8 CARD64 target-msc 704 8 CARD64 divisor 705 8 CARD64 remainder 706└─── 707 708┌─── 709 PresentSelectInput 710 1 CARD8 major opcode 711 1 3 Present opcode 712 2 4 length 713 4 EventID event-id 714 4 Window window 715 4 SETofPRESENTEVENTMASK event-mask 716└─── 717 718┌─── 719 PresentQueryCapabilities 720 1 CARD8 major opcode 721 1 4 Present opcode 722 2 2 length 723 4 CRTC or Window target 724 ▶ 725 1 1 Reply 726 1 unused 727 2 CARD16 sequence number 728 4 0 reply length 729 4 SETofPRESENTCAPABILITY capabilities 730└─── 731 732A.3 Protocol Events 733 734┌─── 735 PresentConfigureNotify 736 1 35 XGE 737 1 CARD8 Present extension opcode 738 2 CARD16 sequence number 739 4 2 length 740 2 0 PresentConfigureNotify 741 2 unused 742 4 CARD32 event id 743 4 Window window 744 2 INT16 x 745 2 INT16 y 746 2 CARD16 width 747 2 CARD16 height 748 2 INT16 off x 749 2 INT16 off y 750 751 2 CARD16 pixmap width 752 2 CARD16 pixmap height 753 4 CARD32 pixmap flags 754└─── 755 756┌─── 757 PresentCompleteNotify 758 1 35 XGE 759 1 CARD8 Present extension opcode 760 2 CARD16 sequence number 761 4 2 length 762 2 1 PresentCompleteNotify 763 1 CARD8 kind 764 1 CARD8 mode 765 4 CARD32 event id 766 4 Window window 767 4 CARD32 serial 768 8 CARD64 ust 769 770 8 CARD64 msc 771└─── 772 773┌─── 774 PresentIdleNotify 775 1 35 XGE 776 1 CARD8 Present extension opcode 777 2 CARD16 sequence number 778 4 0 length 779 2 2 PresentIdleNotify 780 2 unused 781 4 CARD32 event id 782 4 Window window 783 4 CARD32 serial 784 4 Pixmap pixmap 785 4 SyncFence idle-fence 786└─── 787 788A.3.1 Protocol Events proposed for later Present extension version 789 790┌─── 791 PresentRedirectNotify 792 1 35 XGE 793 1 CARD8 Present extension opcode 794 2 CARD16 sequence number 795 4 18+2n length 796 2 3 PresentRedirectNotify 797 1 BOOL update-window 798 1 unused 799 4 CARD32 event id 800 4 Window event-window 801 4 Window window 802 4 Pixmap pixmap 803 4 CARD32 serial 804 805 4 Region valid-area 806 4 Region update-area 807 8 Rectangle valid-rect 808 8 Rectangle update-rect 809 2 INT16 x-off 810 2 INT16 y-off 811 4 CRTC target-crtc 812 4 SyncFence wait-fence 813 4 SyncFence idle-fence 814 4 CARD32 options 815 4 unused 816 8 CARD64 target-msc 817 8 CARD64 divisor 818 8 CARD64 remainder 819 8n LISTofPRESENTNOTIFY notifies 820└─── 821 822A.4 Protocol Errors 823 824The Present extension defines no errors. 825 826 ❄ ❄ ❄ ❄ ❄ ❄ ❄ 827