OSDN Git Service

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 f686da6..f27e34a 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 38cf29e..bc2623e 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 8a7086f..ae0196c 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