pipebuffer: Verify usage flag consistency. Minor cleanups.
authorJosé Fonseca <jrfonseca@tungstengraphics.com>
Wed, 2 Jul 2008 03:22:51 +0000 (12:22 +0900)
committerJosé Fonseca <jrfonseca@tungstengraphics.com>
Wed, 2 Jul 2008 03:29:07 +0000 (12:29 +0900)
src/gallium/auxiliary/pipebuffer/pb_buffer.h
src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
src/gallium/auxiliary/pipebuffer/pb_bufmgr_alt.c
src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c
src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c
src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c
src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c

index 857ea53..83ea0be 100644 (file)
@@ -204,13 +204,24 @@ pb_reference(struct pb_buffer **dst,
 
 
 /**
- * Utility function to check whether a requested alignment is consistent with
- * the provided alignment or not.
+ * Utility function to check whether the provided alignment is consistent with
+ * the requested or not.
  */
-static INLINE int
+static INLINE boolean
 pb_check_alignment(size_t requested, size_t provided)
 {
-   return requested <= provided && (provided % requested) == 0;
+   return requested <= provided && (provided % requested) == 0 ? TRUE : FALSE;
+}
+
+
+/**
+ * Utility function to check whether the provided alignment is consistent with
+ * the requested or not.
+ */
+static INLINE boolean
+pb_check_usage(unsigned requested, unsigned provided)
+{
+   return (requested & provided) == provided ? TRUE : FALSE;
 }
 
 
index 7f23688..0ffca29 100644 (file)
@@ -406,7 +406,7 @@ fenced_buffer_list_create(struct pipe_winsys *winsys)
 {
    struct fenced_buffer_list *fenced_list;
 
-   fenced_list = (struct fenced_buffer_list *)CALLOC(1, sizeof(*fenced_list));
+   fenced_list = CALLOC_STRUCT(fenced_buffer_list);
    if (!fenced_list)
       return NULL;
 
index 702bef1..0d2d6c0 100644 (file)
@@ -88,6 +88,9 @@ pb_alt_manager_create(struct pb_manager *provider1,
 {
    struct pb_alt_manager *mgr;
 
+   if(!provider1 || !provider2)
+      return NULL;
+   
    mgr = CALLOC_STRUCT(pb_alt_manager);
    if (!mgr)
       return NULL;
index f1a457d..bed4bec 100644 (file)
@@ -217,7 +217,8 @@ pb_cache_is_buffer_compat(struct pb_cache_buffer *buf,
    if(!pb_check_alignment(desc->alignment, buf->base.base.alignment))
       return FALSE;
    
-   /* XXX: check usage too? */
+   if(!pb_check_usage(desc->usage, buf->base.base.usage))
+      return FALSE;
    
    return TRUE;
 }
@@ -282,7 +283,7 @@ pb_cache_manager_create_buffer(struct pb_manager *_mgr,
    
    assert(buf->buffer->base.refcount >= 1);
    assert(pb_check_alignment(desc->alignment, buf->buffer->base.alignment));
-   assert((buf->buffer->base.usage & desc->usage) == desc->usage);
+   assert(pb_check_usage(desc->usage, buf->buffer->base.usage));
    assert(buf->buffer->base.size >= size);
    
    buf->base.base.refcount = 1;
@@ -331,7 +332,10 @@ pb_cache_manager_create(struct pb_manager *provider,
 {
    struct pb_cache_manager *mgr;
 
-   mgr = (struct pb_cache_manager *)CALLOC(1, sizeof(*mgr));
+   if(!provider)
+      return NULL;
+   
+   mgr = CALLOC_STRUCT(pb_cache_manager);
    if (!mgr)
       return NULL;
 
index 9d809e2..05efd8c 100644 (file)
@@ -117,7 +117,7 @@ fenced_bufmgr_create(struct pb_manager *provider,
    if(!provider)
       return NULL;
    
-   fenced_mgr = (struct fenced_pb_manager *)CALLOC(1, sizeof(*fenced_mgr));
+   fenced_mgr = CALLOC_STRUCT(fenced_pb_manager);
    if (!fenced_mgr)
       return NULL;
 
index 0a1e8c8..c51e582 100644 (file)
@@ -29,7 +29,7 @@
  * \file
  * Buffer manager using the old texture memory manager.
  * 
- * \author José Fonseca <jrfonseca@tungstengraphics.com>
+ * \author José Fonseca <jrfonseca@tungstengraphics.com>
  */
 
 
@@ -271,8 +271,8 @@ mm_bufmgr_create(struct pb_manager *provider,
    struct pb_manager *mgr;
    struct pb_desc desc;
 
-   assert(provider);
-   assert(provider->create_buffer);
+   if(!provider)
+      return NULL;
    
    memset(&desc, 0, sizeof(desc));
    desc.alignment = 1 << align2;
index 528e952..95af089 100644 (file)
@@ -30,8 +30,8 @@
  * \file
  * Batch buffer pool management.
  * 
- * \author José Fonseca <jrfonseca-at-tungstengraphics-dot-com>
- * \author Thomas Hellström <thomas-at-tungstengraphics-dot-com>
+ * \author José Fonseca <jrfonseca-at-tungstengraphics-dot-com>
+ * \author Thomas Hellström <thomas-at-tungstengraphics-dot-com>
  */
 
 
@@ -229,7 +229,10 @@ pool_bufmgr_create(struct pb_manager *provider,
    struct pool_buffer *pool_buf;
    size_t i;
 
-   pool = (struct pool_pb_manager *)CALLOC(1, sizeof(*pool));
+   if(!provider)
+      return NULL;
+   
+   pool = CALLOC_STRUCT(pool_pb_manager);
    if (!pool)
       return NULL;
 
index b9dff09..598d9ce 100644 (file)
@@ -324,8 +324,10 @@ pb_slab_manager_create_buffer(struct pb_manager *_mgr,
    if(!pb_check_alignment(desc->alignment, mgr->bufSize))
       return NULL;
 
-   /* XXX: check for compatible buffer usage too? */
-   
+   assert(pb_check_usage(desc->usage, mgr->desc.usage));
+   if(!pb_check_usage(desc->usage, mgr->desc.usage))
+      return NULL;
+
    _glthread_LOCK_MUTEX(mgr->mutex);
    if (mgr->slabs.next == &mgr->slabs) {
       (void) pb_slab_create(mgr);
@@ -438,6 +440,9 @@ pb_slab_range_manager_create(struct pb_manager *provider,
    size_t bufSize;
    unsigned i;
 
+   if(!provider)
+      return NULL;
+   
    mgr = CALLOC_STRUCT(pb_slab_range_manager);
    if (!mgr)
       goto out_err0;