diff options
author | Eric Anholt <[email protected]> | 2011-12-07 15:02:02 -0800 |
---|---|---|
committer | Eric Anholt <[email protected]> | 2011-12-19 13:20:11 -0800 |
commit | 0b8b6c7e974930daf12e97fb8f0b2a2cc29396d9 (patch) | |
tree | 7494e8e32d23e330449f75fa5b4bd943aba1d277 /src/mesa/drivers/dri/intel | |
parent | 35db326de5b173b06344c1a50321a02c2e6e7d93 (diff) |
intel: Stop creating the wrapped stencil irb.
There were only two places it was really used at this point, which was
in the batchbuffer emit of the separate stencil packets for gen6/7.
Just write in the ->stencil_mt reference in those two places and ditch
all this flailing around with allocation and refcounts.
v2: Fix separate stencil on gen7.
Reviewed-by: Kenneth Graunke <[email protected]>
Diffstat (limited to 'src/mesa/drivers/dri/intel')
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_fbo.c | 64 | ||||
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_fbo.h | 6 | ||||
-rw-r--r-- | src/mesa/drivers/dri/intel/intel_mipmap_tree.h | 3 |
3 files changed, 22 insertions, 51 deletions
diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c index 671de81c8dc..6f518ee23b9 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.c +++ b/src/mesa/drivers/dri/intel/intel_fbo.c @@ -81,9 +81,12 @@ struct intel_region* intel_get_rb_region(struct gl_framebuffer *fb, GLuint attIndex) { struct intel_renderbuffer *irb = intel_get_renderbuffer(fb, attIndex); - if (irb && irb->mt) - return irb->mt->region; - else + if (irb && irb->mt) { + if (attIndex == BUFFER_STENCIL && irb->mt->stencil_mt) + return irb->mt->stencil_mt->region; + else + return irb->mt->region; + } else return NULL; } @@ -111,7 +114,6 @@ intel_delete_renderbuffer(struct gl_renderbuffer *rb) intel_miptree_release(&irb->mt); _mesa_reference_renderbuffer(&irb->wrapped_depth, NULL); - _mesa_reference_renderbuffer(&irb->wrapped_stencil, NULL); free(irb); } @@ -260,24 +262,19 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer if (irb->mt->stencil_mt) { bool ok; - struct intel_renderbuffer *depth_irb, *stencil_irb; + struct intel_renderbuffer *depth_irb; /* The RB got allocated as separate stencil. Hook up our wrapped - * renderbuffers so that consumers of intel_get_renderbuffer() end up - * with pointers to the separate pieces. + * renderbuffer so that consumers of intel_get_renderbuffer(BUFFER_DEPTH) + * end up with pointers to the separate depth. */ if (!irb->wrapped_depth) { _mesa_reference_renderbuffer(&irb->wrapped_depth, intel_new_renderbuffer(ctx, ~0)); } - if (!irb->wrapped_stencil) { - _mesa_reference_renderbuffer(&irb->wrapped_stencil, - intel_new_renderbuffer(ctx, ~0)); - } depth_irb = intel_renderbuffer(irb->wrapped_depth); - stencil_irb = intel_renderbuffer(irb->wrapped_stencil); - if (!depth_irb || !stencil_irb) { + if (!depth_irb) { intel_miptree_release(&irb->mt); return false; } @@ -288,13 +285,6 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer MESA_FORMAT_X8_Z24, GL_DEPTH_COMPONENT24); assert(ok); - - ok = intel_renderbuffer_update_wrapper(intel, stencil_irb, - irb->mt->stencil_mt, - 0, 0, /* level, layer */ - MESA_FORMAT_S8, - GL_STENCIL_INDEX); - assert(ok); } return true; @@ -541,32 +531,25 @@ intel_renderbuffer_update_wrapper(struct intel_context *intel, irb->mt_level = level; irb->mt_layer = layer; + intel_miptree_reference(&irb->mt, mt); if (mt->stencil_mt && _mesa_is_depthstencil_format(rb->InternalFormat)) { - assert((irb->wrapped_depth == NULL) == (irb->wrapped_stencil == NULL)); - struct intel_renderbuffer *depth_irb; - struct intel_renderbuffer *stencil_irb; if (!irb->wrapped_depth) { depth_irb = intel_renderbuffer_wrap_miptree(intel, mt, level, layer, MESA_FORMAT_X8_Z24, GL_DEPTH_COMPONENT24); - stencil_irb = intel_renderbuffer_wrap_miptree(intel, - mt->stencil_mt, - level, layer, - MESA_FORMAT_S8, - GL_STENCIL_INDEX8); _mesa_reference_renderbuffer(&irb->wrapped_depth, &depth_irb->Base); - _mesa_reference_renderbuffer(&irb->wrapped_stencil, &stencil_irb->Base); - if (!irb->wrapped_depth || !irb->wrapped_stencil) + if (!irb->wrapped_depth) { + intel_miptree_release(&irb->mt); return false; + } } else { bool ok = true; depth_irb = intel_renderbuffer(irb->wrapped_depth); - stencil_irb = intel_renderbuffer(irb->wrapped_stencil); ok &= intel_renderbuffer_update_wrapper(intel, depth_irb, @@ -574,20 +557,12 @@ intel_renderbuffer_update_wrapper(struct intel_context *intel, level, layer, MESA_FORMAT_X8_Z24, GL_DEPTH_COMPONENT24); - ok &= intel_renderbuffer_update_wrapper(intel, - stencil_irb, - mt->stencil_mt, - level, layer, - MESA_FORMAT_S8, - GL_STENCIL_INDEX8); - if (!ok) + if (!ok) { + intel_miptree_release(&irb->mt); return false; + } } - - intel_miptree_reference(&depth_irb->mt->stencil_mt, stencil_irb->mt); - intel_miptree_reference(&irb->mt, depth_irb->mt); } else { - intel_miptree_reference(&irb->mt, mt); intel_renderbuffer_set_draw_offset(irb); if (mt->hiz_mt == NULL && @@ -857,8 +832,11 @@ intel_validate_framebuffer(struct gl_context *ctx, struct gl_framebuffer *fb) if (depthRb) depth_mt = depthRb->mt; - if (stencilRb) + if (stencilRb) { stencil_mt = stencilRb->mt; + if (stencil_mt->stencil_mt) + stencil_mt = stencil_mt->stencil_mt; + } if (depth_mt && stencil_mt) { if (depth_mt == stencil_mt) { diff --git a/src/mesa/drivers/dri/intel/intel_fbo.h b/src/mesa/drivers/dri/intel/intel_fbo.h index 174e1c29379..b8dbb341354 100644 --- a/src/mesa/drivers/dri/intel/intel_fbo.h +++ b/src/mesa/drivers/dri/intel/intel_fbo.h @@ -72,7 +72,6 @@ struct intel_renderbuffer * are the real renderbuffers. */ struct gl_renderbuffer *wrapped_depth; - struct gl_renderbuffer *wrapped_stencil; /** \} */ GLuint draw_x, draw_y; /**< Offset of drawing within the region */ @@ -134,11 +133,6 @@ intel_get_renderbuffer(struct gl_framebuffer *fb, gl_buffer_index attIndex) irb = intel_renderbuffer(irb->wrapped_depth); } break; - case BUFFER_STENCIL: - if (irb->wrapped_stencil) { - irb = intel_renderbuffer(irb->wrapped_stencil); - } - break; default: break; } diff --git a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h index c24fa8e49b6..fef1dcf8ce6 100644 --- a/src/mesa/drivers/dri/intel/intel_mipmap_tree.h +++ b/src/mesa/drivers/dri/intel/intel_mipmap_tree.h @@ -149,8 +149,7 @@ struct intel_mipmap_tree * two miptrees for storing the data. If the depthstencil texture or rb is * MESA_FORMAT_Z32_FLOAT_X24S8, then mt->format will be * MESA_FORMAT_Z32_FLOAT, otherwise for MESA_FORMAT_S8_Z24 objects it will be - * MESA_FORMAT_S8_Z24 (textures) or MESA_FORMAT_X8_Z24 (renderbuffers). - * mt->stencil_mt->format will always be MESA_FORMAT_S8. + * MESA_FORMAT_S8_Z24. */ gl_format format; |