From 98328e4c193c90bc9945531f82595f09410b1a3b Mon Sep 17 00:00:00 2001 From: Chris Forbes Date: Tue, 21 Jan 2014 21:45:28 +1300 Subject: i965: Add layer_count to intel_renderbuffer This is the effective layer count, for clears etc. This differs from the depth of the miptree level when views are involved. Signed-off-by: Chris Forbes Reviewed-by: Ian Romanick Reviewed-by: Kenneth Graunke Acked-by: Eric Anholt --- src/mesa/drivers/dri/i965/intel_fbo.c | 10 ++++++++++ src/mesa/drivers/dri/i965/intel_fbo.h | 3 +++ 2 files changed, 13 insertions(+) (limited to 'src/mesa/drivers') diff --git a/src/mesa/drivers/dri/i965/intel_fbo.c b/src/mesa/drivers/dri/i965/intel_fbo.c index 5ade9e6168a..c70b1bf36b2 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.c +++ b/src/mesa/drivers/dri/i965/intel_fbo.c @@ -319,6 +319,8 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer if (!irb->mt) return false; + irb->layer_count = 1; + return true; } @@ -383,6 +385,7 @@ intel_image_target_renderbuffer_storage(struct gl_context *ctx, rb->Format = image->format; rb->_BaseFormat = _mesa_base_fbo_format(ctx, image->internal_format); rb->NeedsFinishRenderTexture = true; + irb->layer_count = 1; } /** @@ -435,6 +438,7 @@ intel_create_renderbuffer(mesa_format format, unsigned num_samples) } rb = &irb->Base.Base; + irb->layer_count = 1; _mesa_init_renderbuffer(rb, 0); rb->ClassID = INTEL_RB_CLASS; @@ -532,6 +536,12 @@ intel_renderbuffer_update_wrapper(struct brw_context *brw, irb->mt_layer = layer_multiplier * layer; + if (layered) { + irb->layer_count = image->TexObject->NumLayers ?: mt->level[level].depth / layer_multiplier; + } else { + irb->layer_count = 1; + } + intel_miptree_reference(&irb->mt, mt); intel_renderbuffer_set_draw_offset(irb); diff --git a/src/mesa/drivers/dri/i965/intel_fbo.h b/src/mesa/drivers/dri/i965/intel_fbo.h index fa457e29d09..c7cc57073c1 100644 --- a/src/mesa/drivers/dri/i965/intel_fbo.h +++ b/src/mesa/drivers/dri/i965/intel_fbo.h @@ -90,6 +90,9 @@ struct intel_renderbuffer */ unsigned int mt_level; unsigned int mt_layer; + + /* The number of attached logical layers. */ + unsigned int layer_count; /** \} */ GLuint draw_x, draw_y; /**< Offset of drawing within the region */ -- cgit v1.2.3