mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-09 06:48:06 +02:00
Fix up buffer object and region refcounting
Sinlence some compilation warnings.
This commit is contained in:
parent
980a25cd92
commit
d17637d47f
7 changed files with 19 additions and 16 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
#include "glthread.h"
|
||||
#include "dri_bufpool.h"
|
||||
#include "dri_bufmgr.h"
|
||||
#include "intel_screen.h"
|
||||
|
||||
typedef struct
|
||||
{
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
|
|
|||
|
|
@ -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:
|
||||
|
|
|
|||
|
|
@ -98,7 +98,6 @@ intel_region_alloc(intelScreenPrivate *intelScreen,
|
|||
driGenBuffers(intelScreen->regionPool,
|
||||
"region", 1, ®ion->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, ®ion->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, ®ion->buffer, 64, 0, 0);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue