gallium/u_queue: isolate util_queue_fence implementation
it's cleaner this way. Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
parent
4aea8fe7e0
commit
24847dd1b5
|
@ -88,7 +88,7 @@ remove_from_atexit_list(struct util_queue *queue)
|
||||||
}
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* util_queue implementation
|
* util_queue_fence
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -101,7 +101,7 @@ util_queue_fence_signal(struct util_queue_fence *fence)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
util_queue_job_wait(struct util_queue_fence *fence)
|
util_queue_fence_wait(struct util_queue_fence *fence)
|
||||||
{
|
{
|
||||||
pipe_mutex_lock(fence->mutex);
|
pipe_mutex_lock(fence->mutex);
|
||||||
while (!fence->signalled)
|
while (!fence->signalled)
|
||||||
|
@ -109,6 +109,27 @@ util_queue_job_wait(struct util_queue_fence *fence)
|
||||||
pipe_mutex_unlock(fence->mutex);
|
pipe_mutex_unlock(fence->mutex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
util_queue_fence_init(struct util_queue_fence *fence)
|
||||||
|
{
|
||||||
|
memset(fence, 0, sizeof(*fence));
|
||||||
|
pipe_mutex_init(fence->mutex);
|
||||||
|
pipe_condvar_init(fence->cond);
|
||||||
|
fence->signalled = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
util_queue_fence_destroy(struct util_queue_fence *fence)
|
||||||
|
{
|
||||||
|
assert(fence->signalled);
|
||||||
|
pipe_condvar_destroy(fence->cond);
|
||||||
|
pipe_mutex_destroy(fence->mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* util_queue implementation
|
||||||
|
*/
|
||||||
|
|
||||||
struct thread_input {
|
struct thread_input {
|
||||||
struct util_queue *queue;
|
struct util_queue *queue;
|
||||||
int thread_index;
|
int thread_index;
|
||||||
|
@ -266,23 +287,6 @@ util_queue_destroy(struct util_queue *queue)
|
||||||
FREE(queue->threads);
|
FREE(queue->threads);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
util_queue_fence_init(struct util_queue_fence *fence)
|
|
||||||
{
|
|
||||||
memset(fence, 0, sizeof(*fence));
|
|
||||||
pipe_mutex_init(fence->mutex);
|
|
||||||
pipe_condvar_init(fence->cond);
|
|
||||||
fence->signalled = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
util_queue_fence_destroy(struct util_queue_fence *fence)
|
|
||||||
{
|
|
||||||
assert(fence->signalled);
|
|
||||||
pipe_condvar_destroy(fence->cond);
|
|
||||||
pipe_mutex_destroy(fence->mutex);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
util_queue_add_job(struct util_queue *queue,
|
util_queue_add_job(struct util_queue *queue,
|
||||||
void *job,
|
void *job,
|
||||||
|
|
|
@ -87,7 +87,7 @@ void util_queue_add_job(struct util_queue *queue,
|
||||||
util_queue_execute_func execute,
|
util_queue_execute_func execute,
|
||||||
util_queue_execute_func cleanup);
|
util_queue_execute_func cleanup);
|
||||||
|
|
||||||
void util_queue_job_wait(struct util_queue_fence *fence);
|
void util_queue_fence_wait(struct util_queue_fence *fence);
|
||||||
int64_t util_queue_get_thread_time_nano(struct util_queue *queue,
|
int64_t util_queue_get_thread_time_nano(struct util_queue *queue,
|
||||||
unsigned thread_index);
|
unsigned thread_index);
|
||||||
|
|
||||||
|
|
|
@ -230,7 +230,7 @@ fd_batch_sync(struct fd_batch *batch)
|
||||||
{
|
{
|
||||||
if (!batch->ctx->screen->reorder)
|
if (!batch->ctx->screen->reorder)
|
||||||
return;
|
return;
|
||||||
util_queue_job_wait(&batch->flush_fence);
|
util_queue_fence_wait(&batch->flush_fence);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
|
@ -1200,7 +1200,7 @@ again:
|
||||||
* in a compiler thread.
|
* in a compiler thread.
|
||||||
*/
|
*/
|
||||||
if (thread_index < 0)
|
if (thread_index < 0)
|
||||||
util_queue_job_wait(&sel->ready);
|
util_queue_fence_wait(&sel->ready);
|
||||||
|
|
||||||
pipe_mutex_lock(sel->mutex);
|
pipe_mutex_lock(sel->mutex);
|
||||||
|
|
||||||
|
@ -1832,7 +1832,7 @@ static void si_bind_ps_shader(struct pipe_context *ctx, void *state)
|
||||||
static void si_delete_shader(struct si_context *sctx, struct si_shader *shader)
|
static void si_delete_shader(struct si_context *sctx, struct si_shader *shader)
|
||||||
{
|
{
|
||||||
if (shader->is_optimized) {
|
if (shader->is_optimized) {
|
||||||
util_queue_job_wait(&shader->optimized_ready);
|
util_queue_fence_wait(&shader->optimized_ready);
|
||||||
util_queue_fence_destroy(&shader->optimized_ready);
|
util_queue_fence_destroy(&shader->optimized_ready);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1884,7 +1884,7 @@ static void si_delete_shader_selector(struct pipe_context *ctx, void *state)
|
||||||
[PIPE_SHADER_FRAGMENT] = &sctx->ps_shader,
|
[PIPE_SHADER_FRAGMENT] = &sctx->ps_shader,
|
||||||
};
|
};
|
||||||
|
|
||||||
util_queue_job_wait(&sel->ready);
|
util_queue_fence_wait(&sel->ready);
|
||||||
|
|
||||||
if (current_shader[sel->type]->cso == sel) {
|
if (current_shader[sel->type]->cso == sel) {
|
||||||
current_shader[sel->type]->cso = NULL;
|
current_shader[sel->type]->cso = NULL;
|
||||||
|
|
|
@ -1118,7 +1118,7 @@ void amdgpu_cs_sync_flush(struct radeon_winsys_cs *rcs)
|
||||||
struct amdgpu_cs *cs = amdgpu_cs(rcs);
|
struct amdgpu_cs *cs = amdgpu_cs(rcs);
|
||||||
|
|
||||||
/* Wait for any pending ioctl of this CS to complete. */
|
/* Wait for any pending ioctl of this CS to complete. */
|
||||||
util_queue_job_wait(&cs->flush_completed);
|
util_queue_fence_wait(&cs->flush_completed);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int amdgpu_cs_flush(struct radeon_winsys_cs *rcs,
|
static int amdgpu_cs_flush(struct radeon_winsys_cs *rcs,
|
||||||
|
|
|
@ -486,7 +486,7 @@ void radeon_drm_cs_sync_flush(struct radeon_winsys_cs *rcs)
|
||||||
|
|
||||||
/* Wait for any pending ioctl of this CS to complete. */
|
/* Wait for any pending ioctl of this CS to complete. */
|
||||||
if (util_queue_is_initialized(&cs->ws->cs_queue))
|
if (util_queue_is_initialized(&cs->ws->cs_queue))
|
||||||
util_queue_job_wait(&cs->flush_completed);
|
util_queue_fence_wait(&cs->flush_completed);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Add the given fence to a slab buffer fence list.
|
/* Add the given fence to a slab buffer fence list.
|
||||||
|
|
Loading…
Reference in New Issue