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