On 12/03/2012 11:05 AM, Matt Turner wrote:
On Fri, Nov 30, 2012 at 10:19 AM, Brian Paul<[email protected]>  wrote:
We sometimes need a rendering context when deleting renderbuffers.
Pass it explicitly instead of trying to grab a current context
(which might be NULL).  The next patch will make use of this.

Note: this is a candidate for the stable branches.
---
  src/mesa/drivers/dri/intel/intel_fbo.c     |    4 ++--
  src/mesa/drivers/dri/nouveau/nouveau_fbo.c |    4 ++--
  src/mesa/drivers/dri/radeon/radeon_fbo.c   |    4 ++--
  src/mesa/drivers/dri/swrast/swrast.c       |    4 ++--
  src/mesa/drivers/osmesa/osmesa.c           |    4 ++--
  src/mesa/drivers/windows/gdi/wmesa.c       |    4 ++--
  src/mesa/drivers/x11/xm_buffer.c           |    2 +-
  src/mesa/main/fbobject.c                   |    2 +-
  src/mesa/main/mtypes.h                     |    2 +-
  src/mesa/main/renderbuffer.c               |    8 ++++++--
  src/mesa/main/renderbuffer.h               |    2 +-
  src/mesa/main/shared.c                     |    3 ++-
  src/mesa/state_tracker/st_cb_fbo.c         |    4 ++--
  src/mesa/swrast/s_renderbuffer.c           |    4 ++--
  src/mesa/swrast/s_texrender.c              |    2 +-
  15 files changed, 29 insertions(+), 24 deletions(-)

diff --git a/src/mesa/drivers/dri/intel/intel_fbo.c 
b/src/mesa/drivers/dri/intel/intel_fbo.c
index 96f6c32..6a66521 100644
--- a/src/mesa/drivers/dri/intel/intel_fbo.c
+++ b/src/mesa/drivers/dri/intel/intel_fbo.c
@@ -87,7 +87,7 @@ intel_new_framebuffer(struct gl_context * ctx, GLuint name)

  /** Called by gl_renderbuffer::Delete() */
  static void
-intel_delete_renderbuffer(struct gl_renderbuffer *rb)
+intel_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
     struct intel_renderbuffer *irb = intel_renderbuffer(rb);

@@ -95,7 +95,7 @@ intel_delete_renderbuffer(struct gl_renderbuffer *rb)

     intel_miptree_release(&irb->mt);

-   _mesa_delete_renderbuffer(rb);
+   _mesa_delete_renderbuffer(ctx, rb);
  }

  /**
diff --git a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c 
b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
index c3e2341..c47bce8 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_fbo.c
@@ -102,12 +102,12 @@ nouveau_renderbuffer_storage(struct gl_context *ctx, 
struct gl_renderbuffer *rb,
  }

  static void
-nouveau_renderbuffer_del(struct gl_renderbuffer *rb)
+nouveau_renderbuffer_del(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
         struct nouveau_surface *s =&to_nouveau_renderbuffer(rb)->surface;

         nouveau_surface_ref(NULL, s);
-       _mesa_delete_renderbuffer(rb);
+       _mesa_delete_renderbuffer(ctx, rb);
  }

  static struct gl_renderbuffer *
diff --git a/src/mesa/drivers/dri/radeon/radeon_fbo.c 
b/src/mesa/drivers/dri/radeon/radeon_fbo.c
index 291f2b7..9ab74c4 100644
--- a/src/mesa/drivers/dri/radeon/radeon_fbo.c
+++ b/src/mesa/drivers/dri/radeon/radeon_fbo.c
@@ -54,7 +54,7 @@ radeon_new_framebuffer(struct gl_context *ctx, GLuint name)
  }

  static void
-radeon_delete_renderbuffer(struct gl_renderbuffer *rb)
+radeon_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
    struct radeon_renderbuffer *rrb = radeon_renderbuffer(rb);

@@ -67,7 +67,7 @@ radeon_delete_renderbuffer(struct gl_renderbuffer *rb)
    if (rrb&&  rrb->bo) {
      radeon_bo_unref(rrb->bo);
    }
-  _mesa_delete_renderbuffer(rb);
+  _mesa_delete_renderbuffer(ctx, rb);
  }

  #if defined(RADEON_R100)
diff --git a/src/mesa/drivers/dri/swrast/swrast.c 
b/src/mesa/drivers/dri/swrast/swrast.c
index 3a47cdb..2474ed8 100644
--- a/src/mesa/drivers/dri/swrast/swrast.c
+++ b/src/mesa/drivers/dri/swrast/swrast.c
@@ -251,14 +251,14 @@ choose_pixel_format(const struct gl_config *v)
  }

  static void
-swrast_delete_renderbuffer(struct gl_renderbuffer *rb)
+swrast_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
      struct dri_swrast_renderbuffer *xrb = dri_swrast_renderbuffer(rb);

      TRACE;

      free(xrb->Base.Buffer);
-    _mesa_delete_renderbuffer(rb);
+    _mesa_delete_renderbuffer(ctx, rb);
  }

  /* see bytes_per_line in libGL */
diff --git a/src/mesa/drivers/osmesa/osmesa.c b/src/mesa/drivers/osmesa/osmesa.c
index e02b2f3..c206d64 100644
--- a/src/mesa/drivers/osmesa/osmesa.c
+++ b/src/mesa/drivers/osmesa/osmesa.c
@@ -386,9 +386,9 @@ compute_row_addresses( OSMesaContext osmesa )
   * Don't use _mesa_delete_renderbuffer since we can't free rb->Buffer.
   */
  static void
-osmesa_delete_renderbuffer(struct gl_renderbuffer *rb)
+osmesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
-   free(rb);
+   _mesa_delete_renderbuffer(ctx, rb);
  }


diff --git a/src/mesa/drivers/windows/gdi/wmesa.c 
b/src/mesa/drivers/windows/gdi/wmesa.c
index 9f6f750..50347cf 100644
--- a/src/mesa/drivers/windows/gdi/wmesa.c
+++ b/src/mesa/drivers/windows/gdi/wmesa.c
@@ -426,9 +426,9 @@ static void clear(struct gl_context *ctx, GLbitfield mask)


  static void
-wmesa_delete_renderbuffer(struct gl_renderbuffer *rb)
+wmesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
-    free(rb);
+    _mesa_delete_renderbuffer(ctx, rb);
  }


diff --git a/src/mesa/drivers/x11/xm_buffer.c b/src/mesa/drivers/x11/xm_buffer.c
index 1820d76..dc9a3be 100644
--- a/src/mesa/drivers/x11/xm_buffer.c
+++ b/src/mesa/drivers/x11/xm_buffer.c
@@ -235,7 +235,7 @@ alloc_back_buffer(XMesaBuffer b, GLuint width, GLuint 
height)


  static void
-xmesa_delete_renderbuffer(struct gl_renderbuffer *rb)
+xmesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
     /* XXX Note: the ximage or Pixmap attached to this renderbuffer
      * should probably get freed here, but that's currently done in
diff --git a/src/mesa/main/fbobject.c b/src/mesa/main/fbobject.c
index 2e2fc2c..9eec61d 100644
--- a/src/mesa/main/fbobject.c
+++ b/src/mesa/main/fbobject.c
@@ -78,7 +78,7 @@ static struct gl_framebuffer IncompleteFramebuffer;


  static void
-delete_dummy_renderbuffer(struct gl_renderbuffer *rb)
+delete_dummy_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
     /* no op */
  }
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index f34b342..5bfae69 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -2605,7 +2605,7 @@ struct gl_renderbuffer
     gl_format Format;      /**<  The actual renderbuffer memory format */

     /** Delete this renderbuffer */
-   void (*Delete)(struct gl_renderbuffer *rb);
+   void (*Delete)(struct gl_context *ctx, struct gl_renderbuffer *rb);

     /** Allocate new storage for this renderbuffer */
     GLboolean (*AllocStorage)(struct gl_context *ctx,
diff --git a/src/mesa/main/renderbuffer.c b/src/mesa/main/renderbuffer.c
index 26f53d1..2f28443 100644
--- a/src/mesa/main/renderbuffer.c
+++ b/src/mesa/main/renderbuffer.c
@@ -80,7 +80,7 @@ _mesa_new_renderbuffer(struct gl_context *ctx, GLuint name)
   * free the object in the end.
   */
  void
-_mesa_delete_renderbuffer(struct gl_renderbuffer *rb)
+_mesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
  {
     _glthread_DESTROY_MUTEX(rb->Mutex);
     free(rb);
@@ -159,7 +159,11 @@ _mesa_reference_renderbuffer_(struct gl_renderbuffer **ptr,
        _glthread_UNLOCK_MUTEX(oldRb->Mutex);

        if (deleteFlag) {
-         oldRb->Delete(oldRb);
+         GET_CURRENT_CONTEXT(ctx);
+         if (ctx)
+            oldRb->Delete(ctx, oldRb);
+         else
+            _mesa_problem(NULL, "Unable to delete renderbuffer, no context");

I'm seeing this message printed for all of the es3 conformance tests
I'm doing on i965. Any idea what's up?

I just haven't pushed the patch to fix this yet.  Will do...

-Brian
_______________________________________________
mesa-dev mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to