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

This commit is contained in:
Jakob Bornecrantz 2010-10-15 15:57:55 +01:00
parent f8f3baa43a
commit 44207ff71b
3 changed files with 24 additions and 2 deletions

View 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

View 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;
}

View File

@ -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