Fix up buffer object and region refcounting

Sinlence some compilation warnings.
This commit is contained in:
Thomas Hellström 2006-09-26 09:00:03 +00:00
parent 980a25cd92
commit d17637d47f
7 changed files with 19 additions and 16 deletions

View file

@ -122,12 +122,13 @@ driFenceType(DriFenceObject * fence)
}
void
DriFenceObject *
driFenceReference(DriFenceObject * fence)
{
_glthread_LOCK_MUTEX(bmMutex);
++fence->refCount;
_glthread_UNLOCK_MUTEX(bmMutex);
return fence;
}
void
@ -243,7 +244,7 @@ driBOFlags(struct _DriBufferObject *buf)
return ret;
}
void
struct _DriBufferObject *
driBOReference(struct _DriBufferObject *buf)
{
_glthread_LOCK_MUTEX(bmMutex);
@ -251,6 +252,7 @@ driBOReference(struct _DriBufferObject *buf)
BM_CKFATAL(-EINVAL);
}
_glthread_UNLOCK_MUTEX(bmMutex);
return buf;
}
void

View file

@ -42,7 +42,7 @@ struct _DriBufferPool;
extern struct _DriFenceObject *driFenceBuffers(int fd, char *name,
unsigned flags);
extern void driFenceReference(struct _DriFenceObject *fence);
extern struct _DriFenceObject *driFenceReference(struct _DriFenceObject *fence);
extern void driFenceUnReference(struct _DriFenceObject *fence);
@ -63,7 +63,7 @@ extern void *driBOMap(struct _DriBufferObject *buf, unsigned flags,
extern void driBOUnmap(struct _DriBufferObject *buf);
extern unsigned long driBOOffset(struct _DriBufferObject *buf);
extern unsigned driBOFlags(struct _DriBufferObject *buf);
extern void driBOReference(struct _DriBufferObject *buf);
extern struct _DriBufferObject *driBOReference(struct _DriBufferObject *buf);
extern void driBOUnReference(struct _DriBufferObject *buf);
extern void driBOData(struct _DriBufferObject *r_buf,
unsigned size, const void *data, unsigned flags);
@ -94,6 +94,6 @@ extern void driBOSetStatic(struct _DriBufferObject *buf,
unsigned long offset,
unsigned long size, void *virtual, unsigned flags);
extern void driBOWaitIdle(struct _DriBufferObject *buf, int lazy);
extern void driPoolTakeDown(struct _DriBufferPool *pool);
#endif

View file

@ -28,6 +28,7 @@
#include "mtypes.h"
#include "enums.h"
#include "texformat.h"
#include "dri_bufmgr.h"
#include "intel_mipmap_tree.h"
#include "intel_tex.h"
@ -140,9 +141,7 @@ i915_update_tex_unit(struct intel_context *intel, GLuint unit, GLuint ss3)
*/
firstImage = tObj->Image[0][intelObj->firstLevel];
driBOReference(intelObj->mt->region->buffer);
i915->state.tex_buffer[unit] = intelObj->mt->region->buffer;
i915->state.tex_buffer[unit] = driBOReference(intelObj->mt->region->buffer);
i915->state.tex_offset[unit] = intel_miptree_image_offset(intelObj->mt, 0,
intelObj->
firstLevel);

View file

@ -36,6 +36,7 @@
#include "glthread.h"
#include "dri_bufpool.h"
#include "dri_bufmgr.h"
#include "intel_screen.h"
typedef struct
{

View file

@ -40,6 +40,7 @@
#include "intel_fbo.h"
#include "intel_reg.h"
#include "intel_regions.h"
#include "vblank.h"
#define FILE_DEBUG_FLAG DEBUG_BLIT

View file

@ -65,7 +65,8 @@ intel_bufferobj_release_region(struct intel_context *intel,
assert(intel_obj->region->buffer == intel_obj->buffer);
intel_obj->region->pbo = NULL;
intel_obj->region = NULL;
intel_obj->buffer = NULL; /* refcount? */
driBOUnReference(intel_obj->buffer);
intel_obj->buffer = NULL;
/* This leads to a large number of buffer deletion/creation events.
* Currently the drm doesn't like that:

View file

@ -98,7 +98,6 @@ intel_region_alloc(intelScreenPrivate *intelScreen,
driGenBuffers(intelScreen->regionPool,
"region", 1, &region->buffer, 64, 0, 0);
driBOData(region->buffer, pitch * cpp * height, NULL, 0);
return region;
}
@ -129,8 +128,8 @@ intel_region_release(intelScreenPrivate *intelScreen,
if ((*region)->pbo)
intel_region_release_pbo(intelScreen, *region);
else
driDeleteBuffers(1, &(*region)->buffer);
driDeleteBuffers(1, &(*region)->buffer);
free(*region);
}
@ -364,17 +363,16 @@ intel_region_attach_pbo(intelScreenPrivate *intelScreen,
if (region->pbo) {
region->pbo->region = NULL;
region->pbo = NULL;
region->buffer = NULL; /* refcount? */
}
if (region->buffer) {
driDeleteBuffers(1, &region->buffer);
region->buffer = NULL;
}
region->pbo = pbo;
region->pbo->region = region;
region->buffer = pbo->buffer; /* refcount? */
region->buffer = driBOReference(pbo->buffer);
}
@ -387,7 +385,8 @@ intel_region_release_pbo(intelScreenPrivate *intelScreen,
assert(region->buffer == region->pbo->buffer);
region->pbo->region = NULL;
region->pbo = NULL;
region->buffer = NULL; /* refcount? */
driBOUnReference(region->buffer);
region->buffer = NULL;
driGenBuffers(intelScreen->regionPool,
"region", 1, &region->buffer, 64, 0, 0);