Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp	(revision 37839)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp	(revision 37840)
@@ -902,5 +902,5 @@
 }VBOXWDDMDISP_NSCADD, *PVBOXWDDMDISP_NSCADD;
 
-static HRESULT vboxWddmNSCAddAlloc(PVBOXWDDMDISP_NSCADD pData, PVBOXWDDMDISP_ALLOCATION pAlloc, BOOL bWrite)
+static HRESULT vboxWddmNSCAddAlloc(PVBOXWDDMDISP_NSCADD pData, PVBOXWDDMDISP_ALLOCATION pAlloc)
 {
     HRESULT hr = S_OK;
@@ -909,5 +909,5 @@
         memset(pData->pAllocationList, 0, sizeof (D3DDDI_ALLOCATIONLIST));
         pData->pAllocationList[0].hAllocation = pAlloc->hAllocation;
-        if (bWrite)
+        if (pAlloc->fDirtyWrite)
             pData->pAllocationList[0].WriteOperation = 1;
 
@@ -930,4 +930,18 @@
 
     return hr;
+}
+
+static BOOLEAN vboxWddmDalCheckRemove(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_ALLOCATION pAlloc)
+{
+    BOOLEAN fRemoved = FALSE;
+
+    if (pAlloc->DirtyAllocListEntry.pNext)
+    {
+        RTListNodeRemove(&pAlloc->DirtyAllocListEntry);
+        pAlloc->fDirtyWrite = FALSE;
+        fRemoved = TRUE;
+    }
+
+    return fRemoved;
 }
 
@@ -959,24 +973,17 @@
         }
 
-        EnterCriticalSection(&pDevice->DirtyAllocListLock);
-
         PVBOXWDDMDISP_ALLOCATION pAlloc = RTListGetFirst(&pDevice->DirtyAllocList, VBOXWDDMDISP_ALLOCATION, DirtyAllocListEntry);
         if (pAlloc)
         {
-            HRESULT tmpHr = vboxWddmNSCAddAlloc(&NscAdd, pAlloc, TRUE);
+            HRESULT tmpHr = vboxWddmNSCAddAlloc(&NscAdd, pAlloc);
             Assert(tmpHr == S_OK || tmpHr == S_FALSE);
             if (tmpHr == S_OK)
             {
-                RTListNodeRemove(&pAlloc->DirtyAllocListEntry);
-                LeaveCriticalSection(&pDevice->DirtyAllocListLock);
+                vboxWddmDalCheckRemove(pDevice, pAlloc);
                 continue;
             }
-
-            LeaveCriticalSection(&pDevice->DirtyAllocListLock);
-
         }
         else
         {
-            LeaveCriticalSection(&pDevice->DirtyAllocListLock);
             if (!NscAdd.cAllocations)
                 break;
@@ -1016,7 +1023,7 @@
 }
 
-static BOOLEAN vboxWddmDalCheckAdd(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_ALLOCATION pAlloc)
-{
-    if (!pAlloc->pRc->RcDesc.fFlags.SharedResource)
+static BOOLEAN vboxWddmDalCheckAdd(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_ALLOCATION pAlloc, BOOLEAN fWrite)
+{
+    if (!pAlloc->hSharedHandle) /* only shared resources matter */
     {
         Assert(!pAlloc->DirtyAllocListEntry.pNext);
@@ -1024,10 +1031,10 @@
     }
 
-    EnterCriticalSection(&pDevice->DirtyAllocListLock);
     if (!pAlloc->DirtyAllocListEntry.pNext)
     {
+        Assert(!pAlloc->fDirtyWrite);
         RTListAppend(&pDevice->DirtyAllocList, &pAlloc->DirtyAllocListEntry);
     }
-    LeaveCriticalSection(&pDevice->DirtyAllocListLock);
+    pAlloc->fDirtyWrite |= fWrite;
 
     return TRUE;
@@ -1040,22 +1047,7 @@
         if (pDevice->apRTs[i])
         {
-            vboxWddmDalCheckAdd(pDevice, pDevice->apRTs[i]);
-        }
-    }
-}
-
-static BOOLEAN vboxWddmDalCheckRemove(PVBOXWDDMDISP_DEVICE pDevice, PVBOXWDDMDISP_ALLOCATION pAlloc)
-{
-    BOOLEAN fRemoved = FALSE;
-
-    EnterCriticalSection(&pDevice->DirtyAllocListLock);
-    if (pAlloc->DirtyAllocListEntry.pNext)
-    {
-        RTListNodeRemove(&pAlloc->DirtyAllocListEntry);
-        fRemoved = TRUE;
-    }
-    LeaveCriticalSection(&pDevice->DirtyAllocListLock);
-
-    return fRemoved;
+            vboxWddmDalCheckAdd(pDevice, pDevice->apRTs[i], TRUE);
+        }
+    }
 }
 
@@ -2364,5 +2356,5 @@
                                                 TRUE, /*bLockable*/
                                                 &pD3D9NewSurf,
-                                                NULL /* HANDLE* pSharedHandle */
+                                                pRT->pAlloc->hSharedHandle ? &pRT->pAlloc->hSharedHandle :  NULL
                                                 );
                         Assert(tmpHr == S_OK);
@@ -3479,4 +3471,6 @@
     }
 
+    vboxWddmDalCheckAddRts(pDevice);
+
     VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice9If);
 
@@ -3528,4 +3522,6 @@
     Assert(hr == S_OK);
 
+    vboxWddmDalCheckAddRts(pDevice);
+
     VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice9If);
 
@@ -3542,4 +3538,5 @@
     VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     Assert(0);
+    vboxWddmDalCheckAddRts(pDevice);
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     return E_FAIL;
@@ -3554,4 +3551,5 @@
     VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     Assert(0);
+    vboxWddmDalCheckAddRts(pDevice);
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     return E_FAIL;
@@ -3644,4 +3642,6 @@
 #endif
 
+    vboxWddmDalCheckAddRts(pDevice);
+
     VBOXVDBG_DUMP_DRAWPRIM_LEAVE(pDevice9If);
 
@@ -3659,4 +3659,5 @@
     VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     Assert(0);
+    vboxWddmDalCheckAddRts(pDevice);
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     return E_FAIL;
@@ -3671,4 +3672,5 @@
     VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     Assert(0);
+//    @todo: vboxWddmDalCheckAdd(pDevice);
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     return E_FAIL;
@@ -3683,4 +3685,5 @@
     VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     Assert(0);
+//    @todo: vboxWddmDalCheckAdd(pDevice);
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     return E_FAIL;
@@ -3752,4 +3755,11 @@
     {
         PVBOXWDDMDISP_ALLOCATION pDAlloc = &pDstRc->aAllocations[i];
+        vboxWddmDalCheckAdd(pDevice, pDAlloc, TRUE);
+    }
+
+    for (UINT i = 0; i < pSrcRc->cAllocations; ++i)
+    {
+        PVBOXWDDMDISP_ALLOCATION pDAlloc = &pSrcRc->aAllocations[i];
+        vboxWddmDalCheckAdd(pDevice, pDAlloc, FALSE);
     }
 
@@ -4884,7 +4894,12 @@
                 }
             }
-            else if (pResource->Flags.Texture || pResource->Flags.Value == 0)
+            else if (VBOXWDDMDISP_IS_TEXTURE(pResource->Flags))
             {
                 IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice);
+
+                if (pResource->Flags.RenderTarget && !pResource->Flags.Texture)
+                {
+                    bIssueCreateResource = true;
+                }
 
                 if (!pResource->Flags.CubeMap)
@@ -5040,4 +5055,5 @@
                     {
                         PVBOXWDDMDISP_ALLOCATION pAllocation = &pRc->aAllocations[i];
+                        HANDLE hSharedHandle = NULL;
 
                         IDirect3DSurface9* pD3D9Surf;
@@ -5049,5 +5065,5 @@
                                 !pResource->Flags.NotLockable /* BOOL Lockable */,
                                 &pD3D9Surf,
-                                NULL /* HANDLE* pSharedHandle */
+                                pResource->Flags.SharedResource ? &hSharedHandle : NULL
                                 );
                         Assert(hr == S_OK);
@@ -5057,4 +5073,6 @@
                             pAllocation->enmD3DIfType = VBOXDISP_D3DIFTYPE_SURFACE;
                             pAllocation->pD3DIf = pD3D9Surf;
+                            Assert(!!(pResource->Flags.SharedResource) == !!(hSharedHandle));
+                            pAllocation->hSharedHandle = hSharedHandle;
                             hr = vboxWddmSurfSynchMem(pRc, pAllocation);
                             Assert(hr == S_OK);
@@ -5338,5 +5356,4 @@
     Assert(pRc->RcDesc.fFlags.RenderTarget);
     Assert(pRc->RcDesc.fFlags.Primary);
-    Assert(pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE);
     Assert(pAlloc->hAllocation);
 //    PVBOXWDDMDISP_SCREEN pScreen = &pDevice->aScreens[pRc->RcDesc.VidPnSourceId];
@@ -5350,4 +5367,5 @@
 
 #if 0
+    Assert(pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE);
     IDirect3DSurface9 *pSoD3DIfSurf = (IDirect3DSurface9*)pAlloc->pSecondaryOpenedD3DIf;
     hr = pScreen->pDevice9If->SetRenderTarget(0, pSoD3DIfSurf);
@@ -5370,4 +5388,5 @@
             {
                 D3DLOCKED_RECT LockRect;
+                Assert(pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE);
                 IDirect3DSurface9 *pD3DIfSurf = (IDirect3DSurface9*)pAlloc->pD3DIf;
                 hr = pD3DIfSurf->LockRect(&LockRect, NULL /* RECT*/, D3DLOCK_DISCARD);
@@ -5444,7 +5463,7 @@
             Assert(pPrimaryScreen->pDevice9If);
             IDirect3DSurface9 *pSecondaryRt;
+            Assert(pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE);
             IDirect3DSurface9 *pDataRt = (IDirect3DSurface9*)pAlloc->pSecondaryOpenedD3DIf;
             Assert(pDataRt);
-            Assert(pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE);
             hr = pDevice->pAdapter->D3D.pfnVBoxWineExD3DDev9Flush((IDirect3DDevice9Ex*)pPrimaryScreen->pDevice9If);
             Assert(hr == S_OK);
@@ -5547,4 +5566,6 @@
 
         vboxWddmDalNotifyChange(pDevice);
+
+        VBOXVDBG_DUMP_FLUSH(pDevice->pDevice9If);
     }
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr));
@@ -5931,5 +5952,5 @@
                 Assert(pSrcSurfIf);
 
-                VBOXVDBG_DUMP_BLT_ENTER(pSrcSurfIf, &pData->SrcRect, pDstSurfIf, &pData->DstRect);
+                VBOXVDBG_DUMP_BLT_ENTER(pSrcRc, pSrcSurfIf, &pData->SrcRect, pDstRc, pDstSurfIf, &pData->DstRect);
 
                 /* we support only Point & Linear, we ignore [Begin|Continue|End]PresentToDwm */
@@ -5942,5 +5963,5 @@
                 Assert(hr == S_OK);
 
-                VBOXVDBG_DUMP_BLT_LEAVE(pSrcSurfIf, &pData->SrcRect, pDstSurfIf, &pData->DstRect);
+                VBOXVDBG_DUMP_BLT_LEAVE(pSrcRc, pSrcSurfIf, &pData->SrcRect, pDstRc, pDstSurfIf, &pData->DstRect);
 
                 pSrcSurfIf->Release();
@@ -5958,5 +5979,7 @@
 
     PVBOXWDDMDISP_ALLOCATION pDAlloc = &pDstRc->aAllocations[pData->DstSubResourceIndex];
-    vboxWddmDalCheckAdd(pDevice, pDAlloc);
+    vboxWddmDalCheckAdd(pDevice, pDAlloc, TRUE);
+    pDAlloc = &pSrcRc->aAllocations[pData->SrcSubResourceIndex];
+    vboxWddmDalCheckAdd(pDevice, pDAlloc, FALSE);
 
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr));
@@ -5985,4 +6008,7 @@
 
         pSurfIf->Release();
+
+        PVBOXWDDMDISP_ALLOCATION pDAlloc = &pRc->aAllocations[pData->SubResourceIndex];
+        vboxWddmDalCheckAdd(pDevice, pDAlloc, TRUE);
     }
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p), hr(0x%x)\n", hDevice, hr));
@@ -5997,4 +6023,5 @@
     VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
     Assert(0);
+//@todo:    vboxWddmDalCheckAdd(pDevice, pDAlloc, TRUE);
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     return E_FAIL;
@@ -6118,4 +6145,5 @@
     {
         Assert(pRc->cAllocations == 1);
+        Assert(pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE);
         pD3D9Surf = (IDirect3DSurface9*)pRc->aAllocations[0].pD3DIf;
         Assert(pD3D9Surf);
@@ -6760,5 +6788,5 @@
 
                 Assert(pRc->RcDesc.fFlags.SharedResource);
-                if (pRc->RcDesc.fFlags.Texture)
+                if (VBOXWDDMDISP_IS_TEXTURE(pRc->RcDesc.fFlags))
                 {
                     IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice);
@@ -6766,4 +6794,7 @@
                     HANDLE hSharedHandle = pAllocation->hSharedHandle;
                     Assert(pAllocation->hSharedHandle);
+#ifdef DEBUG_misha
+                    vboxVDbgPrintR(("\n\n********\nShared Resource (0x%x), (0n%d) openned\n\n\n", hSharedHandle, hSharedHandle));
+#endif
 
                     if (!pRc->RcDesc.fFlags.CubeMap)
@@ -6912,5 +6943,4 @@
         pDevice->ViewPort.MaxZ = 1.;
 
-        InitializeCriticalSection(&pDevice->DirtyAllocListLock);
         RTListInit(&pDevice->DirtyAllocList);
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.h	(revision 37839)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.h	(revision 37840)
@@ -31,4 +31,6 @@
 #define VBOXWDDMDISP_MAX_VERTEX_STREAMS 16
 #define VBOXWDDMDISP_MAX_SWAPCHAIN_SIZE 16
+
+#define VBOXWDDMDISP_IS_TEXTURE(_f) ((_f).Texture || (_f).Value == 0)
 
 #ifdef VBOX_WITH_VIDEOHWACCEL
@@ -189,5 +191,5 @@
 #endif
 
-    CRITICAL_SECTION DirtyAllocListLock;
+    /* no lock is needed for this since we're guaranteed the per-device calls are not reentrant */
     RTLISTNODE DirtyAllocList;
     UINT cRTs;
@@ -229,5 +231,7 @@
     IUnknown *pSecondaryOpenedD3DIf;
     VBOXDISP_D3DIFTYPE enmD3DIfType;
+    /* list entry used to add allocation to the dirty alloc list */
     RTLISTNODE DirtyAllocListEntry;
+    BOOLEAN fDirtyWrite;
     HANDLE hSharedHandle;
     VBOXWDDMDISP_LOCKINFO LockInfo;
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp	(revision 37839)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp	(revision 37840)
@@ -55,5 +55,8 @@
 DWORD g_VBoxVDbgFDumpBlt = 0;
 DWORD g_VBoxVDbgFDumpRtSynch = 0;
-
+DWORD g_VBoxVDbgFDumpFlush = 0;
+DWORD g_VBoxVDbgFDumpShared = 0;
+
+DWORD g_VBoxVDbgPid = 0;
 typedef enum
 {
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h	(revision 37839)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h	(revision 37840)
@@ -109,4 +109,6 @@
 extern DWORD g_VBoxVDbgFDumpBlt;
 extern DWORD g_VBoxVDbgFDumpRtSynch;
+extern DWORD g_VBoxVDbgFDumpFlush;
+extern DWORD g_VBoxVDbgFDumpShared;
 
 void vboxDispLogDrvF(char * szString, ...);
@@ -131,6 +133,22 @@
 VOID vboxVDbgDoDumpRtData(char * pPrefix, IDirect3DDevice9 *pDevice, char * pSuffix);
 
+extern DWORD g_VBoxVDbgPid;
+#define VBOXVDBG_IS_PID(_pid) ((_pid) == (g_VBoxVDbgPid ? g_VBoxVDbgPid : (g_VBoxVDbgPid = GetCurrentProcessId())))
+#define VBOXVDBG_IS_DUMP_ALLOWED_PID(_pid) (((int)(_pid)) > 0 ? VBOXVDBG_IS_PID(_pid) : !VBOXVDBG_IS_PID(-((int)(_pid))))
+
+#define VBOXVDBG_IS_DUMP_ALLOWED(_type) ( \
+        g_VBoxVDbgFDump##_type \
+        && (g_VBoxVDbgFDump##_type == 1 \
+                || VBOXVDBG_IS_DUMP_ALLOWED_PID(g_VBoxVDbgFDump##_type) \
+           ) \
+        )
+
+#define VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) (\
+        (_pRc)->RcDesc.fFlags.SharedResource \
+        && VBOXVDBG_IS_DUMP_ALLOWED(Shared) \
+        )
+
 #define VBOXVDBG_DUMP_DRAWPRIM_ENTER(_pDevice) do { \
-        if (g_VBoxVDbgFDumpDrawPrim) \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
         { \
             vboxVDbgDoDumpRt("==>"__FUNCTION__": RenderTarget Dump\n", (_pDevice), "\n"); \
@@ -139,5 +157,5 @@
 
 #define VBOXVDBG_DUMP_DRAWPRIM_LEAVE(_pDevice) do { \
-        if (g_VBoxVDbgFDumpDrawPrim) \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(DrawPrim)) \
         { \
             vboxVDbgDoDumpRt("<=="__FUNCTION__": RenderTarget Dump\n", (_pDevice), "\n"); \
@@ -146,5 +164,7 @@
 
 #define VBOXVDBG_DUMP_SETTEXTURE(_pRc) do { \
-        if (g_VBoxVDbgFDumpSetTexture) \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(SetTexture) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pRc) \
+                ) \
         { \
             vboxVDbgDoDumpRcRectByRc("== "__FUNCTION__": Texture Dump\n", _pRc, NULL, "\n"); \
@@ -153,5 +173,8 @@
 
 #define VBOXVDBG_DUMP_TEXBLT_ENTER(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
-        if (g_VBoxVDbgFDumpTexBlt) \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(TexBlt) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
+                ) \
         { \
             RECT _DstRect; \
@@ -163,5 +186,8 @@
 
 #define VBOXVDBG_DUMP_TEXBLT_LEAVE(_pSrcRc, _pSrcRect, _pDstRc, _pDstPoint) do { \
-        if (g_VBoxVDbgFDumpTexBlt) \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(TexBlt) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
+                ) \
         { \
             RECT _DstRect; \
@@ -172,6 +198,9 @@
     } while (0)
 
-#define VBOXVDBG_DUMP_BLT_ENTER(_pSrcSurf, _pSrcRect, _pDstSurf, _pDstRect) do { \
-        if (g_VBoxVDbgFDumpBlt) \
+#define VBOXVDBG_DUMP_BLT_ENTER(_pSrcRc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(Blt) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
+                ) \
         { \
             vboxVDbgDoDumpSurfRect("==>"__FUNCTION__" Src:\n", (_pSrcSurf), (_pSrcRect), "\n", true); \
@@ -180,6 +209,9 @@
     } while (0)
 
-#define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcSurf, _pSrcRect, _pDstSurf, _pDstRect) do { \
-        if (g_VBoxVDbgFDumpBlt) \
+#define VBOXVDBG_DUMP_BLT_LEAVE(_pSrcRc, _pSrcSurf, _pSrcRect, _pDstRc, _pDstSurf, _pDstRect) do { \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(Blt) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pSrcRc) \
+                || VBOXVDBG_IS_DUMP_SHARED_ALLOWED(_pDstRc) \
+                ) \
         { \
             vboxVDbgDoDumpSurfRect("<=="__FUNCTION__" Src:\n", (_pSrcSurf), (_pSrcRect), "\n", true); \
@@ -189,8 +221,15 @@
 
 #define VBOXVDBG_DUMP_SYNC_RT(_pBbSurf) do { \
-        if (g_VBoxVDbgFDumpRtSynch) \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(RtSynch)) \
         { \
             vboxVDbgDoDumpSurfRect("== "__FUNCTION__" Bb:\n", (_pBbSurf), NULL, "\n", true); \
         } \
+    } while (0)
+
+#define VBOXVDBG_DUMP_FLUSH(_pDevice) do { \
+        if (VBOXVDBG_IS_DUMP_ALLOWED(Flush)) \
+        { \
+            vboxVDbgDoDumpRt("== "__FUNCTION__": RenderTarget Dump\n", (_pDevice), "\n"); \
+        }\
     } while (0)
 #else
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Wine/Makefile.kmk
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Wine/Makefile.kmk	(revision 37839)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Wine/Makefile.kmk	(revision 37840)
@@ -193,11 +193,20 @@
 wined3dwddm_SDKS           = WINDDKWLH
 wined3dwddm_SDKS.amd64     = $(NO_SUCH_VARIABLE)
+#VBOX_WINE_WITH_IPRT is used for debugging currently to enable Assert & stuff
+ifdef VBOX_WINE_WITH_IPRT
+wined3dwddm_LIBS          += \
+							$(VBOX_LIB_IPRT_GUEST_R3) \
+							$(VBOX_LIB_VBGL_R3)
+wined3dwddm_DEFS          += VBOX_WINE_WITH_IPRT
+endif
 
 DLLS.amd64 += wined3dwddm-x86
 wined3dwddm-x86_EXTENDS    = wined3dwddm
 wined3dwddm-x86_BLD_TRG_ARCH = x86
-#wined3dwddm-x86_LIBS = \
-	$(VBOX_LIB_IPRT_GUEST_R3_X86) \
-	$(VBOX_LIB_VBGL_R3_X86)
+ifdef VBOX_WINE_WITH_IPRT
+wined3dwddm-x86_LIBS = \
+						$(VBOX_LIB_IPRT_GUEST_R3_X86) \
+						$(VBOX_LIB_VBGL_R3_X86)
+endif
 wined3dwddm-x86_DEFS       = $(wined3dwddm_DEFS) VBOX_WDDM_WOW64
 endif
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/vboxsharedrc.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/vboxsharedrc.h	(revision 37839)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/vboxsharedrc.h	(revision 37840)
@@ -35,18 +35,11 @@
 #define VBOXSHRC_IS_INITIALIZED(_o) (!!(VBOXSHRC_GET_SHAREFLAFS(_o) & VBOXSHRC_F_INITIALIZED))
 
-#ifdef DEBUG_misha
-/* just for simplicity */
-#ifdef RT_ARCH_X86
-#define AssertBreakpoint() do { __asm {int 3} } while (0)
+#ifdef VBOX_WINE_WITH_IPRT
+# include <iprt/assert.h>
 #else
-#define AssertBreakpoint() do { /* @todo */ } while (0)
-#endif
-#define Assert(_expr) do { \
-        if (!(_expr)) AssertBreakpoint(); \
-    } while (0)
-#else
-#define AssertBreakpoint() do { } while (0)
-#define Assert(_expr) do { } while (0)
+# define AssertBreakpoint() do { } while (0)
+# define Assert(_expr) do { } while (0)
 #endif
 
+
 #endif /* #ifndef ___vboxsharedrc_h___ */
Index: /trunk/src/VBox/GuestHost/OpenGL/spu_loader/glloader.py
===================================================================
--- /trunk/src/VBox/GuestHost/OpenGL/spu_loader/glloader.py	(revision 37839)
+++ /trunk/src/VBox/GuestHost/OpenGL/spu_loader/glloader.py	(revision 37840)
@@ -66,5 +66,5 @@
 #endif
 
-#if defined(WINDOWS) && (defined(DEBUG_leo) || defined(DEBUG_ll158262))
+#if defined(WINDOWS) && (defined(DEBUG_leo) || defined(DEBUG_ll158262) || defined(DEBUG_misha))
 # define CR_NO_GL_SYSTEM_PATH 1
 #endif
