summaryrefslogtreecommitdiffstats
path: root/src/gallium/drivers/noop
diff options
context:
space:
mode:
authorMarek Olšák <[email protected]>2016-08-28 18:50:19 +0200
committerMarek Olšák <[email protected]>2016-09-05 16:12:04 +0200
commitb012a13af5c7703246f98fc823a63d481f8229e3 (patch)
treec4cc7b813304a3614530d8976bf9c647250c8784 /src/gallium/drivers/noop
parent1c71bccdaa3ae22ebcd79c29e80f50036517aa34 (diff)
noop: implement resource_get_handle
X+DRI3 locks up if the returned handle is invalid.
Diffstat (limited to 'src/gallium/drivers/noop')
-rw-r--r--src/gallium/drivers/noop/noop_pipe.c16
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,