Mesa (master): wrapper: Add a way to dewrap a pipe screen without destroying it

Jakob Bornecrantz wallbraker at kemper.freedesktop.org
Fri Oct 15 18:16:53 UTC 2010


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

Author: Jakob Bornecrantz <jakob at vmware.com>
Date:   Fri Oct 15 15:57:55 2010 +0100

wrapper: Add a way to dewrap a pipe screen without destroying it

---

 .../target-helpers/inline_wrapper_sw_helper.h      |    4 ++--
 src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c  |   13 +++++++++++++
 src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.h  |    9 +++++++++
 3 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h b/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h
index f686da6..f27e34a 100644
--- a/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h
+++ b/src/gallium/auxiliary/target-helpers/inline_wrapper_sw_helper.h
@@ -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
diff --git a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
index 38cf29e..bc2623e 100644
--- a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
+++ b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.c
@@ -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;
+}
diff --git a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.h b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.h
index 8a7086f..ae0196c 100644
--- a/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.h
+++ b/src/gallium/winsys/sw/wrapper/wrapper_sw_winsys.h
@@ -30,6 +30,15 @@
 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




More information about the mesa-commit mailing list