temporary add some extra renderbuffer debug code
This commit is contained in:
@@ -2222,6 +2222,8 @@ struct gl_shared_state
|
|||||||
*/
|
*/
|
||||||
struct gl_renderbuffer
|
struct gl_renderbuffer
|
||||||
{
|
{
|
||||||
|
#define RB_MAGIC 0xaabbccdd
|
||||||
|
int Magic; /** XXX TEMPORARY DEBUG INFO */
|
||||||
_glthread_Mutex Mutex; /**< for thread safety */
|
_glthread_Mutex Mutex; /**< for thread safety */
|
||||||
GLuint ClassID; /**< Useful for drivers */
|
GLuint ClassID; /**< Useful for drivers */
|
||||||
GLuint Name;
|
GLuint Name;
|
||||||
|
@@ -1471,6 +1471,7 @@ _mesa_init_renderbuffer(struct gl_renderbuffer *rb, GLuint name)
|
|||||||
{
|
{
|
||||||
_glthread_INIT_MUTEX(rb->Mutex);
|
_glthread_INIT_MUTEX(rb->Mutex);
|
||||||
|
|
||||||
|
rb->Magic = RB_MAGIC;
|
||||||
rb->ClassID = 0;
|
rb->ClassID = 0;
|
||||||
rb->Name = name;
|
rb->Name = name;
|
||||||
rb->RefCount = 0;
|
rb->RefCount = 0;
|
||||||
@@ -2149,21 +2150,26 @@ _mesa_reference_renderbuffer(struct gl_renderbuffer **ptr,
|
|||||||
GLboolean deleteFlag = GL_FALSE;
|
GLboolean deleteFlag = GL_FALSE;
|
||||||
struct gl_renderbuffer *oldRb = *ptr;
|
struct gl_renderbuffer *oldRb = *ptr;
|
||||||
|
|
||||||
|
assert(oldRb->Magic == RB_MAGIC);
|
||||||
_glthread_LOCK_MUTEX(oldRb->Mutex);
|
_glthread_LOCK_MUTEX(oldRb->Mutex);
|
||||||
|
assert(oldRb->Magic == RB_MAGIC);
|
||||||
ASSERT(oldRb->RefCount > 0);
|
ASSERT(oldRb->RefCount > 0);
|
||||||
oldRb->RefCount--;
|
oldRb->RefCount--;
|
||||||
/*printf("RB DECR %p (%d) to %d\n", (void*) oldRb, oldRb->Name, oldRb->RefCount);*/
|
/*printf("RB DECR %p (%d) to %d\n", (void*) oldRb, oldRb->Name, oldRb->RefCount);*/
|
||||||
deleteFlag = (oldRb->RefCount == 0);
|
deleteFlag = (oldRb->RefCount == 0);
|
||||||
_glthread_UNLOCK_MUTEX(oldRb->Mutex);
|
_glthread_UNLOCK_MUTEX(oldRb->Mutex);
|
||||||
|
|
||||||
if (deleteFlag)
|
if (deleteFlag) {
|
||||||
|
oldRb->Magic = 0; /* now invalid memory! */
|
||||||
oldRb->Delete(oldRb);
|
oldRb->Delete(oldRb);
|
||||||
|
}
|
||||||
|
|
||||||
*ptr = NULL;
|
*ptr = NULL;
|
||||||
}
|
}
|
||||||
assert(!*ptr);
|
assert(!*ptr);
|
||||||
|
|
||||||
if (rb) {
|
if (rb) {
|
||||||
|
assert(rb->Magic == RB_MAGIC);
|
||||||
/* reference new renderbuffer */
|
/* reference new renderbuffer */
|
||||||
_glthread_LOCK_MUTEX(rb->Mutex);
|
_glthread_LOCK_MUTEX(rb->Mutex);
|
||||||
rb->RefCount++;
|
rb->RefCount++;
|
||||||
|
Reference in New Issue
Block a user