ureg: add buffer support to ureg
[mesa.git] / src / gallium / auxiliary / pipebuffer / pb_buffer_malloc.c
index 282802b1717067466104aee25c086315269a1a41..ea2f2fa107cf2c8eb98fc455e8bfa23c5af73dce 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright 2007 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2007 VMware, Inc.
  * All Rights Reserved.
  *
  * Permission is hereby granted, free of charge, to any person obtaining a
@@ -18,7 +18,7 @@
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
- * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
+ * IN NO EVENT SHALL VMWARE AND/OR ITS SUPPLIERS BE LIABLE FOR
  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -30,7 +30,7 @@
  * Implementation of malloc-based buffers to store data that can't be processed
  * by the hardware. 
  * 
- * \author Jose Fonseca <jrfonseca@tungstengraphics.com>
+ * \author Jose Fonseca <jfonseca@vmware.com>
  */
 
 
@@ -49,10 +49,12 @@ struct malloc_buffer
 
 extern const struct pb_vtbl malloc_buffer_vtbl;
 
-static INLINE struct malloc_buffer *
+static inline struct malloc_buffer *
 malloc_buffer(struct pb_buffer *buf)
 {
    assert(buf);
+   if (!buf)
+      return NULL;
    assert(buf->vtbl == &malloc_buffer_vtbl);
    return (struct malloc_buffer *)buf;
 }
@@ -68,7 +70,8 @@ malloc_buffer_destroy(struct pb_buffer *buf)
 
 static void *
 malloc_buffer_map(struct pb_buffer *buf, 
-                  unsigned flags)
+                  unsigned flags,
+                 void *flush_ctx)
 {
    return malloc_buffer(buf)->data;
 }
@@ -102,7 +105,7 @@ malloc_buffer_fence(struct pb_buffer *buf,
 static void
 malloc_buffer_get_base_buffer(struct pb_buffer *buf,
                               struct pb_buffer **base_buf,
-                              unsigned *offset)
+                              pb_size *offset)
 {
    *base_buf = buf;
    *offset = 0;
@@ -121,7 +124,7 @@ malloc_buffer_vtbl = {
 
 
 struct pb_buffer *
-pb_malloc_buffer_create(size_t size,
+pb_malloc_buffer_create(pb_size size,
                        const struct pb_desc *desc) 
 {
    struct malloc_buffer *buf;
@@ -129,13 +132,13 @@ pb_malloc_buffer_create(size_t size,
    /* TODO: do a single allocation */
    
    buf = CALLOC_STRUCT(malloc_buffer);
-   if(!buf)
+   if (!buf)
       return NULL;
 
-   buf->base.base.refcount = 1;
-   buf->base.base.alignment = desc->alignment;
-   buf->base.base.usage = desc->usage;
-   buf->base.base.size = size;
+   pipe_reference_init(&buf->base.reference, 1);
+   buf->base.usage = desc->usage;
+   buf->base.size = size;
+   buf->base.alignment = desc->alignment;
    buf->base.vtbl = &malloc_buffer_vtbl;
 
    buf->data = align_malloc(size, desc->alignment < sizeof(void*) ? sizeof(void*) : desc->alignment);
@@ -150,7 +153,7 @@ pb_malloc_buffer_create(size_t size,
 
 static struct pb_buffer *
 pb_malloc_bufmgr_create_buffer(struct pb_manager *mgr, 
-                               size_t size,
+                               pb_size size,
                                const struct pb_desc *desc) 
 {
    return pb_malloc_buffer_create(size, desc);
@@ -171,11 +174,20 @@ pb_malloc_bufmgr_destroy(struct pb_manager *mgr)
 }
 
 
+static boolean
+pb_malloc_bufmgr_is_buffer_busy( struct pb_manager *mgr,
+                                 struct pb_buffer *buf )
+{
+   return FALSE;
+}
+
+
 static struct pb_manager 
 pb_malloc_bufmgr = {
    pb_malloc_bufmgr_destroy,
    pb_malloc_bufmgr_create_buffer,
-   pb_malloc_bufmgr_flush
+   pb_malloc_bufmgr_flush,
+   pb_malloc_bufmgr_is_buffer_busy
 };