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

SYNPOSIS
      gp4fp

DESCRIPTION
    This OpenGL profile corresponds to the per-fragment 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_fragment_program.

    Note that the NV_gpu_program4 extension has its vertex domain-specific
    aspects documented in the NV_program_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/fragment_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 

    Draw buffers:

      http://www.opengl.org/registry/specs/ARB/draw_buffers.txt
      http://www.opengl.org/registry/specs/ATI/draw_buffers.txt

PROFILE OPTIONS
  Common GP4 Options

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

  Fragment Domain-specific GP4 Options

    ARB_draw_buffers=*val*
    ATI_draw_buffers=*val*
        Indicates that the ARB_draw_buffers or ATI_draw_buffers OpenGL
        extension is supported and what the extension's implementation
        dependent value of GL_MAX_DRAW_BUFFERS_ARB or
        GL_MAX_DRAW_BUFFERS_ATI is.

        When specified, the compiler generates the "OPTION
        ARB_draw_buffers;" or "OPTION ATI_draw_buffers;" in the compiled
        code to enable output to multiple draw buffers. Output to multiple
        draw buffers is done by specifying output parameters with the
        COLOR1, COLOR2, etc. semantics.

        GPUs that support these extensions typically support up to 4
        buffers.

        These options are useful in the rare situation you want to control
        the specific OPTION name used. For example, Apple drivers support
        the ARB_draw_buffers extension but not the ATI_draw_buffers
        extension.

        The CgGL runtime routine the cgGLSetOptimalOptions manpage will
        automatically add the appropriate option based on querying the
        current OpenGL context's extension support (prefering the ARB
        extension) and specify the proper limit.

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*

