Name
    
    NV_texture_shader3

Name Strings

    GL_NV_texture_shader3

Contact

    Mark J. Kilgard, NVIDIA Corporation (mjk 'at' nvidia.com)

Notice

    Copyright NVIDIA Corporation, 2001.

IP Status

    NVIDIA Proprietary.

Version

    NVIDIA Date:  March 5, 2007
    Version:      11

Number

    265

Dependencies

    Written based on the wording of the OpenGL 1.2.1 specification,
    augmented by the NV_texture_shader and NV_texture_shader2 extension
    specifications.

    Requires support for the NV_texture_shader extension.

    Requires support for the NV_texture_shader2 extension.

Overview

    NV_texture_shader3 extends the NV_texture_shader functionality by
    adding several new texture shader operations, extending several
    existing texture shader operations, adding a new HILO8 internal
    format, and adding new and more flexible re-mapping modes for dot
    product and dependent texture shader operations.

    See the NV_texture_shader extension for information about the
    texture shader operational model.

    The fourteen new texture shader operations are:

    <offset textures>

    24.  OFFSET_PROJECTIVE_TEXTURE_2D_NV - Transforms the signed (ds,dt)
         components of a previous texture unit by a 2x2 floating-point
         matrix and then uses the result to offset the stage's texture
         coordinates for a 2D non-projective texture.

    25.  OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV - Same as above except
         the magnitude component of the previous texture unit result
         scales the red, green, and blue components of the unsigned RGBA
         texture 2D access.

    26.  OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV - Similar to
         OFFSET_TEXTURE_2D_NV except that the texture access is into a
         rectangular non-projective texture.

    27.  OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV - Similar to
         OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV except that the texture
         access is into a rectangular non-projective texture.

    28.  OFFSET_HILO_TEXTURE_2D_NV - Similar to OFFSET_TEXTURE_2D_NV
         but uses a (higher-precision) HILO base format texture rather
         than a DSDT-type base format.

    29.  OFFSET_HILO_TEXTURE_RECTANGLE_NV - Similar to
         OFFSET_TEXTURE_RECTANGLE_NV but uses a (higher-precision)
         HILO base format texture rather than a DSDT-type base format.

    30.  OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV - Similar to
         OFFSET_PROJECTIVE_TEXTURE_2D_NV but uses a (higher-precision)
         HILO base format texture rather than a DSDT-type base format.

    31.  OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV - Similar to
         OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV but uses a
         (higher-precision) HILO base format texture rather than a
         DSDT-type base format.

         (There are no "offset HILO texture scale" operations because
         HILO textures have only two components with no third component
         for scaling.)

    <dependent textures>

    32.  DEPENDENT_HILO_TEXTURE_2D_NV - Converts the hi and lo components
         of a previous shader HILO result into an (s,t) texture coordinate
         set to access a 2D non-projective texture.

    33.  DEPENDENT_RGB_TEXTURE_3D_NV - Converts the red, green, and
         blue components of a previous shader RGBA result into an (s,t,r)
         texture coordinate set to access a 3D non-projective texture.

    34.  DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV - Converts the red, green,
         and blue components of a previous shader RGBA result into an
         (s,t,r) texture coordinate set to access a cube map texture.

    <dot product pass through>

    35.  DOT_PRODUCT_PASS_THROUGH_NV - Computes a dot product in the
         manner of the DOT_PRODUCT_NV operation and the result is [0,1]
         clamped and smeared to generate the texture unit RGBA result.

    <dot product textures>

    36.  DOT_PRODUCT_TEXTURE_1D_NV - Computes a dot product in the manner
         of the DOT_PRODUCT_NV operation and uses the result as the s
         texture coordinate to access a 2D non-projective texture.

    <dot product depth replace>

    37.  DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV - Computes a dot product
         in the manner of the DOT_PRODUCT_NV operation and the result
         is [0,1] clamped and replaces the fragment's window-space
         depth value.  The texture unit RGBA result is (0,0,0,0).

    Two new internal texture formats have been added: HILO8_NV and
    SIGNED_HILO8_NV.  These texture formats allow HILO textures to be
    stored in half the space; still the filtering for these internal
    texture formats is done with 16-bit precision.

    One new unsigned RGBA dot product mapping mode (FORCE_BLUE_TO_ONE_NV)
    forces the blue component to be 1.0 before computing a dot product.

Issues

    Should a HILO8_NV internal format be added?

      RESOLUTION:  Yes.  The HILO8_NV format allows HILO textures to
      take up half the space (16-bit HILO8_NV versus 32-bit HILO16_NV).
      Even though the texture is stored with 8-bit components, the
      interpolated precision can be assumed to be 16-bit.

    Should we generalize existing OFFSET_TEXTURE-style operations to
    support HILO textures and projective texturing, or should we just
    add more texture shader operations?

      RESOLUTION:  Add more texture shader operations for each distinct
      configuration.

      NV_texture_shader had consistency rules for OFFSET_TEXTURE
      operations that preclude consistency when used with HILO textures.
      Consistency is a defined behavior that should stay defined even with
      future extensions.  Adding specific new texture shader operation
      for HILO textures avoids having to redefine the consistency rules
      for DSDT-using OFFSET_TEXTURE operations.

      Rather than add a separate state that decides when OFFSET_TEXTURE
      is projective or not, we just add new operations.

New Procedures and Functions

    None.

New Tokens

    When the <target> and <pname> parameters of TexEnvf, TexEnvfv,
    TexEnvi, and TexEnviv are TEXTURE_SHADER_NV and SHADER_OPERATION_NV
    respectively, then the value of <param> or the value pointed to by
    <params> may be:

        OFFSET_PROJECTIVE_TEXTURE_2D_NV                0x8850
        OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV          0x8851
        OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV         0x8852
        OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV   0x8853
        OFFSET_HILO_TEXTURE_2D_NV                      0x8854
        OFFSET_HILO_TEXTURE_RECTANGLE_NV               0x8855
        OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV           0x8856
        OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV    0x8857
        DEPENDENT_HILO_TEXTURE_2D_NV                   0x8858
        DEPENDENT_RGB_TEXTURE_3D_NV                    0x8859
        DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV              0x885A
        DOT_PRODUCT_PASS_THROUGH_NV                    0x885B
        DOT_PRODUCT_TEXTURE_1D_NV                      0x885C
        DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV            0x885D

    Accepted by the <internalformat> parameter of TexImage1D, TexImage2D,
    and TexImage3D:

        HILO8_NV                                       0x885E
        SIGNED_HILO8_NV                                0x885F

    When the <target> and <pname> parameters of TexEnvf,
    TexEnvfv, TexEnvi, and TexEnviv are TEXTURE_SHADER_NV and
    RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV respectively, then the value
    of <param> or the value pointed to by <params> may be:

        FORCE_BLUE_TO_ONE_NV                           0x8860

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

     None

Additions to Chapter 3 of the 1.2 Specification (Rasterization)

 --  Section 3.8 "Texturing"

     Replace the third paragraph (amended by the NV_texture_shader
     extension) with the following that includes new texture shader
     references:

     "The alternative to conventional texturing is the texture shaders
     mechanism.  When texture shaders are enabled, each texture unit uses
     one of thirty-seven texture shader operations.  Thirty-three of the
     thirty-seven shader operations map an (s,t,r,q) texture coordinate
     set to an RGBA color.  Of these, four texture shader operations
     directly correspond to the 1D, 2D, 3D, and cube map conventional
     texturing operations.  Depending on the texture shader operation, the
     mapping from the (s,t,r,q) texture coordinate set to an RGBA color
     may depend on the given texture unit's currently bound texture object
     state and/or the results of previous texture shader operations.
     The four remaining texture shader operations respectively provide
     a fragment culling mechanism based on texture coordinates, a dot
     product operation that computes a floating-point value for use by
     subsequent texture shaders.  and two means to replace the fragment
     depth value, The specifics of each texture shader operation are
     described in section 3.8.12."

 --  Section 3.8.1 "Texture Image Specification"

     Add two more rows to table 3.16:

Sized                          Base                  R    G    B    A    L    I    HI   LO   DS   DT   MAG
Internal Format                Internal Format       bits bits bits bits bits bits bits bits bits bits bits
------------------------------ --------------------- ---- ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
HILO8_NV                       HILO                                                8    8
SIGNED_HILO8_NV                HILO                                                8*   8*

     Update this paragraph inserted by NV_texture_shader before the last
     sentence in the fifth paragraph to read:

     "The error INVALID_OPERATION is generated if the format is
     HILO_NV and the internalformat is not one of HILO_NV, HILO16_NV,
     HILO8_NV, SIGNED_HILO_NV, SIGNED_HILO16_NV, SIGNED_HILO8_NV;
     or if the internalformat is one of HILO_NV, HILO16_NV, HILO8_NV,
     SIGNED_HILO_NV, SIGNED_HILO16_NV, or SIGNED_HILO8_NV and the format
     is not HILO_NV.

 --  Section 3.8.2 "Alternate Texture Image Specification Commands"

     In the second paragraph (describing CopyTexImage2D), change the
     third to the last sentence (previously amended by NV_texture_shader) to:

     "Parameters level, internalformat, and border are specified using the
     same values, with the same meanings, as the equivalent arguments of
     TexImage2D, except that internalformat may not be specified as 1, 2,
     3, 4, HILO_NV, HILO16_NV, HILO8_NV, SIGNED_HILO_NV, SIGNED_HILO16_NV,
     SIGNED_HILO8_NV, DSDT_NV, DSDT8_NV, DSDT_MAG_NV, DSDT8_MAG8_NV,
     DSDT_MAG_INTENSITY_NV, or DSDT8_MAG8_INTENSITY8_NV."

     In the third paragraph (describing CopyTexImage1D), change the second
     to the last sentence (previously amended by NV_texture_shader) to:

     "level, internalformat, and border are specified using the same
     values, with the same meanings, as the equivalent arguments of
     TexImage1D, except that internalformat may not be specified as 1, 2,
     3, 4, HILO_NV, HILO16_NV, HILO8_NV, SIGNED_HILO_NV, SIGNED_HILO16_NV,
     SIGNED_HILO8_NV, DSDT_NV, DSDT8_NV, DSDT_MAG_NV, DSDT8_MAG8_NV,
     DSDT_MAG_INTENSITY_NV, or DSDT8_MAG8_INTENSITY8_NV."

     Amend the following text inserted by NV_texture_shader after the
     six paragraph to include the HILO8 and UNSIGNED_HILO8 internal
     texture formats:

     "CopyTexSubImage3D, CopyTexSubImage2D, and CopyTexSubImage1D
     generate the error INVALID_OPERATION if the internal format of
     the texture array to which the pixels are to be copied is one of
     HILO_NV, HILO16_NV, HILO8_NV, SIGNED_HILO_NV, SIGNED_HILO16_NV,
     SIGNED_HILO8_NV, DSDT_NV, DSDT8_NV, DSDT_MAG_NV, DSDT8_MAG8_NV,
     DSDT_MAG_INTENSITY_NV, or DSDT8_MAG8_INTENSITY8_NV."

 --  Section 3.8.13 "Texture Shaders"

     Amend the designated paragraphs of the NV_texture_shader
     specification to include discussion of new texture shader
     operations.

     1st paragraph (update number of operations):

     "Each texture unit is configured with one of thirty-seven
     texture shader operations.  Several texture shader operations
     require additional state.  All per-texture shader stage state
     is specified using the TexEnv commands with the target specified
     as TEXTURE_SHADER_NV.  The per-texture shader state is replicated
     per texture unit so the texture unit selected by ActiveTextureARB
     determines which texture unit's environment is modified by TexEnv
     calls."

     3rd paragraph (add fourteen new texture shader operations):

     "When TexEnv is called with the target of TEXTURE_SHADER_NV,
     SHADER_OPERATION_NV may be set to one of NONE, TEXTURE_1D,
     TEXTURE_2D, TEXTURE_3D, TEXTURE_CUBE_MAP_ARB, PASS_THROUGH_NV,
     CULL_FRAGMENT_NV, OFFSET_TEXTURE_2D_NV, OFFSET_TEXTURE_2D_SCALE_NV,
     OFFSET_TEXTURE_RECTANGLE_NV, OFFSET_TEXTURE_RECTANGLE_SCALE_NV,
     DEPENDENT_AR_TEXTURE_2D_NV, DEPENDENT_GB_TEXTURE_2D_NV,
     DOT_PRODUCT_NV, DOT_PRODUCT_DEPTH_REPLACE_NV,
     DOT_PRODUCT_TEXTURE_2D_NV, DOT_PRODUCT_TEXTURE_RECTANGLE_NV,
     DOT_PRODUCT_TEXTURE_3D_NV, DOT_PRODUCT_TEXTURE_CUBE_MAP_NV,
     DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV, DOT_PRODUCT_REFLECT_CUBE_MAP_NV,
     DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV,
     OFFSET_PROJECTIVE_TEXTURE_2D_NV,
     OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV,
     OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV,
     OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV,
     OFFSET_HILO_TEXTURE_2D_NV, OFFSET_HILO_TEXTURE_RECTANGLE_NV,
     OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV,
     OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV,
     DEPENDENT_HILO_TEXTURE_2D_NV, DEPENDENT_RGB_TEXTURE_3D_NV,
     DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV, DOT_PRODUCT_PASS_THROUGH_NV,
     DOT_PRODUCT_TEXTURE_1D_NV, or DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV.
     The semantics of each of these shader operations is described
     in section 3.8.13.1.  Not every operation is supported in every
     texture unit.  The restrictions for how these shader operations
     can be configured in various texture units are described in section
     3.8.13.2."

     5th paragraph (add FORCE_BLUE_TO_ONE_NV):

     "When TexEnv is called with the target of TEXTURE_SHADER_NV,
     RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV may be set to one of
     UNSIGNED_IDENTITY_NV, EXPAND_NORMAL_NV, or FORCE_BLUE_TO_ONE_NV.
     This RGBA unsigned dot product mapping mode is used by the
     DOT_PRODUCT_NV operation (see section 3.8.13.1.14) and other
     operations that compute dot products."

     3.8.13.1  Texture Shader Operations

     Amend tables 3.A, 3.B, 3.C, and 3.D in the NV_texture_shader
     specification to include these new entries:

     Table 3.A:
                                                                                                          texture shader
texture shader operation i                    previous texture input     texture shader operation i-1     operation i-2     texture shader operation i+1
============================================  =========================  ===============================  ================  ================================
OFFSET_PROJECTIVE_TEXTURE_2D_NV               base internal texture      -                                -                 -
                                               format must be one of
                                               DSDT_NV, DSDT_MAG_NV, or
                                               DSDT_MAG_INTENSITY_NV
OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV         base internal texture      -                                -                 -
                                               format must be either
                                               DSDT_MAG_NV or
                                               DSDT_MAG_INTENSITY_NV
OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV        base internal texture      -                                -                 -
                                               format must be one of
                                               DSDT_NV, DSDT_MAG_NV, or
                                               DSDT_MAG_INTENSITY_NV
OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV  base internal texture      -                                -                 -
                                               format must be either
                                               DSDT_MAG_NV or
                                               DSDT_MAG_INTENSITY_NV
--------------------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------
OFFSET_HILO_TEXTURE_2D_NV                     base internal texture      -                                -                 -
                                               format must be HILO
OFFSET_HILO_TEXTURE_RECTANGLE_NV              base internal texture      -                                -                 -
                                               format must be HILO
OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV          base internal texture      -                                -                 -
                                               format must be HILO
OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV   base internal texture      -                                -                 -
                                               format must be HILO
--------------------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------
DEPENDENT_HILO_TEXTURE_2D_NV                  base internal texture      -                                -                 -
                                               format must be HILO
DEPENDENT_RGB_TEXTURE_3D_NV                   shader result type must    -                                -                 -
                                               all be unsigned RGBA
DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV             shader result type must    -                                -                 -
                                               all be RGB or RGBA
                                               (signed RGB components
                                               are allowed)
--------------------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------
DOT_PRODUCT_PASS_THROUGH_NV                   shader result type must    -                                -                 -
                                               be one of signed HILO,
                                               unsigned HILO, all
                                               signed RGBA, or all
                                               unsigned RGBA
--------------------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------
DOT_PRODUCT_TEXTURE_1D_NV                     shader result type must    -                                -                 -
                                               be one of signed HILO,
                                               unsigned HILO, all
                                               signed RGBA, or all
                                               unsigned RGBA
--------------------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------
DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV           shader result type must    -                                -                 -
                                               be one of signed HILO,
                                               unsigned HILO, all
                                               signed RGBA, or all
                                               unsigned RGBA 
--------------------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------

     Table 3.B:

texture shader operation i                    texture unit i
============================================  =======================================
OFFSET_PROJECTIVE_TEXTURE_2D_NV               2D target must be consistent
OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV         2D target must be consistent
                                               and 2D texture target type must
                                               be unsigned RGBA 
OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV        rectangle target must be consistent
OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV  rectangle target must be consistent
                                               and rectangle texture target type must
                                               be unsigned RGBA 
--------------------------------------------  ---------------------------------------
OFFSET_HILO_TEXTURE_2D_NV                     2D target must be consistent
OFFSET_HILO_TEXTURE_RECTANGLE_NV              rectangle target must be consistent
OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV          2D target must be consistent
OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV   rectangle target must be consistent
--------------------------------------------  ---------------------------------------
DEPENDENT_HILO_TEXTURE_2D_NV                  2D target must be consistent
DEPENDENT_RGB_TEXTURE_3D_NV                   3D target must be consistent
DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV             cube map target must be consistent
--------------------------------------------  ---------------------------------------
DOT_PRODUCT_PASS_THROUGH_NV                   -
--------------------------------------------  ---------------------------------------
DOT_PRODUCT_TEXTURE_1D_NV                     1D target must be consistent
--------------------------------------------  ---------------------------------------
DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV           -
--------------------------------------------  ---------------------------------------


     Table 3.C:

                                                            uses    uses    uses    uses             uses       offset    uses
                                     texture                stage   stage   stage   previous  uses   offset     texture   const
                                     coordinate  texture    result  result  result  texture   cull   texture    2D scale  eye
texture shader operation i           set usage   target     i-1     i-2     i+1     input     modes  2D matrix  and bias  vector
===================================  ==========  =========  ======  ======  ======  ========  =====  =========  ========  ======
OFFSET_PROJECTIVE_TEXTURE_2D_NV      s,t,q       2D         -       -       -       y         -      y          -         -
OFFSET_PROJECTIVE_-                  s,t,q       2D         -       -       -       y         -      y          y         -
  TEXTURE_2D_SCALE_NV
OFFSET_PROJECTIVE_-                  s,t,q       rectangle  -       -       -       y         -      y          -         -
  TEXTURE_RECTANGLE_NV
OFFSET_PROJECTIVE_-                  s,t,q       rectangle  -       -       -       y         -      y          y         -
  TEXTURE_RECTANGLE_SCALE_NV
-----------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------
OFFSET_HILO_TEXTURE_2D_NV            s,t         2D         -       -       -       y         -      y          -         -
OFFSET_HILO_TEXTURE_RECTANGLE_NV     s,t         rectangle  -       -       -       y         -      y          -         -
OFFSET_PROJECTIVE_-                  s,t,q       2D         -       -       -       y         -      y          -         -
  HILO_TEXTURE_2D_NV
OFFSET_PROJECTIVE_-                  s,t,q       rectangle  -       -       -       y         -      y          -         -
  HILO_TEXTURE_RECTANGLE_NV
-----------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------
DEPENDENT_HILO_TEXTURE_2D_NV         -           2D         -       -       -       y         -      -          -         -
DEPENDENT_RGB_TEXTURE_3D_NV          -           3D         -       -       -       y         -      -          -         -
DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV    -           cube map   -       -       -       y         -      -          -         -
-----------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------
DOT_PRODUCT_PASS_THROUGH_NV          s,t,r       -          -       -       -       y         -      -          -         -
-----------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------
DOT_PRODUCT_TEXTURE_1D_NV            s,t,r       1D         -       -       -       y         -      -          -         -
-----------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------
DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV  s,t,r       -          -       -       -       y         -      -          -         -
-----------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------

     Table 3.D:

texture shader operation i         shader stage result type       shader stage result                  texture unit RGBA color result
=================================  =============================  ===================================  ======================================
OFFSET_TEXTURE_2D_NV               matches 2D target type         filtered 2D target texel             if 2D target texture type is RGBA,
                                                                                                        filtered 2D target texel,
                                                                                                        else (0,0,0,0) 
OFFSET_TEXTURE_2D_SCALE_NV         unsigned RGBA                  filtered 2D target texel             scaled filtered 2D target texel
OFFSET_TEXTURE_RECTANGLE_NV        matches rectangle target type  filtered rectangle target texel      if rectangle target texture type is
                                                                                                        RGBA, filtered rectangle target
                                                                                                        texel, else (0,0,0,0) 
OFFSET_TEXTURE_RECTANGLE_SCALE_NV  unsigned RGBA                  filtered rectangle target texel      scaled filtered rectangle target texel
OFFSET_PROJECTIVE_TEXTURE_2D_NV    matches 2D target type         filtered 2D target texel             if 2D target texture type is RGBA,
                                                                                                        filtered 2D target texel,
                                                                                                        else (0,0,0,0) 
OFFSET_PROJECTIVE_-                unsigned RGBA                  filtered 2D target texel             scaled filtered 2D target texel
  TEXTURE_2D_SCALE_NV
OFFSET_PROJECTIVE_-                matches rectangle target type  filtered rectangle target texel      if rectangle target texture type is
  TEXTURE_RECTANGLE_NV                                                                                  RGBA, filtered rectangle target
                                                                                                        texel, else (0,0,0,0) 
OFFSET_PROJECTIVE_-                unsigned RGBA                  filtered rectangle target texel      scaled filtered rectangle target texel
  TEXTURE_RECTANGLE_SCALE_NV
---------------------------------  -----------------------------  -----------------------------------  --------------------------------------
DEPENDENT_HILO_TEXTURE_2D_NV       matches 2D target type         filtered 2D target texel             if 2D target texture type is RGBA,
                                                                                                        filtered 2D target texel,
                                                                                                        else (0,0,0,0)  
DEPENDENT_RGB_TEXTURE_3D_NV        matches 3D target type         filtered 3D target texel             if 3D target texture type is RGBA,
                                                                                                        filtered 3D target texel,
                                                                                                        else (0,0,0,0)  
DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV  matches cube map target type   filtered cube map target texel       if cube map target texture type is
                                                                                                        RGBA,  filtered cube map target
                                                                                                        texel, else (0,0,0,0) 
---------------------------------  -----------------------------  -----------------------------------  --------------------------------------
DOT_PRODUCT_PASS_THROUGH_NV        unsigned RGBA                  (max(0,min(1,[s,t,r]dot[a,b,c])),    (max(0,min(1,[s,t,r]dot[a,b,c])),
                                                                   max(0,min(1,[s,t,r]dot[a,b,c])),     max(0,min(1,[s,t,r]dot[a,b,c])),
                                                                   max(0,min(1,[s,t,r]dot[a,b,c])),     max(0,min(1,[s,t,r]dot[a,b,c])),
                                                                   max(0,min(1,[s,t,r]dot[a,b,c])))     max(0,min(1,[s,t,r]dot[a,b,c])))
---------------------------------  -----------------------------  -----------------------------------  --------------------------------------
DOT_PRODUCT_TEXTURE_1D_NV          matches 1D target type         filtered 1D target texel             if 1D target texture type is RGBA,
                                                                                                        filtered 1D target texel,
                                                                                                        else (0,0,0,0)  
---------------------------------  -----------------------------  -----------------------------------  --------------------------------------
DOT_PRODUCT_-                      unsigned RGBA                  invalid                              (0,0,0,0)
  AFFINE_DEPTH_REPLACE_NV
---------------------------------  -----------------------------  -----------------------------------  --------------------------------------

     3.8.13.1.14  Dot Product

     Add this description of FORCE_BLUE_TO_ONE_NV after the description
     of EXPAND_NORMAL_NV:

     "When the RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV is
     FORCE_BLUE_TO_ONE_NV, then the floating-point result for unsigned
     RGBA components is computed by

       result = s * Rprev + t * Gprev + r

     where Rprev and Gprev are the (unsigned) red and green components
     respectively of the previous texture unit's RGBA texture shader
     result (the previous blue component can be assumed forced to 1.0
     for the purposes of the dot product computation)."

     3.8.13.1.21  Dot Product Depth Replace

     Amend the paragraph meant to avoid multiple depth replaces to read:

     "If any previous texture shader stage operation is
     DOT_PRODUCT_DEPTH_REPLACE_NV or DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV
     and that previous stage is consistent, then this texture shader
     stage is not consistent.  (This eliminates the potential for two
     stages to each be performing a depth replace operation.)"

     Add the following new sections specifying new texture shader
     operations:

     Add the following new texture shader operation descriptions:

     "3.8.13.1.24  Offset Projective Texture 2D

     The OFFSET_PROJECTIVE_TEXTURE_2D_NV shader operation operates
     identically to the OFFSET_TEXTURE_2D_NV shader operation except
     that the perturbed texture coordinates s' and t' are computed with
     floating-point math as follows:

       s' = s/q + a1 * DSprev + a3 * DTprev
       t' = t/q + a2 * DSprev + a4 * DTprev

     Note the division of s and t by the current texture shader stage's
     q texture coordinate.

     3.8.13.1.25  Offset Projective Texture 2D Scale

     The OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV shader operation operates
     identically to the OFFSET_TEXTURE_2D_SCALE_NV shader operation except
     that the perturbed texture coordinates s' and t' are computed with
     floating-point math as follows:

       s' = s/q + a1 * DSprev + a3 * DTprev
       t' = t/q + a2 * DSprev + a4 * DTprev

     Note the division of s and t by the current texture shader stage's
     q texture coordinate.

     3.8.13.1.26  Offset Projective Texture Rectangle

     The OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV shader operation
     operates identically to the OFFSET_TEXTURE_RECTANGLE_NV shader
     operation except that the perturbed texture coordinates s' and t'
     are computed with floating-point math as follows:

       s' = s/q + a1 * DSprev + a3 * DTprev
       t' = t/q + a2 * DSprev + a4 * DTprev

     Note the division of s and t by the current texture shader stage's
     q texture coordinate.

     3.8.13.1.27  Offset Projective Texture Rectangle Scale

     The OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV shader operation
     operates identically to the OFFSET_TEXTURE_RECTANGLE_SCALE_NV shader
     operation except that the perturbed texture coordinates s' and t'
     are computed with floating-point math as follows:

       s' = s/q + a1 * DSprev + a3 * DTprev
       t' = t/q + a2 * DSprev + a4 * DTprev

     Note the division of s and t by the current texture shader stage's
     q texture coordinate.

     3.8.13.1.28  Offset HILO Texture 2D

     The OFFSET_HILO_TEXTURE_2D_NV texture shader operation uses the
     transformed result of a previous texture shader stage to perturb
     the current texture shader stage's (s,t) texture coordinates
     (without a projective division by q).  The resulting perturbed
     texture coordinates (s',t') are used to access the texture unit's 2D
     texture object (as described in sections 3.8.4, 3.8.5, and 3.8.6).

     The result of the texture access becomes both the shader result and
     texture unit RGBA result (see table 3.E).  The type of the shader
     result depends on the format type of the accessed texture.

     The perturbed texture coordinates s' and t' are computed with
     floating-point math as follows:

       s' = s + a1 * HIprev + a3 * LOprev
       t' = t + a2 * HIprev + a4 * LOprev

     where a1, a2, a3, and a4 are the texture shader stage's
     OFFSET_TEXTURE_MATRIX_NV values, and HIprev and LOprev are the
     (signed) HI and LO components of a previous texture shader unit's
     texture shader result specified by the current texture shader
     stage's PREVIOUS_TEXTURE_INPUT_NV value.

     If the texture unit's 2D texture object is not consistent, then
     this texture shader stage is not consistent.

     If the previous texture input texture object specified by the
     current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     has a base internalformat that is not HILO with signed components,
     then this texture shader stage is not consistent.

     If the previous texture input texture shader operation specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is DOT_PRODUCT_NV, then this texture shader stage is not consistent.

     If the previous texture input texture shader result specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is invalid, then this texture shader stage is not consistent.

     If the previous texture input shader stage specified by the current
     texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value is not
     consistent, then this texture shader stage is not consistent.

     If this texture shader stage is not consistent, it operates as if
     it is the NONE operation.

     3.8.13.1.29  Offset HILO Texture Rectangle

     The OFFSET_HILO_TEXTURE_RECTANGLE_NV shader operation operates
     identically to the OFFSET_HILO_TEXTURE_2D_NV shader operation except
     that the rectangle texture target is accessed rather than the 2D
     texture target.

     If the texture unit's rectangle texture object (rather than the 2D
     texture object) is not consistent, then this texture shader stage
     is not consistent.

     3.8.13.1.30  Offset Projective HILO Texture 2D

     The OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV shader operation operates
     identically to the OFFSET_HILO_TEXTURE_2D_NV shader operation except
     that the perturbed texture coordinates s' and t' are computed with
     floating-point math as follows:

       s' = s/q + a1 * HIprev + a3 * LOprev
       t' = t/q + a2 * HIprev + a4 * LOprev

     Note the division of s and t by the current texture shader stage's
     q texture coordinate.

     3.8.13.1.31  Offset Projective HILO Texture Rectangle

     The OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV shader operation
     operates identically to the OFFSET_HILO_TEXTURE_RECTANGLE_NV shader
     operation except that the perturbed texture coordinates s' and t'
     are computed with floating-point math as follows:

       s' = s/q + a1 * HIprev + a3 * LOprev
       t' = t/q + a2 * HIprev + a4 * LOprev

     Note the division of s and t by the current texture shader stage's
     q texture coordinate.

     3.8.13.1.32  Dependent HILO Texture 2D

     The DEPENDENT_HILO_TEXTURE_2D_NV texture shader operation accesses
     the texture unit's 2D texture object (as described in section
     3.8.4, 3.8.5, and 3.8.6) using (HIprev, LOprev) for the 2D texture
     coordinates where HIprev and LOprev are the are the hi and lo
     components of a previous texture input's unsigned HILO texture
     shader result specified by the current texture shader stage's
     PREVIOUS_TEXTURE_INPUT_NV value.  The result of the texture access
     becomes both the shader result and texture unit RGBA result (see
     table 3.E).  The type of the shader result depends on the format
     type of the accessed texture.

     If the texture unit's 2D texture object is not consistent, then
     this texture shader stage is not consistent.

     If the previous texture input's texture shader result specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     has a texture shader result type other than HILO with unsigned
     components, then this texture shader stage is not consistent.

     If the previous texture input texture shader operation specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is DOT_PRODUCT_NV, then this texture shader stage is not consistent.

     If the previous texture input texture shader result specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is invalid, then this texture shader stage is not consistent.

     If the previous texture input shader stage specified by the current
     texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value is not
     consistent, then this texture shader stage is not consistent.

     If this texture shader stage is not consistent, it operates as if
     it is the NONE operation.

     3.8.13.1.33  Dependent Texture 3D

     The DEPENDENT_RGB_TEXTURE_3D_NV texture shader operation accesses
     the texture unit's 3D texture object (as described in section
     3.8.4, 3.8.5, and 3.8.6) using (Rprev, Gprev, Bprev) for the 3D
     texture coordinates where Rprev, Gprev, and Bprev are the are the
     red, green, and blue components of a previous texture input's RGBA
     texture shader result specified by the current texture shader stage's
     PREVIOUS_TEXTURE_INPUT_NV value.  The result of the texture access
     becomes both the shader result and texture unit RGBA result (see
     table 3.E).  The type of the shader result depends on the format
     type of the accessed texture.

     If the texture unit's 3D texture object is not consistent, then
     this texture shader stage is not consistent.

     If the previous texture input's texture shader result specified
     by the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV
     value has a texture shader result type other than RGBA (the
     DSDT_MAG_INTENSITY_NV base internal format does not count as an
     RGBA format type in this context), then this texture shader stage
     is not consistent.  

     If the previous texture input's texture shader result specified
     by the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV
     value has a texture shader result type of RGBA but any of the
     RGBA components are signed, then this texture shader stage is not
     consistent.

     If the previous texture input texture shader operation specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is DOT_PRODUCT_NV, then this texture shader stage is not consistent.

     If the previous texture input texture shader result specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is invalid, then this texture shader stage is not consistent.

     If the previous texture input shader stage specified by the current
     texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value is not
     consistent, then this texture shader stage is not consistent.

     If this texture shader stage is not consistent, it operates as if
     it is the NONE operation.

     3.8.13.1.34  Dependent Texture Cube Map

     The DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV texture shader operation
     accesses the texture unit's cube map texture object (as described
     in section 3.8.4, 3.8.5, and 3.8.6) using (s',t',r').

     When the RGB components of the previous texture input's RGBA texture
     shader result are all unsigned, s', t', and r' are computed as:

       s' = 2*(Rprev - 0.5)
       t' = 2*(Gprev - 0.5)
       r' = 2*(Bprev - 0.5)

     When the RGB components of the previous texture input's RGBA texture
     shader result are all signed, s', t', and r' are computed as:

       s' = Rprev
       t' = Gprev
       r' = Bprev

     where Rprev, Gprev, and Bprev are the are the red, green,
     and blue components of a previous texture input's RGBA texture
     shader result specified by the current texture shader stage's
     PREVIOUS_TEXTURE_INPUT_NV value.  The result of the texture access
     becomes both the shader result and texture unit RGBA result (see
     table 3.E).  The type of the shader result depends on the format
     type of the accessed texture.

     If the texture unit's cube map texture object is not consistent,
     then this texture shader stage is not consistent.

     If the previous texture input's texture shader result specified
     by the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV
     value has a texture shader result type other than RGBA (the
     DSDT_MAG_INTENSITY_NV base internal format does not count as an
     RGBA format type in this context), then this texture shader stage
     is not consistent.  

     If the previous texture input texture shader operation specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is DOT_PRODUCT_NV, then this texture shader stage is not consistent.

     If the previous texture input texture shader result specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is invalid, then this texture shader stage is not consistent.

     If the previous texture input shader stage specified by the current
     texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value is not
     consistent, then this texture shader stage is not consistent.

     If this texture shader stage is not consistent, it operates as if
     it is the NONE operation.

     3.8.13.1.35  Dot Product Pass Through

     The DOT_PRODUCT_PASS_THROUGH_NV texture shader operation converts a
     dot product result dotC into an RGBA color result (x,x,x,x) where
     x is dotC clamped to [0,1].  The texture shader result and texture
     unit RGBA result of this operation are both
     assigned the clamped RGBA color result.

     dotC is the floating-point dot product result from the current
     texture shader stage.  dotC is computed in the identical manner
     used to compute the floating-point result of the DOT_PRODUCT_NV
     texture shader described in section 3.8.13.1.14.

     This operation in no way depends on any of the texture unit's
     texture objects.

     3.8.13.1.36  Dot Product Texture 1D

     The DOT_PRODUCT_TEXTURE_1D_NV texture shader operation accesses the
     texture unit's 1D texture object (as described in sections 3.8.4,
     3.8.5, and 3.8.6) using dotC for the 1D texture coordinate.
     The result of the texture access becomes both the shader result and
     texture unit RGBA result (see table 3.E).  The type of the shader
     result depends on the format type of the accessed texture.

     dotC is the floating-point dot product result from the current
     texture shader stage.  dotC is computed in the identical manner
     used to compute the floating-point result of the DOT_PRODUCT_NV
     texture shader described in section 3.8.13.1.14.

     If the previous texture input texture object specified by the
     current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value has
     a format type other than RGBA or HILO (the DSDT_MAG_INTENSITY_NV
     base internal format does not count as an RGBA format type in this
     context), then this texture shader stage is not consistent.  

     If the previous texture input texture shader operation specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is DOT_PRODUCT_NV, then this texture shader stage is not consistent.

     If the previous texture input texture shader result specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is invalid, then this texture shader stage is not consistent.

     If the previous texture input shader stage specified by the current
     texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value is not
     consistent, then this texture shader stage is not consistent.

     If the texture unit's 1D texture object is not consistent, then
     this texture shader stage is not consistent.

     If this texture shader stage is not consistent, it operates as if
     it is the NONE operation.

     3.8.13.1.37  Dot Product Affine Depth Replace

     The DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV texture shader operation
     replaces the incoming fragments depth (in window coordinates, after
     polygon offset and before conversion to fixed-point, i.e. in the
     [0,1] range) with a new depth value.  The new depth is computed
     as follows:

       depth = dotC

     dotC is the floating-point dot product result from the current
     texture shader stage.  dotC is computed in the identical manner
     used to compute the floating-point result of the DOT_PRODUCT_NV
     texture shader described in section 3.8.13.1.14.  Note that there
     is no divide to project the depth value as is the case with the
     projective DOT_PRODUCT_DEPTH_REPLACE_NV operation.

     If the new depth value is outside of the range of the near and far
     depth range values, the fragment is rejected.

     The texture unit RGBA result generated is always (0,0,0,0).
     The texture shader result is invalid.

     If the previous texture input texture object specified by the
     current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value has
     a format type other than RGBA or HILO (the DSDT_MAG_INTENSITY_NV
     base internal format does not count as an RGBA format type in this
     context), then this texture shader stage is not consistent.  

     If the previous texture input texture shader operation specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is DOT_PRODUCT_NV, then this texture shader stage is not consistent.

     If the previous texture input texture shader result specified by
     the current texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value
     is invalid, then this texture shader stage is not consistent.

     If the previous texture input shader stage specified by the current
     texture shader stage's PREVIOUS_TEXTURE_INPUT_NV value is not
     consistent, then this texture shader stage is not consistent.

     If any previous texture shader stage operation is
     DOT_PRODUCT_DEPTH_REPLACE_NV or DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV
     and that previous stage is consistent, then this texture shader
     stage is not consistent.  (This eliminates the potential for two
     stages to each be performing a depth replace operation.)

     If this texture shader stage is not consistent, it operates as if
     it is the NONE operation.

     This operation in no way depends on any of the texture unit's
     texture objects."

     3.8.13.2  Texture Shader Restrictions

     Amend the first two paragraphs in this section to include the new
     texture shader operations:

     "There are various restrictions on possible texture shader
     configurations.  These restrictions are described in this section.

     The error INVALID_OPERATION occurs if the SHADER_OPERATION_NV
     parameter for texture unit 0 is assigned one of
     OFFSET_TEXTURE_2D_NV, OFFSET_TEXTURE_2D_SCALE_NV,
     OFFSET_TEXTURE_RECTANGLE_NV, OFFSET_TEXTURE_RECTANGLE_SCALE_NV,
     DEPENDENT_AR_TEXTURE_2D_NV, DEPENDENT_GB_TEXTURE_2D_NV,
     DOT_PRODUCT_NV, DOT_PRODUCT_DEPTH_REPLACE_NV,
     DOT_PRODUCT_TEXTURE_2D_NV, DOT_PRODUCT_TEXTURE_RECTANGLE_NV,
     DOT_PRODUCT_TEXTURE_3D_NV, DOT_PRODUCT_TEXTURE_CUBE_MAP_NV,
     DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV, DOT_PRODUCT_REFLECT_CUBE_MAP_NV,
     DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV,
     OFFSET_PROJECTIVE_TEXTURE_2D, OFFSET_PROJECTIVE_TEXTURE_2D_SCALE,
     OFFSET_PROJECTIVE_TEXTURE_RECTANGLE,
     OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE, OFFSET_HILO_TEXTURE_2D,
     OFFSET_HILO_TEXTURE_RECTANGLE, OFFSET_HILO_PROJECTIVE_TEXTURE_2D,
     OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE, DEPENDENT_HILO_TEXTURE_2D,
     DEPENDENT_RGB_TEXTURE_3D, DEPENDENT_RGB_TEXTURE_CUBE_MAP,
     DOT_PRODUCT_PASS_THROUGH, DOT_PRODUCT_TEXTURE_1D, or
     DOT_PRODUCT_AFFINE_DEPTH_REPLACE.  Each of these texture shaders
     requires a previous texture shader result that is not possible for
     texture unit 0.  Therefore these shaders are disallowed for texture
     unit 0."

     3.8.13.3  Required State

     Amend the first paragraph in this section to account for the 9 new
     texture shader operations and the new "dot product third component"
     state:

     "The state required for texture shaders consists of a single bit to
     indicate whether or not texture shaders are enabled, a vector of
     three floating-point values for the constant eye vector, and n sets
     of per-texture unit state where n is the implementation-dependent
     number of supported texture units.  The set of per-texture unit
     texture shader state consists of the thirty-seven-valued integer
     indicating the texture shader operation, four two-valued integers
     indicating the cull modes, an integer indicating the previous texture
     unit input, a two-valued integer indicating the RGBA unsigned dot
     product mapping mode, a 2x2 floating-point matrix indicating the
     texture offset transform, a floating-point value indicating the
     texture offset scale, a floating-point value indicating the texture
     offset bias, and a bit to indicate whether or not the texture shader
     stage is consistent."

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

     None

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

     None

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

     None

Additions to the GLX Specification

     None

Dependencies on other specifications

     Same as the NV_texture_shader extension.

Errors

     INVALID_OPERATION is generated when TexImage1D, TexImage2D,
     or TexImage3D are called and the format is HILO_NV and the
     internalformat is not one of HILO_NV, HILO8_NV, HILO16_NV,
     SIGNED_HILO_NV, SIGNED_HILO8_NV, SIGNED_HILO16_NV; or if
     the internalformat is one of HILO_NV, HILO8_NV, HILO16_NV,
     SIGNED_HILO_NV, SIGNED_HILO8_NV or SIGNED_HILO16_NV and the format
     is not HILO_NV.

     INVALID_OPERATION is generated when CopyTexImage2D, CopyTexImage1D,
     CopyTexSubImage3D, CopyTexSubImage2D, or CopyTexSubImage1D is called
     and the internal format of the texture array to which the pixels are
     to be copied is one of HILO_NV, HILO8_NV, HILO16_NV, SIGNED_HILO_NV,
     SIGNED_HILO8_NV, SIGNED_HILO16_NV, DSDT_NV, DSDT8_NV, DSDT_MAG_NV,
     DSDT8_MAG8_NV, DSDT_MAG_INTENSITY_NV, or DSDT8_MAG8_INTENSITY8_NV.

     INVALID_OPERATION is generated when TexEnv is called and the
     SHADER_OPERATION_NV parameter for texture unit 0 is assigned
     one of OFFSET_TEXTURE_2D_NV, OFFSET_TEXTURE_2D_SCALE_NV,
     OFFSET_TEXTURE_RECTANGLE_NV, OFFSET_TEXTURE_RECTANGLE_SCALE_NV,
     DEPENDENT_AR_TEXTURE_2D_NV, DEPENDENT_GB_TEXTURE_2D_NV,
     DOT_PRODUCT_NV, DOT_PRODUCT_DEPTH_REPLACE_NV,
     DOT_PRODUCT_TEXTURE_2D_NV, DOT_PRODUCT_TEXTURE_RECTANGLE_NV,
     DOT_PRODUCT_TEXTURE_3D_NV, DOT_PRODUCT_TEXTURE_CUBE_MAP_NV,
     DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV, DOT_PRODUCT_REFLECT_CUBE_MAP_NV.
     DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV,
     OFFSET_PROJECTIVE_TEXTURE_2D_NV,
     OFFSET_PROJECTIVE_TEXTURE_2D_SCALE_NV,
     OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_NV,
     OFFSET_PROJECTIVE_TEXTURE_RECTANGLE_SCALE_NV,
     OFFSET_HILO_TEXTURE_2D_NV, OFFSET_HILO_TEXTURE_RECTANGLE_NV,
     OFFSET_HILO_PROJECTIVE_TEXTURE_2D_NV,
     OFFSET_HILO_PROJECTIVE_TEXTURE_RECTANGLE_NV,
     DEPENDENT_HILO_TEXTURE_2D_NV, DEPENDENT_RGB_TEXTURE_3D_NV,
     DEPENDENT_RGB_TEXTURE_CUBE_MAP_NV, DOT_PRODUCT_PASS_THROUGH_NV,
     DOT_PRODUCT_TEXTURE_1D_NV, or DOT_PRODUCT_AFFINE_DEPTH_REPLACE_NV."

New State

UPDATE lines in Table 6.TextureShaders.

Get Value                Type    Get Command  Initial Value         Description          Sec     Attribute
-----------------------  ------  -----------  --------------------  -------------------  ------  ---------
SHADER_OPERATION_NV      TxZ37   GetTexEnviv  NONE                  Texture shader       3.8.13  texture
                                                                    operation
RGBA_UNSIGNED_-          TxZ3    GetTexEnviv  UNSIGNED_IDENTITY_NV  Texture shader RGBA  3.8.13  texture
  DOT_PRODUCT_MAPPING_NV                                            dot product mapping

* SHADER_OPERATION_NV: Z21 in NV_texture_shader (and Z23 in
  NV_texture_shader2) is now Z37 with NV_texture_shader3.

* RGBA_UNSIGNED_DOT_PRODUCT_MAPPING_NV: Z2 in NV_texture_shader is now
  Z3 with NV_texture_shader3.

[ The "Tx" type prefix means that the state is per-texture unit. ]

[ The "Zn" type is an n-valued integer where n is the
  implementation-dependent number of texture units supported.]

New Implementation State

     None

Revision History

     November 15, 2001 - document that depth replace is after polygon
     offset.

     June 5, 2002 - Driver implementations before this date incorrectly
     swap the HI and LO components of GL_HILO8_NV and GL_SIGNED_HILO8_NV
     textures.  Drivers after this date have fixed the problem and match
     the specified behavior.

     March 5, 2007 - Corrected some enum names.

