Name

    ARB_shading_language_100

Name Strings

    GL_ARB_shading_language_100

Contact

    John Kessenich, 3Dlabs, Inc. (johnk 'at' 3dlabs.com)
    Barthold Lichtenbelt, NVIDIA (blichtenbelt 'at' nvidia.com)
    Jon Leech, SGI (ljp 'at' sgi.com)

Notice

    Copyright (c) 2003-2013 The Khronos Group Inc. Copyright terms at
        http://www.khronos.org/registry/speccopyright.html

IP Status

    Microsoft claims to own unspecified intellectual property related to
    programmable shading.

Status

    Complete. Approved by the ARB on June 11, 2003.
    Updated revision 8 approved by the ARB on June 17, 2004.

Version

    Last Modified Date: April 6, 2004
    Revision: 8

Number

    ARB Extension #33

Dependencies

    This extension is written against the OpenGL 1.5 Specification

    ARB_shader_objects, ARB_fragment_shader, and ARB_vertex_shader are
    required to utilize the OpenGL Shading Language associated with this
    extension.

Overview

    This extension string indicates that the OpenGL Shading Language is
    supported. The Shading Language is defined by a separate specification
    document which can be downloaded from

        http://www.opengl.org/documentation/oglsl.html

Issues

    1) How do we indicate revisions in the supported version of the Shading
       Language?

        RESOLVED: Add a SHADING_LANGUAGE_VERSION query. This query was not
        present in the initial version of the extension. Therefore,
        applications should be prepared to detect an INVALID_ENUM error
        being raised by glGetString(GL_SHADING_LANGUAGE_VERSION). If this
        error is raised, but ARB_shading_language_100 is defined in the
        EXTENSIONS string, the application can assume that the initial
        release of the Shading Language (1.00, which was numbered "1.051"
        corresponding to document revision 51) is supported.

    2) What is the format of the SHADING_LANGUAGE_VERSION string? How does
       it map onto the release number of the shading language specification?

        RESOLVED: Identical to the VERSION string format:
        "major.minor[.release] [vendor info]". The release number is an
        optional vendor release number, not the shading language
        specification document release number (which is never visible to
        apps).

        The "1.051" release number of the initial Shading Language
        specification document corresponds to a SHADING_LANGUAGE_VERSION
        string of "1.00", since "51" was the revision number of the
        document, not the minor number.

        Going forward, the specification and query must always use the same
        encoding for major and minor numbers. The second release of the
        specification will be labelled "version 1.10, document revision 55",
        and the corresponding SHADING_LANGUAGE_VERSION string will be "1.10"
        (we chose to bump the minor version directly to 10 to avoid problems
        with leading 0s, and confusion with the old "1.051" document release
        number).

        Document release and vendor release numbers need not have any
        relation to each other, since they represent changes other than
        functionality, such as bug fixes and optimizations (for the
        implementation), and typos and errata for the specification).

        Functional changes to the shading language must always be indicated
        by an increase in the specification minor version number. Such
        changes may or may not correspond to changes to the core OpenGL
        version number as well, depending on whether or not they are visible
        in the OpenGL API.

    3) Should SHADING_LANGUAGE_VERSION be added to the state tables?

        RESOLVED: Yes. The other GetString queries (VERSION, EXTENSIONS,
        RENDERER, and VENDOR), which have been omitted in the past, should
        also be added, along with a new type code for string state values.

    4) What should the exact wording of the "IP Status" language be?

        Microsoft has made claims towards the low-level vertex shader and
        towards the generic programming framework proposed but not accepted
        into OpenGL 1.4, although that framework did not specify an actual
        shading language. Additional verbal statements made by Dave Aronson
        suggest that Microsoft may feel its claims extend to all
        programmable shading implementations. In fairness to implementers,
        we need to note the possibility of such a claim while also noting
        our lack of any specific information about what IP is being claimed.

New Tokens

    Accepted by the <name> parameter of GetString:

        SHADING_LANGUAGE_VERSION_ARB            0x8B8C

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

    Modify Section 6.1.11, Pointer and String Queries

    ... returns a pointer to a static string describing some aspect of the
    current GL connection(1).
       {footnote 1: Applications making copies of these static strings
        should never use a fixed-length buffer, because the strings may grow
        unpredictably over time resulting in buffer overflow when copying.
        This is particularly true of the EXTENSIONS string, which has become
        extremely long in some GL implementations.}
    The possible values for <name> are VENDOR, RENDERER, VERSION,
    SHADING_LANGUAGE_VERSION, and EXTENSIONS. The format of the RENDERER and
    VENDOR strings is implementation dependent. The EXTENSIONS string
    contains a space separated list of extension names (the extension names
    themselves do not contain any spaces). The VERSION and
    SHADING_LANGUAGE_VERSION strings are laid out as follows:

        <version number><space><vendor-specific information>

    The version number is either of the form <major_number.minor_number> or
    <major_number.minor_number.release_number>, where the numbers all have
    one or more digits. The <release_number> and vendor specific information
    are optional. However, if present, then they pertain to the server and
    their format and contents are implementation dependent.


    Add to Table 6.3, State variable types

        Type code   Explanation
        ---------   ----------------------
            S       NULL-terminated string

Errors

    The error INVALID_ENUM may be generated by GetString if <name> is
    SHADING_LANGUAGE_VERSION, but only the initial version of this extension
    is supported. In this case, the implementation will support the initial
    release (version 1.00, document version labelled "1.051") of the OpenGL
    Shading Language.

New Implementation Dependent State

    Added to table 6.30 (Implementation Dependent Values)

    Get Value                Type  Get Command  Minimum Description          Sec.    Attrib
                                                Value
    ---------                ----  -----------  ------- -----------          ----    ------
    EXTENSIONS               S     GetString       -    Supported extensions 6.1.11  -
    RENDERER                 S     GetString       -    Renderer string      6.1.11  -
    SHADING_LANGUAGE_VERSION S     GetString       -    Shading Language     6.1.11  -
        _ARB                                            version supported
    VENDOR                   S     GetString       -    Vendor string        6.1.11  -
    VERSION                  S     GetString       -    OpenGL version       6.1.11  -
                                                        supported

Revision History

   Date: 2004/04/06
   Revision: 8
      - Corrected several typos and noted an additional reason for going to
        minor release number 10 instead of 1 (ambiguity relative to the
        initial "1.051" document release number).

   Date: 2004/04/06
   Revision: 7
      - Clarified that the release_number field is also vendor information,
        and that the major.minor notation of the query and the shading
        language specification must match in the future. Noted that not
        supporting the query implies that version 1.00 of the shading
        language is supported.

   Date: 2004/04/05
   Revision: 6
      - Fixed some typos. Changed errors section to require that the initial
        version of the shading language be supported if the
        SHADING_LANGUAGE_VERSION query fails, but the extension is
        supported.

   Date: 2004/04/02
   Revision: 5
      - Assigned enum value to SHADING_LANGUAGE_VERSION. Corrected
        SHADER_VERSION to SHADING_LANGUAGE_VERSION in one place previously
        missed.

   Date: 2004/03/26
   Revision: 4
      - Changed query from SHADER_VERSION to SHADING_LANGUAGE_VERSION to
        match extension name. Added an issue to determine exact wording of
        the IP Status comment.

   Date: 2004/03/19
   Revision: 3
      - Resolved issues 2 and 3. Required that future shading language
        specification version numbers match the SHADER_VERSION format.
        Corrected omission of other GetString queries from the state tables.

   Date: 2004/03/14
   Revision: 2
      - Corrected URL to refer to opengl.org instead of 3dlabs.com.
      - Added SHADER_VERSION string query. Defined format of the shader
        version string and described fallback behavior for older
        implementations of the extension.
