diff options
author | José Fonseca <jfonseca@vmware.com> | 2009-02-19 10:52:08 +0000 |
---|---|---|
committer | José Fonseca <jfonseca@vmware.com> | 2009-02-19 10:59:13 +0000 |
commit | d32ae764e930abb70ca2cc79ad18fdb32141ca0d (patch) | |
tree | 8292099dad415b6e28939e65f9397fc85b5f9751 /src/gallium/state_trackers/wgl/shared/stw_device.c | |
parent | d98bc1e32470c7b78e8246f1cbcfb96d0fa6338c (diff) |
wgl: Share more code between icd and standalone driver.
Diffstat (limited to 'src/gallium/state_trackers/wgl/shared/stw_device.c')
-rw-r--r-- | src/gallium/state_trackers/wgl/shared/stw_device.c | 38 |
1 files changed, 35 insertions, 3 deletions
diff --git a/src/gallium/state_trackers/wgl/shared/stw_device.c b/src/gallium/state_trackers/wgl/shared/stw_device.c index 4b3cf51a53..d85cb45084 100644 --- a/src/gallium/state_trackers/wgl/shared/stw_device.c +++ b/src/gallium/state_trackers/wgl/shared/stw_device.c @@ -34,7 +34,6 @@ #include "shared/stw_winsys.h" #include "shared/stw_pixelformat.h" #include "shared/stw_public.h" -#include "stw.h" struct stw_device *stw_dev = NULL; @@ -57,7 +56,7 @@ st_flush_frontbuffer(struct pipe_screen *screen, boolean -stw_shared_init(const struct stw_winsys *stw_winsys) +st_init(const struct stw_winsys *stw_winsys) { static struct stw_device stw_dev_storage; @@ -78,6 +77,8 @@ stw_shared_init(const struct stw_winsys *stw_winsys) stw_dev->screen->flush_frontbuffer = st_flush_frontbuffer; + pipe_mutex_init( stw_dev->mutex ); + pixelformat_init(); return TRUE; @@ -89,8 +90,24 @@ error1: void -stw_shared_cleanup(void) +st_cleanup(void) { + UINT_PTR i; + + if (!stw_dev) + return; + + pipe_mutex_lock( stw_dev->mutex ); + { + /* Ensure all contexts are destroyed */ + for (i = 0; i < STW_CONTEXT_MAX; i++) + if (stw_dev->ctx_array[i].ctx) + stw_delete_context( i + 1 ); + } + pipe_mutex_unlock( stw_dev->mutex ); + + pipe_mutex_destroy( stw_dev->mutex ); + if(stw_dev) { #ifdef DEBUG debug_memory_end(stw_dev->memdbg_no); @@ -99,3 +116,18 @@ stw_shared_cleanup(void) stw_dev = NULL; } + + +struct stw_context * +stw_lookup_context( UINT_PTR dhglrc ) +{ + if (dhglrc == 0 || + dhglrc >= STW_CONTEXT_MAX) + return NULL; + + if (stw_dev == NULL) + return NULL; + + return stw_dev->ctx_array[dhglrc - 1].ctx; +} + |