u_threaded_gallium: remove synchronization in fence_server_sync

The whole point of fence_server_sync is that it can be used to
avoid waiting in the application thread.

Reviewed-by: Andres Rodriguez <andresx7@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
This commit is contained in:
Nicolai Hähnle
2017-11-06 11:56:54 +01:00
parent abeded1cac
commit ce470af0b1
3 changed files with 13 additions and 3 deletions
@@ -1834,15 +1834,23 @@ tc_create_fence_fd(struct pipe_context *_pipe,
pipe->create_fence_fd(pipe, fence, fd);
}
static void
tc_call_fence_server_sync(struct pipe_context *pipe, union tc_payload *payload)
{
pipe->fence_server_sync(pipe, payload->fence);
pipe->screen->fence_reference(pipe->screen, &payload->fence, NULL);
}
static void
tc_fence_server_sync(struct pipe_context *_pipe,
struct pipe_fence_handle *fence)
{
struct threaded_context *tc = threaded_context(_pipe);
struct pipe_context *pipe = tc->pipe;
struct pipe_screen *screen = tc->pipe->screen;
union tc_payload *payload = tc_add_small_call(tc, TC_CALL_fence_server_sync);
tc_sync(tc);
pipe->fence_server_sync(pipe, fence);
payload->fence = NULL;
screen->fence_reference(screen, &payload->fence, fence);
}
static struct pipe_video_codec *
@@ -309,6 +309,7 @@ union tc_payload {
struct pipe_query *query;
struct pipe_resource *resource;
struct pipe_transfer *transfer;
struct pipe_fence_handle *fence;
uint64_t handle;
};
@@ -1,5 +1,6 @@
CALL(flush)
CALL(callback)
CALL(fence_server_sync)
CALL(destroy_query)
CALL(begin_query)
CALL(end_query)