X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fauxiliary%2Fpipebuffer%2Fpb_bufmgr_mm.c;h=f975cfbfe93ea68e87546dbe04d2fbb5fe65370f;hb=HEAD;hp=6400fc5b0a3b13300ed8aace4585ae0dbbdf1de5;hpb=a04af335a42ce3b28e59ff9b85b2bd433a9d7b12;p=mesa.git diff --git a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c index 6400fc5b0a3..f975cfbfe93 100644 --- a/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c +++ b/src/gallium/auxiliary/pipebuffer/pb_bufmgr_mm.c @@ -1,6 +1,6 @@ /************************************************************************** * - * Copyright 2006 Tungsten Graphics, Inc., Cedar Park, Texas. + * Copyright 2006 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. @@ -29,15 +29,15 @@ * \file * Buffer manager using the old texture memory manager. * - * \author Jose Fonseca + * \author Jose Fonseca */ #include "pipe/p_defines.h" #include "util/u_debug.h" -#include "pipe/p_thread.h" +#include "os/os_thread.h" #include "util/u_memory.h" -#include "util/u_double_list.h" +#include "util/list.h" #include "util/u_mm.h" #include "pb_buffer.h" #include "pb_bufmgr.h" @@ -53,7 +53,7 @@ struct mm_pb_manager { struct pb_manager base; - pipe_mutex mutex; + mtx_t mutex; pb_size size; struct mem_block *heap; @@ -65,7 +65,7 @@ struct mm_pb_manager }; -static INLINE struct mm_pb_manager * +static inline struct mm_pb_manager * mm_pb_manager(struct pb_manager *mgr) { assert(mgr); @@ -83,7 +83,7 @@ struct mm_buffer }; -static INLINE struct mm_buffer * +static inline struct mm_buffer * mm_buffer(struct pb_buffer *buf) { assert(buf); @@ -97,22 +97,25 @@ mm_buffer_destroy(struct pb_buffer *buf) struct mm_buffer *mm_buf = mm_buffer(buf); struct mm_pb_manager *mm = mm_buf->mgr; - assert(!pipe_is_referenced(&mm_buf->base.base.reference)); + assert(!pipe_is_referenced(&mm_buf->base.reference)); - pipe_mutex_lock(mm->mutex); + mtx_lock(&mm->mutex); u_mmFreeMem(mm_buf->block); FREE(mm_buf); - pipe_mutex_unlock(mm->mutex); + mtx_unlock(&mm->mutex); } static void * mm_buffer_map(struct pb_buffer *buf, - unsigned flags) + enum pb_usage_flags flags, + void *flush_ctx) { struct mm_buffer *mm_buf = mm_buffer(buf); struct mm_pb_manager *mm = mm_buf->mgr; + /* XXX: it will be necessary to remap here to propagate flush_ctx */ + return (unsigned char *) mm->map + mm_buf->block->ofs; } @@ -127,7 +130,7 @@ mm_buffer_unmap(struct pb_buffer *buf) static enum pipe_error mm_buffer_validate(struct pb_buffer *buf, struct pb_validate *vl, - unsigned flags) + enum pb_usage_flags flags) { struct mm_buffer *mm_buf = mm_buffer(buf); struct mm_pb_manager *mm = mm_buf->mgr; @@ -181,18 +184,18 @@ mm_bufmgr_create_buffer(struct pb_manager *mgr, if(!pb_check_alignment(desc->alignment, (pb_size)1 << mm->align2)) return NULL; - pipe_mutex_lock(mm->mutex); + mtx_lock(&mm->mutex); mm_buf = CALLOC_STRUCT(mm_buffer); if (!mm_buf) { - pipe_mutex_unlock(mm->mutex); + mtx_unlock(&mm->mutex); return NULL; } - pipe_reference_init(&mm_buf->base.base.reference, 1); - mm_buf->base.base.alignment = desc->alignment; - mm_buf->base.base.usage = desc->usage; - mm_buf->base.base.size = size; + pipe_reference_init(&mm_buf->base.reference, 1); + mm_buf->base.alignment = desc->alignment; + mm_buf->base.usage = desc->usage; + mm_buf->base.size = size; mm_buf->base.vtbl = &mm_buffer_vtbl; @@ -205,7 +208,7 @@ mm_bufmgr_create_buffer(struct pb_manager *mgr, mmDumpMemInfo(mm->heap); #endif FREE(mm_buf); - pipe_mutex_unlock(mm->mutex); + mtx_unlock(&mm->mutex); return NULL; } @@ -213,7 +216,7 @@ mm_bufmgr_create_buffer(struct pb_manager *mgr, assert(0 <= (pb_size)mm_buf->block->ofs && (pb_size)mm_buf->block->ofs < mm->size); assert(size <= (pb_size)mm_buf->block->size && (pb_size)mm_buf->block->ofs + (pb_size)mm_buf->block->size <= mm->size); - pipe_mutex_unlock(mm->mutex); + mtx_unlock(&mm->mutex); return SUPER(mm_buf); } @@ -230,14 +233,14 @@ mm_bufmgr_destroy(struct pb_manager *mgr) { struct mm_pb_manager *mm = mm_pb_manager(mgr); - pipe_mutex_lock(mm->mutex); + mtx_lock(&mm->mutex); u_mmDestroy(mm->heap); pb_unmap(mm->buffer); pb_reference(&mm->buffer, NULL); - pipe_mutex_unlock(mm->mutex); + mtx_unlock(&mm->mutex); FREE(mgr); } @@ -249,7 +252,7 @@ mm_bufmgr_create_from_buffer(struct pb_buffer *buffer, { struct mm_pb_manager *mm; - if(!buffer) + if (!buffer) return NULL; mm = CALLOC_STRUCT(mm_pb_manager); @@ -263,13 +266,13 @@ mm_bufmgr_create_from_buffer(struct pb_buffer *buffer, mm->size = size; mm->align2 = align2; /* 64-byte alignment */ - pipe_mutex_init(mm->mutex); + (void) mtx_init(&mm->mutex, mtx_plain); mm->buffer = buffer; mm->map = pb_map(mm->buffer, - PIPE_BUFFER_USAGE_CPU_READ | - PIPE_BUFFER_USAGE_CPU_WRITE); + PB_USAGE_CPU_READ | + PB_USAGE_CPU_WRITE, NULL); if(!mm->map) goto failure; @@ -280,12 +283,11 @@ mm_bufmgr_create_from_buffer(struct pb_buffer *buffer, return SUPER(mm); failure: -if(mm->heap) - u_mmDestroy(mm->heap); + if(mm->heap) + u_mmDestroy(mm->heap); if(mm->map) pb_unmap(mm->buffer); - if(mm) - FREE(mm); + FREE(mm); return NULL; } @@ -298,7 +300,7 @@ mm_bufmgr_create(struct pb_manager *provider, struct pb_manager *mgr; struct pb_desc desc; - if(!provider) + if (!provider) return NULL; memset(&desc, 0, sizeof(desc));