mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-06 00:10:20 +01:00
gallium: add pipe_screen::semaphore_create
Acked-by: Alyssa Rosenzweig <alyssa@rosenzweig.io> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/36007>
This commit is contained in:
parent
9bacd232b8
commit
cc32c5c2eb
4 changed files with 47 additions and 0 deletions
|
|
@ -453,6 +453,14 @@ dd_screen_memobj_destroy(struct pipe_screen *_screen,
|
|||
|
||||
screen->memobj_destroy(screen, memobj);
|
||||
}
|
||||
|
||||
static struct pipe_fence_handle *
|
||||
dd_screen_semaphore_create(struct pipe_screen *_screen)
|
||||
{
|
||||
struct pipe_screen *screen = dd_screen(_screen)->screen;
|
||||
|
||||
return screen->semaphore_create(screen);
|
||||
}
|
||||
/********************************************************************
|
||||
* screen
|
||||
*/
|
||||
|
|
@ -664,6 +672,7 @@ ddebug_screen_create(struct pipe_screen *screen)
|
|||
dscreen->base.get_driver_pipe_screen = dd_get_driver_pipe_screen;
|
||||
SCR_INIT(is_dmabuf_modifier_supported);
|
||||
SCR_INIT(get_dmabuf_modifier_planes);
|
||||
SCR_INIT(semaphore_create);
|
||||
|
||||
/* copy all caps */
|
||||
*(struct pipe_caps *)&dscreen->base.caps = screen->caps;
|
||||
|
|
|
|||
|
|
@ -736,6 +736,14 @@ static void noop_vertex_state_destroy(struct pipe_screen *screen,
|
|||
FREE(state);
|
||||
}
|
||||
|
||||
static struct pipe_fence_handle *
|
||||
noop_semaphore_create(struct pipe_screen *screen)
|
||||
{
|
||||
struct pipe_reference *f = MALLOC_STRUCT(pipe_reference);
|
||||
f->count = 1;
|
||||
return (struct pipe_fence_handle*)f;
|
||||
}
|
||||
|
||||
static struct pipe_screen * noop_get_driver_pipe_screen(struct pipe_screen *_screen)
|
||||
{
|
||||
struct pipe_screen * screen = ((struct noop_pipe_screen*)_screen)->oscreen;
|
||||
|
|
@ -800,6 +808,8 @@ struct pipe_screen *noop_screen_create(struct pipe_screen *oscreen)
|
|||
screen->query_compression_rates = noop_query_compression_rates;
|
||||
screen->query_compression_modifiers = noop_query_compression_modifiers;
|
||||
screen->get_driver_pipe_screen = noop_get_driver_pipe_screen;
|
||||
if (oscreen->semaphore_create)
|
||||
screen->semaphore_create = noop_semaphore_create;
|
||||
|
||||
/* copy all caps */
|
||||
*(struct pipe_caps *)&screen->caps = oscreen->caps;
|
||||
|
|
|
|||
|
|
@ -936,6 +936,25 @@ trace_screen_fence_reference(struct pipe_screen *_screen,
|
|||
}
|
||||
|
||||
|
||||
static struct pipe_fence_handle *
|
||||
trace_screen_semaphore_create(struct pipe_screen *_screen)
|
||||
{
|
||||
struct trace_screen *tr_scr = trace_screen(_screen);
|
||||
struct pipe_screen *screen = tr_scr->screen;
|
||||
struct pipe_fence_handle *res;
|
||||
|
||||
trace_dump_call_begin("pipe_screen", "fence_reference");
|
||||
trace_dump_arg(ptr, screen);
|
||||
|
||||
res = screen->semaphore_create(screen);
|
||||
|
||||
trace_dump_ret(ptr, res);
|
||||
trace_dump_call_end();
|
||||
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
trace_screen_fence_get_fd(struct pipe_screen *_screen,
|
||||
struct pipe_fence_handle *fence)
|
||||
|
|
@ -1508,6 +1527,7 @@ trace_screen_create(struct pipe_screen *screen)
|
|||
SCR_INIT(resource_changed);
|
||||
tr_scr->base.resource_destroy = trace_screen_resource_destroy;
|
||||
tr_scr->base.fence_reference = trace_screen_fence_reference;
|
||||
SCR_INIT(semaphore_create);
|
||||
SCR_INIT(fence_get_fd);
|
||||
SCR_INIT(create_fence_win32);
|
||||
tr_scr->base.fence_finish = trace_screen_fence_finish;
|
||||
|
|
|
|||
|
|
@ -388,6 +388,14 @@ struct pipe_screen {
|
|||
struct pipe_fence_handle **ptr,
|
||||
struct pipe_fence_handle *fence);
|
||||
|
||||
/**
|
||||
* Creates a semaphore that can be signaled and waited on through
|
||||
* fence_server_sync and fence_server_signal.
|
||||
*
|
||||
* Drivers are required to not flush or wait on anything in this call.
|
||||
*/
|
||||
struct pipe_fence_handle* (*semaphore_create)(struct pipe_screen *screen);
|
||||
|
||||
/**
|
||||
* Wait for the fence to finish.
|
||||
*
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue