wrapper: Add a way to dewrap a pipe screen without destroying it
authorJakob Bornecrantz <jakob@vmware.com>
Fri, 15 Oct 2010 14:57:55 +0000 (15:57 +0100)
committerJakob Bornecrantz <jakob@vmware.com>
Fri, 15 Oct 2010 18:13:00 +0000 (19:13 +0100)
src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h
src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.h

index f686da6ac81b8bf70102c6c1c37945f017c95395..f27e34a3002d1f3d23693f278750185f29d7af34 100644 (file)
@@ -26,9 +26,9 @@ sw_screen_wrap(struct pipe_screen *screen)
    return sw_screen;
 
 err_winsys:
-   sws->destroy(sws);
+   return wrapper_sw_winsys_dewrap_pipe_screen(sws);
 err:
-  return screen;
+   return screen;
 }
 
 #endif
index 38cf29e6056169859d6e25497aed20a19d2fae4b..bc2623e7b77ad35dd3d8cec8c6d3539478e138a8 100644 (file)
@@ -304,3 +304,16 @@ err_free:
 err:
    return NULL;
 }
+
+struct pipe_screen *
+wrapper_sw_winsys_dewrap_pipe_screen(struct sw_winsys *ws)
+{
+   struct wrapper_sw_winsys *wsw = wrapper_sw_winsys(ws);
+   struct pipe_screen *screen = wsw->screen;
+
+   wsw->pipe->destroy(wsw->pipe);
+   /* don't destroy the screen its needed later on */
+
+   FREE(wsw);
+   return screen;
+}
index 8a7086f19f57f93f1f0b1383f1282dc0862bd2dd..ae0196c432cdeaedbb6fb85682845c10e4889936 100644 (file)
 struct sw_winsys;
 struct pipe_screen;
 
+/*
+ * Wrap a pipe screen.
+ */
 struct sw_winsys *wrapper_sw_winsys_wrap_pipe_screen(struct pipe_screen *screen);
 
+/*
+ * Destroy the sw_winsys and return the wrapped pipe_screen.
+ * Not destroying it as sw_winsys::destroy does.
+ */
+struct pipe_screen *wrapper_sw_winsys_dewrap_pipe_screen(struct sw_winsys *sw_winsys);
+
 #endif