11591693c7b415e9869157c711fe11263c95d74eDavid LiName
21591693c7b415e9869157c711fe11263c95d74eDavid Li
31591693c7b415e9869157c711fe11263c95d74eDavid Li    MESA_shader_debug
41591693c7b415e9869157c711fe11263c95d74eDavid Li
51591693c7b415e9869157c711fe11263c95d74eDavid LiName Strings
61591693c7b415e9869157c711fe11263c95d74eDavid Li
71591693c7b415e9869157c711fe11263c95d74eDavid Li    GL_MESA_shader_debug
81591693c7b415e9869157c711fe11263c95d74eDavid Li
91591693c7b415e9869157c711fe11263c95d74eDavid LiContact
101591693c7b415e9869157c711fe11263c95d74eDavid Li
111591693c7b415e9869157c711fe11263c95d74eDavid Li    Brian Paul (brian.paul 'at' tungstengraphics.com)
121591693c7b415e9869157c711fe11263c95d74eDavid Li    Michal Krol (mjkrol 'at' gmail.com)
131591693c7b415e9869157c711fe11263c95d74eDavid Li
141591693c7b415e9869157c711fe11263c95d74eDavid LiStatus
151591693c7b415e9869157c711fe11263c95d74eDavid Li
161591693c7b415e9869157c711fe11263c95d74eDavid Li    Obsolete.
171591693c7b415e9869157c711fe11263c95d74eDavid Li
181591693c7b415e9869157c711fe11263c95d74eDavid LiVersion
191591693c7b415e9869157c711fe11263c95d74eDavid Li
201591693c7b415e9869157c711fe11263c95d74eDavid Li    Last Modified Date: July 30, 2006
211591693c7b415e9869157c711fe11263c95d74eDavid Li    Author Revision: 0.2
221591693c7b415e9869157c711fe11263c95d74eDavid Li
231591693c7b415e9869157c711fe11263c95d74eDavid LiNumber
241591693c7b415e9869157c711fe11263c95d74eDavid Li
251591693c7b415e9869157c711fe11263c95d74eDavid Li    TBD
261591693c7b415e9869157c711fe11263c95d74eDavid Li
271591693c7b415e9869157c711fe11263c95d74eDavid LiDependencies
281591693c7b415e9869157c711fe11263c95d74eDavid Li
291591693c7b415e9869157c711fe11263c95d74eDavid Li    OpenGL 1.0 is required.
301591693c7b415e9869157c711fe11263c95d74eDavid Li
311591693c7b415e9869157c711fe11263c95d74eDavid Li    The ARB_shader_objects extension is required.
321591693c7b415e9869157c711fe11263c95d74eDavid Li
331591693c7b415e9869157c711fe11263c95d74eDavid Li    The ARB_shading_language_100 extension is required.
341591693c7b415e9869157c711fe11263c95d74eDavid Li
351591693c7b415e9869157c711fe11263c95d74eDavid Li    The extension is written against the OpenGL 1.5 specification.
361591693c7b415e9869157c711fe11263c95d74eDavid Li
371591693c7b415e9869157c711fe11263c95d74eDavid Li    The extension is written against the OpenGL Shading Language 1.10
381591693c7b415e9869157c711fe11263c95d74eDavid Li    Specification.
391591693c7b415e9869157c711fe11263c95d74eDavid Li
401591693c7b415e9869157c711fe11263c95d74eDavid LiOverview
411591693c7b415e9869157c711fe11263c95d74eDavid Li
421591693c7b415e9869157c711fe11263c95d74eDavid Li    This extension introduces a debug object that can be attached to
431591693c7b415e9869157c711fe11263c95d74eDavid Li    a program object to enable debugging. Vertex and/or fragment shader,
441591693c7b415e9869157c711fe11263c95d74eDavid Li    during execution, issue diagnostic function calls that are logged
451591693c7b415e9869157c711fe11263c95d74eDavid Li    to the debug object's log. A separate debug log for each shader type
461591693c7b415e9869157c711fe11263c95d74eDavid Li    is maintained. A debug object can be attached, detached and queried
471591693c7b415e9869157c711fe11263c95d74eDavid Li    at any time outside the Begin/End pair. Multiple debug objects can
481591693c7b415e9869157c711fe11263c95d74eDavid Li    be attached to a single program object.
491591693c7b415e9869157c711fe11263c95d74eDavid Li
501591693c7b415e9869157c711fe11263c95d74eDavid LiIP Status
511591693c7b415e9869157c711fe11263c95d74eDavid Li
521591693c7b415e9869157c711fe11263c95d74eDavid Li    None
531591693c7b415e9869157c711fe11263c95d74eDavid Li
541591693c7b415e9869157c711fe11263c95d74eDavid LiIssues
551591693c7b415e9869157c711fe11263c95d74eDavid Li
561591693c7b415e9869157c711fe11263c95d74eDavid Li    None
571591693c7b415e9869157c711fe11263c95d74eDavid Li
581591693c7b415e9869157c711fe11263c95d74eDavid LiNew Procedures and Functions
591591693c7b415e9869157c711fe11263c95d74eDavid Li
601591693c7b415e9869157c711fe11263c95d74eDavid Li    handleARB CreateDebugObjectMESA(void)
611591693c7b415e9869157c711fe11263c95d74eDavid Li    void ClearDebugLogMESA(handleARB obj, enum logType, enum shaderType)
621591693c7b415e9869157c711fe11263c95d74eDavid Li    void GetDebugLogMESA(handleARB obj, enum logType, enum shaderType,
631591693c7b415e9869157c711fe11263c95d74eDavid Li                         sizei maxLength, sizei *length,
641591693c7b415e9869157c711fe11263c95d74eDavid Li                         charARB *debugLog)
651591693c7b415e9869157c711fe11263c95d74eDavid Li    sizei GetDebugLogLengthMESA(handleARB obj, enum logType,
661591693c7b415e9869157c711fe11263c95d74eDavid Li                                enum shaderType)
671591693c7b415e9869157c711fe11263c95d74eDavid Li
681591693c7b415e9869157c711fe11263c95d74eDavid LiNew Types
691591693c7b415e9869157c711fe11263c95d74eDavid Li
701591693c7b415e9869157c711fe11263c95d74eDavid Li    None
711591693c7b415e9869157c711fe11263c95d74eDavid Li
721591693c7b415e9869157c711fe11263c95d74eDavid LiNew Tokens
731591693c7b415e9869157c711fe11263c95d74eDavid Li
741591693c7b415e9869157c711fe11263c95d74eDavid Li    Returned by the <params> parameter of GetObjectParameter{fi}vARB:
751591693c7b415e9869157c711fe11263c95d74eDavid Li
761591693c7b415e9869157c711fe11263c95d74eDavid Li        DEBUG_OBJECT_MESA                               0x8759
771591693c7b415e9869157c711fe11263c95d74eDavid Li
781591693c7b415e9869157c711fe11263c95d74eDavid Li    Accepted by the <logType> argument of ClearDebugLogMESA,
791591693c7b415e9869157c711fe11263c95d74eDavid Li    GetDebugLogLengthMESA and GetDebugLogMESA:
801591693c7b415e9869157c711fe11263c95d74eDavid Li
811591693c7b415e9869157c711fe11263c95d74eDavid Li        DEBUG_PRINT_MESA                                0x875A
821591693c7b415e9869157c711fe11263c95d74eDavid Li        DEBUG_ASSERT_MESA                               0x875B
831591693c7b415e9869157c711fe11263c95d74eDavid Li
841591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 2 of the OpenGL 1.5 Specification
851591693c7b415e9869157c711fe11263c95d74eDavid Li(OpenGL Operation)
861591693c7b415e9869157c711fe11263c95d74eDavid Li
871591693c7b415e9869157c711fe11263c95d74eDavid Li    None
881591693c7b415e9869157c711fe11263c95d74eDavid Li
891591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 3 of the OpenGL 1.5 Specification (Rasterization)
901591693c7b415e9869157c711fe11263c95d74eDavid Li
911591693c7b415e9869157c711fe11263c95d74eDavid Li    None
921591693c7b415e9869157c711fe11263c95d74eDavid Li
931591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 4 of the OpenGL 1.5 Specification (Per-Fragment
941591693c7b415e9869157c711fe11263c95d74eDavid LiOperations and the Frame Buffer)
951591693c7b415e9869157c711fe11263c95d74eDavid Li
961591693c7b415e9869157c711fe11263c95d74eDavid Li    None
971591693c7b415e9869157c711fe11263c95d74eDavid Li
981591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 5 of the OpenGL 1.5 Specification
991591693c7b415e9869157c711fe11263c95d74eDavid Li(Special Functions)
1001591693c7b415e9869157c711fe11263c95d74eDavid Li
1011591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1021591693c7b415e9869157c711fe11263c95d74eDavid Li
1031591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 6 of the OpenGL 1.5 Specification (State and State
1041591693c7b415e9869157c711fe11263c95d74eDavid LiRequests)
1051591693c7b415e9869157c711fe11263c95d74eDavid Li
1061591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1071591693c7b415e9869157c711fe11263c95d74eDavid Li
1081591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Appendix A of the OpenGL 1.5 Specification (Invariance)
1091591693c7b415e9869157c711fe11263c95d74eDavid Li
1101591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1111591693c7b415e9869157c711fe11263c95d74eDavid Li
1121591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 1 of the OpenGL Shading Language 1.10 Specification
1131591693c7b415e9869157c711fe11263c95d74eDavid Li(Introduction)
1141591693c7b415e9869157c711fe11263c95d74eDavid Li
1151591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1161591693c7b415e9869157c711fe11263c95d74eDavid Li
1171591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 2 of the OpenGL Shading Language 1.10 Specification
1181591693c7b415e9869157c711fe11263c95d74eDavid Li(Overview of OpenGL Shading)
1191591693c7b415e9869157c711fe11263c95d74eDavid Li
1201591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1211591693c7b415e9869157c711fe11263c95d74eDavid Li
1221591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 3 of the OpenGL Shading Language 1.10 Specification
1231591693c7b415e9869157c711fe11263c95d74eDavid Li(Basics)
1241591693c7b415e9869157c711fe11263c95d74eDavid Li
1251591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1261591693c7b415e9869157c711fe11263c95d74eDavid Li
1271591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 4 of the OpenGL Shading Language 1.10 Specification
1281591693c7b415e9869157c711fe11263c95d74eDavid Li(Variables and Types)
1291591693c7b415e9869157c711fe11263c95d74eDavid Li
1301591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1311591693c7b415e9869157c711fe11263c95d74eDavid Li
1321591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 5 of the OpenGL Shading Language 1.10 Specification
1331591693c7b415e9869157c711fe11263c95d74eDavid Li(Operators and Expressions)
1341591693c7b415e9869157c711fe11263c95d74eDavid Li
1351591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1361591693c7b415e9869157c711fe11263c95d74eDavid Li
1371591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 6 of the OpenGL Shading Language 1.10 Specification
1381591693c7b415e9869157c711fe11263c95d74eDavid Li(Statements and Structure)
1391591693c7b415e9869157c711fe11263c95d74eDavid Li
1401591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1411591693c7b415e9869157c711fe11263c95d74eDavid Li
1421591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 7 of the OpenGL Shading Language 1.10 Specification
1431591693c7b415e9869157c711fe11263c95d74eDavid Li(Built-in Variables)
1441591693c7b415e9869157c711fe11263c95d74eDavid Li
1451591693c7b415e9869157c711fe11263c95d74eDavid Li    None
1461591693c7b415e9869157c711fe11263c95d74eDavid Li
1471591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 8 of the OpenGL Shading Language 1.10 Specification
1481591693c7b415e9869157c711fe11263c95d74eDavid Li(Built-in Functions)
1491591693c7b415e9869157c711fe11263c95d74eDavid Li
1501591693c7b415e9869157c711fe11263c95d74eDavid Li    Add a new section 8.10 "Debug Functions":
1511591693c7b415e9869157c711fe11263c95d74eDavid Li
1521591693c7b415e9869157c711fe11263c95d74eDavid Li    Debug functions are available to both fragment and vertex shaders.
1531591693c7b415e9869157c711fe11263c95d74eDavid Li    They are used to track the execution of a shader by logging
1541591693c7b415e9869157c711fe11263c95d74eDavid Li    passed-in arguments to the debug object's log. Those values can be
1551591693c7b415e9869157c711fe11263c95d74eDavid Li    retrieved by the application for inspection after shader execution
1561591693c7b415e9869157c711fe11263c95d74eDavid Li    is complete.
1571591693c7b415e9869157c711fe11263c95d74eDavid Li
1581591693c7b415e9869157c711fe11263c95d74eDavid Li    The text, if any, produced by any of these functions is appended
1591591693c7b415e9869157c711fe11263c95d74eDavid Li    to each debug object that is attached to the program object.
1601591693c7b415e9869157c711fe11263c95d74eDavid Li    There are different debug log types
1611591693c7b415e9869157c711fe11263c95d74eDavid Li
1621591693c7b415e9869157c711fe11263c95d74eDavid Li    Add a new section 8.10.1 "Print Function":
1631591693c7b415e9869157c711fe11263c95d74eDavid Li
1641591693c7b415e9869157c711fe11263c95d74eDavid Li    The following printMESA prototypes are available.
1651591693c7b415e9869157c711fe11263c95d74eDavid Li
1661591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const float value)
1671591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const int value)
1681591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const bool value)
1691591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const vec2 value)
1701591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const vec3 value)
1711591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const vec4 value)
1721591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const ivec2 value)
1731591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const ivec3 value)
1741591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const ivec4 value)
1751591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const bvec2 value)
1761591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const bvec3 value)
1771591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const bvec4 value)
1781591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const mat2 value)
1791591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const mat3 value)
1801591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const mat4 value)
1811591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const sampler1D value)
1821591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const sampler2D value)
1831591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const sampler3D value)
1841591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const samplerCube value)
1851591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const sampler1DShadow value)
1861591693c7b415e9869157c711fe11263c95d74eDavid Li        void printMESA(const sampler2DShadow value)
1871591693c7b415e9869157c711fe11263c95d74eDavid Li
1881591693c7b415e9869157c711fe11263c95d74eDavid Li    The printMESA function writes the argument <value> to the "debug
1891591693c7b415e9869157c711fe11263c95d74eDavid Li    print log" (XXX DEBUG_PRINT_MESA?). Each component is written in
1901591693c7b415e9869157c711fe11263c95d74eDavid Li    text format (XXX format!) and is delimited by a white space (XXX 1
1911591693c7b415e9869157c711fe11263c95d74eDavid Li    or more?).
1921591693c7b415e9869157c711fe11263c95d74eDavid Li
1931591693c7b415e9869157c711fe11263c95d74eDavid Li    Add a new section 8.10.2 "Assert Function":
1941591693c7b415e9869157c711fe11263c95d74eDavid Li
1951591693c7b415e9869157c711fe11263c95d74eDavid Li    The following assertMESA prototypes are available.
1961591693c7b415e9869157c711fe11263c95d74eDavid Li
1971591693c7b415e9869157c711fe11263c95d74eDavid Li        void assertMESA(const bool condition)
1981591693c7b415e9869157c711fe11263c95d74eDavid Li        void assertMESA(const bool condition, const int cookie)
1991591693c7b415e9869157c711fe11263c95d74eDavid Li        void assertMESA(const bool condition, const int cookie,
2001591693c7b415e9869157c711fe11263c95d74eDavid Li                        const int file, const int line)
2011591693c7b415e9869157c711fe11263c95d74eDavid Li
2021591693c7b415e9869157c711fe11263c95d74eDavid Li    The assertMESA function checks if the argument <condition> is
2031591693c7b415e9869157c711fe11263c95d74eDavid Li    true or false. If it is true, nothing happens. If it is false,
2041591693c7b415e9869157c711fe11263c95d74eDavid Li    a diagnostic message is written to the "debug assert log".
2051591693c7b415e9869157c711fe11263c95d74eDavid Li    The message contains the argument <file>, <line>, <cookie> and
2061591693c7b415e9869157c711fe11263c95d74eDavid Li    implementation dependent double-quoted string, each of this
2071591693c7b415e9869157c711fe11263c95d74eDavid Li    delimited by a white space. If the argument <cookie> is not present,
2081591693c7b415e9869157c711fe11263c95d74eDavid Li    it is meant as if it was of value 0. If the arguments <file> and
2091591693c7b415e9869157c711fe11263c95d74eDavid Li    <line> are not present, they are meant as if they were of values
2101591693c7b415e9869157c711fe11263c95d74eDavid Li    __FILE__ and __LINE__, respectively. The following three calls
2111591693c7b415e9869157c711fe11263c95d74eDavid Li    produce the same output, assuming they were issued from the same
2121591693c7b415e9869157c711fe11263c95d74eDavid Li    file and line.
2131591693c7b415e9869157c711fe11263c95d74eDavid Li
2141591693c7b415e9869157c711fe11263c95d74eDavid Li        assertMESA (false);
2151591693c7b415e9869157c711fe11263c95d74eDavid Li        assertMESA (false, 0);
2161591693c7b415e9869157c711fe11263c95d74eDavid Li        assertMESA (false, 0, __FILE__, __LINE__);
2171591693c7b415e9869157c711fe11263c95d74eDavid Li
2181591693c7b415e9869157c711fe11263c95d74eDavid Li    The diagnostic message examples follow.
2191591693c7b415e9869157c711fe11263c95d74eDavid Li
2201591693c7b415e9869157c711fe11263c95d74eDavid Li        1 89 0 ""
2211591693c7b415e9869157c711fe11263c95d74eDavid Li        1 45 333 "all (lessThanEqual (fragColor, vec4 (1.0)))"
2221591693c7b415e9869157c711fe11263c95d74eDavid Li        1 66 1 "assertion failed in file 1, line 66, cookie 1"
2231591693c7b415e9869157c711fe11263c95d74eDavid Li
2241591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 9 of the OpenGL Shading Language 1.10 Specification
2251591693c7b415e9869157c711fe11263c95d74eDavid Li(Shading Language Grammar)
2261591693c7b415e9869157c711fe11263c95d74eDavid Li
2271591693c7b415e9869157c711fe11263c95d74eDavid Li    None
2281591693c7b415e9869157c711fe11263c95d74eDavid Li
2291591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to Chapter 10 of the OpenGL Shading Language 1.10
2301591693c7b415e9869157c711fe11263c95d74eDavid LiSpecification (Issues)
2311591693c7b415e9869157c711fe11263c95d74eDavid Li
2321591693c7b415e9869157c711fe11263c95d74eDavid Li    None
2331591693c7b415e9869157c711fe11263c95d74eDavid Li
2341591693c7b415e9869157c711fe11263c95d74eDavid LiAdditions to the AGL/EGL/GLX/WGL Specifications
2351591693c7b415e9869157c711fe11263c95d74eDavid Li
2361591693c7b415e9869157c711fe11263c95d74eDavid Li    None
2371591693c7b415e9869157c711fe11263c95d74eDavid Li
2381591693c7b415e9869157c711fe11263c95d74eDavid LiGLX Protocol
2391591693c7b415e9869157c711fe11263c95d74eDavid Li
2401591693c7b415e9869157c711fe11263c95d74eDavid Li    None
2411591693c7b415e9869157c711fe11263c95d74eDavid Li
2421591693c7b415e9869157c711fe11263c95d74eDavid LiErrors
2431591693c7b415e9869157c711fe11263c95d74eDavid Li
2441591693c7b415e9869157c711fe11263c95d74eDavid Li    TBD
2451591693c7b415e9869157c711fe11263c95d74eDavid Li
2461591693c7b415e9869157c711fe11263c95d74eDavid LiNew State
2471591693c7b415e9869157c711fe11263c95d74eDavid Li
2481591693c7b415e9869157c711fe11263c95d74eDavid Li    TBD
2491591693c7b415e9869157c711fe11263c95d74eDavid Li
2501591693c7b415e9869157c711fe11263c95d74eDavid LiNew Implementation Dependent State
2511591693c7b415e9869157c711fe11263c95d74eDavid Li
2521591693c7b415e9869157c711fe11263c95d74eDavid Li    TBD
2531591693c7b415e9869157c711fe11263c95d74eDavid Li
2541591693c7b415e9869157c711fe11263c95d74eDavid LiSample Code
2551591693c7b415e9869157c711fe11263c95d74eDavid Li
2561591693c7b415e9869157c711fe11263c95d74eDavid Li    TBD
2571591693c7b415e9869157c711fe11263c95d74eDavid Li
2581591693c7b415e9869157c711fe11263c95d74eDavid LiRevision History
2591591693c7b415e9869157c711fe11263c95d74eDavid Li
2601591693c7b415e9869157c711fe11263c95d74eDavid Li    29 May 2006
2611591693c7b415e9869157c711fe11263c95d74eDavid Li        Initial draft. (Michal Krol)
2621591693c7b415e9869157c711fe11263c95d74eDavid Li    30 July 2006
2631591693c7b415e9869157c711fe11263c95d74eDavid Li        Add Overview, New Procedures and Functions, New Tokens sections.
2641591693c7b415e9869157c711fe11263c95d74eDavid Li        Add sections 8.10.1, 8.10.2 to GLSL spec.
265