summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2013-06-06 11:13:02 -0700
committerEric Anholt <[email protected]>2013-06-07 16:05:42 -0700
commit3c21a7d3c9b626a10a38987d77b9e77d70bd67d7 (patch)
tree8136166c8b27222afca1fbf2518459c378eebecc
parent9e3475b39ae34244045e0dcd6b98e1526c10c6bf (diff)
mesa: Report core FBO incompleteness cases through GL_ARB_debug_output.
Just like we produce from inside the Intel driver, this can help provide information quickly about FBO incompatibility problems (particularly when using apitrace replay). Currently, in driver-marked incompleteness cases, you'll get both the driver message and the core message on Intel. Until the other drivers are fixed to produce output, I think this is better than not putting in a message for driver-marked incomplete. Reviewed-by: Brian Paul <[email protected]>
-rw-r--r--src/mesa/main/fbobject.c43
1 files changed, 25 insertions, 18 deletions
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index aa0f1254154..ba462e93564 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -568,8 +568,15 @@ att_incomplete(const char *msg)
* For debug only.
*/
static void
-fbo_incomplete(const char *msg, int index)
+fbo_incomplete(struct gl_context *ctx, const char *msg, int index)
{
+ static GLuint msg_id;
+
+ _mesa_gl_debug(ctx, &msg_id,
+ MESA_DEBUG_TYPE_OTHER,
+ MESA_DEBUG_SEVERITY_MEDIUM,
+ "FBO incomplete: %s [%d]\n", msg, index);
+
if (MESA_DEBUG_FLAGS & DEBUG_INCOMPLETE_FBO) {
_mesa_debug(NULL, "FBO Incomplete: %s [%d]\n", msg, index);
}
@@ -863,7 +870,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
test_attachment_completeness(ctx, GL_DEPTH, att);
if (!att->Complete) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT;
- fbo_incomplete("depth attachment incomplete", -1);
+ fbo_incomplete(ctx, "depth attachment incomplete", -1);
return;
}
}
@@ -872,7 +879,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
test_attachment_completeness(ctx, GL_STENCIL, att);
if (!att->Complete) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT;
- fbo_incomplete("stencil attachment incomplete", -1);
+ fbo_incomplete(ctx, "stencil attachment incomplete", -1);
return;
}
}
@@ -881,7 +888,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
test_attachment_completeness(ctx, GL_COLOR, att);
if (!att->Complete) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT;
- fbo_incomplete("color attachment incomplete", i);
+ fbo_incomplete(ctx, "color attachment incomplete", i);
return;
}
}
@@ -901,7 +908,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
if (!is_format_color_renderable(ctx, attFormat, texImg->InternalFormat) &&
!is_legal_depth_format(ctx, f)) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT;
- fbo_incomplete("texture attachment incomplete", -1);
+ fbo_incomplete(ctx, "texture attachment incomplete", -1);
return;
}
@@ -909,7 +916,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
numSamples = texImg->NumSamples;
else if (numSamples != texImg->NumSamples) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
- fbo_incomplete("inconsistent sample count", -1);
+ fbo_incomplete(ctx, "inconsistent sample count", -1);
return;
}
@@ -917,7 +924,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fixedSampleLocations = texImg->FixedSampleLocations;
else if (fixedSampleLocations != texImg->FixedSampleLocations) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
- fbo_incomplete("inconsistent fixed sample locations", -1);
+ fbo_incomplete(ctx, "inconsistent fixed sample locations", -1);
return;
}
}
@@ -934,7 +941,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
numSamples = att->Renderbuffer->NumSamples;
else if (numSamples != att->Renderbuffer->NumSamples) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
- fbo_incomplete("inconsistent sample count", -1);
+ fbo_incomplete(ctx, "inconsistent sample count", -1);
return;
}
@@ -943,7 +950,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fixedSampleLocations = GL_TRUE;
else if (fixedSampleLocations != GL_TRUE) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MULTISAMPLE;
- fbo_incomplete("inconsistent fixed sample locations", -1);
+ fbo_incomplete(ctx, "inconsistent fixed sample locations", -1);
return;
}
}
@@ -980,13 +987,13 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
/* check that width, height, format are same */
if (minWidth != maxWidth || minHeight != maxHeight) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT;
- fbo_incomplete("width or height mismatch", -1);
+ fbo_incomplete(ctx, "width or height mismatch", -1);
return;
}
/* check that all color buffers are the same format */
if (intFormat != GL_NONE && f != intFormat) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT;
- fbo_incomplete("format mismatch", -1);
+ fbo_incomplete(ctx, "format mismatch", -1);
return;
}
}
@@ -997,7 +1004,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
if (att->Type == GL_RENDERBUFFER &&
att->Renderbuffer->Format == MESA_FORMAT_NONE) {
fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED;
- fbo_incomplete("unsupported renderbuffer format", i);
+ fbo_incomplete(ctx, "unsupported renderbuffer format", i);
return;
}
@@ -1009,10 +1016,10 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
} else if (layer_count != att_layer_count) {
if (layer_count == 0 || att_layer_count == 0) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
- fbo_incomplete("framebuffer attachment layer mode is inconsistent", i);
+ fbo_incomplete(ctx, "framebuffer attachment layer mode is inconsistent", i);
} else {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_COUNT_ARB;
- fbo_incomplete("framebuffer attachment layer count is inconsistent", i);
+ fbo_incomplete(ctx, "framebuffer attachment layer count is inconsistent", i);
}
return;
}
@@ -1029,7 +1036,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
assert(att);
if (att->Type == GL_NONE) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT;
- fbo_incomplete("missing drawbuffer", j);
+ fbo_incomplete(ctx, "missing drawbuffer", j);
return;
}
}
@@ -1042,7 +1049,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
assert(att);
if (att->Type == GL_NONE) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT;
- fbo_incomplete("missing readbuffer", -1);
+ fbo_incomplete(ctx, "missing readbuffer", -1);
return;
}
}
@@ -1050,7 +1057,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
if (numImages == 0) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT;
- fbo_incomplete("no attachments", -1);
+ fbo_incomplete(ctx, "no attachments", -1);
return;
}
@@ -1064,7 +1071,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
if (ctx->Driver.ValidateFramebuffer) {
ctx->Driver.ValidateFramebuffer(ctx, fb);
if (fb->_Status != GL_FRAMEBUFFER_COMPLETE_EXT) {
- fbo_incomplete("driver marked FBO as incomplete", -1);
+ fbo_incomplete(ctx, "driver marked FBO as incomplete", -1);
}
}