diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/MESA_swap_control.spec | 117 | ||||
| -rw-r--r-- | docs/MESA_swap_frame_usage.spec | 196 | 
2 files changed, 313 insertions, 0 deletions
diff --git a/docs/MESA_swap_control.spec b/docs/MESA_swap_control.spec new file mode 100644 index 0000000000..e05d515496 --- /dev/null +++ b/docs/MESA_swap_control.spec @@ -0,0 +1,117 @@ +Name + +    MESA_swap_control + +Name Strings + +    GLX_MESA_swap_control + +Contact + +    Ian Romanick, IBM  (idr 'at' us.ibm.com) + +Status + +    Deployed in DRI drivers post-XFree86 4.3. + +Version + +    Date: 3/17/2003   Revision: 1.0 + +Number + +    ??? + +Dependencies + +    None + +    Based on GLX_SGI_swap_control version 1.9 and WGL_EXT_swap_control +    version 1.5. + +Overview + +    This extension allows an application to specify a minimum periodicity +    of color buffer swaps, measured in video frame periods. + +New Procedures and Functions + +    int glXSwapIntervalMESA(int interval) +    int glXGetSwapIntervalMESA(void) + +New Tokens + +    None + +Additions to Chapter 2 of the 1.4 GL Specification (OpenGL Operation) + +    None + +Additions to Chapter 3 of the 1.4 GL Specification (Rasterization) + +    None + +Additions to Chapter 4 of the 1.4 GL Specification (Per-Fragment Operations +and the Framebuffer) + +    None + +Additions to Chapter 5 of the 1.4 GL Specification (Special Functions) + +    None + +Additions to Chapter 6 of the 1.4 GL Specification (State and State Requests) + +    None + +Additions to the GLX 1.3 Specification + +    [Add the following to Section 3.3.10 of the GLX Specification (Double +     Buffering)] + +    glXSwapIntervalMESA specifies the minimum number of video frame periods +    per buffer swap.  (e.g. a value of two means that the color buffers +    will be swapped at most every other video frame.)  A return value +    of zero indicates success; otherwise an error occurred.  The interval +    takes effect when glXSwapBuffers is first called subsequent to the +    glXSwapIntervalMESA call. + +    A video frame period is the time required by the monitor to display a  +    full frame of video data.  In the case of an interlaced monitor, +    this is typically the time required to display both the even and odd  +    fields of a frame of video data. + +    If <interval> is set to a value of 0, buffer swaps are not synchron- +    ized to a video frame.  The <interval> value is silently clamped to +    the maximum implementation-dependent value supported before being +    stored. + +    The swap interval is not part of the render context state.  It cannot +    be pushed or popped.  The current swap interval for the window +    associated with the current context can be obtained by calling +    glXGetSwapIntervalMESA.  The default swap interval is 1. + +    On XFree86, setting the environment variable LIBGL_NO_VSYNC sets the +    swap interval to 0. + +Errors + +    glXSwapIntervalMESA returns GLX_BAD_VALUE if parameter <interval> is +    less than zero. + +    glXSwapIntervalMESA returns GLX_BAD_CONTEXT if there is no current +    GLXContext. + +GLX Protocol + +    None.  This extension only extends to direct rendering contexts. + +New State + +    Get Value		Get Command	Type	    Initial Value +    ---------		-----------	----	    ------------- +    [swap interval]	GetSwapInterval	Z+	    1 + +New Implementation Dependent State + +    None diff --git a/docs/MESA_swap_frame_usage.spec b/docs/MESA_swap_frame_usage.spec new file mode 100644 index 0000000000..028a6b8f7e --- /dev/null +++ b/docs/MESA_swap_frame_usage.spec @@ -0,0 +1,196 @@ +Name + +    MESA_swap_frame_usage + +Name Strings + +    GLX_MESA_swap_frame_usage + +Contact + +    Ian Romanick, IBM  (idr 'at' us.ibm.com) + +Status + +    Deployed in DRI drivers post-XFree86 4.3. + +Version + +    Date: 3/17/2003   Revision: 1.0 + +Number + +    ??? + +Dependencies + +    GLX_SGI_swap_control affects the definition of this extension. +    GLX_MESA_swap_control affects the definition of this extension. +    GLX_OML_sync_control affects the definition of this extension. + +    Based on WGL_I3D_swap_frame_usage version 1.3. + +Overview + +    This extension allows an application to deterine what portion of the +    swap period has elapsed since the last swap operation completed.  The +    "usage" value is a floating point value on the range [0,max] which is +    calculated as follows: + +                              td +                   percent = ---- +                              tf + +    where td is the time measured from the last completed buffer swap (or +    call to enable the statistic) to when the next buffer swap completes, tf +    is the entire time for a frame which may be multiple screen refreshes +    depending on the swap interval as set by the GLX_SGI_swap_control or +    GLX_OML_sync_control extensions.  + +    The value, percent, indicates the amount of time spent between the +    completion of the two swaps.  If the value is in the range [0,1], the +    buffer swap occurred within the time period required to maintain a +    constant frame rate.  If the value is in the range (1,max], a constant +    frame rate was not achieved.  The value indicates the number of frames +    required to draw. + +    This definition of "percent" differs slightly from +    WGL_I3D_swap_frame_usage.  In WGL_I3D_swap_frame_usage, the measurement +    is taken from the completion of one swap to the issuance of the next. +    This representation may not be as useful as measuring between +    completions, as a significant amount of time may pass between the +    issuance of a swap and the swap actually occuring. + +    There is also a mechanism to determine whether a frame swap was +    missed. + +New Procedures and Functions + +    int glXGetFrameUsageMESA(Display *dpy, +                             GLXDrawable drawable, +    	                     float *usage) + +    int glXBeginFrameTrackingMESA(Display *dpy, +                                  GLXDrawable drawable) + +    int glXEndFrameTrackingMESA(Display *dpy, +                                GLXDrawable drawable) + +    int glXQueryFrameTrackingMESA(Display *dpy, +                                  GLXDrawable drawable, +				  int64_t *swapCount, +                                  int64_t *missedFrames, +                                  float *lastMissedUsage) + +New Tokens + +    None + +Additions to Chapter 2 of the 1.4 GL Specification (OpenGL Operation) + +    None + +Additions to Chapter 3 of the 1.4 GL Specification (Rasterization) + +    None + +Additions to Chapter 4 of the 1.4 GL Specification (Per-Fragment Operations +and the Framebuffer) + +    None + +Additions to Chapter 5 of the 1.4 GL Specification (Special Functions) + +    None + +Additions to Chapter 6 of the 1.4 GL Specification (State and State Requests) + +    None + +Additions to the GLX 1.3 Specification + +    The frame usage is measured as the percentage of the swap period elapsed +    between two buffer-swap operations being commited.  In unextened GLX the +    swap period is the vertical refresh time.  If SGI_swap_control or +    MESA_swap_control are supported, the swap period is the vertical refresh +    time multiplied by the swap interval (or one if the swap interval is set +    to zero). +     +    If OML_sync_control is supported, the swap period is the vertical +    refresh time multiplied by the divisor parameter to +    glXSwapBuffersMscOML.  The frame usage in this case is less than 1.0 if +    the swap is commited before target_msc, and is greater than or equal to +    1.0 otherwise.  The actual usage value is based on the divisor and is +    never less than 0.0. + +       int glXBeginFrameTrackingMESA(Display *dpy, +                                     GLXDrawable drawable, +				     float *usage) + +    glXGetFrameUsageMESA returns a floating-point value in <usage> +    that represents the current swap usage, as defined above. + +    Missed frame swaps can be tracked by calling the following function: + +       int glXBeginFrameTrackingMESA(Display *dpy, +                                     GLXDrawable drawable) + +    glXBeginFrameTrackingMESA resets a "missed frame" count and +    synchronizes with the next frame vertical sync before it returns. +    If a swap is missed based in the rate control specified by the +    <interval> set by glXSwapIntervalSGI or the default swap of once +    per frame, the missed frame count is incremented. + +    The current missed frame count and total number of swaps since +    the last call to glXBeginFrameTrackingMESA can be obtained by +    callling the following function: + +       int glXQueryFrameTrackingMESA(Display *dpy, +                                     GLXDrawable drawable, +				     int64_t *swapCount, +                                     int64_t *missedFrames, +                                     float *lastMissedUsage) + +    The location pointed to by <swapCount> will be updated with the +    number of swaps that have been commited.  This value may not match the +    number of swaps that have been requested since swaps may be +    queued by the implementation.  This function can be called at any +    time and does not synchronize to vertical blank. + +    The location pointed to by <missedFrames> will contain the number +    swaps that missed the specified frame.  The frame usage for the +    last missed frame is returned in the location pointed to by +    <lastMissedUsage>. + +    Frame tracking is disabled by calling the function + +       int glXEndFrameTrackingMESA(Display *dpy, +                                   GLXDrawable drawable) + +    This function will not return until all swaps have occurred.  The +    application can call glXQueryFrameTrackingMESA for a final swap and +    missed frame count. + +    If these functions are succesful, zero is returned.  If the context +    associated with dpy and drawable is not a direct context, +    GLX_BAD_CONTEXT is returned. + +Errors + +    If the function succeeds, zero is returned.  If the function +    fails, one of the following error codes is returned: + +       GLX_BAD_CONTEXT         The current rendering context is not a direct +       			       context. + +GLX Protocol + +    None.  This extension only extends to direct rendering contexts. + +New State + +    None + +New Implementation Dependent State + +    None  | 
