diff options
Diffstat (limited to 'src/mesa/main')
-rw-r--r-- | src/mesa/main/fbobject.c | 13 | ||||
-rw-r--r-- | src/mesa/main/mtypes.h | 8 |
2 files changed, 18 insertions, 3 deletions
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c index 9dd71612f97..e8cf274e973 100644 --- a/src/mesa/main/fbobject.c +++ b/src/mesa/main/fbobject.c @@ -905,6 +905,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, struct gl_renderbuffer_attachment *att; GLenum f; gl_format attFormat; + GLenum att_tex_target = GL_NONE; /* * XXX for ARB_fbo, only check color buffers that are named by @@ -945,6 +946,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, */ if (att->Type == GL_TEXTURE) { const struct gl_texture_image *texImg = att->Renderbuffer->TexImage; + att_tex_target = att->Texture->Target; minWidth = MIN2(minWidth, texImg->Width); maxWidth = MAX2(maxWidth, texImg->Width); minHeight = MIN2(minHeight, texImg->Height); @@ -1057,7 +1059,14 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, } /* Check that layered rendering is consistent. */ - att_layer_count = att->Layered ? att->Renderbuffer->Depth : 0; + if (att->Layered) { + if (att_tex_target == GL_TEXTURE_CUBE_MAP) + att_layer_count = 6; + else + att_layer_count = att->Renderbuffer->Depth; + } else { + att_layer_count = 0; + } if (!layer_count_valid) { layer_count = att_layer_count; layer_count_valid = true; @@ -1073,7 +1082,7 @@ _mesa_test_framebuffer_completeness(struct gl_context *ctx, } } - fb->Layered = layer_count > 0; + fb->NumLayers = layer_count; if (_mesa_is_desktop_gl(ctx) && !ctx->Extensions.ARB_ES2_compatibility) { /* Check that all DrawBuffers are present */ diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h index 8801d6f6152..ecfb5e08f5d 100644 --- a/src/mesa/main/mtypes.h +++ b/src/mesa/main/mtypes.h @@ -2994,7 +2994,13 @@ struct gl_framebuffer struct gl_renderbuffer *_ColorDrawBuffers[MAX_DRAW_BUFFERS]; struct gl_renderbuffer *_ColorReadBuffer; - GLboolean Layered; + /** + * The number of layers in the framebuffer, or 0 if the framebuffer is not + * layered. For cube maps, this value is 6. For cube map arrays, this + * value is the "depth" value passed to TexImage3D (always a multiple of + * 6). + */ + GLuint NumLayers; /** Delete this framebuffer */ void (*Delete)(struct gl_framebuffer *fb); |