Mesa (master): mesa: added _mesa_dump_renderbuffers() debug code

Brian Paul brianp at kemper.freedesktop.org
Wed Oct 21 21:14:54 UTC 2009


Module: Mesa
Branch: master
Commit: 2cc5a0e6bb8fe2aa0733d70fec65df934b1093f6
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=2cc5a0e6bb8fe2aa0733d70fec65df934b1093f6

Author: Brian Paul <brianp at vmware.com>
Date:   Tue Oct 20 16:13:08 2009 -0600

mesa: added _mesa_dump_renderbuffers() debug code

---

 src/mesa/main/debug.c |   76 +++++++++++++++++++++++++++++++++++++++++++++++-
 src/mesa/main/debug.h |    3 ++
 2 files changed, 77 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/debug.c b/src/mesa/main/debug.c
index 490cc9c..8b1707b 100644
--- a/src/mesa/main/debug.c
+++ b/src/mesa/main/debug.c
@@ -27,6 +27,7 @@
 #include "attrib.h"
 #include "colormac.h"
 #include "context.h"
+#include "enums.h"
 #include "hash.h"
 #include "imports.h"
 #include "debug.h"
@@ -264,10 +265,13 @@ write_ppm(const char *filename, const GLubyte *buffer, int width, int height,
 
 
 /**
- * Write level[0] image to a ppm file.
+ * Write a texture image to a ppm file.
+ * \param face  cube face in [0,5]
+ * \param level  mipmap level
  */
 static void
-write_texture_image(struct gl_texture_object *texObj, GLuint face, GLuint level)
+write_texture_image(struct gl_texture_object *texObj,
+                    GLuint face, GLuint level)
 {
    struct gl_texture_image *img = texObj->Image[face][level];
    if (img) {
@@ -299,6 +303,45 @@ write_texture_image(struct gl_texture_object *texObj, GLuint face, GLuint level)
 }
 
 
+/**
+ * Write renderbuffer image to a ppm file.
+ */
+static void
+write_renderbuffer_image(const struct gl_renderbuffer *rb)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   GLubyte *buffer;
+   char s[100];
+   GLenum format, type;
+
+   if (rb->_BaseFormat == GL_RGB || 
+       rb->_BaseFormat == GL_RGBA) {
+      format = GL_RGBA;
+      type = GL_UNSIGNED_BYTE;
+   }
+   else if (rb->_BaseFormat == GL_DEPTH_STENCIL) {
+      format = GL_DEPTH_STENCIL;
+      type = GL_UNSIGNED_INT_24_8;
+   }
+   else {
+      return;
+   }
+
+   buffer = (GLubyte *) _mesa_malloc(rb->Width * rb->Height * 4);
+
+   ctx->Driver.ReadPixels(ctx, 0, 0, rb->Width, rb->Height,
+                          format, type, &ctx->DefaultPacking, buffer);
+
+   /* make filename */
+   _mesa_sprintf(s, "/tmp/renderbuffer%u.ppm", rb->Name);
+
+   _mesa_printf("  Writing renderbuffer image to %s\n", s);
+   write_ppm(s, buffer, rb->Width, rb->Height, 4, 0, 1, 2, GL_TRUE);
+
+   _mesa_free(buffer);
+}
+
+
 static GLboolean DumpImages;
 
 
@@ -341,6 +384,35 @@ _mesa_dump_textures(GLboolean dumpImages)
 }
 
 
+static void
+dump_renderbuffer_cb(GLuint id, void *data, void *userData)
+{
+   const struct gl_renderbuffer *rb = (const struct gl_renderbuffer *) data;
+   (void) userData;
+
+   _mesa_printf("Renderbuffer %u: %u x %u  IntFormat = %s\n",
+                rb->Name, rb->Width, rb->Height,
+                _mesa_lookup_enum_by_nr(rb->InternalFormat));
+   if (DumpImages) {
+      write_renderbuffer_image(rb);
+   }
+}
+
+
+/**
+ * Print basic info about all renderbuffers to stdout.
+ * If dumpImages is true, write PPM of level[0] image to a file.
+ */
+void
+_mesa_dump_renderbuffers(GLboolean dumpImages)
+{
+   GET_CURRENT_CONTEXT(ctx);
+   DumpImages = dumpImages;
+   _mesa_HashWalk(ctx->Shared->RenderBuffers, dump_renderbuffer_cb, ctx);
+}
+
+
+
 void
 _mesa_dump_color_buffer(const char *filename)
 {
diff --git a/src/mesa/main/debug.h b/src/mesa/main/debug.h
index bb384c4..2a7de9c 100644
--- a/src/mesa/main/debug.h
+++ b/src/mesa/main/debug.h
@@ -61,6 +61,9 @@ extern void
 _mesa_dump_textures(GLboolean dumpImages);
 
 extern void
+_mesa_dump_renderbuffers(GLboolean dumpImages);
+
+extern void
 _mesa_dump_color_buffer(const char *filename);
 
 extern void




More information about the mesa-commit mailing list