blob: af01b064f02460b088f585b3fb2ff8bf29a1261c [file] [log] [blame]
Name
INTEL_swap_event
Name Strings
GLX_INTEL_swap_event
Contact
Jesse Barnes, Intel Corporation (jesse.barnes 'at' intel.com)
Contributors
Kristian Høgsberg (kristian.h.kristensen 'at' intel.com)
Ian Romanick (ian.d.romanick 'at' intel.com)
Status
Proof of concept implementation available for the Intel stack.
Version
Last Modified Date: May 3, 2011
Number
384
Dependencies
GLX 1.3 is required.
OML_sync_control affects the definition of this extension.
Overview
This extension adds a new event type, GLX_BUFFER_SWAP_COMPLETE_INTEL,
which is sent to the client via the X11 event stream and
selected/consumed by the normal GLX event mask mechanisms, to indicate
when a previously queued swap has completed.
New Procedures and Functions
None
New Tokens
Accepted by the <mask> parameter of glXSelectEvent and returned
in the <mask> parameter of glXGetSelectedEvent:
GLX_BUFFER_SWAP_COMPLETE_INTEL_MASK 0x04000000
Returned in the <event_type> field of a "swap complete" event:
GLX_EXCHANGE_COMPLETE_INTEL 0x8180
GLX_COPY_COMPLETE_INTEL 0x8181
GLX_FLIP_COMPLETE_INTEL 0x8182
Additions to Chapter 2 of the 1.4 Specification (OpenGL Operation)
None
Additions to Chapter 3 of the 1.4 Specification (Rasterization)
None
Additions to Chapter 4 of the 1.4 Specification (Per-Fragment Operations
and the Frame buffer)
None
Additions to Chapter 5 of the 1.4 Specification (Special Functions)
None
Additions to Chapter 6 of the 1.4 Specification (State and State Requests)
None
Additions to the GLX Specification
[Add to section 3.3.8, Events]
A client can ask to receive swap complete GLX events on a window.
A swap buffer event has the following format:
typdef struct {
int event_type; /* GLX_EXCHANGE_COMPLETE_INTEL,
GLX_COPY_COMPLETE, GLX_FLIP_COMPLETE */
unsigned long serial; /* # of last request processed by server */
Bool send_event; /* event was generated by a SendEvent request */
Display *display; /* display the event was read from */
GLXDrawable drawable; /* i.d. of Drawable */
CARD64 ust; /* UST from when the swap occurred */
CARD64 msc; /* MSC from when the swap occurred */
CARD64 sbc; /* SBC from when the swap occurred */
} GLXBufferSwapEventINTEL;
When an event is received, the caller can determine what kind of swap
occurred by checking the event_type field. Simple pixmap exchanges are
reported with the GLX_EXCHANGE_COMPLETE_INTEL event type. If the swap
caused was performed with a blit from back to front, the event type will
be GLX_COPY_COMPLETE_INTEL. Finally, if the implementation was able to
perform a full screen page flip, GLX_FLIP_COMPLETE_INTEL is returned.
The mask field indicates which of the buffers in the drawable were swapped.
The MSC, SBC and UST are the OML triple indicating information about
when the swap occurred.
GLX Protocol
One new event is added:
BEC is the base event code for the extension, as returned by
QueryExtension.
GLX_BUFFER_SWAP_COMPLETE_INTEL_INTEL
1 BEC+15 code
1 unused
2 CARD16 sequence number
2 CARD16 event_type
0x8180 GLX_EXCHANGE_COMPLETE_INTEL
0x8181 GLX_COPY_COMPLETE_INTEL
0x8182 GLX_FLIP_COMPLETE_INTEL
2 CARD16 unused
4 GLX_DRAWABLE drawable
8 CARD64 UST
8 CARD64 MSC
4 CARD32 SBC
Errors
None
New State
None
New Implementation Dependent State
None
Issues
1. Should the event return the frame and swap count for the last swap?
RESOLVED: YES. Also return a timestamp from when the swap occurred.
2. What is the difference between GLX_EXCHANGE_COMPLETE_INTEL,
GLX_COPY_COMPLETE_INTEL and GLX_FLIP_COMPLETE_INTEL from an app
perspective?
RESOLVED: Semantically, none. The fbconfig should describe whether
back buffer contents is preserved or not. These completion types are
purely informational and can be used in debugging new event based
code.
Revision History
Version 1, 2009/11/10 - Initial spec
Version 2, 2009/11/16 - Fix reply size (should be 32 bytes to match X
replies), move issue list to end, change BLIT to COPY, return enum values
Version 3, 2010/1/6 - Fix reply to include padding to 32 bytes. Correct
replies to include _INTEL suffix to match extension name. Fix 'code'
portion of reply to be BEC+15. Remove open issue regarding mask and types.
Leave sbc in GLXBufferSwapEventINTEL as 64 bits to make interoperability
easier.
Version 4, 2010/1/11 - Number issues. Added issue #2 from James
Jones (Nvidia).
Version 5, 2010/1/14 - Word-wrap to 80-colums. Fix enum values and
mask value. (idr)
Version 6, 2010/1/20 - Update extension number and publish to the
Registry.
Version 7, 2011/5/3 - Update GLX protocol with correct enums and correct
location of padding. GLX protocol requires that CARD32 (and larger) be
4-byte aligned. Previously the drawable (and all later fields) were only
2-byte aligned. Most compilers would generally add padding in the correct
place anyway. (idr)