From 4b70af918dd9040a6987c6a55e76e49f0e3f90bf Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Fri, 11 Dec 2009 17:57:45 -0700 Subject: llvmpipe: added lp_rast_fence() bin function --- src/gallium/drivers/llvmpipe/lp_rast.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'src/gallium/drivers/llvmpipe/lp_rast.c') diff --git a/src/gallium/drivers/llvmpipe/lp_rast.c b/src/gallium/drivers/llvmpipe/lp_rast.c index 6b7aa8d729..3e7b3d7ab4 100644 --- a/src/gallium/drivers/llvmpipe/lp_rast.c +++ b/src/gallium/drivers/llvmpipe/lp_rast.c @@ -32,6 +32,7 @@ #include "lp_bin_queue.h" #include "lp_debug.h" +#include "lp_fence.h" #include "lp_state.h" #include "lp_rast.h" #include "lp_rast_priv.h" @@ -505,6 +506,30 @@ lp_rast_end_tile( struct lp_rasterizer *rast, } +/** + * Signal on a fence. This is called during bin execution/rasterization. + * Called per thread. + */ +void lp_rast_fence( struct lp_rasterizer *rast, + unsigned thread_index, + const union lp_rast_cmd_arg arg ) +{ + struct lp_fence *fence = arg.fence; + + pipe_mutex_lock( fence->mutex ); + + fence->count++; + assert(fence->count <= fence->rank); + + LP_DBG(DEBUG_RAST, "%s count=%u rank=%u\n", __FUNCTION__, + fence->count, fence->rank); + + pipe_condvar_signal( fence->signalled ); + + pipe_mutex_unlock( fence->mutex ); +} + + /** * When all the threads are done rasterizing a bin, one thread will * call this function to reset the bin and put it onto the empty queue. -- cgit v1.2.3