mesa: pass context parameter to gl_renderbuffer::Delete()
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. Reviewed-by: Jose Fonseca <jfonseca@vmware.com>
This commit is contained in:
@@ -87,7 +87,7 @@ intel_new_framebuffer(struct gl_context * ctx, GLuint name)
|
|||||||
|
|
||||||
/** Called by gl_renderbuffer::Delete() */
|
/** Called by gl_renderbuffer::Delete() */
|
||||||
static void
|
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);
|
struct intel_renderbuffer *irb = intel_renderbuffer(rb);
|
||||||
|
|
||||||
@@ -95,7 +95,7 @@ intel_delete_renderbuffer(struct gl_renderbuffer *rb)
|
|||||||
|
|
||||||
intel_miptree_release(&irb->mt);
|
intel_miptree_release(&irb->mt);
|
||||||
|
|
||||||
_mesa_delete_renderbuffer(rb);
|
_mesa_delete_renderbuffer(ctx, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@@ -102,12 +102,12 @@ nouveau_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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;
|
struct nouveau_surface *s = &to_nouveau_renderbuffer(rb)->surface;
|
||||||
|
|
||||||
nouveau_surface_ref(NULL, s);
|
nouveau_surface_ref(NULL, s);
|
||||||
_mesa_delete_renderbuffer(rb);
|
_mesa_delete_renderbuffer(ctx, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct gl_renderbuffer *
|
static struct gl_renderbuffer *
|
||||||
|
@@ -54,7 +54,7 @@ radeon_new_framebuffer(struct gl_context *ctx, GLuint name)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
struct radeon_renderbuffer *rrb = radeon_renderbuffer(rb);
|
||||||
|
|
||||||
@@ -67,7 +67,7 @@ radeon_delete_renderbuffer(struct gl_renderbuffer *rb)
|
|||||||
if (rrb && rrb->bo) {
|
if (rrb && rrb->bo) {
|
||||||
radeon_bo_unref(rrb->bo);
|
radeon_bo_unref(rrb->bo);
|
||||||
}
|
}
|
||||||
_mesa_delete_renderbuffer(rb);
|
_mesa_delete_renderbuffer(ctx, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(RADEON_R100)
|
#if defined(RADEON_R100)
|
||||||
|
@@ -251,14 +251,14 @@ choose_pixel_format(const struct gl_config *v)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void
|
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);
|
struct dri_swrast_renderbuffer *xrb = dri_swrast_renderbuffer(rb);
|
||||||
|
|
||||||
TRACE;
|
TRACE;
|
||||||
|
|
||||||
free(xrb->Base.Buffer);
|
free(xrb->Base.Buffer);
|
||||||
_mesa_delete_renderbuffer(rb);
|
_mesa_delete_renderbuffer(ctx, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* see bytes_per_line in libGL */
|
/* see bytes_per_line in libGL */
|
||||||
|
@@ -386,9 +386,9 @@ compute_row_addresses( OSMesaContext osmesa )
|
|||||||
* Don't use _mesa_delete_renderbuffer since we can't free rb->Buffer.
|
* Don't use _mesa_delete_renderbuffer since we can't free rb->Buffer.
|
||||||
*/
|
*/
|
||||||
static void
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -426,9 +426,9 @@ static void clear(struct gl_context *ctx, GLbitfield mask)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -235,7 +235,7 @@ alloc_back_buffer(XMesaBuffer b, GLuint width, GLuint height)
|
|||||||
|
|
||||||
|
|
||||||
static void
|
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
|
/* XXX Note: the ximage or Pixmap attached to this renderbuffer
|
||||||
* should probably get freed here, but that's currently done in
|
* should probably get freed here, but that's currently done in
|
||||||
|
@@ -78,7 +78,7 @@ static struct gl_framebuffer IncompleteFramebuffer;
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
delete_dummy_renderbuffer(struct gl_renderbuffer *rb)
|
delete_dummy_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||||
{
|
{
|
||||||
/* no op */
|
/* no op */
|
||||||
}
|
}
|
||||||
|
@@ -2605,7 +2605,7 @@ struct gl_renderbuffer
|
|||||||
gl_format Format; /**< The actual renderbuffer memory format */
|
gl_format Format; /**< The actual renderbuffer memory format */
|
||||||
|
|
||||||
/** Delete this renderbuffer */
|
/** 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 */
|
/** Allocate new storage for this renderbuffer */
|
||||||
GLboolean (*AllocStorage)(struct gl_context *ctx,
|
GLboolean (*AllocStorage)(struct gl_context *ctx,
|
||||||
|
@@ -80,7 +80,7 @@ _mesa_new_renderbuffer(struct gl_context *ctx, GLuint name)
|
|||||||
* free the object in the end.
|
* free the object in the end.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
_mesa_delete_renderbuffer(struct gl_renderbuffer *rb)
|
_mesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||||
{
|
{
|
||||||
_glthread_DESTROY_MUTEX(rb->Mutex);
|
_glthread_DESTROY_MUTEX(rb->Mutex);
|
||||||
free(rb);
|
free(rb);
|
||||||
@@ -159,7 +159,11 @@ _mesa_reference_renderbuffer_(struct gl_renderbuffer **ptr,
|
|||||||
_glthread_UNLOCK_MUTEX(oldRb->Mutex);
|
_glthread_UNLOCK_MUTEX(oldRb->Mutex);
|
||||||
|
|
||||||
if (deleteFlag) {
|
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");
|
||||||
}
|
}
|
||||||
|
|
||||||
*ptr = NULL;
|
*ptr = NULL;
|
||||||
|
@@ -40,7 +40,7 @@ extern struct gl_renderbuffer *
|
|||||||
_mesa_new_renderbuffer(struct gl_context *ctx, GLuint name);
|
_mesa_new_renderbuffer(struct gl_context *ctx, GLuint name);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
_mesa_delete_renderbuffer(struct gl_renderbuffer *rb);
|
_mesa_delete_renderbuffer(struct gl_context *ctx, struct gl_renderbuffer *rb);
|
||||||
|
|
||||||
extern void
|
extern void
|
||||||
_mesa_add_renderbuffer(struct gl_framebuffer *fb,
|
_mesa_add_renderbuffer(struct gl_framebuffer *fb,
|
||||||
|
@@ -253,10 +253,11 @@ delete_framebuffer_cb(GLuint id, void *data, void *userData)
|
|||||||
static void
|
static void
|
||||||
delete_renderbuffer_cb(GLuint id, void *data, void *userData)
|
delete_renderbuffer_cb(GLuint id, void *data, void *userData)
|
||||||
{
|
{
|
||||||
|
struct gl_context *ctx = (struct gl_context *) userData;
|
||||||
struct gl_renderbuffer *rb = (struct gl_renderbuffer *) data;
|
struct gl_renderbuffer *rb = (struct gl_renderbuffer *) data;
|
||||||
rb->RefCount = 0; /* see comment for FBOs above */
|
rb->RefCount = 0; /* see comment for FBOs above */
|
||||||
if (rb->Delete)
|
if (rb->Delete)
|
||||||
rb->Delete(rb);
|
rb->Delete(ctx, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -225,14 +225,14 @@ st_renderbuffer_alloc_storage(struct gl_context * ctx,
|
|||||||
* gl_renderbuffer::Delete()
|
* gl_renderbuffer::Delete()
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
st_renderbuffer_delete(struct gl_renderbuffer *rb)
|
st_renderbuffer_delete(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||||
{
|
{
|
||||||
struct st_renderbuffer *strb = st_renderbuffer(rb);
|
struct st_renderbuffer *strb = st_renderbuffer(rb);
|
||||||
ASSERT(strb);
|
ASSERT(strb);
|
||||||
pipe_surface_reference(&strb->surface, NULL);
|
pipe_surface_reference(&strb->surface, NULL);
|
||||||
pipe_resource_reference(&strb->texture, NULL);
|
pipe_resource_reference(&strb->texture, NULL);
|
||||||
free(strb->data);
|
free(strb->data);
|
||||||
_mesa_delete_renderbuffer(rb);
|
_mesa_delete_renderbuffer(ctx, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -164,13 +164,13 @@ soft_renderbuffer_storage(struct gl_context *ctx, struct gl_renderbuffer *rb,
|
|||||||
* Called via gl_renderbuffer::Delete()
|
* Called via gl_renderbuffer::Delete()
|
||||||
*/
|
*/
|
||||||
static void
|
static void
|
||||||
soft_renderbuffer_delete(struct gl_renderbuffer *rb)
|
soft_renderbuffer_delete(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||||
{
|
{
|
||||||
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
|
struct swrast_renderbuffer *srb = swrast_renderbuffer(rb);
|
||||||
|
|
||||||
free(srb->Buffer);
|
free(srb->Buffer);
|
||||||
srb->Buffer = NULL;
|
srb->Buffer = NULL;
|
||||||
_mesa_delete_renderbuffer(rb);
|
_mesa_delete_renderbuffer(ctx, rb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -16,7 +16,7 @@
|
|||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
delete_texture_wrapper(struct gl_renderbuffer *rb)
|
delete_texture_wrapper(struct gl_context *ctx, struct gl_renderbuffer *rb)
|
||||||
{
|
{
|
||||||
ASSERT(rb->RefCount == 0);
|
ASSERT(rb->RefCount == 0);
|
||||||
free(rb);
|
free(rb);
|
||||||
|
Reference in New Issue
Block a user