This patch adds a OpenGL debug mode.
* This only has an effect on DEBUG builds. Non-DEBUG builds should be essentially unaffected (just a couple more unused PRPackedBool's in GLContext)
* When using a DEBUG build, you can enable the OpenGL debug mode by defining the environment variable MOZ_GL_DEBUG. This has the following effects on every GL call:
1. Checks that the GL context is current. This uses a thread-local static variable. Aborts otherwise.
2. Calls glFinish() after every GL call. This turns OpenGL into a synchronous API. Thanks to that, in case of a crash in the Firefox process caused by a GL call, the stack trace that we get becomes useful.
3. Checks that no GL error was generated. Prints an error message otherwise.
* An extra verbose mode can be enabled by defining the env var MOZ_GL_DEBUG_VERBOSE. It causes messages to be printed before and after every GL call. This is useful to debug graphics system crashes/lockups that make the computer unusable.
* An extra pedantic mode can be enabled by defining the env var MOZ_GL_DEBUG_ABORT_ON_ERROR. It causes us to abort as soon as a GL error is generated. This is useful in the common case where we know that no error should be generated. It must be noted though that some valid WebGL code may generate OpenGL errors (although most WebGL errors are handled by us before calling OpenGL).
The extra verbose/pedantic modes imply the regular debug mode.
Not adding a pref for this, as it's only a debugging tool and mostly a one-shot tool.
Notice that this patch reimplements GL functions as inline methods in GLContext. Notice that being implemented inline in the class body, the 'inline' keyword should be implicit for them.
Notice that the GL error handling means that we reimplement glGetError.
This patch replaces the patch from bug 595151. No multiple inheritance anymode, instead we have a member struct mSymbols.
Created attachment 476665 [details] [diff] [review]
OpenGL debug mode
*** Bug 595151 has been marked as a duplicate of this bug. ***
Created attachment 478371 [details] [diff] [review]
- support Windows
- adapt to recent changes, especially the Scissor / Viewport stuff
Will do the generate-stuff-with-a-script changes and then will ask for review.
Created attachment 480252 [details] [diff] [review]
Here's a new version. Still no automatic python generation, but made it compile on all platforms by removing the thread-local stuff, adding an assertion instead that all GL calls are made from the main thread. Of course this is inessential so if we eventually need to do GL calls from other threads, we'd need to fix this. Comments added.
Created attachment 480989 [details] [diff] [review]
some small tweaks
some small tweaks to this -- mainly moving things to a .h file, and changing some variables and stuff around
What happened to ZeroBase? It disappeared, but you are still calling Zero() though (compilation error).
ZeroBase probably didn't have a good name, but it was already useful not only for the symbols, also for the ContextFormat class.
Created attachment 481054 [details] [diff] [review]
updated and compiling now!
Updated and fixed.. yeah, I nuked ZeroBase -- it had some utility, but it's clearer/easier to just call memset in the two places where it's relevant rather than introduce another base class that people have to figure out when reading the code. :-)
Created attachment 481878 [details] [diff] [review]
updated to apply again
Pushed at last!
This busted non-libxul debug builds -- filed as Bug 603821.
Linked from the main Debugging page at: