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:
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user