Name

    MESA_shader_debug

Name Strings

    GL_MESA_shader_debug

Contact

    Brian Paul (brian.paul 'at' tungstengraphics.com)
    Michal Krol (mjkrol 'at' gmail.com)

Status

    XXX - Not complete yet!!!

Version

    Last Modified Date: July 30, 2006
    Author Revision: 0.2
    $Date: 2006/07/30 14:28:38 $ $Revision: 1.2 $

Number

    TBD

Dependencies

    OpenGL 1.0 is required.

    The ARB_shader_objects extension is required.

    The ARB_shading_language_100 extension is required.

    The extension is written against the OpenGL 1.5 specification.

    The extension is written against the OpenGL Shading Language 1.10
    Specification.

Overview

    This extension introduces a debug object that can be attached to
    a program object to enable debugging. Vertex and/or fragment shader,
    during execution, issue diagnostic function calls that are logged
    to the debug object's log. A separate debug log for each shader type
    is maintained. A debug object can be attached, detached and queried
    at any time outside the Begin/End pair. Multiple debug objects can
    be attached to a single program object.

IP Status

    None

Issues

    None

New Procedures and Functions

    handleARB CreateDebugObjectMESA(void)
    void ClearDebugLogMESA(handleARB obj, enum logType, enum shaderType)
    void GetDebugLogMESA(handleARB obj, enum logType, enum shaderType,
                         sizei maxLength, sizei *length,
                         charARB *debugLog)
    sizei GetDebugLogLengthMESA(handleARB obj, enum logType,
                                enum shaderType)

New Types

    None

New Tokens

    Returned by the <params> parameter of GetObjectParameter{fi}vARB:

        DEBUG_OBJECT_MESA                               0x8759

    Accepted by the <logType> argument of ClearDebugLogMESA,
    GetDebugLogLengthMESA and GetDebugLogMESA:

        DEBUG_PRINT_MESA                                0x875A
        DEBUG_ASSERT_MESA                               0x875B

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

    None

Additions to Chapter 3 of the OpenGL 1.5 Specification (Rasterization)

    None

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

    None

Additions to Chapter 5 of the OpenGL 1.5 Specification
(Special Functions)

    None

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

    None

Additions to Appendix A of the OpenGL 1.5 Specification (Invariance)

    None

Additions to Chapter 1 of the OpenGL Shading Language 1.10 Specification
(Introduction)

    None

Additions to Chapter 2 of the OpenGL Shading Language 1.10 Specification
(Overview of OpenGL Shading)

    None

Additions to Chapter 3 of the OpenGL Shading Language 1.10 Specification
(Basics)

    None

Additions to Chapter 4 of the OpenGL Shading Language 1.10 Specification
(Variables and Types)

    None

Additions to Chapter 5 of the OpenGL Shading Language 1.10 Specification
(Operators and Expressions)

    None

Additions to Chapter 6 of the OpenGL Shading Language 1.10 Specification
(Statements and Structure)

    None

Additions to Chapter 7 of the OpenGL Shading Language 1.10 Specification
(Built-in Variables)

    None

Additions to Chapter 8 of the OpenGL Shading Language 1.10 Specification
(Built-in Functions)

    Add a new section 8.10 "Debug Functions":

    Debug functions are available to both fragment and vertex shaders.
    They are used to track the execution of a shader by logging
    passed-in arguments to the debug object's log. Those values can be
    retrieved by the application for inspection after shader execution
    is complete.

    The text, if any, produced by any of these functions is appended
    to each debug object that is attached to the program object.
    There are different debug log types

    Add a new section 8.10.1 "Print Function":

    The following printMESA prototypes are available.

        void printMESA(const float value)
        void printMESA(const int value)
        void printMESA(const bool value)
        void printMESA(const vec2 value)
        void printMESA(const vec3 value)
        void printMESA(const vec4 value)
        void printMESA(const ivec2 value)
        void printMESA(const ivec3 value)
        void printMESA(const ivec4 value)
        void printMESA(const bvec2 value)
        void printMESA(const bvec3 value)
        void printMESA(const bvec4 value)
        void printMESA(const mat2 value)
        void printMESA(const mat3 value)
        void printMESA(const mat4 value)
        void printMESA(const sampler1D value)
        void printMESA(const sampler2D value)
        void printMESA(const sampler3D value)
        void printMESA(const samplerCube value)
        void printMESA(const sampler1DShadow value)
        void printMESA(const sampler2DShadow value)

    The printMESA function writes the argument <value> to the "debug
    print log" (XXX DEBUG_PRINT_MESA?). Each component is written in
    text format (XXX format!) and is delimited by a white space (XXX 1
    or more?).

    Add a new section 8.10.2 "Assert Function":

    The following assertMESA prototypes are available.

        void assertMESA(const bool condition)
        void assertMESA(const bool condition, const int cookie)
        void assertMESA(const bool condition, const int cookie,
                        const int file, const int line)

    The assertMESA function checks if the argument <condition> is
    true or false. If it is true, nothing happens. If it is false,
    a diagnostic message is written to the "debug assert log".
    The message contains the argument <file>, <line>, <cookie> and
    implementation dependent double-quoted string, each of this
    delimited by a white space. If the argument <cookie> is not present,
    it is meant as if it was of value 0. If the arguments <file> and
    <line> are not present, they are meant as if they were of values
    __FILE__ and __LINE__, respectively. The following three calls
    produce the same output, assuming they were issued from the same
    file and line.

        assertMESA (false);
        assertMESA (false, 0);
        assertMESA (false, 0, __FILE__, __LINE__);

    The diagnostic message examples follow.

        1 89 0 ""
        1 45 333 "all (lessThanEqual (fragColor, vec4 (1.0)))"
        1 66 1 "assertion failed in file 1, line 66, cookie 1"

Additions to Chapter 9 of the OpenGL Shading Language 1.10 Specification
(Shading Language Grammar)

    None

Additions to Chapter 10 of the OpenGL Shading Language 1.10
Specification (Issues)

    None

Additions to the AGL/EGL/GLX/WGL Specifications

    None

GLX Protocol

    None

Errors

    TBD

New State

    TBD

New Implementation Dependent State

    TBD

Sample Code

    TBD

Revision History

    29 May 2006
        Initial draft. (Michal Krol)
    30 July 2006
        Add Overview, New Procedures and Functions, New Tokens sections.
        Add sections 8.10.1, 8.10.2 to GLSL spec.