blob: 0bc29c803a4abf54b32fe956231098908f8dff06 [file] [log] [blame]
Name
EXT_swap_control_tear
Name Strings
GLX_EXT_swap_control_tear
Contributors
Brian Nguyen, NVIDIA, brnguyen at nvidia.com
Contact
Brian Nguyen, NVIDIA, brnguyen at nvidia.com
Status
Complete.
Version
Version 1 (November 4, 2011)
Number
414
Dependencies
This specification is written against the GLX 1.4 specification, but
only GLX 1.1 or greater with the ARB_get_proc_address extension is
required, for glXQueryExtensionString and glXGetProcAddressARB
respectively.
GLX_EXT_swap_control is required.
Based on WGL_EXT_swap_control_tear version 1.
This extension affects GLX_NV_swap_group.
Overview
This extension extends the existing GLX_EXT_swap_control extension by
allowing a negative <interval> parameter to glXSwapIntervalEXT. The
negative <interval> allows late swaps to occur without synchronization
to the video frame. This reduces the visual stutter on late frames and
reduces the stall on subsequent frames.
IP Status
There are no known IP issues.
Issues
This extension is incompatible with GLX_NV_swap_group. If a drawable is
currently part of a swap group, late unsynchronized swaps will implicitly be
disabled for that drawable.
New Procedures and Functions
None
New Tokens
GLX_LATE_SWAPS_TEAR_EXT 0x20F3
Additions to Chapter 2 of the OpenGL 1.2.1 Specification (OpenGL
Operation)
None.
Additions to Chapter 3 of the OpenGL 1.2.1 Specification (Rasterization)
None.
Additions to Chapter 4 of the OpenGL 1.2.1 Specification (Per-Fragment
Operations and the Frame Buffer)
None.
Additions to Chapter 5 of the OpenGL 1.2.1 Specification (Special
Functions)
None.
Additions to Chapter 6 of the OpenGL 1.2.1 Specification (State and
State Requests)
None.
Additions to the GLX 1.4 Specification
In Section 3.3.10 of the GLX specification (Double
Buffering), after the following paragraph:
"If <interval> is set to a value of 0, buffer swaps are not
synchronized to a video frame. The <interval> value is silently
clamped to the maximum implementation-dependent value supported
before being stored."
Add the following paragraph:
"If <interval> is negative, the minimum number of video frames between
buffer swaps is the absolute value of <interval>. In this case, if
abs(<interval>) video frames have already passed from the previous swap
when the swap is ready to be performed, the swap will occur without
synchronization to a video frame. When an unsynchronized swap happens,
the missed frame will count towards the minimum number of video frames
for the next swap."
In Section 3.3.10 of the GLX specification (Double
Buffering), modify the paragraph beginning:
"The current swap interval and implementation-dependent max swap
interval for a particular drawable..."
To read:
"The current swap interval and implementation-dependent max swap
interval for a particular drawable can be obtained by calling
glXQueryDrawable with the attributes GLX_SWAP_INTERVAL_EXT and
GLX_MAX_SWAP_INTERVAL_EXT respectively. The application can also
determine whether a particular drawable allows late unsynchronized
swaps to occur by calling glXQueryDrawable with the attribute
GLX_LATE_SWAPS_TEAR_EXT. If late swaps are enabled, <value> will
be set to 1; otherwise, it will be set to 0. The value returned by
glXQueryDrawable is undefined if the drawable is not a GLXWindow
and these attributes are given."
Errors
Remove the following error from GLX_EXT_swap_control:
"glXSwapIntervalEXT generates BadValue if parameter <interval> is
less than zero."
Usage Examples
Example 1: Set swap interval for the current drawable
Display *dpy = glXGetCurrentDisplay();
GLXDrawable drawable = glXGetCurrentDrawable();
const int interval = -1;
glXSwapIntervalEXT(dpy, drawable, interval);
Version History
1. 04 Nov 2011 - BrianN
-Initial version