Name

    NV_primitive_restart

Name Strings

    GL_NV_primitive_restart

Contact

    Matt Craighead, NVIDIA Corporation (mcraighead 'at' nvidia.com)

Notice

    Copyright NVIDIA Corporation, 2002.

IP Status

    NVIDIA Proprietary.

Status

    Implemented in CineFX (NV30) Emulation driver, August 2002.
    Shipping in Release 40 NVIDIA driver for CineFX hardware, January 2003.

Version

    NVIDIA Date: August 29, 2002 (version 0.1)

Number

    285

Dependencies

    Written based on the wording of the OpenGL 1.3 specification.

Overview

    This extension allows applications to easily and inexpensively
    restart a primitive in its middle.  A "primitive restart" is simply
    the same as an End command, followed by another Begin command with
    the same mode as the original.  The typical expected use of this
    feature is to draw a mesh with many triangle strips, though primitive
    restarts are legal for all primitive types, even for points (where
    they are not useful).

    Although the EXT_multi_draw_arrays extension did reduce the overhead
    of such drawing techniques, they still remain more expensive than one
    would like.

    This extension provides an extremely lightweight primitive restart,
    which is accomplished by allowing the application to choose a special
    index number that signals that a primitive restart should occur,
    rather than a vertex being provoked.  This index can be an arbitrary
    32-bit integer for maximum application convenience.

    In addition, for full orthogonality, a special OpenGL command is
    provided to restart primitives when in immediate mode.  This command
    is not likely to increase performance in any significant fashion, but
    providing it greatly simplifies the specification and implementation
    of display list compilation and indirect rendering.

Issues

    *   What should the default primitive restart index be?

        RESOLVED: Zero.  It's tough to pick another number that is
        meaningful for all three element data types.  In practice, apps
        are likely to set it to 0xFFFF or 0xFFFFFFFF.

    *   Are primitives other than triangle strips supported?

        RESOLVED: Yes.  One example of how this can be useful is for
        rendering a heightfield.  The "standard" way to render a
        heightfield uses a number of triangle strips, one for each row of
        the grid.  Another method, which can produce higher-quality
        meshes, is to render a number of 8-triangle triangle fans.  This
        has the effect of alternating the direction of tessellation, as
        shown in the diagram below.  Primitive restarts enhance the
        performance of both techniques.

        -------------------------        -------------------------
        | /| /| /| /| /| /| /| /|        |\ | /|\ | /|\ | /|\ | /|
        |/ |/ |/ |/ |/ |/ |/ |/ |        | \|/ | \|/ | \|/ | \|/ |
        -------------------------        ---*-----*-----*-----*---
        | /| /| /| /| /| /| /| /|        | /|\ | /|\ | /|\ | /|\ |
        |/ |/ |/ |/ |/ |/ |/ |/ |        |/ | \|/ | \|/ | \|/ | \|
        -------------------------        -------------------------

                Two strips             Four fans (centers marked '*')

    *   How is this feature turned on and off?

        RESOLVED: Via a glEnable/DisableClientState setting.  It is not
        possible to select a restart index that is guaranteed to be
        unused.

    *   Is the immediate mode PrimitiveRestartNV needed?

        RESOLVED: Yes.  It is difficult to make indirect rendering to
        work without it, and it is near impossible to make display lists
        work without it.  It is a very clean way to resolve these issues.

    *   How is indirect rendering handled?

        RESOLVED: Because of PrimitiveRestartNV, it works very easily.
        PrimitiveRestartNV has a wire protocol and therefore it can
        easily be inserted as needed.  The server tracks the current
        Begin mode, relieving the client of this burden.

        Note that in practice, we expect that this feature is essentially
        useless for indirect rendering.

    *   How does this extension interact with NV_element_array and
        NV_vertex_array_range?

        RESOLVED: It doesn't, not even for performance.  It should be
        fast on hardware that supports the feature with or without the
        use of element arrays, with or without vertex array range.

        XXXmjc Is it feasible to guarantee fast performance even in the
        non-VAR, non-CVA, non-DRE case???  Possibly not.

    *   Does this extension affect ArrayElement and DrawArrays, or just
        DrawElements?

        RESOLVED: All of them.  It applies to ArrayElement and to the
        rest as a consequence.  It is likely not useful with any other
        than DrawElements, but nevertheless not prohibited.

    *   In the case of ArrayElement, what happens if the restart index is
        used outside Begin/End?

        RESOLVED: Since this is defined as being equivalent to a call to
        PrimitiveRestartNV, and PrimitiveRestartNV is an
        INVALID_OPERATION when not inside Begin/End, this is just an
        error.

    *   For DrawRangeElements/LockArrays purposes, must the restart index
        lie within the start/end range?

        RESOLVED: No, this would to some extent defeat the point if the
        restart index was, e.g., 0xFFFFFFFF.  I don't believe any spec
        language is required here, since hitting this index does not
        cause a vertex to be dereferenced.

    *   Should this state push/pop?

        RESOLVED: Yes, as vertex array client state.

New Procedures and Functions

    void PrimitiveRestartNV(void);
    void PrimitiveRestartIndexNV(uint index);

New Tokens

    Accepted by the <array> parameter of EnableClientState and
    DisableClientState, by the <cap> parameter of IsEnabled, and by
    the <pname> parameter of GetBooleanv, GetIntegerv, GetFloatv, and
    GetDoublev:

        PRIMITIVE_RESTART_NV                           0x8558

    Accepted by the <pname> parameter of GetBooleanv, GetIntegerv,
    GetFloatv, and GetDoublev:

        PRIMITIVE_RESTART_INDEX_NV                     0x8559

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

    Add a section 2.6.X "Primitive Restarts", immediately after section
    2.6.2 "Polygon Edges" (page 19):

    "2.6.X  Primitive Restarts

    An OpenGL primitive may be restarted with the command

      void PrimitiveRestartNV(void)

    Between the execution of a Begin and its corresponding End, this
    command is equivalent to a call to End, followed by a call to Begin
    where the mode argument is the same mode as that used by the previous
    Begin.  Outside the execution of a Begin and its corresponding End,
    this command generates the error INVALID_OPERATION."


    Add PrimitiveRestartNV to the list of commands that are allowed
    between Begin and End in section 2.6.3 "GL Commands within Begin/End"
    (page 19).


    Add to section 2.8 "Vertex Arrays", after the description of
    ArrayElement (page 24):

    "Primitive restarting is enabled or disabled by calling
    EnableClientState or DisableClientState with parameter
    PRIMITIVE_RESTART_NV.  The command

      void PrimitiveRestartIndexNV(uint index)

    specifies the index of a vertex array element that is treated
    specially when primitive restarting is enabled.  When ArrayElement is
    called between an execution of Begin and the corresponding execution
    of End, if i is equal to PRIMITIVE_RESTART_INDEX_NV, then no vertex
    data is derefererenced, and no current vertex state is modified.
    Instead, it is as if PrimitiveRestartNV had been called."


    Replace the last paragraph of section 2.8 "Vertex Arrays" (page 28)
    with the following:

    "If the number of supported texture units (the value of
    MAX_TEXTURE_UNITS) is k, then the client state required to implement
    vertex arrays consists of 7+k boolean values, 5+k memory pointers,
    5+k integer stride values, 4+k symbolic constants representing array
    types, 3+k integers representing values per element, and an unsigned
    integer representing the restart index.  In the initial state, the
    boolean values are each disabled, the memory pointers are each null,
    the strides are each zero, the array types are each FLOAT, the
    integers representing values per element are each four, and the
    restart index is zero."

Additions to Chapter 3 of the OpenGL 1.3 Specification (Rasterization)

    None.

Additions to Chapter 4 of the OpenGL 1.3 Specification (Per-Fragment
Operations and the Frame Buffer)

    None.

Additions to Chapter 5 of the OpenGL 1.3 Specification (Special Functions)

    Add to the end of Section 5.4 "Display Lists":

    "PrimitiveRestartIndexNV is not compiled into display lists, but is
    executed immediately."

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

    None.

GLX Protocol

    One new GL command is added.

    The following rendering command is sent to the server as part of a
    glXRender request:

        PrimitiveRestartNV
            2           4               rendering command length
            2           ????            rendering command opcode

Errors

    The error INVALID_OPERATION is generated if PrimitiveRestartNV is
    called outside the execution of Begin and the corresponding execution
    of End.

    The error INVALID_OPERATION is generated if PrimitiveRestartIndexNV
    is called between the execution of Begin and the corresponding
    execution of End.

New State

                                                           Initial
   Get Value                       Get Command     Type    Value      Sec    Attrib
   ---------                       -----------     ----    -------    ----   ------------
   PRIMITIVE_RESTART_NV            IsEnabled       B       FALSE      2.8    vertex-array
   PRIMITIVE_RESTART_INDEX_NV      GetIntegerv     Z+      0          2.8    vertex-array

Revision History

    none yet
