[Mesa-dev] [PATCH] intel: Fix region refcounting in intel_alloc_renderbuffer_storage

Chad Versace chad at chad-versace.us
Wed Jun 15 15:54:13 PDT 2011


Replace instances of
    irb->region = region
with
    intel_region_reference(&irb->region, region)

Signed-off-by: Chad Versace <chad at chad-versace.us>
---
 src/mesa/drivers/dri/intel/intel_fbo.c |   49 ++++++++++++++++++-------------
 1 files changed, 28 insertions(+), 21 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c b/src/mesa/drivers/dri/intel/intel_fbo.c
index e7c23f0..76c84a8 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -184,33 +184,40 @@ intel_alloc_renderbuffer_storage(struct gl_context * ctx, struct gl_renderbuffer
        * If we neglect to double the pitch, then drm_intel_gem_bo_map_gtt()
        * maps the memory incorrectly.
        */
-      irb->region = intel_region_alloc(intel->intelScreen,
-				       I915_TILING_Y,
-				       cpp * 2,
-				       width,
-				       height / 2,
-				       GL_TRUE);
+      struct intel_region *region = intel_region_alloc(intel->intelScreen,
+						       I915_TILING_Y,
+						       cpp * 2,
+						       width,
+						       height / 2,
+						       true);
+      if (!region) {
+	 return false;
+      }
+      intel_region_reference(&irb->region, region);
+
    } else {
-      irb->region = intel_region_alloc(intel->intelScreen, tiling, cpp,
-				       width, height, GL_TRUE);
+      struct intel_region *region =
+	 intel_region_alloc(intel->intelScreen, tiling, cpp,
+			    width, height, true);
+      if (!region) {
+	 return false;
+      }
+      intel_region_reference(&irb->region, region);
    }
 
-   if (!irb->region)
-      return GL_FALSE;       /* out of memory? */
-
-   ASSERT(irb->region->buffer);
-
    if (intel->vtbl.is_hiz_depth_format(intel, rb->Format)) {
-      irb->hiz_region = intel_region_alloc(intel->intelScreen,
-                                           I915_TILING_Y,
-                                           irb->region->cpp,
-                                           irb->region->width,
-                                           irb->region->height,
-                                           GL_TRUE);
-      if (!irb->hiz_region) {
+      struct intel_region *hiz_region =
+	 intel_region_alloc(intel->intelScreen,
+			    I915_TILING_Y,
+			    irb->region->cpp,
+			    irb->region->width,
+			    irb->region->height,
+			    true);
+      if (!hiz_region) {
          intel_region_release(&irb->region);
-         return GL_FALSE;
+         return false;
       }
+      intel_region_reference(&irb->hiz_region, hiz_region);
    }
 
    rb->Width = width;
-- 
1.7.5.2



More information about the mesa-dev mailing list