X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fllvmpipe%2Flp_fence.h;h=b72026492c6a8fdf9a4d6297c2040a5c6b41f830;hb=01ab218bbc5c8058a99077a6bc3dc9884e9d218a;hp=d45318f9e4793ac590105e2567ad617d6acc3743;hpb=ba5d600c90f7075cf2c33a0c5c679ef822e8746e;p=mesa.git diff --git a/src/gallium/drivers/llvmpipe/lp_fence.h b/src/gallium/drivers/llvmpipe/lp_fence.h index d45318f9e47..b72026492c6 100644 --- a/src/gallium/drivers/llvmpipe/lp_fence.h +++ b/src/gallium/drivers/llvmpipe/lp_fence.h @@ -30,8 +30,9 @@ #define LP_FENCE_H -#include "pipe/p_refcnt.h" -#include "pipe/p_thread.h" +#include "os/os_thread.h" +#include "pipe/p_state.h" +#include "util/u_inlines.h" struct pipe_screen; @@ -40,10 +41,12 @@ struct pipe_screen; struct lp_fence { struct pipe_reference reference; + unsigned id; - pipe_mutex mutex; - pipe_condvar signalled; + mtx_t mutex; + cnd_t signalled; + boolean issued; unsigned rank; unsigned count; }; @@ -53,8 +56,40 @@ struct lp_fence * lp_fence_create(unsigned rank); +void +lp_fence_signal(struct lp_fence *fence); + +boolean +lp_fence_signalled(struct lp_fence *fence); + +void +lp_fence_wait(struct lp_fence *fence); + void llvmpipe_init_screen_fence_funcs(struct pipe_screen *screen); +void +lp_fence_destroy(struct lp_fence *fence); + +static inline void +lp_fence_reference(struct lp_fence **ptr, + struct lp_fence *f) +{ + struct lp_fence *old = *ptr; + + if (pipe_reference(&old->reference, &f->reference)) { + lp_fence_destroy(old); + } + + *ptr = f; +} + +static inline boolean +lp_fence_issued(const struct lp_fence *fence) +{ + return fence->issued; +} + + #endif /* LP_FENCE_H */