Name

    SGI_video_sync

Name Strings

    GLX_SGI_video_sync

Version

    $Date: 1995/09/15 01:22:58 $ $Revision: 1.8 $

Number

    41

Dependencies

    None

Overview

    This extension provides a means for synchronization with the video 
    frame rate of a monitor.  (In the case of an interlaced monitor, 
    this is typically the rate of displaying both the even and odd 
    fields of a frame.) The kernel maintains a video sync counter for 
    each physical hardware pipe in a system; the counter is incremented 
    upon the completion of the display of each full frame of video data. An
    OpenGL context always corresponds to a pipe.  When an OpenGL process
    has a current context, it can put itself to sleep until the counter of
    that pipe reaches a desired value.  The process can also query the
    value of the counter.

    The counter runs as long as the graphics subsystem is running; it is
    initialized via the /usr/gfx/gfxinit command.  However, a process can
    query or sleep on the counter only when a direct context is current.
    Each of the procedures described below will fail and return an error
    code if the current context is not a direct one.

    The counter is an unsigned 32-bit integer.

Issues

    Should glXWaitVideoSyncSGI return GLX_BAD_VALUE if <remainder> is
    greater than or equal to <divisor>? (No.)

New Procedures and Functions

    int glXGetVideoSyncSGI(uint *count);

    int glXWaitVideoSyncSGI(int divisor, 
			    int remainder, 
			    unsigned int *count);

New Tokens

    None

Additions to Chapter 2 of the 1.0 Specification (OpenGL Operation)

    None

Additions to Chapter 3 of the 1.0 Specification (Rasterization)

    None

Additions to Chapter 4 of the 1.0 Specification (Per-Fragment Operations and
the Framebuffer)

    None

Additions to Chapter 5 of the 1.0 Specification (Special Functions)

    None

Additions to Chapter 6 of the 1.0 Specification (State and State Requests)

    None

Additions to the GLX Specification
	
    [Add to Section 3.2.5 of the 1.0 GLX Specification (Synchronization
     Primititives)]

    In addition to its current functions, /usr/gfx/gfxinit also initializes
    the video sync counter to zero.  After that time the video sync counter
    is incremented by one at the completion of the display of each full
    frame of video data.  The counter value wraps to zero after it reaches
    its maximum value.  The single video sync counter is shared by all
    GLXContexts.

    glXGetVideoSyncSGI returns the value of the video sync counter in
    <count>.  Zero is returned if the call is successful.

    glXWaitVideoSyncSGI puts the calling process to sleep until

	(C mod D) = R

    where C is the video sync counter, D is specified by the <divisor>
    parameter of glXWaitVideoSyncSGI, and R is specified by the <remainder>
    parameter of glXWaitVideoSyncSGI.  glXWaitVideoSyncSGI returns the
    current video sync counter value in <count>.  Zero is returned by
    glXWaitVideoSyncSGI if it is successful.

    glXWaitVideoSyncSGI is supported only by direct GLXContexts.

Errors

    glXGetVideoSyncSGI returns GLX_BAD_CONTEXT if there is no current
    GLXContext.

    glXWaitVideoSyncSGI returns GLX_BAD_CONTEXT if the current context is
    not direct, or if there is no current context.

    glXWaitVideoSyncSGI returns GLX_BAD_VALUE if parameter <divisor> is less
    than or equal to zero, or if parameter <remainder> is less than zero.

New State

    Get Value			Get Command		Type	Initial Value
    ---------			-----------		----	-------------
    [video sync counter]	glXGetVideoSyncSGI	Z+	unknown

New Implementation Dependent State

    None
