diff options
author | Ben Skeggs <skeggsb@gmail.com> | 2008-01-20 10:38:35 +1100 |
---|---|---|
committer | Ben Skeggs <skeggsb@gmail.com> | 2008-01-20 10:38:35 +1100 |
commit | df09ed9d1ecf11be14ee7f189273c14375fbaa57 (patch) | |
tree | 7322a2670877dff003f57a5485c9e92226b57167 /src/mesa/pipe/pipebuffer/pb_bufmgr_mm.c | |
parent | 0feec292ddc279998a1e25c10ea70d211f7b4b62 (diff) | |
parent | a1f4a5e802ad62c88fca6834b9de1c83672230a6 (diff) |
Merge branch 'upstream-gallium-0.1' into darktama-gallium-0.1
Diffstat (limited to 'src/mesa/pipe/pipebuffer/pb_bufmgr_mm.c')
-rw-r--r-- | src/mesa/pipe/pipebuffer/pb_bufmgr_mm.c | 38 |
1 files changed, 29 insertions, 9 deletions
diff --git a/src/mesa/pipe/pipebuffer/pb_bufmgr_mm.c b/src/mesa/pipe/pipebuffer/pb_bufmgr_mm.c index 8e6dcf1116..e9bc34b4a4 100644 --- a/src/mesa/pipe/pipebuffer/pb_bufmgr_mm.c +++ b/src/mesa/pipe/pipebuffer/pb_bufmgr_mm.c @@ -218,17 +218,18 @@ mm_bufmgr_destroy(struct buffer_manager *mgr) struct buffer_manager * -mm_bufmgr_create(struct buffer_manager *provider, - size_t size, size_t align2) +mm_bufmgr_create_from_buffer(struct pipe_buffer *buffer, + size_t size, size_t align2) { struct mm_buffer_manager *mm; + if(!buffer) + return NULL; + mm = (struct mm_buffer_manager *)calloc(1, sizeof(*mm)); if (!mm) return NULL; - assert(provider); - assert(provider->create_buffer); mm->base.create_buffer = mm_bufmgr_create_buffer; mm->base.destroy = mm_bufmgr_destroy; @@ -237,9 +238,7 @@ mm_bufmgr_create(struct buffer_manager *provider, _glthread_INIT_MUTEX(mm->mutex); - mm->buffer = provider->create_buffer(provider, size); - if (!mm->buffer) - goto failure; + mm->buffer = buffer; mm->map = buffer_map(mm->buffer, PIPE_BUFFER_FLAG_READ | PIPE_BUFFER_FLAG_WRITE ); @@ -257,9 +256,30 @@ if(mm->heap) mmDestroy(mm->heap); if(mm->map) buffer_unmap(mm->buffer); - if(mm->buffer) - buffer_release(mm->buffer); if(mm) free(mm); return NULL; } + + +struct buffer_manager * +mm_bufmgr_create(struct buffer_manager *provider, + size_t size, size_t align2) +{ + struct pipe_buffer *buffer; + struct buffer_manager *mgr; + + assert(provider); + assert(provider->create_buffer); + buffer = provider->create_buffer(provider, size); + if (!buffer) + return NULL; + + mgr = mm_bufmgr_create_from_buffer(buffer, size, align2); + if (!mgr) { + buffer_release(buffer); + return NULL; + } + + return mgr; +} |