summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPaul Berry <[email protected]>2013-11-19 19:01:37 -0800
committerPaul Berry <[email protected]>2014-01-10 05:58:46 -0800
commit28af1dc21772d0b7819dff6080484c67114dc0d1 (patch)
tree6c421ebfe9399386d821f535e0e110e2686bd74c
parent90368875e733171350c64c8dda52f81bd0705dd0 (diff)
main: check texture target when validating layered framebuffers.
From section 4.4.4 (Framebuffer Completeness) of the GL 3.2 spec: If any framebuffer attachment is layered, all populated attachments must be layered. Additionally, all populated color attachments must be from textures of the same target. We weren't checking that the attachments were from textures of the same target. Reviewed-by: Anuj Phogat <[email protected]> Reviewed-by: Chris Forbes <[email protected]>
-rw-r--r--src/mesa/main/fbobject.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index d84680868f4..7ecc48ee53b 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -877,8 +877,9 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
GLint fixedSampleLocations = -1;
GLint i;
GLuint j;
- bool layer_count_valid = false;
+ bool layer_info_valid = false; /* Covers layer_count and layer_tex_target */
GLuint layer_count = 0, att_layer_count;
+ GLenum layer_tex_target = 0;
assert(_mesa_is_user_fbo(fb));
@@ -1062,9 +1063,14 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
} else {
att_layer_count = 0;
}
- if (!layer_count_valid) {
+ if (!layer_info_valid) {
layer_count = att_layer_count;
- layer_count_valid = true;
+ layer_tex_target = att_tex_target;
+ layer_info_valid = true;
+ } else if (layer_count > 0 && layer_tex_target != att_tex_target) {
+ fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;
+ fbo_incomplete(ctx, "layered framebuffer has mismatched targets", i);
+ return;
} else if (layer_count != att_layer_count) {
if (layer_count == 0 || att_layer_count == 0) {
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS;