diff --git a/dlls/ddraw/d3ddevice/mesa.c b/dlls/ddraw/d3ddevice/mesa.c
index 0d7e54dcf61ab242dcadbd4726603d223e641e50..c27ed046c071f157882af678f8957e68588d9fb1 100644
--- a/dlls/ddraw/d3ddevice/mesa.c
+++ b/dlls/ddraw/d3ddevice/mesa.c
@@ -107,6 +107,7 @@ static DWORD d3ddevice_set_state_for_flush(IDirect3DDeviceImpl *d3d_dev, LPCRECT
 	glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
     } else {
         glBindTexture(GL_TEXTURE_2D, gl_d3d_dev->unlock_tex);
+	*initial = FALSE;
     }
     if (d3d_dev->tex_mat_is_identity[0] == FALSE) {
 	glMatrixMode(GL_TEXTURE);
@@ -2821,7 +2822,7 @@ d3ddevice_blt(IDirectDrawSurfaceImpl *This, LPRECT rdst,
 		GLenum prev_draw;
 		WINE_GL_BUFFER_TYPE src_buffer_type;
 		IDirect3DDeviceGLImpl *gl_d3d_dev = (IDirect3DDeviceGLImpl *) This->d3ddevice;
-		BOOLEAN initial = FALSE;
+		BOOLEAN initial;
 		DWORD opt_bitmap;
 		int x, y;
 	
@@ -2941,7 +2942,7 @@ d3ddevice_blt(IDirectDrawSurfaceImpl *This, LPRECT rdst,
 		int width, height;
 		GLenum prev_draw;
 		IDirect3DDeviceGLImpl *gl_d3d_dev = (IDirect3DDeviceGLImpl *) This->d3ddevice;
-		BOOLEAN initial = FALSE;
+		BOOLEAN initial;
 		DWORD opt_bitmap;
 		int x, y;
 		double x_stretch, y_stretch;
@@ -3514,7 +3515,7 @@ static void d3ddevice_flush_to_frame_buffer(IDirect3DDeviceImpl *d3d_dev, LPCREC
     RECT loc_rect;
     IDirect3DDeviceGLImpl* gl_d3d_dev = (IDirect3DDeviceGLImpl*) d3d_dev;
     int x, y;
-    BOOLEAN initial = FALSE;
+    BOOLEAN initial;
     DWORD opt_bitmap;
     
     /* Note : no need here to lock the 'device critical section' as we are already protected by
diff --git a/dlls/ddraw/d3dtexture.c b/dlls/ddraw/d3dtexture.c
index 6e78c7b854616d570fc9f4530fce75ba7b7e9073..fba177ee7419a2f762609c122a07abc161b3b997 100644
--- a/dlls/ddraw/d3dtexture.c
+++ b/dlls/ddraw/d3dtexture.c
@@ -270,6 +270,7 @@ gltex_upload_texture(IDirectDrawSurfaceImpl *surf_ptr, IDirect3DDeviceImpl *d3dd
 	        upload_surface_to_tex_memory(NULL, 0, 0, &(gl_surf_ptr->surface_ptr));
 		upload_surface_to_tex_memory_release();
 		gl_surf_ptr->dirty_flag = SURFACE_MEMORY;
+		gl_surf_ptr->initial_upload_done = TRUE;
 	    } else {
 		ERR("Problem for upload of texture %d (level = %d / initial done = %d).\n",
 		    gl_surf_ptr->tex_name, surf_ptr->mipmap_level, gl_surf_ptr->initial_upload_done);
@@ -393,6 +394,7 @@ gltex_bltfast(IDirectDrawSurfaceImpl *surf_ptr, DWORD dstx,
 		    upload_surface_to_tex_memory(NULL, 0, 0, &(gl_surf_ptr->surface_ptr));
 		    upload_surface_to_tex_memory_release();
 		    gl_surf_ptr->dirty_flag = SURFACE_MEMORY;
+		    gl_surf_ptr->initial_upload_done = TRUE;
 		} else {
 		    glBindTexture(GL_TEXTURE_2D, cur_tex);
 		    LEAVE_GL();
@@ -408,6 +410,7 @@ gltex_bltfast(IDirectDrawSurfaceImpl *surf_ptr, DWORD dstx,
 		    upload_surface_to_tex_memory(NULL, 0, 0, &(gl_surf_ptr->surface_ptr));
 		    upload_surface_to_tex_memory_release();
 		    gl_surf_ptr->dirty_flag = SURFACE_MEMORY;
+		    gl_surf_ptr->initial_upload_done = TRUE;
 		} else {
 		    glBindTexture(GL_TEXTURE_2D, cur_tex);
 		    LEAVE_GL();