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
    Version:      9

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
