| @@ -47,6 +47,23 @@ | |||
| #include "stw_context.h" | |||
| #include "stw_tls.h" | |||
| static INLINE struct stw_context * | |||
| stw_context(GLcontext *glctx) | |||
| { | |||
| if(!glctx) | |||
| return NULL; | |||
| assert(glctx->DriverCtx); | |||
| return (struct stw_context *)glctx->DriverCtx; | |||
| } | |||
| static INLINE struct stw_context * | |||
| stw_current_context(void) | |||
| { | |||
| GET_CURRENT_CONTEXT( glctx ); | |||
| return stw_context(glctx); | |||
| } | |||
| BOOL | |||
| stw_copy_context( | |||
| UINT_PTR hglrcSrc, | |||
| @@ -194,11 +211,10 @@ stw_delete_context( | |||
| pipe_mutex_unlock( stw_dev->mutex ); | |||
| if (ctx) { | |||
| GLcontext *glctx = ctx->st->ctx; | |||
| GET_CURRENT_CONTEXT( glcurctx ); | |||
| struct stw_context *curctx = stw_current_context(); | |||
| /* Unbind current if deleting current context. */ | |||
| if (glcurctx == glctx) | |||
| if (curctx == ctx) | |||
| st_make_current( NULL, NULL, NULL ); | |||
| st_destroy_context(ctx->st); | |||
| @@ -230,13 +246,8 @@ stw_release_context( | |||
| * current for this thread. We should check that and return False | |||
| * if not the case. | |||
| */ | |||
| { | |||
| GLcontext *glctx = ctx->st->ctx; | |||
| GET_CURRENT_CONTEXT( glcurctx ); | |||
| if (glcurctx != glctx) | |||
| return FALSE; | |||
| } | |||
| if (ctx != stw_current_context()) | |||
| return FALSE; | |||
| if (stw_make_current( NULL, 0 ) == FALSE) | |||
| return FALSE; | |||
| @@ -248,14 +259,9 @@ stw_release_context( | |||
| UINT_PTR | |||
| stw_get_current_context( void ) | |||
| { | |||
| GET_CURRENT_CONTEXT( glcurctx ); | |||
| struct stw_context *ctx; | |||
| if(!glcurctx) | |||
| return 0; | |||
| ctx = (struct stw_context *)glcurctx->DriverCtx; | |||
| assert(ctx); | |||
| ctx = stw_current_context(); | |||
| if(!ctx) | |||
| return 0; | |||
| @@ -265,14 +271,9 @@ stw_get_current_context( void ) | |||
| HDC | |||
| stw_get_current_dc( void ) | |||
| { | |||
| GET_CURRENT_CONTEXT( glcurctx ); | |||
| struct stw_context *ctx; | |||
| if(!glcurctx) | |||
| return NULL; | |||
| ctx = (struct stw_context *)glcurctx->DriverCtx; | |||
| assert(ctx); | |||
| ctx = stw_current_context(); | |||
| if(!ctx) | |||
| return NULL; | |||
| @@ -284,19 +285,17 @@ stw_make_current( | |||
| HDC hdc, | |||
| UINT_PTR hglrc ) | |||
| { | |||
| struct stw_context *curctx; | |||
| struct stw_context *ctx; | |||
| GET_CURRENT_CONTEXT( glcurctx ); | |||
| struct stw_framebuffer *fb; | |||
| if (!stw_dev) | |||
| goto fail; | |||
| if (glcurctx != NULL) { | |||
| struct stw_context *curctx; | |||
| curctx = (struct stw_context *) glcurctx->DriverCtx; | |||
| curctx = stw_current_context(); | |||
| if (curctx != NULL) { | |||
| if (curctx->hglrc != hglrc) | |||
| st_flush(glcurctx->st, PIPE_FLUSH_RENDER_CACHE, NULL); | |||
| st_flush(curctx->st, PIPE_FLUSH_RENDER_CACHE, NULL); | |||
| /* Return if already current. */ | |||
| if (curctx->hglrc == hglrc && curctx->hdc == hdc) | |||