Merge branch 'master' into glsl-pp-rework-2
[mesa.git] / src / mesa / main / rbadaptors.c
index ccd021d7106c3eaa1e88f8f7a94cfe4229d033b4..1060c5796edd636986e882b7c398da44d6dd2ea0 100644 (file)
@@ -1,8 +1,8 @@
 /*
  * Mesa 3-D graphics library
- * Version:  6.5.1
+ * Version:  6.5.3
  *
- * Copyright (C) 1999-2006  Brian Paul   All Rights Reserved.
+ * Copyright (C) 1999-2007  Brian Paul   All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
  * copy of this software and associated documentation files (the "Software"),
 
 
 static void
-Delete_16wrap8(struct gl_renderbuffer *rb)
+Delete_wrapper(struct gl_renderbuffer *rb)
 {
-   rb->Wrapped->Delete(rb->Wrapped);
+   /* Decrement reference count on the buffer we're wrapping and delete
+    * it if refcount hits zero.
+    */
+   _mesa_reference_renderbuffer(&rb->Wrapped, NULL);
+
+   /* delete myself */
    _mesa_delete_renderbuffer(rb);
 }
 
 
 static GLboolean
-AllocStorage_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb,
+AllocStorage_wrapper(GLcontext *ctx, struct gl_renderbuffer *rb,
                      GLenum internalFormat, GLuint width, GLuint height)
 {
    GLboolean b = rb->Wrapped->AllocStorage(ctx, rb->Wrapped, internalFormat,
@@ -62,7 +67,7 @@ AllocStorage_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb,
 
 
 static void *
-GetPointer_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb,
+GetPointer_wrapper(GLcontext *ctx, struct gl_renderbuffer *rb,
                    GLint x, GLint y)
 {
    (void) ctx;
@@ -208,20 +213,20 @@ _mesa_new_renderbuffer_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8)
       ASSERT(rb8->DataType == GL_UNSIGNED_BYTE);
       ASSERT(rb8->_BaseFormat == GL_RGBA);
 
+      _glthread_LOCK_MUTEX(rb8->Mutex);
+      rb8->RefCount++;
+      _glthread_UNLOCK_MUTEX(rb8->Mutex);
+
       rb16->InternalFormat = rb8->InternalFormat;
-      rb16->_ActualFormat = rb8->_ActualFormat;
+      rb16->Format = rb8->Format; /* XXX is this right? */
       rb16->_BaseFormat = rb8->_BaseFormat;
       rb16->DataType = GL_UNSIGNED_SHORT;
       /* Note: passing through underlying bits/channel */
-      rb16->RedBits = rb8->RedBits;
-      rb16->GreenBits = rb8->GreenBits;
-      rb16->BlueBits = rb8->BlueBits;
-      rb16->AlphaBits = rb8->AlphaBits;
       rb16->Wrapped = rb8;
 
-      rb16->AllocStorage = AllocStorage_16wrap8;
-      rb16->Delete = Delete_16wrap8;
-      rb16->GetPointer = GetPointer_16wrap8;
+      rb16->AllocStorage = AllocStorage_wrapper;
+      rb16->Delete = Delete_wrapper;
+      rb16->GetPointer = GetPointer_wrapper;
       rb16->GetRow = GetRow_16wrap8;
       rb16->GetValues = GetValues_16wrap8;
       rb16->PutRow = PutRow_16wrap8;
@@ -236,40 +241,6 @@ _mesa_new_renderbuffer_16wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8)
 
 
 
-static void
-Delete_32wrap8(struct gl_renderbuffer *rb)
-{
-   rb->Wrapped->Delete(rb->Wrapped);
-   _mesa_delete_renderbuffer(rb);
-}
-
-
-static GLboolean
-AllocStorage_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb,
-                     GLenum internalFormat, GLuint width, GLuint height)
-{
-   GLboolean b = rb->Wrapped->AllocStorage(ctx, rb->Wrapped, internalFormat,
-                                           width, height);
-   if (b) {
-      rb->Width = width;
-      rb->Height = height;
-   }
-   return b;
-}
-
-
-static void *
-GetPointer_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb,
-                   GLint x, GLint y)
-{
-   (void) ctx;
-   (void) rb;
-   (void) x;
-   (void) y;
-   return NULL;
-}
-
-
 static void
 GetRow_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
                GLint x, GLint y, void *values)
@@ -405,20 +376,20 @@ _mesa_new_renderbuffer_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8)
       ASSERT(rb8->DataType == GL_UNSIGNED_BYTE);
       ASSERT(rb8->_BaseFormat == GL_RGBA);
 
+      _glthread_LOCK_MUTEX(rb8->Mutex);
+      rb8->RefCount++;
+      _glthread_UNLOCK_MUTEX(rb8->Mutex);
+
       rb32->InternalFormat = rb8->InternalFormat;
-      rb32->_ActualFormat = rb8->_ActualFormat;
+      rb32->Format = rb8->Format;  /* XXX is this right? */
       rb32->_BaseFormat = rb8->_BaseFormat;
       rb32->DataType = GL_FLOAT;
       /* Note: passing through underlying bits/channel */
-      rb32->RedBits = rb8->RedBits;
-      rb32->GreenBits = rb8->GreenBits;
-      rb32->BlueBits = rb8->BlueBits;
-      rb32->AlphaBits = rb8->AlphaBits;
       rb32->Wrapped = rb8;
 
-      rb32->AllocStorage = AllocStorage_32wrap8;
-      rb32->Delete = Delete_32wrap8;
-      rb32->GetPointer = GetPointer_32wrap8;
+      rb32->AllocStorage = AllocStorage_wrapper;
+      rb32->Delete = Delete_wrapper;
+      rb32->GetPointer = GetPointer_wrapper;
       rb32->GetRow = GetRow_32wrap8;
       rb32->GetValues = GetValues_32wrap8;
       rb32->PutRow = PutRow_32wrap8;
@@ -433,40 +404,6 @@ _mesa_new_renderbuffer_32wrap8(GLcontext *ctx, struct gl_renderbuffer *rb8)
 
 
 
-static void
-Delete_32wrap16(struct gl_renderbuffer *rb)
-{
-   rb->Wrapped->Delete(rb->Wrapped);
-   _mesa_delete_renderbuffer(rb);
-}
-
-
-static GLboolean
-AllocStorage_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb,
-                      GLenum internalFormat, GLuint width, GLuint height)
-{
-   GLboolean b = rb->Wrapped->AllocStorage(ctx, rb->Wrapped, internalFormat,
-                                           width, height);
-   if (b) {
-      rb->Width = width;
-      rb->Height = height;
-   }
-   return b;
-}
-
-
-static void *
-GetPointer_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb,
-                    GLint x, GLint y)
-{
-   (void) ctx;
-   (void) rb;
-   (void) x;
-   (void) y;
-   return NULL;
-}
-
-
 static void
 GetRow_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb, GLuint count,
                 GLint x, GLint y, void *values)
@@ -602,20 +539,20 @@ _mesa_new_renderbuffer_32wrap16(GLcontext *ctx, struct gl_renderbuffer *rb16)
       ASSERT(rb16->DataType == GL_UNSIGNED_SHORT);
       ASSERT(rb16->_BaseFormat == GL_RGBA);
 
+      _glthread_LOCK_MUTEX(rb16->Mutex);
+      rb16->RefCount++;
+      _glthread_UNLOCK_MUTEX(rb16->Mutex);
+
       rb32->InternalFormat = rb16->InternalFormat;
-      rb32->_ActualFormat = rb16->_ActualFormat;
+      rb32->Format = rb16->Format;  /* XXX is this right? */
       rb32->_BaseFormat = rb16->_BaseFormat;
       rb32->DataType = GL_FLOAT;
       /* Note: passing through underlying bits/channel */
-      rb32->RedBits = rb16->RedBits;
-      rb32->GreenBits = rb16->GreenBits;
-      rb32->BlueBits = rb16->BlueBits;
-      rb32->AlphaBits = rb16->AlphaBits;
       rb32->Wrapped = rb16;
 
-      rb32->AllocStorage = AllocStorage_32wrap16;
-      rb32->Delete = Delete_32wrap16;
-      rb32->GetPointer = GetPointer_32wrap16;
+      rb32->AllocStorage = AllocStorage_wrapper;
+      rb32->Delete = Delete_wrapper;
+      rb32->GetPointer = GetPointer_wrapper;
       rb32->GetRow = GetRow_32wrap16;
       rb32->GetValues = GetValues_32wrap16;
       rb32->PutRow = PutRow_32wrap16;