vp40 - OpenGL vertex profile for NVIDIA GeForce 6/7 Series, NV4x-based Quadro FX vp40 This OpenGL profile corresponds to the per-vertex functionality introduced by the GeForce 6800 and other NV4x-based NVIDIA GPUs. The compiler output for this profile conforms to the assembly format defined by NV_vertex_program3 and ARB_vertex_program. Data-dependent loops and branching are allowed. Relative indexing of uniform arrays is supported. Texture accesses are supported. However substantial limitations on vertex texturing exist for hardware acceleration by NV4x hardware. NV4x hardware accelerates vertex fetches only for 1-, 3-, and 4-component floating-point textures. NV4x hardware does not accelerated vertex-texturing for cube maps or 3D textures. NV4x does allow non-power-of-two sizes (width and height). Requires OpenGL support for the NV_fragment_program3 extension. These extensions were introduced by the GeForce 6800 and other NV4x-based GPUs.

OpenGL Extension Specifications
http://www.opengl.org/registry/specs/NV/vertex_program3.txt http://www.opengl.org/registry/specs/ARB/vertex_program.txt Non-zero means generates code for position-invariant (with fixed-function) position transformation. Maximum number of temporary registers the implementation supports. Set to the implementaiton-dependent value of "GL_MAX_NATIVE_TEMPORARIES_ARB" for best performance. Maximum number of address registers the implementation supports. Set to the implementaiton-dependent value of "GL_MAX_NATIVE_ADDRESS_REGISTERS_ARB" for best performance. Maximum number of instructions the implementation supports. Set to the implementaiton-dependent value of "GL_MAX_NATIVE_INSTRUCTIONS_ARB" for best performance. Maximum number of local parameters the implementation supports. This profile implements the float data type as IEEE 32-bit single precision. "half" and "double" data types are treated as "float". The "int" data type is supported using floating point operations, which adds extra instructions for proper truncation for divides, modulos and casts from floating point types. Because integer values are simulated with IEEE single-precision floating-point, they are accurate over the range -2^24 to 2^24 but will not overflow like true integers. This profile does not support any operations on the "fixed" or "sampler"* data types, but does provide the minimal partial support that is required for these data types by the core language spec (i.e. it is legal to declare variables using these types, as long as no operations are performed on the variables).

VARYING INPUT SEMANTICS
The set of binding semantics for varying input data to vp40 consists of POSITION, BLENDWEIGHT, NORMAL, COLOR0, COLOR1, TESSFACTOR, PSIZE, BLENDINDICES, and TEXCOORD0-TEXCOORD7. One can also use TANGENT and BINORMAL instead of TEXCOORD6 and TEXCOORD7. Additionally, a set of binding semantics ATTR0-ATTR15 can be used. These binding semantics map to NV_vertex_program3 input attribute parameters. The two sets act as aliases to each other on NVIDIA GPUs excluding Apple Macs. ATI GPUs and NVIDIA Mac GPUs do not alias the conventional vertex attributes with the generic attributes. Binding Semantics Name Corresponding Data POSITION, ATTR0 Input Vertex, Generic Attribute 0 BLENDWEIGHT, ATTR1 Input vertex weight, Generic Attribute 1 NORMAL, ATTR2 Input normal, Generic Attribute 2 DIFFUSE, COLOR0, ATTR3 Input primary color, Generic Attribute 3 SPECULAR, COLOR1, ATTR4 Input secondary color, Generic Attribute 4 TESSFACTOR, FOGCOORD, ATTR5 Input fog coordinate, Generic Attribute 5 PSIZE, ATTR6 Input point size, Generic Attribute 6 BLENDINDICES, ATTR7 Generic Attribute 7 TEXCOORD0-TEXCOORD7, Input texture coordinates (texcoord0-texcoord7) ATTR8-ATTR15 Generic Attributes 8-15 TANGENT, ATTR14 Generic Attribute 14 BINORMAL, ATTR15 Generic Attribute 15

UNIFORM INPUT SEMANTICS
C0-C255 Constant register [0..255]. The aliases c0-c255 (lowercase) are also accepted. If used with a variable that requires more than one constant register (e.g. a matrix), the semantic specifies the first register that is used. TEXUNIT0-TEXUNIT15 Texture unit (but only 4 distinct texture units are allowed)

OUTPUT SEMANTICS
Binding Semantics Name Corresponding Data POSITION, HPOS Output position PSIZE, PSIZ Output point size FOG, FOGC Output fog coordinate COLOR0, COL0 Output primary color COLOR1, COL1 Output secondary color BCOL0 Output backface primary color BCOL1 Output backface secondary color TEXCOORD0-TEXCOORD7, Output texture coordinates TEX0-TEX7 CLP0-CL5 Output Clip distances Standard library routines for texture cube map and rectangle samplers are not supported by vp40. fp40