summaryrefslogtreecommitdiffstats
path: root/src/mesa/drivers/dri/intel
diff options
context:
space:
mode:
authorEric Anholt <[email protected]>2011-12-07 15:02:02 -0800
committerEric Anholt <[email protected]>2011-12-19 13:20:11 -0800
commit0b8b6c7e974930daf12e97fb8f0b2a2cc29396d9 (patch)
tree7494e8e32d23e330449f75fa5b4bd943aba1d277 /src/mesa/drivers/dri/intel
parent35db326de5b173b06344c1a50321a02c2e6e7d93 (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.c64
-rw-r--r--src/mesa/drivers/dri/intel/intel_fbo.h6
-rw-r--r--src/mesa/drivers/dri/intel/intel_mipmap_tree.h3
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;