diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_cs.c | 11 | ||||
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_winsys.c | 6 | ||||
-rw-r--r-- | src/gallium/winsys/radeon/drm/radeon_drm_winsys.h | 5 |
3 files changed, 3 insertions, 19 deletions
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c index 38a92095507..d530011be66 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_cs.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_cs.c @@ -560,17 +560,12 @@ static void radeon_drm_cs_flush(struct radeon_winsys_cs *rcs, unsigned flags, ui break; } - if (cs->ws->thread && (flags & RADEON_FLUSH_ASYNC)) { + if (cs->ws->thread) { cs->flush_started = 1; radeon_drm_ws_queue_cs(cs->ws, cs); + if (!(flags & RADEON_FLUSH_ASYNC)) + radeon_drm_cs_sync_flush(rcs); } else { - pipe_mutex_lock(cs->ws->cs_stack_lock); - if (cs->ws->thread) { - while (p_atomic_read(&cs->ws->ncs)) { - pipe_condvar_wait(cs->ws->cs_queue_empty, cs->ws->cs_stack_lock); - } - } - pipe_mutex_unlock(cs->ws->cs_stack_lock); radeon_drm_cs_emit_ioctl_oneshot(cs, cs->cst); } } else { diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c index 0a3b932a3af..27bf3483d7d 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c @@ -431,7 +431,6 @@ static void radeon_winsys_destroy(struct radeon_winsys *rws) pipe_thread_wait(ws->thread); } pipe_semaphore_destroy(&ws->cs_queued); - pipe_condvar_destroy(ws->cs_queue_empty); pipe_mutex_destroy(ws->hyperz_owner_mutex); pipe_mutex_destroy(ws->cmask_owner_mutex); @@ -567,9 +566,6 @@ next: } ws->cs_stack[p_atomic_read(&ws->ncs) - 1] = NULL; empty_stack = p_atomic_dec_zero(&ws->ncs); - if (empty_stack) { - pipe_condvar_signal(ws->cs_queue_empty); - } pipe_mutex_unlock(ws->cs_stack_lock); pipe_semaphore_signal(&cs->flush_completed); @@ -585,7 +581,6 @@ next: ws->cs_stack[i] = NULL; } p_atomic_set(&ws->ncs, 0); - pipe_condvar_signal(ws->cs_queue_empty); pipe_mutex_unlock(ws->cs_stack_lock); return NULL; } @@ -651,7 +646,6 @@ struct radeon_winsys *radeon_drm_winsys_create(int fd) p_atomic_set(&ws->ncs, 0); pipe_semaphore_init(&ws->cs_queued, 0); - pipe_condvar_init(ws->cs_queue_empty); if (ws->num_cpus > 1 && debug_get_option_thread()) ws->thread = pipe_thread_create(radeon_drm_cs_emit_ioctl, ws); diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h index 682479ed52c..ed901948634 100644 --- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h +++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h @@ -67,11 +67,6 @@ struct radeon_drm_winsys { /* rings submission thread */ pipe_mutex cs_stack_lock; pipe_semaphore cs_queued; - /* we cannot use semaphore for empty queue because maintaining an even - * number of call to semaphore_wait and semaphore_signal is, to say the - * least, tricky - */ - pipe_condvar cs_queue_empty; pipe_thread thread; int kill_thread; int ncs; |