summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJosé Fonseca <jrfonseca@tungstengraphics.com>2008-07-02 12:22:51 +0900
committerJosé Fonseca <jrfonseca@tungstengraphics.com>2008-07-02 12:29:07 +0900
commitea4ca10b1bec67c8a60db0e4e5581318ce9f62f9 (patch)
treedd815f4ea41b98cfba066a1aacc71da71a45e0f7 /src
parent66b48202c221a25f3980df8f443ce63c2fb4119f (diff)
pipebuffer: Verify usage flag consistency. Minor cleanups.
Diffstat (limited to 'src')
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_buffer.h19
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c2
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_alt.c3
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c10
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c2
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c6
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c9
-rw-r--r--src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c9
8 files changed, 43 insertions, 17 deletions
diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer.h b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
index 857ea53c78..83ea0be74b 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer.h
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer.h
@@ -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;
}
diff --git a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
index 7f236887a9..0ffca298cd 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_buffer_fenced.c
@@ -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;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_alt.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_alt.c
index 702bef1c04..0d2d6c0c1b 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_alt.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_alt.c
@@ -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;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
index f1a457dde4..bed4bec4fe 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_cache.c
@@ -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;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c
index 9d809e2f9b..05efd8ce41 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_fenced.c
@@ -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;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c
index 0a1e8c83b1..c51e582611 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c
@@ -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;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c
index 528e9528f6..95af08929a 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_pool.c
@@ -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;
diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
index b9dff09804..598d9ce310 100644
--- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
+++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_slab.c
@@ -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;