Index: /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/basetexture.c
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/basetexture.c	(revision 37872)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/basetexture.c	(revision 37873)
@@ -112,19 +112,29 @@
     IWineD3DTextureImpl *This = (IWineD3DTextureImpl *)iface;
     IWineD3DDeviceImpl *device = This->resource.device;
-    struct wined3d_context *context = NULL;
-
-    if (This->baseTexture.texture_rgb.name || This->baseTexture.texture_srgb.name)
-    {
-        context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
-    }
-
-    if(This->baseTexture.texture_rgb.name) {
-        gltexture_delete(&This->baseTexture.texture_rgb);
-    }
-    if(This->baseTexture.texture_srgb.name) {
-        gltexture_delete(&This->baseTexture.texture_srgb);
-    }
-
-    if (context) context_release(context);
+
+#ifdef VBOX_WITH_WDDM
+    if (VBOXSHRC_IS_SHARED_OPENED(This))
+    {
+        This->baseTexture.texture_rgb.name = 0;
+        This->baseTexture.texture_srgb.name = 0;
+    }
+    else
+#endif
+    {
+        struct wined3d_context *context = NULL;
+        if (This->baseTexture.texture_rgb.name || This->baseTexture.texture_srgb.name)
+        {
+            context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+        }
+
+        if(This->baseTexture.texture_rgb.name) {
+            gltexture_delete(&This->baseTexture.texture_rgb);
+        }
+        if(This->baseTexture.texture_srgb.name) {
+            gltexture_delete(&This->baseTexture.texture_srgb);
+        }
+
+        if (context) context_release(context);
+    }
 
     This->baseTexture.texture_rgb.dirty = TRUE;
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/device.c
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/device.c	(revision 37872)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/device.c	(revision 37873)
@@ -6268,9 +6268,18 @@
     if (surface->texture_name)
     {
-        struct wined3d_context *context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
-        ENTER_GL();
-        glDeleteTextures(1, &surface->texture_name);
-        LEAVE_GL();
-        context_release(context);
+#ifdef VBOX_WITH_WDDM
+# ifdef DEBUG_misha
+        /* shared case needs testing! */
+        Assert(!VBOXSHRC_IS_SHARED(surface));
+# endif
+        if (!VBOXSHRC_IS_SHARED_OPENED(surface))
+#endif
+        {
+            struct wined3d_context *context = context_acquire(device, NULL, CTXUSAGE_RESOURCELOAD);
+            ENTER_GL();
+            glDeleteTextures(1, &surface->texture_name);
+            LEAVE_GL();
+            context_release(context);
+        }
         surface->texture_name = 0;
         surface->Flags &= ~SFLAG_CLIENT;
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/surface.c
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/surface.c	(revision 37872)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/surface.c	(revision 37873)
@@ -98,5 +98,9 @@
     ENTER_GL();
 
-    if (This->texture_name)
+    if (This->texture_name
+#ifdef VBOX_WITH_WDDM
+            && !VBOXSHRC_IS_SHARED_OPENED(This)
+#endif
+            )
     {
         /* Release the OpenGL texture. */
@@ -1407,7 +1411,13 @@
     if(!texture) {
         ENTER_GL();
-        glDeleteTextures(1, &This->texture_name);
+#ifdef VBOX_WITH_WDDM
+        if (!VBOXSHRC_IS_SHARED_OPENED(This))
+#endif
+            glDeleteTextures(1, &This->texture_name);
         This->texture_name = 0;
-        glDeleteTextures(1, &This->texture_name_srgb);
+#ifdef VBOX_WITH_WDDM
+        if (!VBOXSHRC_IS_SHARED_OPENED(This))
+#endif
+            glDeleteTextures(1, &This->texture_name_srgb);
         This->texture_name_srgb = 0;
         LEAVE_GL();
