summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorIago Toral Quiroga <[email protected]>2014-12-12 15:14:32 +0100
committerIago Toral Quiroga <[email protected]>2015-01-13 12:19:32 +0100
commitd42e09038628c47a060008ecfe54e51344a2bd5a (patch)
tree9b3c02c4953102f4e43b1b067451beea2261d6e6 /src/mesa
parentb8b1d83c71fd148d2fd84afdc20c0aa367114f92 (diff)
mesa: Depth and stencil attachments must be the same in OpenGL ES3
"9.4. FRAMEBUFFER COMPLETENESS ... Depth and stencil attachments, if present, are the same image." Notice that this restriction is not included in the OpenGL ES2 spec. Fixes 18 dEQP tests in: dEQP-GLES3.functional.fbo.completeness.attachment_combinations.* Reviewed-by: Ian Romanick <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/main/fbobject.c20
1 files changed, 20 insertions, 0 deletions
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 43b088685e6..cb2668186f4 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -886,6 +886,8 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
GLuint max_layer_count = 0, att_layer_count;
bool is_layered = false;
GLenum layer_tex_target = 0;
+ bool has_depth_attachment = false;
+ bool has_stencil_attachment = false;
assert(_mesa_is_user_fbo(fb));
@@ -923,6 +925,8 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT;
fbo_incomplete(ctx, "depth attachment incomplete", -1);
return;
+ } else if (att->Type != GL_NONE) {
+ has_depth_attachment = true;
}
}
else if (i == -1) {
@@ -932,6 +936,8 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
fb->_Status = GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT;
fbo_incomplete(ctx, "stencil attachment incomplete", -1);
return;
+ } else if (att->Type != GL_NONE) {
+ has_stencil_attachment = true;
}
}
else {
@@ -1128,6 +1134,20 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx,
}
}
+ /* The OpenGL ES3 spec, in chapter 9.4. FRAMEBUFFER COMPLETENESS, says:
+ *
+ * "Depth and stencil attachments, if present, are the same image."
+ *
+ * This restriction is not present in the OpenGL ES2 spec.
+ */
+ if (_mesa_is_gles3(ctx) &&
+ has_stencil_attachment && has_depth_attachment &&
+ !_mesa_has_depthstencil_combined(fb)) {
+ fb->_Status = GL_FRAMEBUFFER_UNSUPPORTED;
+ fbo_incomplete(ctx, "Depth and stencil attachments must be the same image", -1);
+ return;
+ }
+
/* Provisionally set status = COMPLETE ... */
fb->_Status = GL_FRAMEBUFFER_COMPLETE_EXT;