NAME
    gp4gp - OpenGL geometry profile for G8x (GeForce 8xxx Series, G8x-based
    Quadro FX, etc.)

SYNPOSIS
      gp4gp

DESCRIPTION
    This OpenGL profile corresponds to the per-primitive functionality
    introduced by the GeForce 8800 and other G8x-based NVIDIA GPUs.

    The compiler output for this profile conforms to the assembly format
    defined by NV_gpu_program4 and ARB_vertex_program.

    Note that the NV_gpu_program4 extension has its vertex domain-specific
    aspects documented in the NV_geometry_program4 specification.

    Data-dependent loops and branching *are* allowed.

    Relative indexing of uniform arrays *is* supported.

    Parameter buffer objects (also known as "constant buffers" in DirectX 10
    or "bindable uniform" in GLSL's EXT_bindable_uniform extension) provide
    a way to source uniform values from OpenGL buffer objects.

    Texture accesses include support for texture arrays (see the
    EXT_texture_array OpenGL extension for more details) and texture buffer
    objects (see the EXT_texture_buffer_object extension for details).

3D API DEPENDENCIES
    Requires OpenGL support for the NV_gpu_program4 extension. This
    extension was introduced by the GeForce 6800 and other G8x-based GPUs.

  OpenGL Extension Specifications

    Programmability:

     http://www.opengl.org/registry/specs/NV/gpu_program4.txt 
     http://www.opengl.org/registry/specs/NV/geometry_program4.txt 

    New texture samplers:

     http://www.opengl.org/registry/specs/EXT/texture_array.txt 
     http://www.opengl.org/registry/specs/EXT/texture_buffer_object.txt 

PROFILE OPTIONS
  Common GP4 Options

    fastimul
        Assume integer multiply inputs have at most 24 significant bits.
        Example: "-po fastimul"

  Geometry Domain-specific GP4 Options

        Normally the options below to specify primitive input and output
        type are better specified as a profile modifier preceding the Cg
        entry function.

    Vertices=*val*
        Maximum number of output vertices. Emitting more than this number of
        vertices results in the extra vertices being discarded. Example "-po
        Vertices=3"

        On NVIDIA GPUs, the throughput for geometry shaders is inverse
        proporational to the maximum number of vertices output times the
        number of scalar components per vertex. For this reason, keep the
        maximum number of output vertices as small as possible for best
        performance.

    POINT
        The entry function inputs point primitives. Example: "-po POINT"

        If an output primitive is not also specified with a command line
        profile option, POINT_OUT is assumed.

        Normally this is option is better specified as a profile modifier
        preceding the Cg entry function.

    LINE
        The entry function inputs line primitives. Example: "-po LINE"

        If an output primitive is not also specified with a command line
        profile option, LINE_OUT is assumed.

        Normally this is option is better specified as a profile modifier
        preceding the Cg entry function.

    LINE_ADJ
        The entry function inputs line adjacency primitives. Example: "-po
        LINE_ADJ"

        If an output primitive is not also specified with a command line
        profile option, LINE_OUT is assumed.

        Normally this is option is better specified as a profile modifier
        preceding the Cg entry function.

    TRIANGLE
        The entry function inputs triangle primitives. Example: "-po
        TRIANGLE"

        If an output primitive is not also specified with a command line
        profile option, TRIANGLE_OUT is assumed.

        Normally this is option is better specified as a profile modifier
        preceding the Cg entry function.

    TRIANGLE_ADJ
        The entry function inputs triangle adjacency primitives. Example:
        "-po TRIANGLE_ADJ"

        If an output primitive is not also specified with a command line
        profile option, TRIANGLE_OUT is assumed.

    POINT_OUT
        The entry function outputs point primitives. Example: "-po
        POINT_OUT"

        Normally this is option is better specified as a profile modifier
        preceding the Cg entry function.

    LINE_OUT
        The entry function outputs line primitives. Example: "-po LINE_OUT"

        Normally this is option is better specified as a profile modifier
        preceding the Cg entry function.

    TRIANGLE_OUT
        The entry function outputs triangle primitives. Example: "-po
        TRIANGLE_OUT"

        Normally this is option is better specified as a profile modifier
        preceding the Cg entry function.

DATA TYPES
    *to-be-written*

SEMANTICS
  VARYING INPUT SEMANTICS

    *to-be-written*

  UNIFORM INPUT SEMANTICS

    *to-be-written*

  OUTPUT SEMANTICS

    *to-be-written*

STANDARD LIBRARY ISSUES
    *to-be-written*

