[PATCH 5/5] wined3d: Get rid of ENTER_GL / LEAVE_GL.

Henri Verbeet hverbeet at codeweavers.com
Mon Dec 10 14:54:36 CST 2012


---
 dlls/wined3d/arb_program_shader.c    |   74 ++++++++--------------------
 dlls/wined3d/ati_fragment_shader.c   |    6 +--
 dlls/wined3d/buffer.c                |   34 -------------
 dlls/wined3d/context.c               |   84 ++++++++-----------------------
 dlls/wined3d/device.c                |   26 ----------
 dlls/wined3d/directx.c               |   35 +------------
 dlls/wined3d/drawprim.c              |   28 ++++------
 dlls/wined3d/glsl_shader.c           |   78 +++++++++--------------------
 dlls/wined3d/nvidia_texture_shader.c |    4 +-
 dlls/wined3d/query.c                 |   20 --------
 dlls/wined3d/state.c                 |    4 +-
 dlls/wined3d/surface.c               |   90 ++--------------------------------
 dlls/wined3d/swapchain.c             |    4 --
 dlls/wined3d/texture.c               |   10 +---
 dlls/wined3d/utils.c                 |   32 +++---------
 dlls/wined3d/volume.c                |    2 -
 dlls/wined3d/wined3d_private.h       |    9 ---
 17 files changed, 100 insertions(+), 440 deletions(-)

diff --git a/dlls/wined3d/arb_program_shader.c b/dlls/wined3d/arb_program_shader.c
index ee7762d..d6da35d 100644
--- a/dlls/wined3d/arb_program_shader.c
+++ b/dlls/wined3d/arb_program_shader.c
@@ -330,7 +330,8 @@ struct shader_arb_priv
     const struct fragment_pipeline *fragment_pipe;
 };
 
-/* GL locking for state handlers is done by the caller. */
+/* Context activation for state handlers is done by the caller. */
+
 static BOOL need_rel_addr_const(const struct arb_vshader_private *shader_data,
         const struct wined3d_shader_reg_maps *reg_maps, const struct wined3d_gl_info *gl_info)
 {
@@ -377,7 +378,7 @@ static unsigned int reserved_vs_const(const struct arb_vshader_private *shader_d
  * @target_type should be either GL_VERTEX_PROGRAM_ARB (for vertex shaders)
  *  or GL_FRAGMENT_PROGRAM_ARB (for pixel shaders)
  */
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static unsigned int shader_arb_load_constantsF(const struct wined3d_shader *shader,
         const struct wined3d_gl_info *gl_info, GLuint target_type, unsigned int max_constants,
         const float *constants, char *dirty_consts)
@@ -543,7 +544,7 @@ static void shader_arb_load_np2fixup_constants(void *shader_priv,
     }
 }
 
-/* GL locking is done by the caller. */
+/* Context activation is done by the caller. */
 static void shader_arb_ps_local_constants(const struct arb_ps_compiled_shader *gl_shader,
         const struct wined3d_context *context, const struct wined3d_state *state, UINT rt_height)
 {
@@ -607,7 +608,7 @@ static void shader_arb_ps_local_constants(const struct arb_ps_compiled_shader *g
     checkGLcall("Load ps int consts");
 }
 
-/* GL locking is done by the caller. */
+/* Context activation is done by the caller. */
 static void shader_arb_vs_local_constants(const struct arb_vs_compiled_shader *gl_shader,
         const struct wined3d_context *context, const struct wined3d_state *state)
 {
@@ -646,7 +647,7 @@ static void shader_arb_select(const struct wined3d_context *context, enum wined3
  * We only support float constants in ARB at the moment, so don't
  * worry about the Integers or Booleans
  */
-/* GL locking is done by the caller (state handler) */
+/* Context activation is done by the caller (state handler). */
 static void shader_arb_load_constants_internal(const struct wined3d_context *context,
         BOOL usePixelShader, BOOL useVertexShader, BOOL from_shader_select)
 {
@@ -3302,7 +3303,7 @@ static void shader_hw_call(const struct wined3d_shader_instruction *ins)
     shader_addline(buffer, "CAL l%u;\n", ins->src[0].reg.idx[0].offset);
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLuint create_arb_blt_vertex_program(const struct wined3d_gl_info *gl_info)
 {
     GLuint program_id = 0;
@@ -3341,7 +3342,7 @@ static GLuint create_arb_blt_vertex_program(const struct wined3d_gl_info *gl_inf
     return program_id;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLuint create_arb_blt_fragment_program(const struct wined3d_gl_info *gl_info,
         enum tex_types tex_type, BOOL masked)
 {
@@ -3577,7 +3578,7 @@ static void init_ps_input(const struct wined3d_shader *shader,
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLuint shader_arb_generate_pshader(const struct wined3d_shader *shader,
         const struct wined3d_gl_info *gl_info, struct wined3d_shader_buffer *buffer,
         const struct arb_ps_compile_args *args, struct arb_ps_compiled_shader *compiled)
@@ -4166,7 +4167,7 @@ static void init_output_registers(const struct wined3d_shader *shader, DWORD sig
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLuint shader_arb_generate_vshader(const struct wined3d_shader *shader,
         const struct wined3d_gl_info *gl_info, struct wined3d_shader_buffer *buffer,
         const struct arb_vs_compile_args *args, struct arb_vs_compiled_shader *compiled)
@@ -4334,7 +4335,7 @@ static GLuint shader_arb_generate_vshader(const struct wined3d_shader *shader,
     return ret;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static struct arb_ps_compiled_shader *find_arb_pshader(struct wined3d_shader *shader,
         const struct arb_ps_compile_args *args)
 {
@@ -4648,7 +4649,7 @@ static void find_arb_vs_compile_args(const struct wined3d_state *state,
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_arb_select(const struct wined3d_context *context, enum wined3d_shader_mode vertex_mode,
         enum wined3d_shader_mode fragment_mode)
 {
@@ -4766,7 +4767,7 @@ static void shader_arb_select(const struct wined3d_context *context, enum wined3
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_arb_select_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info,
         enum tex_types tex_type, const SIZE *ds_mask_size)
 {
@@ -4786,7 +4787,7 @@ static void shader_arb_select_depth_blt(void *shader_priv, const struct wined3d_
     gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB);
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_arb_deselect_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info)
 {
     struct shader_arb_priv *priv = shader_priv;
@@ -4832,13 +4833,11 @@ static void shader_arb_destroy(struct wined3d_shader *shader)
         {
             struct wined3d_context *context = context_acquire(device, NULL);
 
-            ENTER_GL();
             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))");
             }
-            LEAVE_GL();
 
             context_release(context);
         }
@@ -4858,13 +4857,11 @@ static void shader_arb_destroy(struct wined3d_shader *shader)
         {
             struct wined3d_context *context = context_acquire(device, NULL);
 
-            ENTER_GL();
             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))");
             }
-            LEAVE_GL();
 
             context_release(context);
         }
@@ -4952,10 +4949,9 @@ static void shader_arb_free(struct wined3d_device *device)
     struct shader_arb_priv *priv = device->shader_priv;
     int i;
 
-    ENTER_GL();
-    if(priv->depth_blt_vprogram_id) {
+    if (priv->depth_blt_vprogram_id)
         GL_EXTCALL(glDeleteProgramsARB(1, &priv->depth_blt_vprogram_id));
-    }
+
     for (i = 0; i < tex_type_count; ++i)
     {
         if (priv->depth_blt_fprogram_id_full[i])
@@ -4967,7 +4963,6 @@ static void shader_arb_free(struct wined3d_device *device)
             GL_EXTCALL(glDeleteProgramsARB(1, &priv->depth_blt_fprogram_id_masked[i]));
         }
     }
-    LEAVE_GL();
 
     wine_rb_destroy(&priv->signature_tree, release_signature, NULL);
     HeapFree(GetProcessHeap(), 0, priv->pshader_const_dirty);
@@ -5669,7 +5664,7 @@ struct arbfp_ffp_desc
     GLuint shader;
 };
 
-/* Context activation and GL locking are done by the caller. */
+/* Context activation is done by the caller. */
 static void arbfp_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
 {
     if (enable)
@@ -5715,11 +5710,9 @@ static void arbfp_free_ffpshader(struct wine_rb_entry *entry, void *context)
     const struct wined3d_gl_info *gl_info = context;
     struct arbfp_ffp_desc *entry_arb = WINE_RB_ENTRY_VALUE(entry, struct arbfp_ffp_desc, parent.entry);
 
-    ENTER_GL();
     GL_EXTCALL(glDeleteProgramsARB(1, &entry_arb->shader));
     checkGLcall("glDeleteProgramsARB(1, &entry_arb->shader)");
     HeapFree(GetProcessHeap(), 0, entry_arb);
-    LEAVE_GL();
 }
 
 /* Context activation is done by the caller. */
@@ -6707,7 +6700,6 @@ static void arbfp_blit_free(struct wined3d_device *device)
     const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
     struct arbfp_blit_priv *priv = device->blit_priv;
 
-    ENTER_GL();
     GL_EXTCALL(glDeleteProgramsARB(1, &priv->yuy2_rect_shader));
     GL_EXTCALL(glDeleteProgramsARB(1, &priv->yuy2_2d_shader));
     GL_EXTCALL(glDeleteProgramsARB(1, &priv->uyvy_rect_shader));
@@ -6720,7 +6712,6 @@ static void arbfp_blit_free(struct wined3d_device *device)
 
     if (priv->palette_texture)
         gl_info->gl_ops.gl.p_glDeleteTextures(1, &priv->palette_texture);
-    LEAVE_GL();
 
     HeapFree(GetProcessHeap(), 0, device->blit_priv);
     device->blit_priv = NULL;
@@ -6974,11 +6965,10 @@ static GLuint gen_p8_shader(struct arbfp_blit_priv *priv,
         return 0;
     }
 
-    ENTER_GL();
     GL_EXTCALL(glGenProgramsARB(1, &shader));
     GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader));
-    LEAVE_GL();
-    if(!shader) {
+    if (!shader)
+    {
         shader_buffer_free(&buffer);
         return 0;
     }
@@ -7002,7 +6992,6 @@ static GLuint gen_p8_shader(struct arbfp_blit_priv *priv,
     shader_addline(&buffer, "TEX result.color, index.a, texture[1], 1D;\n");
     shader_addline(&buffer, "END\n");
 
-    ENTER_GL();
     GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
             strlen(buffer.buffer), buffer.buffer));
     checkGLcall("glProgramStringARB()");
@@ -7021,7 +7010,6 @@ static GLuint gen_p8_shader(struct arbfp_blit_priv *priv,
         priv->p8_2d_shader = shader;
 
     shader_buffer_free(&buffer);
-    LEAVE_GL();
 
     return shader;
 }
@@ -7037,8 +7025,6 @@ static void upload_palette(const struct wined3d_surface *surface, struct wined3d
 
     d3dfmt_p8_init_palette(surface, table, colorkey);
 
-    ENTER_GL();
-
     if (gl_info->supported[APPLE_CLIENT_STORAGE])
     {
         gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE);
@@ -7069,7 +7055,6 @@ static void upload_palette(const struct wined3d_surface *surface, struct wined3d
 
     /* Switch back to unit 0 in which the 2D texture will be stored. */
     context_active_texture(context, gl_info, 0);
-    LEAVE_GL();
 }
 
 /* Context activation is done by the caller. */
@@ -7088,13 +7073,12 @@ static GLuint gen_yuv_shader(struct arbfp_blit_priv *priv, const struct wined3d_
         return 0;
     }
 
-    ENTER_GL();
     GL_EXTCALL(glGenProgramsARB(1, &shader));
     checkGLcall("GL_EXTCALL(glGenProgramsARB(1, &shader))");
     GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader));
     checkGLcall("glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)");
-    LEAVE_GL();
-    if(!shader) {
+    if (!shader)
+    {
         shader_buffer_free(&buffer);
         return 0;
     }
@@ -7181,7 +7165,6 @@ static GLuint gen_yuv_shader(struct arbfp_blit_priv *priv, const struct wined3d_
     shader_addline(&buffer, "MAD result.color.z, chroma.y, yuv_coef.w, luminance.%c;\n", luminance_component);
     shader_addline(&buffer, "END\n");
 
-    ENTER_GL();
     GL_EXTCALL(glProgramStringARB(GL_FRAGMENT_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB,
             strlen(buffer.buffer), buffer.buffer));
     checkGLcall("glProgramStringARB()");
@@ -7203,7 +7186,6 @@ static GLuint gen_yuv_shader(struct arbfp_blit_priv *priv, const struct wined3d_
     }
 
     shader_buffer_free(&buffer);
-    LEAVE_GL();
 
     switch (yuv_fixup)
     {
@@ -7245,10 +7227,8 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context,
 
     if (surface->flags & SFLAG_CONVERTED)
     {
-        ENTER_GL();
         gl_info->gl_ops.gl.p_glEnable(textype);
         checkGLcall("glEnable(textype)");
-        LEAVE_GL();
         return WINED3D_OK;
     }
 
@@ -7257,10 +7237,8 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context,
         TRACE("Fixup:\n");
         dump_color_fixup_desc(surface->resource.format->color_fixup);
         /* Don't bother setting up a shader for unconverted formats */
-        ENTER_GL();
         gl_info->gl_ops.gl.p_glEnable(textype);
         checkGLcall("glEnable(textype)");
-        LEAVE_GL();
         return WINED3D_OK;
     }
 
@@ -7289,23 +7267,19 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context,
 
         default:
             FIXME("Unsupported complex fixup %#x, not setting a shader\n", fixup);
-            ENTER_GL();
             gl_info->gl_ops.gl.p_glEnable(textype);
             checkGLcall("glEnable(textype)");
-            LEAVE_GL();
             return E_NOTIMPL;
     }
 
     if (!shader) shader = gen_yuv_shader(priv, gl_info, fixup, textype);
 
-    ENTER_GL();
     gl_info->gl_ops.gl.p_glEnable(GL_FRAGMENT_PROGRAM_ARB);
     checkGLcall("glEnable(GL_FRAGMENT_PROGRAM_ARB)");
     GL_EXTCALL(glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader));
     checkGLcall("glBindProgramARB(GL_FRAGMENT_PROGRAM_ARB, shader)");
     GL_EXTCALL(glProgramLocalParameter4fvARB(GL_FRAGMENT_PROGRAM_ARB, 0, size));
     checkGLcall("glProgramLocalParameter4fvARB");
-    LEAVE_GL();
 
     return WINED3D_OK;
 }
@@ -7313,7 +7287,6 @@ static HRESULT arbfp_blit_set(void *blit_priv, struct wined3d_context *context,
 /* Context activation is done by the caller. */
 static void arbfp_blit_unset(const struct wined3d_gl_info *gl_info)
 {
-    ENTER_GL();
     gl_info->gl_ops.gl.p_glDisable(GL_FRAGMENT_PROGRAM_ARB);
     checkGLcall("glDisable(GL_FRAGMENT_PROGRAM_ARB)");
     gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_2D);
@@ -7328,7 +7301,6 @@ static void arbfp_blit_unset(const struct wined3d_gl_info *gl_info)
         gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_RECTANGLE_ARB);
         checkGLcall("glDisable(GL_TEXTURE_RECTANGLE_ARB)");
     }
-    LEAVE_GL();
 }
 
 static BOOL arbfp_blit_supported(const struct wined3d_gl_info *gl_info, enum wined3d_blit_op blit_op,
@@ -7425,13 +7397,9 @@ HRESULT arbfp_blit_surface(struct wined3d_device *device, DWORD filter,
 
     arbfp_blit_set(device->blit_priv, context, src_surface);
 
-    ENTER_GL();
-
     /* Draw a textured quad */
     draw_textured_quad(src_surface, context, &src_rect, &dst_rect, filter);
 
-    LEAVE_GL();
-
     /* Leave the opengl state valid for blitting */
     arbfp_blit_unset(context->gl_info);
 
diff --git a/dlls/wined3d/ati_fragment_shader.c b/dlls/wined3d/ati_fragment_shader.c
index 4994d96..3e4582b 100644
--- a/dlls/wined3d/ati_fragment_shader.c
+++ b/dlls/wined3d/ati_fragment_shader.c
@@ -29,7 +29,7 @@
 WINE_DEFAULT_DEBUG_CHANNEL(d3d_shader);
 WINE_DECLARE_DEBUG_CHANNEL(d3d);
 
-/* GL locking for state handlers is done by the caller. */
+/* Context activation for state handlers is done by the caller. */
 
 /* Some private defines, Constant associations, etc.
  * Env bump matrix and per stage constant should be independent,
@@ -1085,7 +1085,7 @@ static const struct StateEntryTemplate atifs_fragmentstate_template[] = {
     {0 /* Terminate */,                                   { 0,                                                  0                       }, WINED3D_GL_EXT_NONE             },
 };
 
-/* Context activation and GL locking are done by the caller. */
+/* Context activation is done by the caller. */
 static void atifs_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
 {
     if (enable)
@@ -1173,11 +1173,9 @@ static void atifs_free_ffpshader(struct wine_rb_entry *entry, void *context)
     const struct wined3d_gl_info *gl_info = &device->adapter->gl_info;
     struct atifs_ffp_desc *entry_ati = WINE_RB_ENTRY_VALUE(entry, struct atifs_ffp_desc, parent.entry);
 
-    ENTER_GL();
     GL_EXTCALL(glDeleteFragmentShaderATI(entry_ati->shader));
     checkGLcall("glDeleteFragmentShaderATI(entry->shader)");
     HeapFree(GetProcessHeap(), 0, entry_ati);
-    LEAVE_GL();
 }
 
 /* Context activation is done by the caller. */
diff --git a/dlls/wined3d/buffer.c b/dlls/wined3d/buffer.c
index 97547eb..c8217e6 100644
--- a/dlls/wined3d/buffer.c
+++ b/dlls/wined3d/buffer.c
@@ -98,10 +98,8 @@ static void delete_gl_buffer(struct wined3d_buffer *This, const struct wined3d_g
 {
     if(!This->buffer_object) return;
 
-    ENTER_GL();
     GL_EXTCALL(glDeleteBuffersARB(1, &This->buffer_object));
     checkGLcall("glDeleteBuffersARB");
-    LEAVE_GL();
     This->buffer_object = 0;
 
     if(This->query)
@@ -120,8 +118,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc
     TRACE("Creating an OpenGL vertex buffer object for wined3d_buffer %p with usage %s.\n",
             This, debug_d3dusage(This->resource.usage));
 
-    ENTER_GL();
-
     /* Make sure that the gl error is cleared. Do not use checkGLcall
     * here because checkGLcall just prints a fixme and continues. However,
     * if an error during VBO creation occurs we can fall back to non-vbo operation
@@ -140,7 +136,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc
     if (!This->buffer_object || error != GL_NO_ERROR)
     {
         ERR("Failed to create a VBO with error %s (%#x)\n", debug_glerror(error), error);
-        LEAVE_GL();
         goto fail;
     }
 
@@ -151,7 +146,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc
     if (error != GL_NO_ERROR)
     {
         ERR("Failed to bind the VBO with error %s (%#x)\n", debug_glerror(error), error);
-        LEAVE_GL();
         goto fail;
     }
 
@@ -188,7 +182,6 @@ static void buffer_create_buffer_object(struct wined3d_buffer *This, const struc
      */
     GL_EXTCALL(glBufferDataARB(This->buffer_type_hint, This->resource.size, This->resource.allocatedMemory, gl_usage));
     error = gl_info->gl_ops.gl.p_glGetError();
-    LEAVE_GL();
     if (error != GL_NO_ERROR)
     {
         ERR("glBufferDataARB failed with error %s (%#x)\n", debug_glerror(error), error);
@@ -516,10 +509,8 @@ BYTE *buffer_get_sysmem(struct wined3d_buffer *This, const struct wined3d_gl_inf
     if (This->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB)
         device_invalidate_state(This->resource.device, STATE_INDEXBUFFER);
 
-    ENTER_GL();
     GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object));
     GL_EXTCALL(glGetBufferSubDataARB(This->buffer_type_hint, 0, This->resource.size, This->resource.allocatedMemory));
-    LEAVE_GL();
     This->flags |= WINED3D_BUFFER_DOUBLEBUFFER;
 
     return This->resource.allocatedMemory;
@@ -610,10 +601,8 @@ static void buffer_sync_apple(struct wined3d_buffer *This, DWORD flags, const st
 
     if (flags & WINED3D_MAP_DISCARD)
     {
-        ENTER_GL();
         GL_EXTCALL(glBufferDataARB(This->buffer_type_hint, This->resource.size, NULL, This->buffer_object_usage));
         checkGLcall("glBufferDataARB\n");
-        LEAVE_GL();
         return;
     }
 
@@ -664,10 +653,8 @@ drop_query:
     }
 
     gl_info->gl_ops.gl.p_glFinish();
-    ENTER_GL();
     GL_EXTCALL(glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE));
     checkGLcall("glBufferParameteriAPPLE(This->buffer_type_hint, GL_BUFFER_SERIALIZED_MODIFY_APPLE, GL_TRUE)");
-    LEAVE_GL();
     This->flags &= ~WINED3D_BUFFER_APPLESYNC;
 }
 
@@ -677,8 +664,6 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined
     BYTE *map;
     UINT start = 0, len = 0;
 
-    ENTER_GL();
-
     /* This potentially invalidates the element array buffer binding, but the
      * caller always takes care of this. */
     GL_EXTCALL(glBindBufferARB(This->buffer_type_hint, This->buffer_object));
@@ -704,16 +689,13 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined
                 syncflags |= WINED3D_MAP_DISCARD;
             if (flags & WINED3D_BUFFER_NOSYNC)
                 syncflags |= WINED3D_MAP_NOOVERWRITE;
-            LEAVE_GL();
             buffer_sync_apple(This, syncflags, gl_info);
-            ENTER_GL();
         }
         map = GL_EXTCALL(glMapBufferARB(This->buffer_type_hint, GL_WRITE_ONLY_ARB));
         checkGLcall("glMapBufferARB");
     }
     if (!map)
     {
-        LEAVE_GL();
         ERR("Failed to map opengl buffer\n");
         return;
     }
@@ -739,8 +721,6 @@ static void buffer_direct_upload(struct wined3d_buffer *This, const struct wined
     }
     GL_EXTCALL(glUnmapBufferARB(This->buffer_type_hint));
     checkGLcall("glUnmapBufferARB");
-
-    LEAVE_GL();
 }
 
 /* Do not call while under the GL lock. */
@@ -938,12 +918,10 @@ void CDECL wined3d_buffer_preload(struct wined3d_buffer *buffer)
             }
         }
 
-        ENTER_GL();
         GL_EXTCALL(glBindBufferARB(buffer->buffer_type_hint, buffer->buffer_object));
         checkGLcall("glBindBufferARB");
         GL_EXTCALL(glBufferSubDataARB(buffer->buffer_type_hint, start, len, data + start));
         checkGLcall("glBufferSubDataARB");
-        LEAVE_GL();
     }
 
     HeapFree(GetProcessHeap(), 0, data);
@@ -1048,8 +1026,6 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN
                 context = context_acquire(device, NULL);
                 gl_info = context->gl_info;
 
-                ENTER_GL();
-
                 if (buffer->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB)
                     context_invalidate_state(context, STATE_INDEXBUFFER);
                 GL_EXTCALL(glBindBufferARB(buffer->buffer_type_hint, buffer->buffer_object));
@@ -1064,25 +1040,18 @@ HRESULT CDECL wined3d_buffer_map(struct wined3d_buffer *buffer, UINT offset, UIN
                 else
                 {
                     if (buffer->flags & WINED3D_BUFFER_APPLESYNC)
-                    {
-                        LEAVE_GL();
                         buffer_sync_apple(buffer, flags, gl_info);
-                        ENTER_GL();
-                    }
                     buffer->resource.allocatedMemory = GL_EXTCALL(glMapBufferARB(buffer->buffer_type_hint,
                             GL_READ_WRITE_ARB));
                     checkGLcall("glMapBufferARB");
                 }
-                LEAVE_GL();
 
                 if (((DWORD_PTR)buffer->resource.allocatedMemory) & (RESOURCE_ALIGNMENT - 1))
                 {
                     WARN("Pointer %p is not %u byte aligned.\n", buffer->resource.allocatedMemory, RESOURCE_ALIGNMENT);
 
-                    ENTER_GL();
                     GL_EXTCALL(glUnmapBufferARB(buffer->buffer_type_hint));
                     checkGLcall("glUnmapBufferARB");
-                    LEAVE_GL();
                     buffer->resource.allocatedMemory = NULL;
 
                     if (buffer->resource.usage & WINED3DUSAGE_DYNAMIC)
@@ -1168,8 +1137,6 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer)
         context = context_acquire(device, NULL);
         gl_info = context->gl_info;
 
-        ENTER_GL();
-
         if (buffer->buffer_type_hint == GL_ELEMENT_ARRAY_BUFFER_ARB)
             context_invalidate_state(context, STATE_INDEXBUFFER);
         GL_EXTCALL(glBindBufferARB(buffer->buffer_type_hint, buffer->buffer_object));
@@ -1194,7 +1161,6 @@ void CDECL wined3d_buffer_unmap(struct wined3d_buffer *buffer)
         }
 
         GL_EXTCALL(glUnmapBufferARB(buffer->buffer_type_hint));
-        LEAVE_GL();
         if (wined3d_settings.strict_draw_ordering)
             gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */
         context_release(context);
diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c
index 7eb3d83..c0b66b1 100644
--- a/dlls/wined3d/context.c
+++ b/dlls/wined3d/context.c
@@ -35,7 +35,7 @@ static DWORD wined3d_context_tls_idx;
 
 /* FBO helper functions */
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_bind_fbo(struct wined3d_context *context, GLenum target, GLuint *fbo)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
@@ -84,7 +84,7 @@ static void context_bind_fbo(struct wined3d_context *context, GLenum target, GLu
     checkGLcall("glBindFramebuffer()");
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_clean_fbo_attachments(const struct wined3d_gl_info *gl_info, GLenum target)
 {
     unsigned int i;
@@ -101,7 +101,7 @@ static void context_clean_fbo_attachments(const struct wined3d_gl_info *gl_info,
     checkGLcall("glFramebufferTexture2D()");
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_destroy_fbo(struct wined3d_context *context, GLuint *fbo)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
@@ -130,7 +130,7 @@ static void context_attach_depth_stencil_rb(const struct wined3d_gl_info *gl_inf
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_attach_depth_stencil_fbo(struct wined3d_context *context,
         GLenum fbo_target, struct wined3d_surface *depth_stencil, DWORD location)
 {
@@ -212,7 +212,7 @@ static void context_attach_depth_stencil_fbo(struct wined3d_context *context,
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_attach_surface_fbo(struct wined3d_context *context,
         GLenum fbo_target, DWORD idx, struct wined3d_surface *surface, DWORD location)
 {
@@ -262,7 +262,7 @@ static void context_attach_surface_fbo(struct wined3d_context *context,
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 void context_check_fbo_status(const struct wined3d_context *context, GLenum target)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
@@ -341,7 +341,7 @@ static struct fbo_entry *context_create_fbo_entry(const struct wined3d_context *
     return entry;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_reuse_fbo_entry(struct wined3d_context *context, GLenum target,
         struct wined3d_surface **render_targets, struct wined3d_surface *depth_stencil,
         DWORD location, struct fbo_entry *entry)
@@ -357,7 +357,7 @@ static void context_reuse_fbo_entry(struct wined3d_context *context, GLenum targ
     entry->attached = FALSE;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_destroy_fbo_entry(struct wined3d_context *context, struct fbo_entry *entry)
 {
     if (entry->id)
@@ -371,8 +371,7 @@ static void context_destroy_fbo_entry(struct wined3d_context *context, struct fb
     HeapFree(GetProcessHeap(), 0, entry);
 }
 
-
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static struct fbo_entry *context_find_fbo_entry(struct wined3d_context *context, GLenum target,
         struct wined3d_surface **render_targets, struct wined3d_surface *depth_stencil, DWORD location)
 {
@@ -418,7 +417,7 @@ static struct fbo_entry *context_find_fbo_entry(struct wined3d_context *context,
     return entry;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_apply_fbo_entry(struct wined3d_context *context, GLenum target, struct fbo_entry *entry)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
@@ -442,7 +441,7 @@ static void context_apply_fbo_entry(struct wined3d_context *context, GLenum targ
     entry->attached = TRUE;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void context_apply_fbo_state(struct wined3d_context *context, GLenum target,
         struct wined3d_surface **render_targets, struct wined3d_surface *depth_stencil, DWORD location)
 {
@@ -471,7 +470,7 @@ static void context_apply_fbo_state(struct wined3d_context *context, GLenum targ
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 void context_apply_fbo_state_blit(struct wined3d_context *context, GLenum target,
         struct wined3d_surface *render_target, struct wined3d_surface *depth_stencil, DWORD location)
 {
@@ -496,10 +495,8 @@ void context_alloc_occlusion_query(struct wined3d_context *context, struct wined
     {
         if (gl_info->supported[ARB_OCCLUSION_QUERY])
         {
-            ENTER_GL();
             GL_EXTCALL(glGenQueriesARB(1, &query->id));
             checkGLcall("glGenQueriesARB");
-            LEAVE_GL();
 
             TRACE("Allocated occlusion query %u in context %p.\n", query->id, context);
         }
@@ -559,19 +556,15 @@ void context_alloc_event_query(struct wined3d_context *context, struct wined3d_e
         }
         else if (gl_info->supported[APPLE_FENCE])
         {
-            ENTER_GL();
             GL_EXTCALL(glGenFencesAPPLE(1, &query->object.id));
             checkGLcall("glGenFencesAPPLE");
-            LEAVE_GL();
 
             TRACE("Allocated event query %u in context %p.\n", query->object.id, context);
         }
         else if(gl_info->supported[NV_FENCE])
         {
-            ENTER_GL();
             GL_EXTCALL(glGenFencesNV(1, &query->object.id));
             checkGLcall("glGenFencesNV");
-            LEAVE_GL();
 
             TRACE("Allocated event query %u in context %p.\n", query->object.id, context);
         }
@@ -903,9 +896,8 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
 
     if (context->valid && restore_ctx != context->glCtx)
         context_set_gl_context(context);
-    else restore_ctx = NULL;
-
-    ENTER_GL();
+    else
+        restore_ctx = NULL;
 
     LIST_FOR_EACH_ENTRY(occlusion_query, &context->occlusion_queries, struct wined3d_occlusion_query, entry)
     {
@@ -975,8 +967,6 @@ static void context_destroy_gl_resources(struct wined3d_context *context)
         checkGLcall("context cleanup");
     }
 
-    LEAVE_GL();
-
     HeapFree(GetProcessHeap(), 0, context->free_occlusion_queries);
     HeapFree(GetProcessHeap(), 0, context->free_event_queries);
 
@@ -1233,7 +1223,7 @@ static int context_choose_pixel_format(const struct wined3d_device *device, HDC
     return iPixelFormat;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void bind_dummy_textures(const struct wined3d_device *device, const struct wined3d_context *context)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
@@ -1474,8 +1464,6 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
                 swap_interval, ret, GetLastError());
     }
 
-    ENTER_GL();
-
     gl_info->gl_ops.gl.p_glGetIntegerv(GL_AUX_BUFFERS, &ret->aux_buffers);
 
     TRACE("Setting up the screen\n");
@@ -1577,8 +1565,6 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain,
     if (device->dummy_texture_2d[0])
         bind_dummy_textures(device, ret);
 
-    LEAVE_GL();
-
     TRACE("Created context %p.\n", ret);
 
     return ret;
@@ -1622,7 +1608,7 @@ void context_destroy(struct wined3d_device *device, struct wined3d_context *cont
     if (destroy) HeapFree(GetProcessHeap(), 0, context);
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void set_blit_dimension(const struct wined3d_gl_info *gl_info, UINT width, UINT height)
 {
     const GLdouble projection[] =
@@ -1693,9 +1679,7 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con
     {
         if (context->blit_w != rt_size.cx || context->blit_h != rt_size.cy)
         {
-            ENTER_GL();
             set_blit_dimension(gl_info, rt_size.cx, rt_size.cy);
-            LEAVE_GL();
             context->blit_w = rt_size.cx;
             context->blit_h = rt_size.cy;
             /* No need to dirtify here, the states are still dirtified because
@@ -1706,15 +1690,6 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con
     }
     context->last_was_blit = TRUE;
 
-    /* TODO: Use a display list */
-
-    /* Call ENTER_GL() once for all gl calls below. In theory we should not call
-     * helper functions in between gl calls. This function is full of context_invalidate_state
-     * which can safely be called from here, we only lock once instead locking/unlocking
-     * after each GL call.
-     */
-    ENTER_GL();
-
     /* Disable all textures. The caller can then bind a texture it wants to blit
      * from
      *
@@ -1863,8 +1838,6 @@ static void SetupForBlit(const struct wined3d_device *device, struct wined3d_con
     context->select_shader = 1;
     context->load_constants = 1;
 
-    LEAVE_GL();
-
     context->blit_w = rt_size.cx;
     context->blit_h = rt_size.cy;
     context_invalidate_state(context, STATE_VIEWPORT);
@@ -1881,7 +1854,7 @@ static inline GLenum draw_buffer_from_rt_mask(DWORD rt_mask)
     return rt_mask & ~(1 << 31);
 }
 
-/* Context activation and GL locking are done by the caller. */
+/* Context activation is done by the caller. */
 static void context_apply_draw_buffers(struct wined3d_context *context, DWORD rt_mask)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
@@ -1931,7 +1904,7 @@ static void context_apply_draw_buffers(struct wined3d_context *context, DWORD rt
     }
 }
 
-/* GL locking is done by the caller. */
+/* Context activation is done by the caller. */
 void context_set_draw_buffer(struct wined3d_context *context, GLenum buffer)
 {
     const struct wined3d_gl_info *gl_info = context->gl_info;
@@ -1944,7 +1917,7 @@ void context_set_draw_buffer(struct wined3d_context *context, GLenum buffer)
         context->draw_buffers_mask = context_generate_rt_mask(buffer);
 }
 
-/* GL locking is done by the caller. */
+/* Context activation is done by the caller. */
 void context_active_texture(struct wined3d_context *context, const struct wined3d_gl_info *gl_info, unsigned int unit)
 {
     GL_EXTCALL(glActiveTextureARB(GL_TEXTURE0 + unit));
@@ -2077,9 +2050,7 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine
         {
             surface_internal_preload(rt, SRGB_RGB);
 
-            ENTER_GL();
             context_apply_fbo_state_blit(context, GL_FRAMEBUFFER, rt, NULL, rt->draw_binding);
-            LEAVE_GL();
             if (rt->resource.format->id != WINED3DFMT_NULL)
                 rt_mask = 1;
             else
@@ -2087,9 +2058,7 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine
         }
         else
         {
-            ENTER_GL();
             context_bind_fbo(context, GL_FRAMEBUFFER, NULL);
-            LEAVE_GL();
             rt_mask = context_generate_rt_mask_from_surface(rt);
         }
     }
@@ -2100,7 +2069,6 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine
 
     cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask;
 
-    ENTER_GL();
     if (rt_mask != *cur_mask)
     {
         context_apply_draw_buffers(context, rt_mask);
@@ -2111,7 +2079,6 @@ void context_apply_blit_state(struct wined3d_context *context, const struct wine
     {
         context_check_fbo_status(context, GL_FRAMEBUFFER);
     }
-    LEAVE_GL();
 
     SetupForBlit(device, context);
     context_invalidate_state(context, STATE_FRAMEBUFFER);
@@ -2153,8 +2120,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
         {
             context_validate_onscreen_formats(context, fb->depth_stencil);
 
-            ENTER_GL();
-
             if (!rt_count || surface_is_offscreen(rts[0]))
             {
                 for (i = 0; i < rt_count; ++i)
@@ -2179,8 +2144,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
                 rt_mask = context_generate_rt_mask_from_surface(rts[0]);
             }
 
-            LEAVE_GL();
-
             /* If the framebuffer is not the device's fb the device's fb has to be reapplied
              * next draw. Otherwise we could mark the framebuffer state clean here, once the
              * state management allows this */
@@ -2206,7 +2169,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
 
     cur_mask = context->current_fbo ? &context->current_fbo->rt_mask : &context->draw_buffers_mask;
 
-    ENTER_GL();
     if (rt_mask != *cur_mask)
     {
         context_apply_draw_buffers(context, rt_mask);
@@ -2228,7 +2190,6 @@ BOOL context_apply_clear_state(struct wined3d_context *context, const struct win
     gl_info->gl_ops.gl.p_glDisable(GL_BLEND);
     gl_info->gl_ops.gl.p_glEnable(GL_SCISSOR_TEST);
     checkGLcall("glEnable GL_SCISSOR_TEST");
-    LEAVE_GL();
 
     context_invalidate_state(context, STATE_RENDER(WINED3D_RS_ALPHABLENDENABLE));
     context_invalidate_state(context, STATE_RENDER(WINED3D_RS_SCISSORTESTENABLE));
@@ -2264,7 +2225,7 @@ static DWORD find_draw_buffers_mask(const struct wined3d_context *context, const
     return rt_mask;
 }
 
-/* GL locking and context activation are done by the caller */
+/* Context activation is done by the caller. */
 void context_state_fb(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
 {
     const struct wined3d_device *device = context->swapchain->device;
@@ -2296,7 +2257,7 @@ void context_state_fb(struct wined3d_context *context, const struct wined3d_stat
     }
 }
 
-/* GL locking and context activation are done by the caller */
+/* Context activation is done by the caller. */
 void context_state_drawbuf(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
 {
     const struct wined3d_device *device = context->swapchain->device;
@@ -2345,8 +2306,6 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de
             buffer_get_sysmem(state->index_buffer, context->gl_info);
     }
 
-    ENTER_GL();
-
     for (i = 0; i < context->numDirtyEntries; ++i)
     {
         DWORD rep = context->dirtyArray[i];
@@ -2375,7 +2334,6 @@ BOOL context_apply_draw_state(struct wined3d_context *context, struct wined3d_de
         context_check_fbo_status(context, GL_FRAMEBUFFER);
     }
 
-    LEAVE_GL();
     context->numDirtyEntries = 0; /* This makes the whole list clean */
     context->last_was_blit = FALSE;
 
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 0d35b17..7fcc9c8 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -710,8 +710,6 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
         return;
     }
 
-    ENTER_GL();
-
     /* Only set the values up once, as they are not changing. */
     if (flags & WINED3DCLEAR_STENCIL)
     {
@@ -816,8 +814,6 @@ void device_clear_render_targets(struct wined3d_device *device, UINT rt_count, c
         }
     }
 
-    LEAVE_GL();
-
     if (wined3d_settings.strict_draw_ordering || (flags & WINED3DCLEAR_TARGET
             && target->container.type == WINED3D_CONTAINER_SWAPCHAIN
             && target->container.u.swapchain->front_buffer == target))
@@ -978,7 +974,6 @@ static void create_dummy_textures(struct wined3d_device *device, struct wined3d_
      * OpenGL will only allow that when a valid texture is bound.
      * We emulate this by creating dummy textures and binding them
      * to each texture stage when the currently set D3D texture is NULL. */
-    ENTER_GL();
 
     if (gl_info->supported[APPLE_CLIENT_STORAGE])
     {
@@ -1057,8 +1052,6 @@ static void create_dummy_textures(struct wined3d_device *device, struct wined3d_
         gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
         checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)");
     }
-
-    LEAVE_GL();
 }
 
 /* Context activation is done by the caller. */
@@ -1066,7 +1059,6 @@ static void destroy_dummy_textures(struct wined3d_device *device, const struct w
 {
     unsigned int count = min(MAX_COMBINED_SAMPLERS, gl_info->limits.combined_samplers);
 
-    ENTER_GL();
     if (gl_info->supported[ARB_TEXTURE_CUBE_MAP])
     {
         gl_info->gl_ops.gl.p_glDeleteTextures(count, device->dummy_texture_cube);
@@ -1087,7 +1079,6 @@ static void destroy_dummy_textures(struct wined3d_device *device, const struct w
 
     gl_info->gl_ops.gl.p_glDeleteTextures(count, device->dummy_texture_2d);
     checkGLcall("glDeleteTextures(count, device->dummy_texture_2d)");
-    LEAVE_GL();
 
     memset(device->dummy_texture_cube, 0, gl_info->limits.textures * sizeof(*device->dummy_texture_cube));
     memset(device->dummy_texture_3d, 0, gl_info->limits.textures * sizeof(*device->dummy_texture_3d));
@@ -1297,8 +1288,6 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device,
 
     create_dummy_textures(device, context);
 
-    ENTER_GL();
-
     /* Initialize the current view state */
     device->view_ident = 1;
     device->contexts[0]->last_was_rhw = 0;
@@ -1325,7 +1314,6 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device,
     }
 
     TRACE("All defaults now set up, leaving 3D init.\n");
-    LEAVE_GL();
 
     context_release(context);
 
@@ -1438,9 +1426,7 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device)
     /* Delete the mouse cursor texture */
     if (device->cursorTexture)
     {
-        ENTER_GL();
         gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->cursorTexture);
-        LEAVE_GL();
         device->cursorTexture = 0;
     }
 
@@ -1449,9 +1435,7 @@ HRESULT CDECL wined3d_device_uninit_3d(struct wined3d_device *device)
      */
     if (device->depth_blt_texture)
     {
-        ENTER_GL();
         gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->depth_blt_texture);
-        LEAVE_GL();
         device->depth_blt_texture = 0;
     }
 
@@ -3657,10 +3641,8 @@ HRESULT CDECL wined3d_device_process_vertices(struct wined3d_device *device,
             struct wined3d_buffer *vb = state->streams[e->stream_idx].buffer;
             e->data.buffer_object = 0;
             e->data.addr = (BYTE *)((ULONG_PTR)e->data.addr + (ULONG_PTR)buffer_get_sysmem(vb, gl_info));
-            ENTER_GL();
             GL_EXTCALL(glDeleteBuffersARB(1, &vb->buffer_object));
             vb->buffer_object = 0;
-            LEAVE_GL();
         }
         if (e->data.addr)
             e->data.addr += e->stride * src_start_idx;
@@ -4970,9 +4952,7 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device
     if (device->cursorTexture)
     {
         struct wined3d_context *context = context_acquire(device, NULL);
-        ENTER_GL();
         context->gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->cursorTexture);
-        LEAVE_GL();
         context_release(context);
         device->cursorTexture = 0;
     }
@@ -5037,8 +5017,6 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device
 
             context = context_acquire(device, NULL);
 
-            ENTER_GL();
-
             if (gl_info->supported[APPLE_CLIENT_STORAGE])
             {
                 gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE);
@@ -5061,8 +5039,6 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device
                 checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)");
             }
 
-            LEAVE_GL();
-
             context_release(context);
         }
         else
@@ -5219,7 +5195,6 @@ static void delete_opengl_contexts(struct wined3d_device *device, struct wined3d
         device->shader_backend->shader_destroy(shader);
     }
 
-    ENTER_GL();
     if (device->depth_blt_texture)
     {
         gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->depth_blt_texture);
@@ -5230,7 +5205,6 @@ static void delete_opengl_contexts(struct wined3d_device *device, struct wined3d
         gl_info->gl_ops.gl.p_glDeleteTextures(1, &device->cursorTexture);
         device->cursorTexture = 0;
     }
-    LEAVE_GL();
 
     device->blitter->free_private(device);
     device->shader_backend->shader_free_private(device);
diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index d9b86d4..15ac2ea 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -412,8 +412,8 @@ ULONG CDECL wined3d_decref(struct wined3d *wined3d)
     return refcount;
 }
 
-/* GL locking is done by the caller */
-static inline BOOL test_arb_vs_offset_limit(const struct wined3d_gl_info *gl_info)
+/* Context activation is done by the caller. */
+static BOOL test_arb_vs_offset_limit(const struct wined3d_gl_info *gl_info)
 {
     GLuint prog;
     BOOL ret = FALSE;
@@ -523,8 +523,6 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info)
     /* No PBO -> No point in testing them. */
     if (!gl_info->supported[ARB_PIXEL_BUFFER_OBJECT]) return;
 
-    ENTER_GL();
-
     while (gl_info->gl_ops.gl.p_glGetError());
     gl_info->gl_ops.gl.p_glGenTextures(1, &texture);
     gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, texture);
@@ -542,12 +540,10 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info)
     checkGLcall("Loading the PBO test texture");
 
     GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
-    LEAVE_GL();
 
     gl_info->gl_ops.gl.p_glFinish(); /* just to be sure */
 
     memset(check, 0, sizeof(check));
-    ENTER_GL();
     gl_info->gl_ops.gl.p_glGetTexImage(GL_TEXTURE_2D, 0, GL_BGRA, GL_UNSIGNED_INT_8_8_8_8_REV, check);
     checkGLcall("Reading back the PBO test texture");
 
@@ -555,8 +551,6 @@ static void test_pbo_functionality(struct wined3d_gl_info *gl_info)
     GL_EXTCALL(glDeleteBuffersARB(1, &pbo));
     checkGLcall("PBO test cleanup");
 
-    LEAVE_GL();
-
     if (memcmp(check, pattern, sizeof(check)))
     {
         WARN("PBO test failed, read back data doesn't match original.\n"
@@ -613,11 +607,9 @@ static BOOL match_allows_spec_alpha(const struct wined3d_gl_info *gl_info, const
     if (!gl_info->supported[EXT_SECONDARY_COLOR])
         return FALSE;
 
-    ENTER_GL();
     while (gl_info->gl_ops.gl.p_glGetError());
     GL_EXTCALL(glSecondaryColorPointerEXT)(4, GL_UNSIGNED_BYTE, 4, data);
     error = gl_info->gl_ops.gl.p_glGetError();
-    LEAVE_GL();
 
     if (error == GL_NO_ERROR)
     {
@@ -648,14 +640,12 @@ static BOOL match_broken_nv_clip(const struct wined3d_gl_info *gl_info, const ch
 
     if (!gl_info->supported[NV_VERTEX_PROGRAM2_OPTION]) return FALSE;
 
-    ENTER_GL();
     while (gl_info->gl_ops.gl.p_glGetError());
 
     GL_EXTCALL(glGenProgramsARB(1, &prog));
     if(!prog)
     {
         ERR("Failed to create the NVvp clip test program\n");
-        LEAVE_GL();
         return FALSE;
     }
     GL_EXTCALL(glBindProgramARB(GL_VERTEX_PROGRAM_ARB, prog));
@@ -675,7 +665,6 @@ static BOOL match_broken_nv_clip(const struct wined3d_gl_info *gl_info, const ch
     GL_EXTCALL(glDeleteProgramsARB(1, &prog));
     checkGLcall("GL_NV_vertex_program2_option result.clip[] test cleanup");
 
-    LEAVE_GL();
     return ret;
 }
 
@@ -691,8 +680,6 @@ static BOOL match_fbo_tex_update(const struct wined3d_gl_info *gl_info, const ch
 
     memset(data, 0xcc, sizeof(data));
 
-    ENTER_GL();
-
     gl_info->gl_ops.gl.p_glGenTextures(1, &tex);
     gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex);
     gl_info->gl_ops.gl.p_glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
@@ -729,8 +716,6 @@ static BOOL match_fbo_tex_update(const struct wined3d_gl_info *gl_info, const ch
     gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex);
     checkGLcall("glDeleteTextures");
 
-    LEAVE_GL();
-
     return *(DWORD *)data == 0x11111111;
 }
 
@@ -743,8 +728,6 @@ static BOOL match_broken_rgba16(const struct wined3d_gl_info *gl_info, const cha
     GLuint tex;
     GLint size;
 
-    ENTER_GL();
-
     gl_info->gl_ops.gl.p_glGenTextures(1, &tex);
     gl_info->gl_ops.gl.p_glBindTexture(GL_TEXTURE_2D, tex);
     gl_info->gl_ops.gl.p_glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, 4, 4, 0, GL_RGBA, GL_UNSIGNED_SHORT, NULL);
@@ -759,8 +742,6 @@ static BOOL match_broken_rgba16(const struct wined3d_gl_info *gl_info, const cha
     gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex);
     checkGLcall("glDeleteTextures");
 
-    LEAVE_GL();
-
     return size < 16;
 }
 
@@ -2608,13 +2589,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
 
     TRACE("adapter %p.\n", adapter);
 
-    ENTER_GL();
-
     gl_renderer_str = (const char *)gl_info->gl_ops.gl.p_glGetString(GL_RENDERER);
     TRACE("GL_RENDERER: %s.\n", debugstr_a(gl_renderer_str));
     if (!gl_renderer_str)
     {
-        LEAVE_GL();
         ERR("Received a NULL GL_RENDERER.\n");
         return FALSE;
     }
@@ -2623,7 +2601,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
     TRACE("GL_VENDOR: %s.\n", debugstr_a(gl_vendor_str));
     if (!gl_vendor_str)
     {
-        LEAVE_GL();
         ERR("Received a NULL GL_VENDOR.\n");
         return FALSE;
     }
@@ -2633,7 +2610,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
     TRACE("GL_VERSION: %s.\n", debugstr_a(gl_version_str));
     if (!gl_version_str)
     {
-        LEAVE_GL();
         ERR("Received a NULL GL_VERSION.\n");
         return FALSE;
     }
@@ -2643,13 +2619,10 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
     GL_Extensions = (const char *)gl_info->gl_ops.gl.p_glGetString(GL_EXTENSIONS);
     if (!GL_Extensions)
     {
-        LEAVE_GL();
         ERR("Received a NULL GL_EXTENSIONS.\n");
         return FALSE;
     }
 
-    LEAVE_GL();
-
     memset(gl_info->supported, 0, sizeof(gl_info->supported));
     gl_info->supported[WINED3D_GL_EXT_NONE] = TRUE;
 
@@ -2792,8 +2765,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
         gl_info->supported[ARB_FRAMEBUFFER_SRGB] = FALSE;
     }
 
-    ENTER_GL();
-
     wined3d_adapter_init_limits(gl_info);
 
     if (gl_info->supported[ARB_VERTEX_PROGRAM] && test_arb_vs_offset_limit(gl_info))
@@ -2813,8 +2784,6 @@ static BOOL wined3d_adapter_init_gl_caps(struct wined3d_adapter *adapter)
 
     checkGLcall("extension detection");
 
-    LEAVE_GL();
-
     adapter->fragment_pipe = select_fragment_implementation(gl_info);
     adapter->shader_backend = select_shader_backend(gl_info);
     adapter->blitter = select_blit_implementation(gl_info);
diff --git a/dlls/wined3d/drawprim.c b/dlls/wined3d/drawprim.c
index 61f3f8b..da780ff 100644
--- a/dlls/wined3d/drawprim.c
+++ b/dlls/wined3d/drawprim.c
@@ -34,7 +34,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(d3d_draw);
 #include <stdio.h>
 #include <math.h>
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void drawStridedFast(const struct wined3d_gl_info *gl_info, GLenum primitive_type, UINT count, UINT idx_size,
         const void *idx_data, UINT start_idx, INT base_vertex_index, UINT start_instance, UINT instance_count)
 {
@@ -81,7 +81,7 @@ static void drawStridedFast(const struct wined3d_gl_info *gl_info, GLenum primit
  * Slower GL version which extracts info about each vertex in turn
  */
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void drawStridedSlow(const struct wined3d_device *device, const struct wined3d_context *context,
         const struct wined3d_stream_info *si, UINT NumVertexes, GLenum glPrimType,
         const void *idxData, UINT idxSize, UINT startIdx)
@@ -325,7 +325,7 @@ static void drawStridedSlow(const struct wined3d_device *device, const struct wi
     checkGLcall("glEnd and previous calls");
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static inline void send_attribute(const struct wined3d_gl_info *gl_info,
         enum wined3d_format_id format, const UINT index, const void *ptr)
 {
@@ -435,7 +435,7 @@ static inline void send_attribute(const struct wined3d_gl_info *gl_info,
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void drawStridedSlowVs(const struct wined3d_gl_info *gl_info, const struct wined3d_state *state,
         const struct wined3d_stream_info *si, UINT numberOfVertices, GLenum glPrimitiveType,
         const void *idxData, UINT idxSize, UINT startIdx)
@@ -491,7 +491,7 @@ static void drawStridedSlowVs(const struct wined3d_gl_info *gl_info, const struc
     gl_info->gl_ops.gl.p_glEnd();
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void drawStridedInstanced(const struct wined3d_gl_info *gl_info, const struct wined3d_state *state,
         const struct wined3d_stream_info *si, UINT numberOfVertices, GLenum glPrimitiveType,
         const void *idxData, UINT idxSize, UINT startIdx, UINT base_vertex_index, UINT instance_count)
@@ -666,8 +666,6 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co
         FIXME("Point sprite coordinate origin switching not supported.\n");
     }
 
-    /* Ok, we will be updating the screen from here onwards so grab the lock */
-    ENTER_GL();
     {
         GLenum glPrimType = state->gl_primitive_type;
         INT base_vertex_index = state->base_vertex_index;
@@ -769,9 +767,6 @@ void draw_primitive(struct wined3d_device *device, UINT start_idx, UINT index_co
         }
     }
 
-    /* Finished updating the screen, restore lock */
-    LEAVE_GL();
-
     if (ib_query)
         wined3d_event_query_issue(ib_query, device);
     for (i = 0; i < device->num_buffer_queries; ++i)
@@ -895,8 +890,6 @@ HRESULT tesselate_rectpatch(struct wined3d_device *This, struct wined3d_rect_pat
     patch->has_normals = TRUE;
     patch->has_texcoords = FALSE;
 
-    ENTER_GL();
-
     gl_info->gl_ops.gl.p_glMatrixMode(GL_PROJECTION);
     checkGLcall("glMatrixMode(GL_PROJECTION)");
     gl_info->gl_ops.gl.p_glLoadIdentity();
@@ -1033,18 +1026,20 @@ HRESULT tesselate_rectpatch(struct wined3d_device *This, struct wined3d_rect_pat
     i = gl_info->gl_ops.gl.p_glRenderMode(GL_RENDER);
     if (i == -1)
     {
-        LEAVE_GL();
         ERR("Feedback failed. Expected %d elements back\n", buffer_size);
         HeapFree(GetProcessHeap(), 0, feedbuffer);
         context_release(context);
         return WINED3DERR_DRIVERINTERNALERROR;
-    } else if(i != buffer_size) {
-        LEAVE_GL();
+    }
+    else if (i != buffer_size)
+    {
         ERR("Unexpected amount of elements returned. Expected %d, got %d\n", buffer_size, i);
         HeapFree(GetProcessHeap(), 0, feedbuffer);
         context_release(context);
         return WINED3DERR_DRIVERINTERNALERROR;
-    } else {
+    }
+    else
+    {
         TRACE("Got %d elements as expected\n", i);
     }
 
@@ -1155,7 +1150,6 @@ HRESULT tesselate_rectpatch(struct wined3d_device *This, struct wined3d_rect_pat
     gl_info->gl_ops.gl.p_glDisable(GL_MAP2_NORMAL);
     gl_info->gl_ops.gl.p_glDisable(GL_MAP2_TEXTURE_COORD_4);
     checkGLcall("glDisable vertex attrib generation");
-    LEAVE_GL();
 
     context_release(context);
 
diff --git a/dlls/wined3d/glsl_shader.c b/dlls/wined3d/glsl_shader.c
index 3cac7d8..25606ff 100644
--- a/dlls/wined3d/glsl_shader.c
+++ b/dlls/wined3d/glsl_shader.c
@@ -245,8 +245,7 @@ static char *get_info_log_line(char **ptr)
     return p;
 }
 
-/** Prints the GLSL info log which will contain error messages if they exist */
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleARB obj)
 {
     int infologLength = 0;
@@ -288,7 +287,7 @@ static void print_glsl_info_log(const struct wined3d_gl_info *gl_info, GLhandleA
     }
 }
 
-/* GL locking is done by the caller. */
+/* Context activation is done by the caller. */
 static void shader_glsl_compile(const struct wined3d_gl_info *gl_info, GLhandleARB shader, const char *src)
 {
     TRACE("Compiling shader object %u.\n", shader);
@@ -299,7 +298,7 @@ static void shader_glsl_compile(const struct wined3d_gl_info *gl_info, GLhandleA
     print_glsl_info_log(gl_info, shader);
 }
 
-/* GL locking is done by the caller. */
+/* Context activation is done by the caller. */
 static void shader_glsl_dump_program_source(const struct wined3d_gl_info *gl_info, GLhandleARB program)
 {
     GLint i, object_count, source_size = -1;
@@ -353,7 +352,7 @@ static void shader_glsl_dump_program_source(const struct wined3d_gl_info *gl_inf
     HeapFree(GetProcessHeap(), 0, objects);
 }
 
-/* GL locking is done by the caller. */
+/* Context activation is done by the caller. */
 static void shader_glsl_validate_link(const struct wined3d_gl_info *gl_info, GLhandleARB program)
 {
     GLint tmp;
@@ -374,10 +373,7 @@ static void shader_glsl_validate_link(const struct wined3d_gl_info *gl_info, GLh
     print_glsl_info_log(gl_info, program);
 }
 
-/**
- * Loads (pixel shader) samplers
- */
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_load_psamplers(const struct wined3d_gl_info *gl_info,
         const DWORD *tex_unit_map, GLhandleARB programId)
 {
@@ -403,7 +399,7 @@ static void shader_glsl_load_psamplers(const struct wined3d_gl_info *gl_info,
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_load_vsamplers(const struct wined3d_gl_info *gl_info,
         const DWORD *tex_unit_map, GLhandleARB programId)
 {
@@ -429,7 +425,7 @@ static void shader_glsl_load_vsamplers(const struct wined3d_gl_info *gl_info,
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static inline void walk_constant_heap(const struct wined3d_gl_info *gl_info, const float *constants,
         const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version)
 {
@@ -489,7 +485,7 @@ static inline void walk_constant_heap(const struct wined3d_gl_info *gl_info, con
     checkGLcall("walk_constant_heap()");
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static inline void apply_clamped_constant(const struct wined3d_gl_info *gl_info, GLint location, const GLfloat *data)
 {
     GLfloat clamped_constant[4];
@@ -504,7 +500,7 @@ static inline void apply_clamped_constant(const struct wined3d_gl_info *gl_info,
     GL_EXTCALL(glUniform4fvARB(location, 1, clamped_constant));
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static inline void walk_constant_heap_clamped(const struct wined3d_gl_info *gl_info, const float *constants,
         const GLint *constant_locations, const struct constant_heap *heap, unsigned char *stack, DWORD version)
 {
@@ -562,8 +558,7 @@ static inline void walk_constant_heap_clamped(const struct wined3d_gl_info *gl_i
     checkGLcall("walk_constant_heap_clamped()");
 }
 
-/* Loads floating point constants (aka uniforms) into the currently set GLSL program. */
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_load_constantsF(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info,
         const float *constants, const GLint *constant_locations, const struct constant_heap *heap,
         unsigned char *stack, UINT version)
@@ -593,8 +588,7 @@ static void shader_glsl_load_constantsF(const struct wined3d_shader *shader, con
     checkGLcall("glUniform4fvARB()");
 }
 
-/* Loads integer constants (aka uniforms) into the currently set GLSL program. */
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_load_constantsI(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info,
         const GLint locations[MAX_CONST_I], const int *constants, WORD constants_set)
 {
@@ -631,8 +625,7 @@ static void shader_glsl_load_constantsI(const struct wined3d_shader *shader, con
     }
 }
 
-/* Loads boolean constants (aka uniforms) into the currently set GLSL program. */
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_load_constantsB(const struct wined3d_shader *shader, const struct wined3d_gl_info *gl_info,
         GLhandleARB programId, const BOOL *constants, WORD constants_set)
 {
@@ -690,10 +683,7 @@ static void reset_program_constant_version(struct wine_rb_entry *entry, void *co
     WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry)->constant_version = 0;
 }
 
-/**
- * Loads the texture dimensions for NP2 fixup into the currently set GLSL program.
- */
-/* GL locking is done by the caller (state handler) */
+/* Context activation is done by the caller (state handler). */
 static void shader_glsl_load_np2fixup_constants(void *shader_priv,
         const struct wined3d_gl_info *gl_info, const struct wined3d_state *state)
 {
@@ -741,10 +731,7 @@ static void shader_glsl_load_np2fixup_constants(void *shader_priv,
     }
 }
 
-/**
- * Loads the app-supplied constants into the currently set GLSL program.
- */
-/* GL locking is done by the caller (state handler) */
+/* Context activation is done by the caller (state handler). */
 static void shader_glsl_load_constants(const struct wined3d_context *context,
         BOOL usePixelShader, BOOL useVertexShader)
 {
@@ -4201,7 +4188,7 @@ static struct glsl_shader_prog_link *get_glsl_program_entry(const struct shader_
     return entry ? WINE_RB_ENTRY_VALUE(entry, struct glsl_shader_prog_link, program_lookup_entry) : NULL;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void delete_glsl_program_entry(struct shader_glsl_priv *priv, const struct wined3d_gl_info *gl_info,
         struct glsl_shader_prog_link *entry)
 {
@@ -4317,7 +4304,7 @@ static void handle_ps3_input(struct wined3d_shader_buffer *buffer,
     HeapFree(GetProcessHeap(), 0, set);
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLhandleARB generate_param_reorder_function(struct wined3d_shader_buffer *buffer,
         const struct wined3d_shader *vs, const struct wined3d_shader *ps,
         const struct wined3d_gl_info *gl_info)
@@ -4468,7 +4455,7 @@ static void shader_glsl_generate_fog_code(struct wined3d_shader_buffer *buffer,
     shader_addline(buffer, "gl_FragData[0].xyz = mix(gl_Fog.color.xyz, gl_FragData[0].xyz, clamp(Fog, 0.0, 1.0));\n");
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void hardcode_local_constants(const struct wined3d_shader *shader,
         const struct wined3d_gl_info *gl_info, GLhandleARB programId, const char *prefix)
 {
@@ -4487,7 +4474,7 @@ static void hardcode_local_constants(const struct wined3d_shader *shader,
     checkGLcall("Hardcoding local constants");
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context,
         struct wined3d_shader_buffer *buffer, const struct wined3d_shader *shader,
         const struct ps_compile_args *args, struct ps_np2fixup_info *np2fixup_info)
@@ -4550,7 +4537,7 @@ static GLuint shader_glsl_generate_pshader(const struct wined3d_context *context
     return shader_obj;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context,
         struct wined3d_shader_buffer *buffer, const struct wined3d_shader *shader,
         const struct vs_compile_args *args)
@@ -4622,7 +4609,7 @@ static GLuint shader_glsl_generate_vshader(const struct wined3d_context *context
     return shader_obj;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLhandleARB shader_glsl_generate_geometry_shader(const struct wined3d_context *context,
         struct wined3d_shader_buffer *buffer, const struct wined3d_shader *shader)
 {
@@ -5531,16 +5518,7 @@ static void shader_glsl_init_ps_uniform_locations(const struct wined3d_gl_info *
     ps->ycorrection_location = GL_EXTCALL(glGetUniformLocationARB(program_id, "ycorrection"));
 }
 
-/** Sets the GLSL program ID for the given pixel and vertex shader combination.
- * It sets the programId on the current StateBlock (because it should be called
- * inside of the DrawPrimitive() part of the render loop).
- *
- * If a program for the given combination does not exist, create one, and store
- * the program in the hash table.  If it creates a program, it will link the
- * given objects, too.
- */
-
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void set_glsl_shader_program(const struct wined3d_context *context, struct wined3d_device *device,
         enum wined3d_shader_mode vertex_mode, enum wined3d_shader_mode fragment_mode)
 {
@@ -5740,7 +5718,7 @@ static void set_glsl_shader_program(const struct wined3d_context *context, struc
         hardcode_local_constants(vshader, gl_info, programId, "vs");
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static GLhandleARB create_glsl_blt_shader(const struct wined3d_gl_info *gl_info, enum tex_types tex_type, BOOL masked)
 {
     GLhandleARB program_id;
@@ -5850,7 +5828,7 @@ static GLhandleARB create_glsl_blt_shader(const struct wined3d_gl_info *gl_info,
     return program_id;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_select(const struct wined3d_context *context, enum wined3d_shader_mode vertex_mode,
         enum wined3d_shader_mode fragment_mode)
 {
@@ -5890,7 +5868,7 @@ static void shader_glsl_select(const struct wined3d_context *context, enum wined
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_select_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info,
         enum tex_types tex_type, const SIZE *ds_mask_size)
 {
@@ -5919,7 +5897,7 @@ static void shader_glsl_select_depth_blt(void *shader_priv, const struct wined3d
     }
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void shader_glsl_deselect_depth_blt(void *shader_priv, const struct wined3d_gl_info *gl_info)
 {
     struct shader_glsl_priv *priv = shader_priv;
@@ -5958,8 +5936,6 @@ static void shader_glsl_destroy(struct wined3d_shader *shader)
         struct glsl_shader_prog_link *entry, *entry2;
         UINT i;
 
-        ENTER_GL();
-
         switch (shader->reg_maps.shader_version.type)
         {
             case WINED3D_SHADER_TYPE_PIXEL:
@@ -6035,8 +6011,6 @@ static void shader_glsl_destroy(struct wined3d_shader *shader)
                 ERR("Unhandled shader type %#x.\n", shader->reg_maps.shader_version.type);
                 break;
         }
-
-        LEAVE_GL();
     }
 
     HeapFree(GetProcessHeap(), 0, shader->backend_data);
@@ -6165,7 +6139,6 @@ static void shader_glsl_free(struct wined3d_device *device)
     struct shader_glsl_priv *priv = device->shader_priv;
     int i;
 
-    ENTER_GL();
     for (i = 0; i < tex_type_count; ++i)
     {
         if (priv->depth_blt_program_full[i])
@@ -6177,7 +6150,6 @@ static void shader_glsl_free(struct wined3d_device *device)
             GL_EXTCALL(glDeleteObjectARB(priv->depth_blt_program_masked[i]));
         }
     }
-    LEAVE_GL();
 
     wine_rb_destroy(&priv->program_lookup, NULL, NULL);
     constant_heap_free(&priv->pconst_heap);
diff --git a/dlls/wined3d/nvidia_texture_shader.c b/dlls/wined3d/nvidia_texture_shader.c
index 52f4341..97534cb 100644
--- a/dlls/wined3d/nvidia_texture_shader.c
+++ b/dlls/wined3d/nvidia_texture_shader.c
@@ -29,7 +29,7 @@
 
 WINE_DEFAULT_DEBUG_CHANNEL(d3d);
 
-/* GL locking for state handlers is done by the caller. */
+/* Context activation for state handlers is done by the caller. */
 
 static void nvts_activate_dimensions(const struct wined3d_state *state, DWORD stage, struct wined3d_context *context)
 {
@@ -652,7 +652,7 @@ static void nvrc_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
     }
 }
 
-/* Context activation and GL locking are done by the caller. */
+/* Context activation is done by the caller. */
 static void nvts_enable(const struct wined3d_gl_info *gl_info, BOOL enable)
 {
     nvrc_enable(gl_info, enable);
diff --git a/dlls/wined3d/query.c b/dlls/wined3d/query.c
index 2ee14a3..d3c3923 100644
--- a/dlls/wined3d/query.c
+++ b/dlls/wined3d/query.c
@@ -61,8 +61,6 @@ static enum wined3d_event_query_result wined3d_event_query_test(const struct win
     context = context_acquire(device, query->context->current_rt);
     gl_info = context->gl_info;
 
-    ENTER_GL();
-
     if (gl_info->supported[ARB_SYNC])
     {
         GLenum gl_ret = GL_EXTCALL(glClientWaitSync(query->object.sync, 0, 0));
@@ -105,8 +103,6 @@ static enum wined3d_event_query_result wined3d_event_query_test(const struct win
         ret = WINED3D_EVENT_QUERY_ERROR;
     }
 
-    LEAVE_GL();
-
     context_release(context);
     return ret;
 }
@@ -138,7 +134,6 @@ enum wined3d_event_query_result wined3d_event_query_finish(const struct wined3d_
 
     context = context_acquire(device, query->context->current_rt);
 
-    ENTER_GL();
     if (gl_info->supported[ARB_SYNC])
     {
         /* Apple seems to be into arbitrary limits, and timeouts larger than
@@ -177,7 +172,6 @@ enum wined3d_event_query_result wined3d_event_query_finish(const struct wined3d_
         ERR("Event query created without GL support\n");
         ret = WINED3D_EVENT_QUERY_ERROR;
     }
-    LEAVE_GL();
 
     context_release(context);
     return ret;
@@ -209,8 +203,6 @@ void wined3d_event_query_issue(struct wined3d_event_query *query, const struct w
 
     gl_info = context->gl_info;
 
-    ENTER_GL();
-
     if (gl_info->supported[ARB_SYNC])
     {
         if (query->object.sync) GL_EXTCALL(glDeleteSync(query->object.sync));
@@ -229,8 +221,6 @@ void wined3d_event_query_issue(struct wined3d_event_query *query, const struct w
         checkGLcall("glSetFenceNV");
     }
 
-    LEAVE_GL();
-
     context_release(context);
 }
 
@@ -345,8 +335,6 @@ static HRESULT wined3d_occlusion_query_ops_get_data(struct wined3d_query *query,
 
     context = context_acquire(query->device, oq->context->current_rt);
 
-    ENTER_GL();
-
     GL_EXTCALL(glGetQueryObjectuivARB(oq->id, GL_QUERY_RESULT_AVAILABLE_ARB, &available));
     checkGLcall("glGetQueryObjectuivARB(GL_QUERY_RESULT_AVAILABLE)");
     TRACE("available %#x.\n", available);
@@ -367,8 +355,6 @@ static HRESULT wined3d_occlusion_query_ops_get_data(struct wined3d_query *query,
         res = S_FALSE;
     }
 
-    LEAVE_GL();
-
     context_release(context);
 
     return res;
@@ -480,10 +466,8 @@ static HRESULT wined3d_occlusion_query_ops_issue(struct wined3d_query *query, DW
                 {
                     context = context_acquire(query->device, oq->context->current_rt);
 
-                    ENTER_GL();
                     GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB));
                     checkGLcall("glEndQuery()");
-                    LEAVE_GL();
                 }
             }
             else
@@ -493,10 +477,8 @@ static HRESULT wined3d_occlusion_query_ops_issue(struct wined3d_query *query, DW
                 context_alloc_occlusion_query(context, oq);
             }
 
-            ENTER_GL();
             GL_EXTCALL(glBeginQueryARB(GL_SAMPLES_PASSED_ARB, oq->id));
             checkGLcall("glBeginQuery()");
-            LEAVE_GL();
 
             context_release(context);
         }
@@ -516,10 +498,8 @@ static HRESULT wined3d_occlusion_query_ops_issue(struct wined3d_query *query, DW
                 {
                     context = context_acquire(query->device, oq->context->current_rt);
 
-                    ENTER_GL();
                     GL_EXTCALL(glEndQueryARB(GL_SAMPLES_PASSED_ARB));
                     checkGLcall("glEndQuery()");
-                    LEAVE_GL();
 
                     context_release(context);
                 }
diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c
index d0445c9..a193fbd 100644
--- a/dlls/wined3d/state.c
+++ b/dlls/wined3d/state.c
@@ -38,7 +38,7 @@
 WINE_DEFAULT_DEBUG_CHANNEL(d3d);
 WINE_DECLARE_DEBUG_CHANNEL(d3d_shader);
 
-/* GL locking for state handlers is done by the caller. */
+/* Context activation for state handler is done by the caller. */
 
 static void state_undefined(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
 {
@@ -5657,7 +5657,7 @@ static const struct StateEntryTemplate ffp_fragmentstate_template[] = {
     {0 /* Terminate */,                                   { 0,                                                  0                   }, WINED3D_GL_EXT_NONE             },
 };
 
-/* Context activation and GL locking are done by the caller. */
+/* Context activation is done by the caller. */
 static void ffp_enable(const struct wined3d_gl_info *gl_info, BOOL enable) {}
 
 static void ffp_fragment_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps)
diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c
index 19acc4d..f98bf76 100644
--- a/dlls/wined3d/surface.c
+++ b/dlls/wined3d/surface.c
@@ -57,8 +57,6 @@ static void surface_cleanup(struct wined3d_surface *surface)
         context = context_acquire(surface->resource.device, NULL);
         gl_info = context->gl_info;
 
-        ENTER_GL();
-
         if (surface->texture_name)
         {
             TRACE("Deleting texture %u.\n", surface->texture_name);
@@ -90,8 +88,6 @@ static void surface_cleanup(struct wined3d_surface *surface)
             HeapFree(GetProcessHeap(), 0, entry);
         }
 
-        LEAVE_GL();
-
         context_release(context);
     }
 
@@ -313,7 +309,7 @@ static void surface_get_rect(const struct wined3d_surface *surface, const RECT *
     }
 }
 
-/* GL locking and context activation is done by the caller */
+/* Context activation is done by the caller. */
 void draw_textured_quad(const struct wined3d_surface *src_surface, struct wined3d_context *context,
         const RECT *src_rect, const RECT *dst_rect, enum wined3d_texture_filter_type filter)
 {
@@ -532,7 +528,6 @@ static void surface_load_pbo(struct wined3d_surface *surface, const struct wined
     GLenum error;
 
     context = context_acquire(surface->resource.device, NULL);
-    ENTER_GL();
 
     GL_EXTCALL(glGenBuffersARB(1, &surface->pbo));
     error = gl_info->gl_ops.gl.p_glGetError();
@@ -559,7 +554,6 @@ static void surface_load_pbo(struct wined3d_surface *surface, const struct wined
     }
     surface->resource.allocatedMemory = NULL;
     surface->flags |= SFLAG_PBO;
-    LEAVE_GL();
     context_release(context);
 }
 
@@ -622,8 +616,6 @@ static void surface_bind(struct wined3d_surface *surface, struct wined3d_context
         if (srgb)
             ERR("Trying to bind standalone surface %p as sRGB.\n", surface);
 
-        ENTER_GL();
-
         if (!surface->texture_name)
         {
             gl_info->gl_ops.gl.p_glGenTextures(1, &surface->texture_name);
@@ -643,8 +635,6 @@ static void surface_bind(struct wined3d_surface *surface, struct wined3d_context
         {
             context_bind_texture(context, surface->texture_target, surface->texture_name);
         }
-
-        LEAVE_GL();
     }
 }
 
@@ -681,7 +671,6 @@ static void surface_release_client_storage(struct wined3d_surface *surface)
     struct wined3d_context *context = context_acquire(surface->resource.device, NULL);
     const struct wined3d_gl_info *gl_info = context->gl_info;
 
-    ENTER_GL();
     gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_FALSE);
     if (surface->texture_name)
     {
@@ -696,7 +685,6 @@ static void surface_release_client_storage(struct wined3d_surface *surface)
                 GL_RGB, 1, 1, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL);
     }
     gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
-    LEAVE_GL();
 
     context_release(context);
 
@@ -922,7 +910,6 @@ static void surface_map(struct wined3d_surface *surface, const RECT *rect, DWORD
         context = context_acquire(device, NULL);
         gl_info = context->gl_info;
 
-        ENTER_GL();
         GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, surface->pbo));
         checkGLcall("glBindBufferARB");
 
@@ -939,7 +926,6 @@ static void surface_map(struct wined3d_surface *surface, const RECT *rect, DWORD
         GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
         checkGLcall("glBindBufferARB");
 
-        LEAVE_GL();
         context_release(context);
     }
 
@@ -981,12 +967,10 @@ static void surface_unmap(struct wined3d_surface *surface)
         context = context_acquire(device, NULL);
         gl_info = context->gl_info;
 
-        ENTER_GL();
         GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, surface->pbo));
         GL_EXTCALL(glUnmapBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB));
         GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0));
         checkGLcall("glUnmapBufferARB");
-        LEAVE_GL();
         context_release(context);
 
         surface->resource.allocatedMemory = NULL;
@@ -1108,8 +1092,6 @@ static void wined3d_surface_depth_blt_fbo(const struct wined3d_device *device, s
 
     gl_info = context->gl_info;
 
-    ENTER_GL();
-
     context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, NULL, src_surface, SFLAG_INTEXTURE);
     gl_info->gl_ops.gl.p_glReadBuffer(GL_NONE);
     checkGLcall("glReadBuffer()");
@@ -1143,8 +1125,6 @@ static void wined3d_surface_depth_blt_fbo(const struct wined3d_device *device, s
             dst_rect->left, dst_rect->top, dst_rect->right, dst_rect->bottom, gl_mask, GL_NEAREST);
     checkGLcall("glBlitFramebuffer()");
 
-    LEAVE_GL();
-
     if (wined3d_settings.strict_draw_ordering)
         gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */
 
@@ -1226,12 +1206,10 @@ static void surface_blt_fbo(const struct wined3d_device *device, enum wined3d_te
         buffer = GL_COLOR_ATTACHMENT0;
     }
 
-    ENTER_GL();
     context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, src_surface, NULL, src_location);
     gl_info->gl_ops.gl.p_glReadBuffer(buffer);
     checkGLcall("glReadBuffer()");
     context_check_fbo_status(context, GL_READ_FRAMEBUFFER);
-    LEAVE_GL();
 
     if (dst_location == SFLAG_INDRAWABLE)
     {
@@ -1245,7 +1223,6 @@ static void surface_blt_fbo(const struct wined3d_device *device, enum wined3d_te
         buffer = GL_COLOR_ATTACHMENT0;
     }
 
-    ENTER_GL();
     context_apply_fbo_state_blit(context, GL_DRAW_FRAMEBUFFER, dst_surface, NULL, dst_location);
     context_set_draw_buffer(context, buffer);
     context_check_fbo_status(context, GL_DRAW_FRAMEBUFFER);
@@ -1264,8 +1241,6 @@ static void surface_blt_fbo(const struct wined3d_device *device, enum wined3d_te
             dst_rect.left, dst_rect.top, dst_rect.right, dst_rect.bottom, GL_COLOR_BUFFER_BIT, gl_filter);
     checkGLcall("glBlitFramebuffer()");
 
-    LEAVE_GL();
-
     if (wined3d_settings.strict_draw_ordering
             || (dst_location == SFLAG_INDRAWABLE
             && dst_surface->container.u.swapchain->front_buffer == dst_surface))
@@ -1791,7 +1766,6 @@ static void surface_remove_pbo(struct wined3d_surface *surface, const struct win
                 + (RESOURCE_ALIGNMENT - 1)) & ~(RESOURCE_ALIGNMENT - 1));
     }
 
-    ENTER_GL();
     GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, surface->pbo));
     checkGLcall("glBindBufferARB(GL_PIXEL_UNPACK_BUFFER, surface->pbo)");
     GL_EXTCALL(glGetBufferSubDataARB(GL_PIXEL_UNPACK_BUFFER_ARB, 0,
@@ -1799,7 +1773,6 @@ static void surface_remove_pbo(struct wined3d_surface *surface, const struct win
     checkGLcall("glGetBufferSubDataARB");
     GL_EXTCALL(glDeleteBuffersARB(1, &surface->pbo));
     checkGLcall("glDeleteBuffersARB");
-    LEAVE_GL();
 
     surface->pbo = 0;
     surface->flags &= ~SFLAG_PBO;
@@ -1891,17 +1864,13 @@ static void surface_unload(struct wined3d_resource *resource)
      */
     LIST_FOR_EACH_ENTRY_SAFE(entry, entry2, &surface->renderbuffers, struct wined3d_renderbuffer_entry, entry)
     {
-        ENTER_GL();
         gl_info->fbo_ops.glDeleteRenderbuffers(1, &entry->id);
-        LEAVE_GL();
         list_remove(&entry->entry);
         HeapFree(GetProcessHeap(), 0, entry);
     }
     list_init(&surface->renderbuffers);
     surface->current_renderbuffer = NULL;
 
-    ENTER_GL();
-
     /* If we're in a texture, the texture name belongs to the texture.
      * Otherwise, destroy it. */
     if (surface->container.type != WINED3D_CONTAINER_TEXTURE)
@@ -1922,8 +1891,6 @@ static void surface_unload(struct wined3d_resource *resource)
         surface->rb_resolved = 0;
     }
 
-    LEAVE_GL();
-
     context_release(context);
 
     resource_unload(resource);
@@ -2138,8 +2105,6 @@ static void surface_download_data(struct wined3d_surface *surface, const struct
         return;
     }
 
-    ENTER_GL();
-
     if (format->flags & WINED3DFMT_FLAG_COMPRESSED)
     {
         TRACE("(%p) : Calling glGetCompressedTexImageARB level %d, format %#x, type %#x, data %p.\n",
@@ -2161,8 +2126,6 @@ static void surface_download_data(struct wined3d_surface *surface, const struct
                     surface->texture_level, surface->resource.allocatedMemory));
             checkGLcall("glGetCompressedTexImageARB");
         }
-
-        LEAVE_GL();
     }
     else
     {
@@ -2213,7 +2176,6 @@ static void surface_download_data(struct wined3d_surface *surface, const struct
                     gl_format, gl_type, mem);
             checkGLcall("glGetTexImage");
         }
-        LEAVE_GL();
 
         if (surface->flags & SFLAG_NONPOW2)
         {
@@ -2314,8 +2276,6 @@ static void surface_upload_data(struct wined3d_surface *surface, const struct wi
         update_h /= format->height_scale.denominator;
     }
 
-    ENTER_GL();
-
     if (data->buffer_object)
     {
         GL_EXTCALL(glBindBufferARB(GL_PIXEL_UNPACK_BUFFER_ARB, data->buffer_object));
@@ -2388,8 +2348,6 @@ static void surface_upload_data(struct wined3d_surface *surface, const struct wi
         checkGLcall("glBindBufferARB");
     }
 
-    LEAVE_GL();
-
     if (wined3d_settings.strict_draw_ordering)
         gl_info->gl_ops.gl.p_glFlush();
 
@@ -2705,8 +2663,6 @@ static void surface_allocate_surface(struct wined3d_surface *surface, const stru
             surface, surface->texture_target, surface->texture_level, debug_d3dformat(format->id),
             internal, width, height, format->glFormat, format->glType);
 
-    ENTER_GL();
-
     if (gl_info->supported[APPLE_CLIENT_STORAGE])
     {
         if (surface->flags & (SFLAG_NONPOW2 | SFLAG_DIBSECTION | SFLAG_CONVERTED)
@@ -2753,13 +2709,12 @@ static void surface_allocate_surface(struct wined3d_surface *surface, const stru
         gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE);
         checkGLcall("glPixelStorei(GL_UNPACK_CLIENT_STORAGE_APPLE, GL_TRUE)");
     }
-    LEAVE_GL();
 }
 
 /* In D3D the depth stencil dimensions have to be greater than or equal to the
  * render target dimensions. With FBOs, the dimensions have to be an exact match. */
 /* TODO: We should synchronize the renderbuffer's content with the texture's content. */
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 void surface_set_compatible_renderbuffer(struct wined3d_surface *surface, const struct wined3d_surface *rt)
 {
     const struct wined3d_gl_info *gl_info = &surface->resource.device->adapter->gl_info;
@@ -4156,9 +4111,7 @@ void surface_internal_preload(struct wined3d_surface *surface, enum WINED3DSRGB
             /* Tell opengl to try and keep this texture in video ram (well mostly) */
             GLclampf tmp;
             tmp = 0.9f;
-            ENTER_GL();
             context->gl_info->gl_ops.gl.p_glPrioritizeTextures(1, &surface->texture_name, &tmp);
-            LEAVE_GL();
         }
 
         context_release(context);
@@ -4187,8 +4140,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r
     context_apply_blit_state(context, device);
     gl_info = context->gl_info;
 
-    ENTER_GL();
-
     /* Select the correct read buffer, and give some debug output.
      * There is no need to keep track of the current read buffer or reset it, every part of the code
      * that reads sets the read buffer as desired.
@@ -4255,7 +4206,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r
                 if (!mem)
                 {
                     ERR("Out of memory\n");
-                    LEAVE_GL();
                     return;
                 }
                 bpp = surface->resource.format->byte_count * 3;
@@ -4344,7 +4294,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r
             ERR("Out of memory\n");
             if (surface->resource.format->id == WINED3DFMT_P8_UINT)
                 HeapFree(GetProcessHeap(), 0, mem);
-            LEAVE_GL();
             return;
         }
 
@@ -4367,7 +4316,6 @@ static void read_from_framebuffer(struct wined3d_surface *surface, const RECT *r
         }
     }
 
-    LEAVE_GL();
     context_release(context);
 
     /* For P8 textures we need to perform an inverse palette lookup. This is
@@ -4432,8 +4380,6 @@ void surface_load_fb_texture(struct wined3d_surface *surface, BOOL srgb)
 
     TRACE("Reading back offscreen render target %p.\n", surface);
 
-    ENTER_GL();
-
     if (surface_is_offscreen(surface))
         gl_info->gl_ops.gl.p_glReadBuffer(device->offscreenBuffer);
     else
@@ -4444,8 +4390,6 @@ void surface_load_fb_texture(struct wined3d_surface *surface, BOOL srgb)
             0, 0, 0, 0, surface->resource.width, surface->resource.height);
     checkGLcall("glCopyTexSubImage2D");
 
-    LEAVE_GL();
-
     context_release(context);
 }
 
@@ -4539,8 +4483,6 @@ static void flush_to_framebuffer_drawpixels(struct wined3d_surface *surface,
     context_apply_blit_state(context, device);
     gl_info = context->gl_info;
 
-    ENTER_GL();
-
     if (!surface_is_offscreen(surface))
     {
         GLenum buffer = surface_get_gl_buffer(surface);
@@ -4583,8 +4525,6 @@ static void flush_to_framebuffer_drawpixels(struct wined3d_surface *surface,
     gl_info->gl_ops.gl.p_glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
     checkGLcall("glPixelStorei(GL_UNPACK_ROW_LENGTH, 0)");
 
-    LEAVE_GL();
-
     if (wined3d_settings.strict_draw_ordering
             || (surface->container.type == WINED3D_CONTAINER_SWAPCHAIN
             && surface->container.u.swapchain->front_buffer == surface))
@@ -4923,7 +4863,6 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc
     gl_info = context->gl_info;
     context_apply_blit_state(context, device);
     surface_internal_preload(dst_surface, SRGB_RGB);
-    ENTER_GL();
 
     /* Bind the target texture */
     context_bind_texture(context, dst_target, dst_surface->texture_name);
@@ -4999,7 +4938,6 @@ static void fb_copy_to_texture_direct(struct wined3d_surface *dst_surface, struc
     }
     checkGLcall("glCopyTexSubImage2D");
 
-    LEAVE_GL();
     context_release(context);
 
     /* The texture is now most up to date - If the surface is a render target and has a drawable, this
@@ -5041,7 +4979,6 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
         /* Get it a description */
         surface_internal_preload(src_surface, SRGB_RGB);
     }
-    ENTER_GL();
 
     /* Try to use an aux buffer for drawing the rectangle. This way it doesn't need restoring.
      * This way we don't have to wait for the 2nd readback to finish to leave this function.
@@ -5274,8 +5211,6 @@ static void fb_copy_to_texture_hwstretch(struct wined3d_surface *dst_surface, st
         checkGLcall("glDeleteTextures(1, &backup)");
     }
 
-    LEAVE_GL();
-
     if (wined3d_settings.strict_draw_ordering)
         gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */
 
@@ -5343,8 +5278,6 @@ static void surface_blt_to_drawable(const struct wined3d_device *device,
 
     device->blitter->set_shader(device->blit_priv, context, src_surface);
 
-    ENTER_GL();
-
     if (color_key)
     {
         gl_info->gl_ops.gl.p_glEnable(GL_ALPHA_TEST);
@@ -5375,8 +5308,6 @@ static void surface_blt_to_drawable(const struct wined3d_device *device,
         checkGLcall("glDisable(GL_ALPHA_TEST)");
     }
 
-    LEAVE_GL();
-
     /* Leave the opengl state valid for blitting */
     device->blitter->unset_shader(context->gl_info);
 
@@ -5597,7 +5528,7 @@ static HRESULT IWineD3DSurfaceImpl_BltOverride(struct wined3d_surface *dst_surfa
     return WINED3DERR_INVALIDCALL;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void surface_depth_blt(const struct wined3d_surface *surface, struct wined3d_context *context,
         GLuint texture, GLint x, GLint y, GLsizei w, GLsizei h, GLenum target)
 {
@@ -5766,8 +5697,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co
 
         TRACE("Copying onscreen depth buffer to depth texture.\n");
 
-        ENTER_GL();
-
         if (!device->depth_blt_texture)
             gl_info->gl_ops.gl.p_glGenTextures(1, &device->depth_blt_texture);
 
@@ -5813,8 +5742,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co
 
         context_invalidate_state(context, STATE_FRAMEBUFFER);
 
-        LEAVE_GL();
-
         if (wined3d_settings.strict_draw_ordering)
             gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */
     }
@@ -5822,8 +5749,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co
     {
         TRACE("Copying depth texture to onscreen depth buffer.\n");
 
-        ENTER_GL();
-
         context_apply_fbo_state_blit(context, GL_FRAMEBUFFER,
                 context->swapchain->front_buffer, NULL, SFLAG_INDRAWABLE);
         surface_depth_blt(surface, context, surface->texture_name,
@@ -5832,8 +5757,6 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co
 
         context_invalidate_state(context, STATE_FRAMEBUFFER);
 
-        LEAVE_GL();
-
         if (wined3d_settings.strict_draw_ordering)
             gl_info->gl_ops.gl.p_glFlush(); /* Flush to ensure ordering across contexts. */
     }
@@ -6366,9 +6289,7 @@ static void ffp_blit_p8_upload_palette(const struct wined3d_surface *surface, co
     d3dfmt_p8_init_palette(surface, table, colorkey_active);
 
     TRACE("Using GL_EXT_PALETTED_TEXTURE for 8-bit paletted texture support\n");
-    ENTER_GL();
     GL_EXTCALL(glColorTableEXT(target, GL_RGBA, 256, GL_RGBA, GL_UNSIGNED_BYTE, table));
-    LEAVE_GL();
 }
 
 /* Context activation is done by the caller. */
@@ -6390,17 +6311,15 @@ static HRESULT ffp_blit_set(void *blit_priv, struct wined3d_context *context, co
             && gl_info->supported[EXT_PALETTED_TEXTURE])
         ffp_blit_p8_upload_palette(surface, gl_info);
 
-    ENTER_GL();
     gl_info->gl_ops.gl.p_glEnable(target);
     checkGLcall("glEnable(target)");
-    LEAVE_GL();
+
     return WINED3D_OK;
 }
 
 /* Context activation is done by the caller. */
 static void ffp_blit_unset(const struct wined3d_gl_info *gl_info)
 {
-    ENTER_GL();
     gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_2D);
     checkGLcall("glDisable(GL_TEXTURE_2D)");
     if (gl_info->supported[ARB_TEXTURE_CUBE_MAP])
@@ -6413,7 +6332,6 @@ static void ffp_blit_unset(const struct wined3d_gl_info *gl_info)
         gl_info->gl_ops.gl.p_glDisable(GL_TEXTURE_RECTANGLE_ARB);
         checkGLcall("glDisable(GL_TEXTURE_RECTANGLE_ARB)");
     }
-    LEAVE_GL();
 }
 
 static BOOL ffp_blit_supported(const struct wined3d_gl_info *gl_info, enum wined3d_blit_op blit_op,
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index bd36ce1..db30723 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -316,7 +316,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
             surface_load_location(backbuffer, location, NULL);
         }
 
-        ENTER_GL();
         context_apply_fbo_state_blit(context, GL_READ_FRAMEBUFFER, backbuffer, NULL, location);
         gl_info->gl_ops.gl.p_glReadBuffer(GL_COLOR_ATTACHMENT0);
         context_check_fbo_status(context, GL_READ_FRAMEBUFFER);
@@ -339,7 +338,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
                 dst_rect->left, win_h - dst_rect->top, dst_rect->right, win_h - dst_rect->bottom,
                 GL_COLOR_BUFFER_BIT, gl_filter);
         checkGLcall("Swapchain present blit(EXT_framebuffer_blit)\n");
-        LEAVE_GL();
     }
     else
     {
@@ -364,7 +362,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
         if (is_complex_fixup(backbuffer->resource.format->color_fixup))
             gl_filter = GL_NEAREST;
 
-        ENTER_GL();
         context_apply_fbo_state_blit(context2, GL_FRAMEBUFFER, swapchain->front_buffer, NULL, SFLAG_INDRAWABLE);
         context_bind_texture(context2, backbuffer->texture_target, backbuffer->texture_name);
 
@@ -414,7 +411,6 @@ static void swapchain_blit(const struct wined3d_swapchain *swapchain,
 
         device->blitter->unset_shader(context->gl_info);
         checkGLcall("Swapchain present blit(manual)\n");
-        LEAVE_GL();
 
         context_release(context2);
     }
diff --git a/dlls/wined3d/texture.c b/dlls/wined3d/texture.c
index d9152b1..498bbb6 100644
--- a/dlls/wined3d/texture.c
+++ b/dlls/wined3d/texture.c
@@ -77,9 +77,7 @@ static HRESULT wined3d_texture_init(struct wined3d_texture *texture, const struc
 /* A GL context is provided by the caller */
 static void gltexture_delete(const struct wined3d_gl_info *gl_info, struct gl_texture *tex)
 {
-    ENTER_GL();
     gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex->name);
-    LEAVE_GL();
     tex->name = 0;
 }
 
@@ -153,7 +151,6 @@ static HRESULT wined3d_texture_bind(struct wined3d_texture *texture,
     gl_tex = wined3d_texture_get_gl_texture(texture, context->gl_info, srgb);
     target = texture->target;
 
-    ENTER_GL();
     /* Generate a texture name if we don't already have one. */
     if (!gl_tex->name)
     {
@@ -233,11 +230,10 @@ static HRESULT wined3d_texture_bind(struct wined3d_texture *texture,
         hr = WINED3DERR_INVALIDCALL;
     }
 
-    LEAVE_GL();
     return hr;
 }
 
-/* GL locking is done by the caller */
+/* Context activation is done by the caller. */
 static void apply_wrap(const struct wined3d_gl_info *gl_info, GLenum target,
         enum wined3d_texture_address d3d_wrap, GLenum param, BOOL cond_np2)
 {
@@ -261,7 +257,7 @@ static void apply_wrap(const struct wined3d_gl_info *gl_info, GLenum target,
     checkGLcall("glTexParameteri(target, param, gl_wrap)");
 }
 
-/* GL locking is done by the caller (state handler) */
+/* Context activation is done by the caller (state handler). */
 void wined3d_texture_apply_state_changes(struct wined3d_texture *texture,
         const DWORD sampler_states[WINED3D_HIGHEST_SAMPLER_STATE + 1],
         const struct wined3d_gl_info *gl_info)
@@ -628,7 +624,6 @@ static HRESULT texture2d_bind(struct wined3d_texture *texture,
         {
             GLenum target = texture->target;
 
-            ENTER_GL();
             gl_info->gl_ops.gl.p_glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
             checkGLcall("glTexParameteri(target, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE)");
             gl_info->gl_ops.gl.p_glTexParameteri(target, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
@@ -637,7 +632,6 @@ static HRESULT texture2d_bind(struct wined3d_texture *texture,
             checkGLcall("glTexParameteri(target, GL_TEXTURE_MIN_FILTER, GL_NEAREST)");
             gl_info->gl_ops.gl.p_glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
             checkGLcall("glTexParameteri(target, GL_TEXTURE_MAG_FILTER, GL_NEAREST)");
-            LEAVE_GL();
             gl_tex->states[WINED3DTEXSTA_ADDRESSU] = WINED3D_TADDRESS_CLAMP;
             gl_tex->states[WINED3DTEXSTA_ADDRESSV] = WINED3D_TADDRESS_CLAMP;
             gl_tex->states[WINED3DTEXSTA_MAGFILTER] = WINED3D_TEXF_POINT;
diff --git a/dlls/wined3d/utils.c b/dlls/wined3d/utils.c
index 9e008f8..95a826e 100644
--- a/dlls/wined3d/utils.c
+++ b/dlls/wined3d/utils.c
@@ -991,8 +991,6 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined
     GLenum status;
     GLuint tex;
 
-    ENTER_GL();
-
     while (gl_info->gl_ops.gl.p_glGetError());
     gl_info->gl_ops.gl.p_glDisable(GL_BLEND);
 
@@ -1194,8 +1192,6 @@ static void check_fbo_compat(const struct wined3d_gl_info *gl_info, struct wined
         format->flags |= WINED3DFMT_FLAG_FBO_ATTACHABLE_SRGB;
 
     gl_info->gl_ops.gl.p_glDeleteTextures(1, &tex);
-
-    LEAVE_GL();
 }
 
 /* Context activation is done by the caller. */
@@ -1206,14 +1202,10 @@ static void init_format_fbo_compat_info(struct wined3d_gl_info *gl_info)
 
     if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
     {
-        ENTER_GL();
-
         gl_info->fbo_ops.glGenFramebuffers(1, &fbo);
         gl_info->fbo_ops.glBindFramebuffer(GL_FRAMEBUFFER, fbo);
         gl_info->gl_ops.gl.p_glDrawBuffer(GL_COLOR_ATTACHMENT0);
         gl_info->gl_ops.gl.p_glReadBuffer(GL_COLOR_ATTACHMENT0);
-
-        LEAVE_GL();
     }
 
     for (i = 0; i < sizeof(formats) / sizeof(*formats); ++i)
@@ -1248,13 +1240,7 @@ static void init_format_fbo_compat_info(struct wined3d_gl_info *gl_info)
     }
 
     if (wined3d_settings.offscreen_rendering_mode == ORM_FBO)
-    {
-        ENTER_GL();
-
         gl_info->fbo_ops.glDeleteFramebuffers(1, &fbo);
-
-        LEAVE_GL();
-    }
 }
 
 static BOOL init_format_texture_info(struct wined3d_gl_info *gl_info)
@@ -1345,7 +1331,6 @@ static BOOL check_filter(const struct wined3d_gl_info *gl_info, GLenum internal)
      * than Wine. The Linux binary <= r500 driver is not maintained any more anyway
      */
 
-    ENTER_GL();
     while (gl_info->gl_ops.gl.p_glGetError());
 
     gl_info->gl_ops.gl.p_glGenTextures(1, &buffer);
@@ -1423,7 +1408,7 @@ static BOOL check_filter(const struct wined3d_gl_info *gl_info, GLenum internal)
         FIXME("Error during filtering test for format %x, returning no filtering\n", internal);
         ret = FALSE;
     }
-    LEAVE_GL();
+
     return ret;
 }
 
@@ -2524,8 +2509,8 @@ BOOL is_invalid_op(const struct wined3d_state *state, int stage,
     return FALSE;
 }
 
-/* Setup this textures matrix according to the texture flags*/
-/* GL locking is done by the caller (state handler) */
+/* Setup this textures matrix according to the texture flags. */
+/* Context activation is done by the caller (state handler). */
 void set_texture_matrix(const struct wined3d_gl_info *gl_info, const float *smat, DWORD flags,
         BOOL calculatedCoords, BOOL transformed, enum wined3d_format_id vtx_fmt, BOOL ffp_proj_control)
 {
@@ -3174,11 +3159,10 @@ void add_ffp_frag_shader(struct wine_rb_tree *shaders, struct ffp_frag_desc *des
     }
 }
 
-/* Activates the texture dimension according to the bound D3D texture.
- * Does not care for the colorop or correct gl texture unit(when using nvrc)
- * Requires the caller to activate the correct unit before
- */
-/* GL locking is done by the caller (state handler) */
+/* Activates the texture dimension according to the bound D3D texture. Does
+ * not care for the colorop or correct gl texture unit (when using nvrc).
+ * Requires the caller to activate the correct unit. */
+/* Context activation is done by the caller (state handler). */
 void texture_activate_dimensions(const struct wined3d_texture *texture, const struct wined3d_gl_info *gl_info)
 {
     if (texture)
@@ -3265,7 +3249,7 @@ void texture_activate_dimensions(const struct wined3d_texture *texture, const st
     }
 }
 
-/* GL locking is done by the caller (state handler) */
+/* Context activation is done by the caller (state handler). */
 void sampler_texdim(struct wined3d_context *context, const struct wined3d_state *state, DWORD state_id)
 {
     DWORD sampler = state_id - STATE_SAMPLER(0);
diff --git a/dlls/wined3d/volume.c b/dlls/wined3d/volume.c
index c11a602..ed68671 100644
--- a/dlls/wined3d/volume.c
+++ b/dlls/wined3d/volume.c
@@ -88,12 +88,10 @@ void volume_load(const struct wined3d_volume *volume, struct wined3d_context *co
 
     volume_bind_and_dirtify(volume, context);
 
-    ENTER_GL();
     GL_EXTCALL(glTexImage3DEXT(GL_TEXTURE_3D, level, format->glInternal,
             volume->resource.width, volume->resource.height, volume->resource.depth,
             0, format->glFormat, format->glType, volume->resource.allocatedMemory));
     checkGLcall("glTexImage3D");
-    LEAVE_GL();
 
     /* When adding code releasing volume->resource.allocatedMemory to save
      * data keep in mind that GL_UNPACK_CLIENT_STORAGE_APPLE is enabled by
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 9830e8a..0bb3f27 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -822,15 +822,6 @@ extern const struct wined3d_shader_backend_ops glsl_shader_backend DECLSPEC_HIDD
 extern const struct wined3d_shader_backend_ops arb_program_shader_backend DECLSPEC_HIDDEN;
 extern const struct wined3d_shader_backend_ops none_shader_backend DECLSPEC_HIDDEN;
 
-#define ENTER_GL() do {} while(0)
-#define LEAVE_GL() do {} while(0)
-
-/*****************************************************************************
- * Defines
- */
-
-/* GL related defines */
-/* ------------------ */
 #define GL_EXTCALL(f) (gl_info->gl_ops.ext.p_##f)
 
 #define D3DCOLOR_B_R(dw) (((dw) >> 16) & 0xff)
-- 
1.7.8.6




More information about the wine-patches mailing list