diff --git a/src/mesa/pipe/p_thread.h b/src/mesa/pipe/p_thread.h new file mode 100644 index 00000000000..cd432c547ce --- /dev/null +++ b/src/mesa/pipe/p_thread.h @@ -0,0 +1,54 @@ +/************************************************************************** + * + * Copyright 2008 Tungsten Graphics, Inc., Cedar Park, Texas. + * All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sub license, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice (including the + * next paragraph) shall be included in all copies or substantial portions + * of the Software. + * + * 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 + * 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. + * + **************************************************************************/ + +#ifndef P_THREAD_H +#define P_THREAD_H + +#include "p_compiler.h" + +/* + * XXX: We should come up with a system-independent thread definitions. + * XXX: Patching glthread defs for now. + */ + +#ifndef __MSC__ + +#include "glapi/glthread.h" + +#else /* __MSC__ */ + +typedef int _glthread_Mutex; + +#define _glthread_INIT_MUTEX( M ) ((void) (M)) +#define _glthread_LOCK_MUTEX( M ) ((void) (M)) +#define _glthread_UNLOCK_MUTEX( M ) ((void) (M)) + +#define sched_yield() ((void) 0) + +#endif /* __MSC__ */ + +#endif /* P_THREAD_H */ diff --git a/src/mesa/pipe/pipebuffer/pb_buffer.h b/src/mesa/pipe/pipebuffer/pb_buffer.h index f909bded0dd..b8cb731338c 100644 --- a/src/mesa/pipe/pipebuffer/pb_buffer.h +++ b/src/mesa/pipe/pipebuffer/pb_buffer.h @@ -46,6 +46,7 @@ #include #include +#include "p_compiler.h" #include "pipe/p_state.h" @@ -104,7 +105,7 @@ struct pb_vtbl /* Accessor functions for pb->vtbl: */ -static inline void * +static INLINE void * pb_map(struct pb_buffer *buf, unsigned flags) { @@ -113,7 +114,7 @@ pb_map(struct pb_buffer *buf, } -static inline void +static INLINE void pb_unmap(struct pb_buffer *buf) { assert(buf); @@ -121,7 +122,7 @@ pb_unmap(struct pb_buffer *buf) } -static inline void +static INLINE void pb_get_base_buffer( struct pb_buffer *buf, struct pb_buffer **base_buf, unsigned *offset ) @@ -129,7 +130,7 @@ pb_get_base_buffer( struct pb_buffer *buf, buf->vtbl->get_base_buffer(buf, base_buf, offset); } -static inline void +static INLINE void pb_destroy(struct pb_buffer *buf) { assert(buf); @@ -163,13 +164,13 @@ pb_malloc_buffer_create( unsigned alignment, -static inline struct pipe_buffer * +static INLINE struct pipe_buffer * pb_pipe_buffer( struct pb_buffer *pbuf ) { return &pbuf->base; } -static inline struct pb_buffer * +static INLINE struct pb_buffer * pb_buffer( struct pipe_buffer *buf ) { /* Could add a magic cookie check on debug builds. diff --git a/src/mesa/pipe/pipebuffer/pb_buffer_fenced.c b/src/mesa/pipe/pipebuffer/pb_buffer_fenced.c index 625120d7143..ad2da71c4a7 100644 --- a/src/mesa/pipe/pipebuffer/pb_buffer_fenced.c +++ b/src/mesa/pipe/pipebuffer/pb_buffer_fenced.c @@ -36,17 +36,21 @@ #include #include -#include -#include "main/imports.h" -#include "glapi/glthread.h" #include "linked_list.h" +#include "p_compiler.h" #include "p_winsys.h" +#include "p_thread.h" #include "pb_buffer.h" #include "pb_buffer_fenced.h" +#ifndef __MSC__ +#include +#include "main/imports.h" +#endif + /** * Convenience macro (type safe). @@ -103,11 +107,12 @@ _fenced_buffer_list_check_free(struct fenced_buffer_list *fenced_list, struct fenced_buffer *fenced_buf; struct list_head *list, *prev; int signaled = -1; - int i; list = fenced_list->delayed.next; if (fenced_list->numDelayed > 3) { + unsigned i; + for (i = 0; i < fenced_list->numDelayed; i += 3) { list = list->next; } @@ -281,7 +286,7 @@ fenced_buffer_list_destroy(struct fenced_buffer_list *fenced_list) while (fenced_list->numDelayed) { _glthread_UNLOCK_MUTEX(fenced_list->mutex); sched_yield(); - _fenced_buffer_list_check_free(fenced_list, GL_TRUE); + _fenced_buffer_list_check_free(fenced_list, 1); _glthread_LOCK_MUTEX(fenced_list->mutex); } diff --git a/src/mesa/pipe/pipebuffer/pb_bufmgr_fenced.c b/src/mesa/pipe/pipebuffer/pb_bufmgr_fenced.c index 8cdbbed2725..28996b9a176 100644 --- a/src/mesa/pipe/pipebuffer/pb_bufmgr_fenced.c +++ b/src/mesa/pipe/pipebuffer/pb_bufmgr_fenced.c @@ -52,7 +52,7 @@ struct fenced_pb_manager }; -static inline struct fenced_pb_manager * +static INLINE struct fenced_pb_manager * fenced_pb_manager(struct pb_manager *mgr) { assert(mgr); diff --git a/src/mesa/pipe/pipebuffer/pb_bufmgr_pool.c b/src/mesa/pipe/pipebuffer/pb_bufmgr_pool.c index 7e8494f615f..1e213074f14 100644 --- a/src/mesa/pipe/pipebuffer/pb_bufmgr_pool.c +++ b/src/mesa/pipe/pipebuffer/pb_bufmgr_pool.c @@ -37,17 +37,21 @@ #include #include -#include -#include "main/imports.h" -#include "glapi/glthread.h" #include "linked_list.h" +#include "p_compiler.h" +#include "p_thread.h" #include "p_defines.h" #include "pb_buffer.h" #include "pb_bufmgr.h" +#ifndef __MSC__ +#include +#include "main/imports.h" +#endif + /** * Convenience macro (type safe). @@ -75,7 +79,7 @@ struct pool_pb_manager }; -static inline struct pool_pb_manager * +static INLINE struct pool_pb_manager * pool_pb_manager(struct pb_manager *mgr) { assert(mgr); @@ -95,7 +99,7 @@ struct pool_buffer }; -static inline struct pool_buffer * +static INLINE struct pool_buffer * pool_buffer(struct pb_buffer *buf) { assert(buf); @@ -217,7 +221,7 @@ pool_bufmgr_create(struct pb_manager *provider, { struct pool_pb_manager *pool; struct pool_buffer *pool_buf; - int i; + size_t i; pool = (struct pool_pb_manager *)calloc(1, sizeof(*pool)); if (!pool)