Module: Mesa
Branch: master
Commit: b012a13af5c7703246f98fc823a63d481f8229e3
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=b012a13af5c7703246f98fc823a63d481f8229e3

Author: Marek Olšák <[email protected]>
Date:   Sun Aug 28 18:50:19 2016 +0200

noop: implement resource_get_handle

X+DRI3 locks up if the returned handle is invalid.

---

 src/gallium/drivers/noop/noop_pipe.c | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/noop/noop_pipe.c 
b/src/gallium/drivers/noop/noop_pipe.c
index 25e0c1f..3013019 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,

_______________________________________________
mesa-commit mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/mesa-commit

Reply via email to