Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Erwin <significant.bit@gmail.com>2016-08-15 11:00:59 +0300
committerMike Erwin <significant.bit@gmail.com>2016-08-15 11:10:54 +0300
commitad6e7a0be15cf6c47635987a04cd5824fb5de054 (patch)
tree3e07b631e051935654f01e247cdf11a82fe57cab /source/blender/gpu
parent55eb8ce87361e968b153a3e728e6842e3069d093 (diff)
OpenGL: backtrace on errors (--debug-gpu)
Backtrace so we can pinpoint where the GL error came from. Then fflush on severe errors in case it's severe enough to crash Blender.
Diffstat (limited to 'source/blender/gpu')
-rw-r--r--source/blender/gpu/intern/gpu_debug.c20
1 files changed, 18 insertions, 2 deletions
diff --git a/source/blender/gpu/intern/gpu_debug.c b/source/blender/gpu/intern/gpu_debug.c
index 555af8b087a..21458a22221 100644
--- a/source/blender/gpu/intern/gpu_debug.c
+++ b/source/blender/gpu/intern/gpu_debug.c
@@ -207,13 +207,21 @@ static void APIENTRY gpu_debug_proc(
GLenum severity, GLsizei UNUSED(length),
const GLchar *message, const GLvoid *UNUSED(userParm))
{
+ bool backtrace = false;
+
switch (severity) {
case GL_DEBUG_SEVERITY_HIGH:
+ backtrace = true;
+ /* fall through */
case GL_DEBUG_SEVERITY_MEDIUM:
case GL_DEBUG_SEVERITY_LOW:
case GL_DEBUG_SEVERITY_NOTIFICATION: /* KHR has this, ARB does not */
fprintf(stderr, "GL %s %s: %s\n", source_name(source), message_type_name(type), message);
- fflush(stderr);
+ }
+
+ if (backtrace) {
+ BLI_system_backtrace(stderr);
+ fflush(stderr);
}
}
@@ -224,12 +232,20 @@ static void APIENTRY gpu_debug_proc_amd(
GLenum severity, GLsizei UNUSED(length),
const GLchar *message, GLvoid *UNUSED(userParm))
{
+ bool backtrace = false;
+
switch (severity) {
case GL_DEBUG_SEVERITY_HIGH:
+ backtrace = true;
+ /* fall through */
case GL_DEBUG_SEVERITY_MEDIUM:
case GL_DEBUG_SEVERITY_LOW:
fprintf(stderr, "GL %s: %s\n", category_name_amd(category), message);
- fflush(stderr);
+ }
+
+ if (backtrace) {
+ BLI_system_backtrace(stderr);
+ fflush(stderr);
}
}
#endif