Name
    
    NV_texture_shader2

Name Strings

    GL_NV_texture_shader2

Contact

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

Notice

    Copyright NVIDIA Corporation, 1999, 2000, 2001.

IP Status

    NVIDIA Proprietary.

Version

    NVIDIA Date: April 29, 2004
    $Date: 2005/06/02 18:11:48 $ $Revision: 1.1 $
    $Id: texture_shader2.txt,v 1.1 2005/06/02 18:11:48 nightspawn Exp $

Number

    231

Dependencies

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

    Requires support for the NV_texture_shader extension.

Overview

    This extension extends the NV_texture_shader functionality to
    support texture shader operations for 3D textures.

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

    The two new texture shader operations are:

    <conventional textures>

    22.  TEXTURE_3D - Accesses a 3D texture via (s/q,t/q,r/q).

    <dot product textures>

    23.  DOT_PRODUCT_TEXTURE_3D_NV - When preceded by two DOT_PRODUCT_NV
         programs in the previous two texture shader stages, computes a
         third similar dot product and composes the three dot products
         into (s,t,r) texture coordinate set to access a 3D non-projective
         texture.

Issues

    Why a separate extension?

      Not all implementations of NV_texture_shader will support 3D
      textures in hardware.

      Breaking this extension out into a distinct extension allows OpenGL
      programs that only would use 3D textures if they are supported
      in hardware to determine whether hardware support is available by
      explicitly looking for the NV_texture_shader2 extension.

    What if an implementation wanted to support NV_texture_shader2
    operations within a software rasterizer?

      Implementations should be free to implement the 3D texture texture
      shader operations in software.  In this case, the implementation
      should NOT advertise the NV_texture_shader2 extension, but should
      still accept the GL_TEXTURE_3D and GL_DOT_PRODUCT_TEXTURE_3D_NV
      texture shader operations without an error.  Likewise, the
      glTexImage3D command should accept the new internal texture formats,
      formats, and types allowed by this extension should be accepted
      without an error.

      When NV_texture_shader2 is not advertised in the GL_EXTENSIONS
      string, but the extension functionality works without GL errors,
      programs should expect that these two texture shader operations
      are slow.

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:

        TEXTURE_3D
        DOT_PRODUCT_TEXTURE_3D_NV                 0x86EF

    Accepted by the <format> parameter of TexImage3D and TexSubImage3D:

        HILO_NV                                   0x86F4
        DSDT_NV                                   0x86F5
        DSDT_MAG_NV                               0x86F6
        DSDT_MAG_VIB_NV                           0x86F7

    Accepted by the <type> parameter of TexImage3D and TexSubImage3D:

        UNSIGNED_INT_S8_S8_8_8_NV                 0x86DA 
        UNSIGNED_INT_8_8_S8_S8_REV_NV             0x86DB 

    Accepted by the <internalformat> parameter of TexImage3D:

        SIGNED_RGBA_NV                            0x86FB
        SIGNED_RGBA8_NV                           0x86FC
        SIGNED_RGB_NV                             0x86FE
        SIGNED_RGB8_NV                            0x86FF
        SIGNED_LUMINANCE_NV                       0x8701
        SIGNED_LUMINANCE8_NV                      0x8702
        SIGNED_LUMINANCE_ALPHA_NV                 0x8703
        SIGNED_LUMINANCE8_ALPHA8_NV               0x8704
        SIGNED_ALPHA_NV                           0x8705
        SIGNED_ALPHA8_NV                          0x8706
        SIGNED_INTENSITY_NV                       0x8707
        SIGNED_INTENSITY8_NV                      0x8708
        SIGNED_RGB_UNSIGNED_ALPHA_NV              0x870C
        SIGNED_RGB8_UNSIGNED_ALPHA8_NV            0x870D

    Accepted by the <internalformat> parameter of TexImage3D:

        HILO_NV
        HILO16_NV                                 0x86F8
        SIGNED_HILO_NV                            0x86F9
        SIGNED_HILO16_NV                          0x86FA
        DSDT_NV
        DSDT8_NV                                  0x8709
        DSDT_MAG_NV
        DSDT8_MAG8_NV                             0x870A
        DSDT_MAG_INTENSITY_NV                     0x86DC
        DSDT8_MAG8_INTENSITY8_NV                  0x870B

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 3D texture references:

     "The alternative to conventional texturing is the texture shaders
     mechanism.  When texture shaders are enabled, each texture unit
     uses one of twenty-three texture shader operations.  Twenty of the
     twenty-three 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 three remaining texture shader operations
     respectively provide a fragment culling mechanism based on texture
     coordinates, a means to replace the fragment depth value, and a dot
     product operation that computes a floating-point value for use by
     subsequent texture shaders.  The specifics of each texture shader
     operation are described in section 3.8.12."

 --  Section 3.8.2 "Alternate Texture Image Specification Commands"

     Amend the following text inserted by NV_texture_shader after the
     six paragraph to include 3D texture references:

     "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, SIGNED_HILO_NV, SIGNED_HILO16_NV, DSDT_NV, DSDT8_NV,
     DSDT_MAG_NV, DSDT8_MAG8_NV, DSDT_MAG_INTENSITY_NV, or
     DSDT8_MAG8_INTENSITY8_NV.  

     TexSubImage3D, TexSubImage2D, and TexSubImage1D generate the error
     INVALID_OPERATION if the internal format of the texture array
     to which the texels are to be copied has a different format type
     (according to table 3.15) than the format type of the texels being
     specified.  Specifically, if the base internal format is not one of
     HILO_NV, DSDT_NV, DSDT_MAG_NV, or DSDT_INTENSITY_NV, then the format
     parameter must be one of COLOR_INDEX, RED, GREEN, BLUE, ALPHA,
     RGB, RGBA, LUMINANCE, or LUMINANCE_ALPHA; if the base internal
     format is HILO_NV, then the format parameter must be HILO_NV;
     if the base internal format is DSDT_NV, then the format parameter
     must be DSDT_NV; if the base internal format is DSDT_MAG_NV, then
     the format parameter must be DSDT_MAG_NV; if the base internal
     format is DSDT_MAG_INTENSITY_NV, the format parameter must be
     DSDT_MAG_VIB_NV."

 --  Section 3.8.13 "Texture Shaders"

     Amend the designated paragraphs of the NV_texture_shader
     specification to include discussion of 3D textures.

     1st paragraph:

     "Each texture unit is configured with one of twenty-three
     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:

     "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, or
     DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_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."

     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 entries for 3D texture operations:

     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
=================================  =========================  ===============================  ================  ================================
TEXTURE_3D                         -                          -                                -                 -
---------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------
DOT_PRODUCT_TEXTURE_3D_NV          shader result type must    shader operation                 shader operation  -
                                    be one of signed HILO,     must be                          must be
                                    unsigned HILO, all         DOT_PRODUCT_NV                   DOT_PRODUCT_NV
                                    signed RGBA, all
                                    unsigned RGBA
---------------------------------  -------------------------  -------------------------------  ----------------  --------------------------------

     Table 3.B:

texture shader operation i         texture unit i
=================================  =======================================
TEXTURE_3D                         3D target must be consistent
---------------------------------  ---------------------------------------
DOT_PRODUCT_TEXTURE_3D_NV          3D target must be consistent
---------------------------------  ---------------------------------------

     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
=================================  ==========  =========  ======  ======  ======  ========  =====  =========  ========  ======
TEXTURE_3D                         s,t,r,q     3D         -       -       -       -         -      -          -         -
---------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------
DOT_PRODUCT_TEXTURE_3D_NV          s,t,r       3D         y       y       -       y         -      -          -         -
---------------------------------  ----------  ---------  ------  ------  ------  --------  -----  ---------  --------  ------

     Table 3.D:

texture shader operation i         shader stage result type       shader stage result                  texture unit RGBA color result
=================================  =============================  ===================================  ======================================
TEXTURE_3D                         matches 3D target type         filtered 3D target texel             if 3D target texture type is RGBA, 
                                                                                                        filtered 3D target texel,
                                                                                                        else (0,0,0,0)
---------------------------------  -----------------------------  -----------------------------------  --------------------------------------
DOT_PRODUCT_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)   
-------------------------------    -----------------------------  -----------------------------------  --------------------------------------

     Add the following new sections specifying new 3D texture operations:

     3.8.13.1.22  3D Projective Texturing

     The TEXTURE_3D texture shader operation accesses the texture unit's
     3D texture object (as described in sections 3.8.4, 3.8.5, and 3.8.6)
     using (s/q,t/q,r/q) for the 3D texture coordinates where s, t, r,
     and q are the homogeneous texture coordinates for the texture unit.
     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.  This mode
     is equivalent to conventional texturing's 3D texture target.

     If the texture unit's 3D 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.23  Dot Product Texture 3D

     The DOT_PRODUCT_TEXTURE_3D_NV texture shader operation accesses the
     texture unit's 3D texture object (as described in sections 3.8.4,
     3.8.5, and 3.8.6) using (dotPP,dotP,dotC) for the 3D texture
     coordinates.  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.

     Assuming that i is the current texture shader stage, dotPP is the
     floating-point dot product texture shader result from the i-2
     texture shader stage, assuming the i-2 texture shader stage's
     operation is DOT_PRODUCT_NV.  dotP is the floating-point dot
     product texture shader result from the i-1 texture shader stage,
     assuming the i-1 texture shader stage's operation is DOT_PRODUCT_NV.
     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 either the i-1 or i-2 texture shader stage operation is not
     DOT_PRODUCT_NV, then this texture shader stage is not consistent.

     If either the i-1 or i-2 texture shader stage is not consistent, then
     this texture shader stage is not consistent.

     If the texture unit's 3D 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.2  Texture Shader Restrictions

     Amend the first four paragraphs in this section to include 3D
     texture 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,
     or DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV.  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.

     The error INVALID_OPERATION occurs if the
     SHADER_OPERATION_NV parameter for texture unit
     1 is assigned one of 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,
     or DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV.  Each of these texture
     shaders requires either two previous texture shader results or
     a dot product result that cannot be generated by texture unit 0.
     Therefore these shaders are disallowed for texture unit 1.

     The error INVALID_OPERATION occurs if the
     SHADER_OPERATION_NV parameter for texture unit
     2 is assigned one of DOT_PRODUCT_TEXTURE_3D_NV,
     DOT_PRODUCT_TEXTURE_CUBE_MAP_NV, DOT_PRODUCT_REFLECT_CUBE_MAP_NV,
     DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV.  Each of these texture
     shaders requires three previous texture shader results.  Therefore
     these shaders are disallowed for texture unit 2."

     3.8.13.3  Required State

     Amend the first paragraph in this section to account for the 2 new
     3D texture shader operations:

     "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 twenty-three-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

     The following errors are updated to reflect 3D texture operations:

     INVALID_OPERATION is generated if a packed pixel format type listed
     in table 3.8 is used with DrawPixels, ReadPixels, ColorTable,
     ColorSubTable, ConvolutionFilter1D, ConvolutionFilter2D,
     SeparableFilter2D, GetColorTable, GetConvolutionFilter,
     GetSeparableFilter, GetHistogram, GetMinmax, TexImage1D, TexImage2D,
     TexImage3D, TexSubImage1D, TexSubImage2D, TexSubImage3d, or
     GetTexImage but the format parameter does not match on of the allowed
     Matching Pixel Formats listed in table 3.8 for the specified packed
     type parameter.

     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, HILO16_NV, SIGNED_HILO_NV,
     SIGNED_HILO16_NV; or if the internalformat is one of HILO_NV,
     HILO16_NV, SIGNED_HILO_NV, or SIGNED_HILO16_NV and the format is
     not HILO_NV.

     INVALID_OPERATION is generated when TexImage3D, TexImage2D,
     or TexImage1D is called and if the format is DSDT_NV and the
     internalformat is not either DSDT_NV or DSDT8_NV; or if the internal
     format is either DSDT_NV or DSDT8_NV and the format is not DSDT_NV.

     INVALID_OPERATION is generated when TexImage3D, TexImage2D, or
     TexImage1D is called and if the format is DSDT_MAG_NV and the
     internalformat is not either DSDT_MAG_NV or DSDT8_MAG8_NV; or if
     the internal format is either DSDT_MAG_NV or DSDT8_MAG8_NV and the
     format is not DSDT_MAG_NV.

     INVALID_OPERATION is generated when TexImage3D, TexImage2D,
     or TexImage1D is called and if the format is DSDT_MAG_VIB_NV
     and the internalformat is not either DSDT_MAG_INTENSITY_NV or
     DSDT8_MAG8_INTENSITY8_NV; or if the internal format is either
     DSDT_MAG_INTENSITY_NV or DSDT8_MAG8_INTENSITY8_NV and the format
     is not DSDT_MAG_VIB_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, HILO16_NV, SIGNED_HILO_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 TexSubImage3D, TexSubImage2D, or
     TexSubImage1D is called and the texture array's base internal format
     is not one of HILO_NV, DSDT_NV, DSDT_MAG_NV, or DSDT_INTENSITY_NV,
     and the format parameter is not one of COLOR_INDEX, RED,
     GREEN, BLUE, ALPHA, RGB, RGBA, LUMINANCE, or
     LUMINANCE_ALPHA 

     INVALID_OPERATION is generated when TexSubImage3D, TexSubImage2D, or
     TexSubImage1D is called and the texture array's base internal format
     is HILO_NV and the format parameter is not HILO_NV.

     INVALID_OPERATION is generated when TexSubImage3D, TexSubImage2D, or
     TexSubImage1D is called and the texture array's base internal format
     is DSDT_NV and the format parameter is not DSDT_NV.

     INVALID_OPERATION is generated when TexSubImage3D, TexSubImage2D, or
     TexSubImage1D is called and the texture array's base internal format
     is DSDT_MAG_NV and the format parameter is not DSDT_MAG_NV.

     INVALID_OPERATION is generated when TexSubImage3D, TexSubImage2D,
     or TexSubImage1D is called and the texture array's base internal
     format is DSDT_MAG_INTENSITY_NV and the format parameter is not
     DSDT_MAG_VIRBANCE_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.
     or DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV.

     INVALID_OPERATION is generated when TexEnv is called
     and the SHADER_OPERATION_NV parameter for texture
     unit 1 is assigned one of 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,
     or DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV.

     INVALID_OPERATION is generated when TexEnv is called
     and the SHADER_OPERATION_NV parameter for texture
     unit 2 is assigned one of DOT_PRODUCT_TEXTURE_3D_NV,
     DOT_PRODUCT_TEXTURE_CUBE_MAP_NV, DOT_PRODUCT_REFLECT_CUBE_MAP_NV,
     or DOT_PRODUCT_CONST_EYE_REFLECT_CUBE_MAP_NV.

     INVALID_OPERATION is generated when TexEnv is called and the
     SHADER_OPERATION_NV parameter for texture unit n-1 (where n is the
     number of supported texture units) is assigned either DOT_PRODUCT_NV
     or DOT_PRODUCT_DIFFUSE_CUBE_MAP_NV.

     INVALID_OPERATION is generated when GetTexImage is called with a
     color format (one of RED, GREEN, BLUE, ALPHA, RGB, RGBA, LUMINANCE,
     or LUMINANCE_ALPHA) when the texture image is of a format type (see
     table 3.15) other than RGBA (the DSDT_MAG_INTENSITY_NV base internal
     format does not count as an RGBA format type in this context).

     INVALID_OPERATION is generated when GetTexImage is called with
     a format of HILO when the texture image is of a format type (see
     table 3.15) other than HILO.

     INVALID_OPERATION is generated when GetTexImage is called with a
     format of DSDT_NV when the texture image is of a base internal
     format other than DSDT_NV.

     INVALID_OPERATION is generated when GetTexImage is called with a
     format of DSDT_MAG_NV when the texture image is of a base internal
     format other than DSDT_MAG_NV.

     INVALID_OPERATION is generated when GetTexImage is called with a
     format of DSDT_MAG_VIBRANCE_NV when the texture image is of a base
     internal format other than DSDT_MAG_INTENSITY_NV causes the error
     INVALID_OPERATION."

New State

Table 6.TextureShaders.  Texture Shaders.

Get Value                    Type    Get Command  Initial Value         Description          Sec     Attribute
---------------------------  ------  -----------  --------------------  -------------------  ------  --------------
SHADER_OPERATION_NV          TxZ23   GetTexEnviv  NONE                  Texture shader       3.8.13  texture
                                                                        operation

* Z21 in NV_texture_shader is now Z23 with NV_texture_shader2.

[ 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

     None
