On Wed, 2013-11-20 at 14:29 -0800, Paul Berry wrote: > In order to properly clear layered framebuffers, we need to know how > many layers they have. The easiest way to do this is to record it in > the gl_framebuffer struct when we check framebuffer completeness. > > This patch replaces the gl_framebuffer::Layered boolean with a > gl_framebuffer::NumLayers integer, which is 0 if the framebuffer is > not layered, and equal to the number of layers otherwise. > > v2: Remove gl_framebuffer::Layered and make gl_framebuffer::NumLayers > always have a defined value. Fix factor of 6 error in the number of > layers in a cube map array. > > Cc: "10.0" <mesa-sta...@lists.freedesktop.org> > > Reviewed-by: Chris Forbes <chr...@ijw.co.nz> > --- > src/mesa/drivers/dri/i965/brw_wm_surface_state.c | 2 +- > src/mesa/drivers/dri/i965/gen6_clip_state.c | 2 +- > src/mesa/drivers/dri/i965/gen7_misc_state.c | 2 +- > src/mesa/main/fbobject.c | 13 +++++++++++-- > src/mesa/main/mtypes.h | 8 +++++++- > 5 files changed, 21 insertions(+), 6 deletions(-) > > diff --git a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > index 662c975..fd6954b 100644 > --- a/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > +++ b/src/mesa/drivers/dri/i965/brw_wm_surface_state.c > @@ -701,7 +701,7 @@ brw_update_renderbuffer_surfaces(struct brw_context *brw) > for (i = 0; i < ctx->DrawBuffer->_NumColorDrawBuffers; i++) { > if (intel_renderbuffer(ctx->DrawBuffer->_ColorDrawBuffers[i])) { > brw->vtbl.update_renderbuffer_surface(brw, > ctx->DrawBuffer->_ColorDrawBuffers[i], > - ctx->DrawBuffer->Layered, > i); > + ctx->DrawBuffer->NumLayers > > 0, i); > } else { > brw->vtbl.update_null_renderbuffer_surface(brw, i); > } > diff --git a/src/mesa/drivers/dri/i965/gen6_clip_state.c > b/src/mesa/drivers/dri/i965/gen6_clip_state.c > index 03d0f90..37a39b8 100644 > --- a/src/mesa/drivers/dri/i965/gen6_clip_state.c > +++ b/src/mesa/drivers/dri/i965/gen6_clip_state.c > @@ -121,7 +121,7 @@ upload_clip_state(struct brw_context *brw) > dw2); > OUT_BATCH(U_FIXED(0.125, 3) << GEN6_CLIP_MIN_POINT_WIDTH_SHIFT | > U_FIXED(255.875, 3) << GEN6_CLIP_MAX_POINT_WIDTH_SHIFT | > - (fb->Layered ? 0 : GEN6_CLIP_FORCE_ZERO_RTAINDEX)); > + (fb->NumLayers > 0 ? 0 : GEN6_CLIP_FORCE_ZERO_RTAINDEX)); > ADVANCE_BATCH(); > } > > diff --git a/src/mesa/drivers/dri/i965/gen7_misc_state.c > b/src/mesa/drivers/dri/i965/gen7_misc_state.c > index 3f3833e..4251949 100644 > --- a/src/mesa/drivers/dri/i965/gen7_misc_state.c > +++ b/src/mesa/drivers/dri/i965/gen7_misc_state.c > @@ -81,7 +81,7 @@ gen7_emit_depth_stencil_hiz(struct brw_context *brw, > break; > } > > - if (fb->Layered || !irb) { > + if (fb->NumLayers > 0 || !irb) { > min_array_element = 0; > } else if (irb->mt->num_samples > 1) { > /* Convert physical layer to logical layer. */ > diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c > index 9dd7161..e8cf274 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; > + }
This seems like a separate change. I'll leave it up to you whether you bother moving it out or not. Reviewed-by: Jordan Justen <jordan.l.jus...@intel.com> _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev