summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2013-04-22 19:41:40 -0700
committerEric Anholt <[email protected]>2013-04-29 11:41:34 -0700
commite409889213f3d3bf80c46898b3a48178d9c785f8 (patch)
treeb6c2af8296ea76e32f9f47b9b2a1825d269745bc /src/mesa
parent6ae473221a53d8bcb584021483c5328797c6b67c (diff)
intel: Report FBO incompleteness causes through GL_ARB_debug_output.
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/intel/intel_fbo.c56
1 files changed, 34 insertions, 22 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index d22de681e71..0a55afdda3f 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -707,6 +707,18 @@ intel_finish_render_texture(struct gl_context * ctx,
intel_batchbuffer_emit_mi_flush(intel);
}
+#define fbo_incomplete(fb, ...) do { \
+ static GLuint msg_id = 0; \
+ if (unlikely(ctx->Const.ContextFlags & GL_CONTEXT_FLAG_DEBUG_BIT)) { \
+ _mesa_gl_debug(ctx, &msg_id, \
+ MESA_DEBUG_TYPE_OTHER, \
+ MESA_DEBUG_SEVERITY_MEDIUM, \
+ __VA_ARGS__); \
+ } \
+ DBG(__VA_ARGS__); \
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED; \
+ } while (0)
+
/**
* Do additional "completeness" testing of a framebuffer object.
*/
@@ -741,22 +753,23 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
*/
if (depthRb->mt_level != stencilRb->mt_level ||
depthRb->mt_layer != stencilRb->mt_layer) {
- DBG("depth image level/layer %d/%d != stencil image %d/%d\n",
- depthRb->mt_level,
- depthRb->mt_layer,
- stencilRb->mt_level,
- stencilRb->mt_layer);
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ fbo_incomplete(fb,
+ "FBO incomplete: depth image level/layer %d/%d != "
+ "stencil image %d/%d\n",
+ depthRb->mt_level,
+ depthRb->mt_layer,
+ stencilRb->mt_level,
+ stencilRb->mt_layer);
}
} else {
if (!intel->has_separate_stencil) {
- DBG("separate stencil unsupported\n");
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ fbo_incomplete(fb, "FBO incomplete: separate stencil "
+ "unsupported\n");
}
if (stencil_mt->format != MESA_FORMAT_S8) {
- DBG("separate stencil is %s instead of S8\n",
- _mesa_get_format_name(stencil_mt->format));
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ fbo_incomplete(fb, "FBO incomplete: separate stencil is %s "
+ "instead of S8\n",
+ _mesa_get_format_name(stencil_mt->format));
}
if (intel->gen < 7 && !intel_renderbuffer_has_hiz(depthRb)) {
/* Before Gen7, separate depth and stencil buffers can be used
@@ -765,8 +778,8 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
* [DevSNB]: This field must be set to the same value (enabled
* or disabled) as Hierarchical Depth Buffer Enable.
*/
- DBG("separate stencil without HiZ\n");
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED;
+ fbo_incomplete(fb, "FBO incomplete: separate stencil "
+ "without HiZ\n");
}
}
}
@@ -784,8 +797,8 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
*/
rb = fb->Attachment[i].Renderbuffer;
if (rb == NULL) {
- DBG("attachment without renderbuffer\n");
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ fbo_incomplete(fb, "FBO incomplete: attachment without "
+ "renderbuffer\n");
continue;
}
@@ -794,23 +807,22 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb)
_mesa_get_attachment_teximage_const(&fb->Attachment[i]);
if (img->Border) {
- DBG("texture with border\n");
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ fbo_incomplete(fb, "FBO incomplete: texture with border\n");
continue;
}
}
irb = intel_renderbuffer(rb);
if (irb == NULL) {
- DBG("software rendering renderbuffer\n");
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ fbo_incomplete(fb, "FBO incomplete: software rendering "
+ "renderbuffer\n");
continue;
}
if (!intel->vtbl.render_target_supported(intel, rb)) {
- DBG("Unsupported HW texture/renderbuffer format attached: %s\n",
- _mesa_get_format_name(intel_rb_format(irb)));
- fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED_EXT;
+ fbo_incomplete(fb, "FBO incomplete: Unsupported HW "
+ "texture/renderbuffer format attached: %s\n",
+ _mesa_get_format_name(intel_rb_format(irb)));
}
}
}