Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp	(revision 37639)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp	(revision 37640)
@@ -2591,4 +2591,24 @@
 }
 
+static HRESULT vboxWddmSwapchainBbUpdate(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_SWAPCHAIN pSwapchain, PVBOXWDDMDISP_ALLOCATION pBbAlloc)
+{
+    for (UINT i = 0; i < pSwapchain->cRTs; ++i)
+    {
+        PVBOXWDDMDISP_ALLOCATION pCurBb = vboxWddmSwapchainGetBb(pSwapchain)->pAlloc;
+        if (pCurBb == pBbAlloc)
+            return S_OK;
+
+        HRESULT hr = vboxWddmSwapchainPresentPerform(pDevice, pSwapchain);
+        if (FAILED(hr))
+        {
+            WARN(("vboxWddmSwapchainPresentPerform failed, hr (0x%x)", hr));
+            return hr;
+        }
+    }
+
+    AssertMsgFailed(("the given allocation not par of the swapchain\n"));
+    return E_FAIL;
+}
+
 static HRESULT vboxWddmSwapchainPresent(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_ALLOCATION pBbAlloc)
 {
@@ -2963,11 +2983,12 @@
     IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice);
     PVBOXWDDMDISP_SWAPCHAIN pSwapchain = vboxWddmSwapchainForAlloc(pAlloc);
+    HRESULT hr = S_OK;
     if (pSwapchain)
     {
-        /* backbuffer */
-        Assert(vboxWddmSwapchainGetBb(pSwapchain)->pAlloc == pAlloc);
-    }
-
-    HRESULT hr = S_OK;
+        hr = vboxWddmSwapchainBbUpdate(pDevice, pSwapchain, pAlloc);
+        if (FAILED(hr))
+            return hr;
+    }
+
     IDirect3DSurface9 *pD3D9Surf;
     if (!bOnSwapchainSynch && pSwapchain)
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp	(revision 37639)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp	(revision 37640)
@@ -448,4 +448,5 @@
         case 0x000006d9: /* <- RPC exception, ignore */
         case 0x406d1388: /* <- VS/WinDbg thread naming exception, ignore */
+        case 0xe0434f4d: /* <- CLR exception */
             break;
         default:
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 37639)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 37640)
@@ -82,5 +82,4 @@
     if (pTbl->cSize == pTbl->cData)
     {
-        Assert(0);
         NTSTATUS Status = vboxWddmHTableRealloc(pTbl, pTbl->cSize + RT_MAX(10, pTbl->cSize/4));
         Assert(Status == STATUS_SUCCESS);
