util: Move gallium's linked list to util
[mesa.git] / src / gallium / auxiliary / pipebuffer / pb_bufmgr_ondemand.c
index 4f7e6b1c4df6d0f5777cf17b585c5649aa13ba39..77e642ada08e067e98409867b2dd9d98bb676d7d 100644 (file)
@@ -1,6 +1,6 @@
 /**************************************************************************
  *
- * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas.
+ * Copyright 2008 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 @@
  * A variation of malloc buffers which get transferred to real graphics memory
  * when there is an attempt to validate them. 
  * 
- * @author Jose Fonseca <jrfonseca@tungstengraphics.com>
+ * @author Jose Fonseca <jfonseca@vmware.com>
  */
 
 
@@ -55,7 +55,7 @@ struct pb_ondemand_buffer
    
    /** Real buffer */
    struct pb_buffer *buffer;
-   size_t size;
+   pb_size size;
    struct pb_desc desc;
 };
 
@@ -74,6 +74,8 @@ static INLINE struct pb_ondemand_buffer *
 pb_ondemand_buffer(struct pb_buffer *buf)
 {
    assert(buf);
+   if (!buf)
+      return NULL;
    assert(buf->vtbl == &pb_ondemand_buffer_vtbl);
    return (struct pb_ondemand_buffer *)buf;
 }
@@ -101,13 +103,13 @@ pb_ondemand_buffer_destroy(struct pb_buffer *_buf)
 
 static void *
 pb_ondemand_buffer_map(struct pb_buffer *_buf, 
-                       unsigned flags)
+                       unsigned flags, void *flush_ctx)
 {
    struct pb_ondemand_buffer *buf = pb_ondemand_buffer(_buf);
 
    if(buf->buffer) {
       assert(!buf->data);
-      return pb_map(buf->buffer, flags);
+      return pb_map(buf->buffer, flags, flush_ctx);
    }
    else {
       assert(buf->data);
@@ -148,7 +150,7 @@ pb_ondemand_buffer_instantiate(struct pb_ondemand_buffer *buf)
       if(!buf->buffer)
          return PIPE_ERROR_OUT_OF_MEMORY;
       
-      map = pb_map(buf->buffer, PIPE_BUFFER_USAGE_CPU_READ);
+      map = pb_map(buf->buffer, PB_USAGE_CPU_READ, NULL);
       if(!map) {
          pb_reference(&buf->buffer, NULL);
          return PIPE_ERROR;
@@ -204,7 +206,7 @@ pb_ondemand_buffer_fence(struct pb_buffer *_buf,
 static void
 pb_ondemand_buffer_get_base_buffer(struct pb_buffer *_buf,
                                    struct pb_buffer **base_buf,
-                                   unsigned *offset)
+                                   pb_size *offset)
 {
    struct pb_ondemand_buffer *buf = pb_ondemand_buffer(_buf);
 
@@ -232,7 +234,7 @@ pb_ondemand_buffer_vtbl = {
 
 static struct pb_buffer *
 pb_ondemand_manager_create_buffer(struct pb_manager *_mgr, 
-                                  size_t size,
+                                  pb_size size,
                                   const struct pb_desc *desc) 
 {
    struct pb_ondemand_manager *mgr = pb_ondemand_manager(_mgr);
@@ -242,10 +244,10 @@ pb_ondemand_manager_create_buffer(struct pb_manager *_mgr,
    if(!buf)
       return NULL;
 
-   pipe_reference_init(&buf->base.base.reference, 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.alignment = desc->alignment;
+   buf->base.usage = desc->usage;
+   buf->base.size = size;
    buf->base.vtbl = &pb_ondemand_buffer_vtbl;
    
    buf->mgr = mgr;