Henri Verbeet : wined3d: Avoid destroying the currently active context for non-implicit swapchains.

Alexandre Julliard julliard at winehq.org
Wed Jul 8 14:35:54 CDT 2009


Module: wine
Branch: master
Commit: 6d8e1e52c83edbb3598db90b2e3a4121237fefc0
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=6d8e1e52c83edbb3598db90b2e3a4121237fefc0

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Wed Jul  8 09:49:26 2009 +0200

wined3d: Avoid destroying the currently active context for non-implicit swapchains.

---

 dlls/wined3d/swapchain.c |   19 ++++++++++++++++++-
 1 files changed, 18 insertions(+), 1 deletions(-)

diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 3591e83..272a425 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -64,7 +64,24 @@ static void WINAPI IWineD3DSwapChainImpl_Destroy(IWineD3DSwapChain *iface, D3DCB
         HeapFree(GetProcessHeap(), 0, This->backBuffer);
     }
 
-    for(i = 0; i < This->num_contexts; i++) {
+    for (i = 0; i < This->num_contexts; ++i)
+    {
+        if (This->context[i] == This->wineD3DDevice->activeContext)
+        {
+            IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)This->wineD3DDevice->swapchains[0];
+
+            /* Avoid destroying the currently active context for non-implicit swapchains. */
+            if (This != swapchain)
+            {
+                TRACE("Would destroy currently active context %p on a non-implicit swapchain.\n", This->context[i]);
+
+                if (swapchain->backBuffer)
+                    ActivateContext(This->wineD3DDevice, swapchain->backBuffer[0], CTXUSAGE_RESOURCELOAD);
+                else
+                    ActivateContext(This->wineD3DDevice, swapchain->frontBuffer, CTXUSAGE_RESOURCELOAD);
+            }
+        }
+
         DestroyContext(This->wineD3DDevice, This->context[i]);
     }
     /* Restore the screen resolution if we rendered in fullscreen




More information about the wine-cvs mailing list