From: Jakob Bornecrantz Date: Fri, 5 Jun 2009 02:01:34 +0000 (+0100) Subject: trace/rbug: Use condvar on system that has it for blocking X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=61ffba44fd70abefd22366aa296b7afb04c6767a;p=mesa.git trace/rbug: Use condvar on system that has it for blocking --- diff --git a/src/gallium/drivers/trace/tr_context.c b/src/gallium/drivers/trace/tr_context.c index b04cc2ce566..dd5cca58dd2 100644 --- a/src/gallium/drivers/trace/tr_context.c +++ b/src/gallium/drivers/trace/tr_context.c @@ -127,9 +127,13 @@ trace_context_draw_block(struct trace_context *tr_ctx, int flag) /* wait for rbug to clear the blocked flag */ while (tr_ctx->draw_blocked & flag) { tr_ctx->draw_blocked |= flag; +#ifdef PIPE_THREAD_HAVE_CONDVAR + pipe_condvar_wait(tr_ctx->draw_cond, tr_ctx->draw_mutex); +#else pipe_mutex_unlock(tr_ctx->draw_mutex); /* TODO sleep or use conditional */ pipe_mutex_lock(tr_ctx->draw_mutex); +#endif } pipe_mutex_unlock(tr_ctx->draw_mutex); @@ -1191,6 +1195,7 @@ trace_context_create(struct pipe_screen *_screen, rbug_blocker_flags, 0); pipe_mutex_init(tr_ctx->draw_mutex); + pipe_condvar_init(tr_ctx->draw_cond); pipe_mutex_init(tr_ctx->list_mutex); make_empty_list(&tr_ctx->shaders); diff --git a/src/gallium/drivers/trace/tr_context.h b/src/gallium/drivers/trace/tr_context.h index 770e975a14a..0c2bf276895 100644 --- a/src/gallium/drivers/trace/tr_context.h +++ b/src/gallium/drivers/trace/tr_context.h @@ -56,6 +56,7 @@ struct trace_context struct trace_texture *zsbuf; } curr; + pipe_condvar draw_cond; pipe_mutex draw_mutex; int draw_blocker; int draw_blocked; diff --git a/src/gallium/drivers/trace/tr_rbug.c b/src/gallium/drivers/trace/tr_rbug.c index db9de8f3c4f..e2de1080091 100644 --- a/src/gallium/drivers/trace/tr_rbug.c +++ b/src/gallium/drivers/trace/tr_rbug.c @@ -371,6 +371,10 @@ trace_rbug_context_draw_step(struct trace_rbug *tr_rbug, struct rbug_header *hea tr_ctx->draw_blocked &= ~step->step; pipe_mutex_unlock(tr_ctx->draw_mutex); +#ifdef PIPE_THREAD_HAVE_CONDVAR + pipe_condvar_broadcast(tr_ctx->draw_cond); +#endif + pipe_mutex_unlock(tr_scr->list_mutex); return 0; @@ -397,6 +401,10 @@ trace_rbug_context_draw_unblock(struct trace_rbug *tr_rbug, struct rbug_header * tr_ctx->draw_blocker &= ~unblock->unblock; pipe_mutex_unlock(tr_ctx->draw_mutex); +#ifdef PIPE_THREAD_HAVE_CONDVAR + pipe_condvar_broadcast(tr_ctx->draw_cond); +#endif + pipe_mutex_unlock(tr_scr->list_mutex); return 0;