diff options
author | Marek Olšák <[email protected]> | 2016-08-28 18:50:19 +0200 |
---|---|---|
committer | Marek Olšák <[email protected]> | 2016-09-05 16:12:04 +0200 |
commit | b012a13af5c7703246f98fc823a63d481f8229e3 (patch) | |
tree | c4cc7b813304a3614530d8976bf9c647250c8784 | |
parent | 1c71bccdaa3ae22ebcd79c29e80f50036517aa34 (diff) |
noop: implement resource_get_handle
X+DRI3 locks up if the returned handle is invalid.
-rw-r--r-- | src/gallium/drivers/noop/noop_pipe.c | 16 |
1 files changed, 14 insertions, 2 deletions
diff --git a/src/gallium/drivers/noop/noop_pipe.c b/src/gallium/drivers/noop/noop_pipe.c index 25e0c1ff036..301301966ce 100644 --- a/src/gallium/drivers/noop/noop_pipe.c +++ b/src/gallium/drivers/noop/noop_pipe.c @@ -134,13 +134,25 @@ static struct pipe_resource *noop_resource_from_handle(struct pipe_screen *scree return noop_resource; } -static boolean noop_resource_get_handle(struct pipe_screen *screen, +static boolean noop_resource_get_handle(struct pipe_screen *pscreen, struct pipe_context *ctx, struct pipe_resource *resource, struct winsys_handle *handle, unsigned usage) { - return FALSE; + struct noop_pipe_screen *noop_screen = (struct noop_pipe_screen*)pscreen; + struct pipe_screen *screen = noop_screen->oscreen; + struct pipe_resource *tex; + bool result; + + /* resource_get_handle musn't fail. Just create something and return it. */ + tex = screen->resource_create(screen, resource); + if (!tex) + return false; + + result = screen->resource_get_handle(screen, NULL, tex, handle, usage); + pipe_resource_reference(&tex, NULL); + return result; } static void noop_resource_destroy(struct pipe_screen *screen, |