From cd7f43b00dbe12f3b999773b0dfca27f7137c501 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Stefan=20D=C3=B6singer?= Date: Fri, 17 Jul 2009 11:48:32 +0200 Subject: [PATCH] wined3d: Don't activate a context unless we need one. --- dlls/wined3d/arb_program_shader.c | 8 ++++++-- dlls/wined3d/glsl_shader.c | 6 ++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c index 6b8204915e0..e7ca690d087 100644 --- a/dlls/wined3d/arb_program_shader.c +++ b/dlls/wined3d/arb_program_shader.c @@ -4359,8 +4359,6 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) { IWineD3DDeviceImpl *device = (IWineD3DDeviceImpl *)baseShader->baseShader.device; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); - if (shader_is_pshader_version(baseShader->baseShader.reg_maps.shader_version.type)) { IWineD3DPixelShaderImpl *This = (IWineD3DPixelShaderImpl *) iface; @@ -4369,6 +4367,9 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) { if(!shader_data) return; /* This can happen if a shader was never compiled */ ENTER_GL(); + + if(shader_data->num_gl_shaders) ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + for(i = 0; i < shader_data->num_gl_shaders; i++) { GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId)); checkGLcall("GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId))"); @@ -4384,6 +4385,9 @@ static void shader_arb_destroy(IWineD3DBaseShader *iface) { if(!shader_data) return; /* This can happen if a shader was never compiled */ ENTER_GL(); + + if(shader_data->num_gl_shaders) ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + for(i = 0; i < shader_data->num_gl_shaders; i++) { GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId)); checkGLcall("GL_EXTCALL(glDeleteProgramsARB(1, &shader_data->gl_shaders[i].prgId))"); diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c index 018961672dc..65c5b0462c6 100644 --- a/dlls/wined3d/glsl_shader.c +++ b/dlls/wined3d/glsl_shader.c @@ -4331,8 +4331,6 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) { */ char pshader = shader_is_pshader_version(This->baseShader.reg_maps.shader_version.type); - ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); - if(pshader) { struct glsl_pshader_private *shader_data; ps = (IWineD3DPixelShaderImpl *) This; @@ -4344,6 +4342,8 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) { return; } + ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->pshader == iface) { ENTER_GL(); @@ -4361,6 +4361,8 @@ static void shader_glsl_destroy(IWineD3DBaseShader *iface) { return; } + ActivateContext(device, device->lastActiveRenderTarget, CTXUSAGE_RESOURCELOAD); + if (priv->glsl_program && (IWineD3DBaseShader *)priv->glsl_program->vshader == iface) { ENTER_GL();