Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp	(revision 38929)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp	(revision 38930)
@@ -103,4 +103,10 @@
 #define VBOXDISPPROFILE_DDI_REPORT_FRAME(_pDev) do {} while (0)
 #endif
+
+/* debugging/profiling stuff could go here.
+ * NOP in release */
+#define VBOXDISP_DDI_PROLOGUE() \
+    VBOXVDBG_BREAK_DDI(); \
+    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
 
 #ifdef VBOXDISPMP_TEST
@@ -2331,5 +2337,7 @@
     {
         PVBOXWDDMDISP_RENDERTGT pRT = &pSwapchain->aRTs[i];
-        BOOL fHasSurf = !!pRT->pAlloc->pRc->aAllocations[0].pD3DIf;
+        if (pRT->pAlloc->enmD3DIfType != VBOXDISP_D3DIFTYPE_SURFACE)
+            continue;
+        BOOL fHasSurf = !!pRT->pAlloc->pRc->aAllocations[i].pD3DIf;
         if (!fForceCreate && !fHasSurf)
             continue;
@@ -2401,5 +2409,6 @@
         }
 
-        pRT->pAlloc->pD3DIf->Release();
+        if (pRT->pAlloc->pD3DIf)
+            pRT->pAlloc->pD3DIf->Release();
         pRT->pAlloc->pD3DIf = pD3D9NewSurf;
         if (pD3D9OldSurf)
@@ -2462,10 +2471,12 @@
     HRESULT hr = S_OK;
     BOOL bReuseSwapchain = FALSE;
+    BOOL fNeedRtPresentSwitch = FALSE;
 
     if (pSwapchain->fFlags.bSwitchReportingPresent || pSwapchain->cRTs > VBOXWDDMDISP_MAX_DIRECT_RTS)
     {
         pSwapchain->fFlags.bSwitchReportingPresent = FALSE;
-        /* switch to Render Target Reporting Present mode */
-        vboxWddmSwapchainSwtichRtPresent(pDevice, pSwapchain);
+        /* indicae switch to Render Target Reporting Present mode is needed */
+        fNeedRtPresentSwitch = TRUE;
+//        vboxWddmSwapchainSwtichRtPresent(pDevice, pSwapchain);
     }
 
@@ -2473,5 +2484,5 @@
     if (pOldIf)
     {
-        if (pSwapchain->fFlags.bRtReportingPresent)
+        if (fNeedRtPresentSwitch)
         {
             /* the number of swapchain backbuffers does not matter */
@@ -2577,8 +2588,16 @@
     }
 
-    if (hr == S_OK)
-    {
-        Assert(pNewIf);
-        pSwapchain->pSwapChainIf = pNewIf;
+    if (FAILED(hr))
+        return hr;
+
+    Assert(pNewIf);
+    pSwapchain->pSwapChainIf = pNewIf;
+
+    if (fNeedRtPresentSwitch)
+    {
+        hr = vboxWddmSwapchainSwtichRtPresent(pDevice, pSwapchain);
+    }
+    else
+    {
 #ifndef VBOXWDDM_WITH_VISIBLE_FB
         if (!pSwapchain->fFlags.bRtReportingPresent)
@@ -2622,46 +2641,35 @@
         }
 #endif
-        if (hr == S_OK)
-        {
+    }
+
+    /* ignore any subsequen failures */
+    Assert(hr == S_OK);
+
+
 #ifdef DEBUG
-            for (UINT i = 0; i < cSurfs; ++i)
-            {
-                PVBOXWDDMDISP_RENDERTGT pRt = &pSwapchain->aRTs[i];
-                Assert(pRt->pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE
-                        || pRt->pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_TEXTURE);
-                Assert(pRt->pAlloc->pRc->RcDesc.enmPool == D3DDDIPOOL_LOCALVIDMEM);
-            }
-#endif
-            hr = vboxWddmSwapchainSynch(pDevice, pSwapchain);
-            Assert(hr == S_OK);
-            if (hr == S_OK)
-            {
-
-                Assert(hr == S_OK);
-                if (hr == S_OK)
-                {
-                    Assert(!pSwapchain->fFlags.bChanged);
-                    Assert(!pSwapchain->fFlags.bSwitchReportingPresent);
-                    if (pOldIf)
-                    {
-                        Assert(hOldWnd);
-                        pOldIf->Release();
-                    }
-                    else
-                    {
-                        Assert(!hOldWnd);
-                    }
-                    return S_OK;
-                }
-            }
-            pNewIf->Release();
-            pSwapchain->pSwapChainIf = pOldIf;
-        }
-
-        Assert(hr != S_OK);
-        pSwapchain->hWnd = hOldWnd;
-    }
-
-    return hr;
+    for (UINT i = 0; i < cSurfs; ++i)
+    {
+        PVBOXWDDMDISP_RENDERTGT pRt = &pSwapchain->aRTs[i];
+        Assert(pRt->pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE
+                || pRt->pAlloc->enmD3DIfType == VBOXDISP_D3DIFTYPE_TEXTURE);
+        Assert(pRt->pAlloc->pRc->RcDesc.enmPool != D3DDDIPOOL_SYSTEMMEM);
+    }
+#endif
+
+    hr = vboxWddmSwapchainSynch(pDevice, pSwapchain);
+    Assert(hr == S_OK);
+
+    Assert(!pSwapchain->fFlags.bChanged);
+    Assert(!pSwapchain->fFlags.bSwitchReportingPresent);
+    if (pOldIf)
+    {
+        Assert(hOldWnd);
+        pOldIf->Release();
+    }
+    else
+    {
+        Assert(!hOldWnd);
+    }
+    return S_OK;
 }
 
@@ -3371,4 +3379,5 @@
         case D3DDDICAPS_GETDECODEGUIDCOUNT:
         case D3DDDICAPS_GETVIDEOPROCESSORDEVICEGUIDCOUNT:
+        case D3DDDICAPS_GETVIDEOPROCESSORRTFORMATCOUNT:
             if (pData->pData && pData->DataSize)
                 memset(pData->pData, 0, pData->DataSize);
@@ -3385,5 +3394,4 @@
         case D3DDDICAPS_GETDECODECONFIGURATIONS:
         case D3DDDICAPS_GETVIDEOPROCESSORDEVICEGUIDS:
-        case D3DDDICAPS_GETVIDEOPROCESSORRTFORMATCOUNT:
         case D3DDDICAPS_GETVIDEOPROCESSORRTFORMATS:
         case D3DDDICAPS_GETVIDEOPROCESSORRTSUBSTREAMFORMATCOUNT:
@@ -3410,5 +3418,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetRenderState(HANDLE hDevice, CONST D3DDDIARG_RENDERSTATE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3424,5 +3432,5 @@
 static HRESULT APIENTRY vboxWddmDDevUpdateWInfo(HANDLE hDevice, CONST D3DDDIARG_WINFO* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
 //    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
 //    VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
@@ -3434,5 +3442,5 @@
 static HRESULT APIENTRY vboxWddmDDevValidateDevice(HANDLE hDevice, D3DDDIARG_VALIDATETEXTURESTAGESTATE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
 //    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
 //    VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
@@ -3449,5 +3457,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetTextureStageState(HANDLE hDevice, CONST D3DDDIARG_TEXTURESTAGESTATE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3475,5 +3483,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetTexture(HANDLE hDevice, UINT Stage, HANDLE hTexture)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3516,5 +3524,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetPixelShader(HANDLE hDevice, HANDLE hShaderHandle)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3531,5 +3539,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetPixelShaderConst(HANDLE hDevice, CONST D3DDDIARG_SETPIXELSHADERCONST* pData, CONST FLOAT* pRegisters)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3545,5 +3553,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetStreamSourceUm(HANDLE hDevice, CONST D3DDDIARG_SETSTREAMSOURCEUM* pData, CONST VOID* pUMBuffer )
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3571,5 +3579,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetIndices(HANDLE hDevice, CONST D3DDDIARG_SETINDICES* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3601,5 +3609,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetIndicesUm(HANDLE hDevice, UINT IndexSize, CONST VOID* pUMBuffer)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3616,5 +3624,5 @@
 static HRESULT APIENTRY vboxWddmDDevDrawPrimitive(HANDLE hDevice, CONST D3DDDIARG_DRAWPRIMITIVE* pData, CONST UINT* pFlagBuffer)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3692,5 +3700,5 @@
 static HRESULT APIENTRY vboxWddmDDevDrawIndexedPrimitive(HANDLE hDevice, CONST D3DDDIARG_DRAWINDEXEDPRIMITIVE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3743,5 +3751,5 @@
 static HRESULT APIENTRY vboxWddmDDevDrawRectPatch(HANDLE hDevice, CONST D3DDDIARG_DRAWRECTPATCH* pData, CONST D3DDDIRECTPATCH_INFO* pInfo, CONST FLOAT* pPatch)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3756,5 +3764,5 @@
 static HRESULT APIENTRY vboxWddmDDevDrawTriPatch(HANDLE hDevice, CONST D3DDDIARG_DRAWTRIPATCH* pData, CONST D3DDDITRIPATCH_INFO* pInfo, CONST FLOAT* pPatch)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3769,5 +3777,5 @@
 static HRESULT APIENTRY vboxWddmDDevDrawPrimitive2(HANDLE hDevice, CONST D3DDDIARG_DRAWPRIMITIVE2* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3864,5 +3872,5 @@
 static HRESULT APIENTRY vboxWddmDDevDrawIndexedPrimitive2(HANDLE hDevice, CONST D3DDDIARG_DRAWINDEXEDPRIMITIVE2* pData, UINT dwIndicesSize, CONST VOID* pIndexBuffer, CONST UINT* pFlagBuffer)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3877,5 +3885,5 @@
 static HRESULT APIENTRY vboxWddmDDevVolBlt(HANDLE hDevice, CONST D3DDDIARG_VOLUMEBLT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3890,5 +3898,5 @@
 static HRESULT APIENTRY vboxWddmDDevBufBlt(HANDLE hDevice, CONST D3DDDIARG_BUFFERBLT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3903,5 +3911,5 @@
 static HRESULT APIENTRY vboxWddmDDevTexBlt(HANDLE hDevice, CONST D3DDDIARG_TEXBLT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3985,5 +3993,5 @@
 static HRESULT APIENTRY vboxWddmDDevStateSet(HANDLE hDevice, D3DDDIARG_STATESET* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -3996,5 +4004,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetPriority(HANDLE hDevice, CONST D3DDDIARG_SETPRIORITY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
 //    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
 //    Assert(pDevice);
@@ -4016,5 +4024,5 @@
 static HRESULT APIENTRY vboxWddmDDevClear(HANDLE hDevice, CONST D3DDDIARG_CLEAR* pData, UINT NumRect, CONST RECT* pRect)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4033,5 +4041,5 @@
 static HRESULT APIENTRY vboxWddmDDevUpdatePalette(HANDLE hDevice, CONST D3DDDIARG_UPDATEPALETTE* pData, CONST PALETTEENTRY* pPaletteData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4045,5 +4053,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetPalette(HANDLE hDevice, CONST D3DDDIARG_SETPALETTE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4057,5 +4065,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetVertexShaderConst(HANDLE hDevice, CONST D3DDDIARG_SETVERTEXSHADERCONST* pData , CONST VOID* pRegisters)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4073,5 +4081,5 @@
 static HRESULT APIENTRY vboxWddmDDevMultiplyTransform(HANDLE hDevice, CONST D3DDDIARG_MULTIPLYTRANSFORM* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4084,5 +4092,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetTransform(HANDLE hDevice, CONST D3DDDIARG_SETTRANSFORM* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4095,5 +4103,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetViewport(HANDLE hDevice, CONST D3DDDIARG_VIEWPORTINFO* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4113,5 +4121,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetZRange(HANDLE hDevice, CONST D3DDDIARG_ZRANGE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4129,5 +4137,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetMaterial(HANDLE hDevice, CONST D3DDDIARG_SETMATERIAL* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4140,5 +4148,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetLight(HANDLE hDevice, CONST D3DDDIARG_SETLIGHT* pData, CONST D3DDDI_LIGHT* pLightProperties)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4151,5 +4159,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateLight(HANDLE hDevice, CONST D3DDDIARG_CREATELIGHT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4162,5 +4170,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyLight(HANDLE hDevice, CONST D3DDDIARG_DESTROYLIGHT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4173,5 +4181,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetClipPlane(HANDLE hDevice, CONST D3DDDIARG_SETCLIPPLANE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4188,5 +4196,5 @@
 static HRESULT APIENTRY vboxWddmDDevGetInfo(HANDLE hDevice, UINT DevInfoID, VOID* pDevInfoStruct, UINT DevInfoSize)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
 //    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4221,5 +4229,5 @@
 static HRESULT APIENTRY vboxWddmDDevLock(HANDLE hDevice, D3DDDIARG_LOCK* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4652,5 +4660,5 @@
 static HRESULT APIENTRY vboxWddmDDevUnlock(HANDLE hDevice, CONST D3DDDIARG_UNLOCK* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4827,5 +4835,5 @@
 static HRESULT APIENTRY vboxWddmDDevLockAsync(HANDLE hDevice, D3DDDIARG_LOCKASYNC* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4838,5 +4846,5 @@
 static HRESULT APIENTRY vboxWddmDDevUnlockAsync(HANDLE hDevice, CONST D3DDDIARG_UNLOCKASYNC* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4849,5 +4857,5 @@
 static HRESULT APIENTRY vboxWddmDDevRename(HANDLE hDevice, CONST D3DDDIARG_RENAME* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -4903,5 +4911,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateResource(HANDLE hDevice, D3DDDIARG_CREATERESOURCE* pResource)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     HRESULT hr = S_OK;
@@ -5507,5 +5515,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyResource(HANDLE hDevice, HANDLE hResource)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5591,5 +5599,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetDisplayMode(HANDLE hDevice, CONST D3DDDIARG_SETDISPLAYMODE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     HRESULT hr = S_OK;
@@ -5670,5 +5678,5 @@
 static HRESULT APIENTRY vboxWddmDDevPresent(HANDLE hDevice, CONST D3DDDIARG_PRESENT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5728,5 +5736,5 @@
 static HRESULT APIENTRY vboxWddmDDevFlush(HANDLE hDevice)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5765,5 +5773,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateVertexShaderDecl(HANDLE hDevice, D3DDDIARG_CREATEVERTEXSHADERDECL* pData, CONST D3DDDIVERTEXELEMENT* pVertexElements)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5813,5 +5821,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetVertexShaderDecl(HANDLE hDevice, HANDLE hShaderHandle)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5828,5 +5836,5 @@
 static HRESULT APIENTRY vboxWddmDDevDeleteVertexShaderDecl(HANDLE hDevice, HANDLE hShaderHandle)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5841,5 +5849,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateVertexShaderFunc(HANDLE hDevice, D3DDDIARG_CREATEVERTEXSHADERFUNC* pData, CONST UINT* pCode)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5861,5 +5869,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetVertexShaderFunc(HANDLE hDevice, HANDLE hShaderHandle)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5875,5 +5883,5 @@
 static HRESULT APIENTRY vboxWddmDDevDeleteVertexShaderFunc(HANDLE hDevice, HANDLE hShaderHandle)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5888,5 +5896,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetVertexShaderConstI(HANDLE hDevice, CONST D3DDDIARG_SETVERTEXSHADERCONSTI* pData, CONST INT* pRegisters)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5901,5 +5909,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetVertexShaderConstB(HANDLE hDevice, CONST D3DDDIARG_SETVERTEXSHADERCONSTB* pData, CONST BOOL* pRegisters)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5914,5 +5922,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetScissorRect(HANDLE hDevice, CONST RECT* pRect)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5927,5 +5935,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetStreamSource(HANDLE hDevice, CONST D3DDDIARG_SETSTREAMSOURCE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5971,5 +5979,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetStreamSourceFreq(HANDLE hDevice, CONST D3DDDIARG_SETSTREAMSOURCEFREQ* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5982,5 +5990,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetConvolutionKernelMono(HANDLE hDevice, CONST D3DDDIARG_SETCONVOLUTIONKERNELMONO* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -5993,5 +6001,5 @@
 static HRESULT APIENTRY vboxWddmDDevComposeRects(HANDLE hDevice, CONST D3DDDIARG_COMPOSERECTS* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6085,5 +6093,5 @@
 static HRESULT APIENTRY vboxWddmDDevBlt(HANDLE hDevice, CONST D3DDDIARG_BLT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6165,5 +6173,5 @@
 static HRESULT APIENTRY vboxWddmDDevColorFill(HANDLE hDevice, CONST D3DDDIARG_COLORFILL* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6194,5 +6202,5 @@
 static HRESULT APIENTRY vboxWddmDDevDepthFill(HANDLE hDevice, CONST D3DDDIARG_DEPTHFILL* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6206,5 +6214,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateQuery(HANDLE hDevice, D3DDDIARG_CREATEQUERY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
 //    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6236,5 +6244,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyQuery(HANDLE hDevice, HANDLE hQuery)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     HRESULT hr = S_OK;
@@ -6251,5 +6259,5 @@
 static HRESULT APIENTRY vboxWddmDDevIssueQuery(HANDLE hDevice, CONST D3DDDIARG_ISSUEQUERY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     HRESULT hr = S_OK;
@@ -6266,5 +6274,5 @@
 static HRESULT APIENTRY vboxWddmDDevGetQueryData(HANDLE hDevice, CONST D3DDDIARG_GETQUERYDATA* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     HRESULT hr = S_OK;
@@ -6292,5 +6300,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetRenderTarget(HANDLE hDevice, CONST D3DDDIARG_SETRENDERTARGET* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6310,5 +6318,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetDepthStencil(HANDLE hDevice, CONST D3DDDIARG_SETDEPTHSTENCIL* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6333,5 +6341,5 @@
 static HRESULT APIENTRY vboxWddmDDevGenerateMipSubLevels(HANDLE hDevice, CONST D3DDDIARG_GENERATEMIPSUBLEVELS* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6345,5 +6353,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetPixelShaderConstI(HANDLE hDevice, CONST D3DDDIARG_SETPIXELSHADERCONSTI* pData, CONST INT* pRegisters)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6359,5 +6367,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetPixelShaderConstB(HANDLE hDevice, CONST D3DDDIARG_SETPIXELSHADERCONSTB* pData, CONST BOOL* pRegisters)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6373,5 +6381,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreatePixelShader(HANDLE hDevice, D3DDDIARG_CREATEPIXELSHADER* pData, CONST UINT* pCode)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6394,5 +6402,5 @@
 static HRESULT APIENTRY vboxWddmDDevDeletePixelShader(HANDLE hDevice, HANDLE hShaderHandle)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6408,5 +6416,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateDecodeDevice(HANDLE hDevice, D3DDDIARG_CREATEDECODEDEVICE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6420,5 +6428,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyDecodeDevice(HANDLE hDevice, HANDLE hDecodeDevice)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6432,5 +6440,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetDecodeRenderTarget(HANDLE hDevice, CONST D3DDDIARG_SETDECODERENDERTARGET* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6444,5 +6452,5 @@
 static HRESULT APIENTRY vboxWddmDDevDecodeBeginFrame(HANDLE hDevice, D3DDDIARG_DECODEBEGINFRAME* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6456,5 +6464,5 @@
 static HRESULT APIENTRY vboxWddmDDevDecodeEndFrame(HANDLE hDevice, D3DDDIARG_DECODEENDFRAME* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6468,5 +6476,5 @@
 static HRESULT APIENTRY vboxWddmDDevDecodeExecute(HANDLE hDevice, CONST D3DDDIARG_DECODEEXECUTE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6480,5 +6488,5 @@
 static HRESULT APIENTRY vboxWddmDDevDecodeExtensionExecute(HANDLE hDevice, CONST D3DDDIARG_DECODEEXTENSIONEXECUTE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6492,5 +6500,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateVideoProcessDevice(HANDLE hDevice, D3DDDIARG_CREATEVIDEOPROCESSDEVICE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6504,5 +6512,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyVideoProcessDevice(HANDLE hDevice, HANDLE hVideoProcessor)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6516,5 +6524,5 @@
 static HRESULT APIENTRY vboxWddmDDevVideoProcessBeginFrame(HANDLE hDevice, HANDLE hVideoProcess)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6528,5 +6536,5 @@
 static HRESULT APIENTRY vboxWddmDDevVideoProcessEndFrame(HANDLE hDevice, D3DDDIARG_VIDEOPROCESSENDFRAME* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6540,5 +6548,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetVideoProcessRenderTarget(HANDLE hDevice, CONST D3DDDIARG_SETVIDEOPROCESSRENDERTARGET* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6552,5 +6560,5 @@
 static HRESULT APIENTRY vboxWddmDDevVideoProcessBlt(HANDLE hDevice, CONST D3DDDIARG_VIDEOPROCESSBLT* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6564,5 +6572,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateExtensionDevice(HANDLE hDevice, D3DDDIARG_CREATEEXTENSIONDEVICE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6576,5 +6584,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyExtensionDevice(HANDLE hDevice, HANDLE hExtension)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6588,5 +6596,5 @@
 static HRESULT APIENTRY vboxWddmDDevExtensionExecute(HANDLE hDevice, CONST D3DDDIARG_EXTENSIONEXECUTE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6600,5 +6608,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyDevice(IN HANDLE hDevice)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
 
@@ -6647,5 +6655,5 @@
 static HRESULT APIENTRY vboxWddmDDevCreateOverlay(HANDLE hDevice, D3DDDIARG_CREATEOVERLAY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6711,5 +6719,5 @@
 static HRESULT APIENTRY vboxWddmDDevUpdateOverlay(HANDLE hDevice, CONST D3DDDIARG_UPDATEOVERLAY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6755,5 +6763,5 @@
 static HRESULT APIENTRY vboxWddmDDevFlipOverlay(HANDLE hDevice, CONST D3DDDIARG_FLIPOVERLAY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6792,5 +6800,5 @@
 static HRESULT APIENTRY vboxWddmDDevGetOverlayColorControls(HANDLE hDevice, D3DDDIARG_GETOVERLAYCOLORCONTROLS* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     Assert(0);
@@ -6800,5 +6808,5 @@
 static HRESULT APIENTRY vboxWddmDDevSetOverlayColorControls(HANDLE hDevice, CONST D3DDDIARG_SETOVERLAYCOLORCONTROLS* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     Assert(0);
@@ -6808,5 +6816,5 @@
 static HRESULT APIENTRY vboxWddmDDevDestroyOverlay(HANDLE hDevice, CONST D3DDDIARG_DESTROYOVERLAY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6830,5 +6838,5 @@
 static HRESULT APIENTRY vboxWddmDDevQueryResourceResidency(HANDLE hDevice, CONST D3DDDIARG_QUERYRESOURCERESIDENCY* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -6877,5 +6885,5 @@
 static HRESULT APIENTRY vboxWddmDDevOpenResource(HANDLE hDevice, D3DDDIARG_OPENRESOURCE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -7087,5 +7095,5 @@
 static HRESULT APIENTRY vboxWddmDDevGetCaptureAllocationHandle(HANDLE hDevice, D3DDDIARG_GETCAPTUREALLOCATIONHANDLE* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -7100,5 +7108,5 @@
 static HRESULT APIENTRY vboxWddmDDevCaptureToSysMem(HANDLE hDevice, CONST D3DDDIARG_CAPTURETOSYSMEM* pData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
@@ -7113,5 +7121,5 @@
 static HRESULT APIENTRY vboxWddmDispCreateDevice (IN HANDLE hAdapter, IN D3DDDIARG_CREATEDEVICE* pCreateData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     HRESULT hr = S_OK;
     vboxVDbgPrint(("==> "__FUNCTION__", hAdapter(0x%p), Interface(%d), Version(%d)\n", hAdapter, pCreateData->Interface, pCreateData->Version));
@@ -7341,5 +7349,5 @@
 static HRESULT APIENTRY vboxWddmDispCloseAdapter (IN HANDLE hAdapter)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrint(("==> "__FUNCTION__", hAdapter(0x%p)\n", hAdapter));
 
@@ -7367,5 +7375,5 @@
 HRESULT APIENTRY OpenAdapter (__inout D3DDDIARG_OPENADAPTER*  pOpenData)
 {
-    VBOXDISPPROFILE_FUNCTION_DDI_PROLOGUE();
+    VBOXDISP_DDI_PROLOGUE();
     vboxVDbgPrint(("==> "__FUNCTION__"\n"));
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp	(revision 38929)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp	(revision 38930)
@@ -62,4 +62,9 @@
 
 DWORD g_VBoxVDbgFBreakShared = VBOXWDDMDISP_DEBUG_DUMP_DEFAULT;
+DWORD g_VBoxVDbgFBreakDdi = 0;
+
+DWORD g_VBoxVDbgFLogRel = 0;
+DWORD g_VBoxVDbgFLog = 0;
+DWORD g_VBoxVDbgFLogFlow = 0;
 
 DWORD g_VBoxVDbgPid = 0;
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h	(revision 38929)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h	(revision 38930)
@@ -29,5 +29,5 @@
  * the workaround so far is to pass the log info to the kernel driver and DbgPrint'ed from there,
  * which is enabled by this define */
-#  define VBOXWDDMDISP_DEBUG_PRINTDRV
+//#  define VBOXWDDMDISP_DEBUG_PRINTDRV
 /* use OutputDebugString */
 #  define VBOXWDDMDISP_DEBUG_PRINT
@@ -37,4 +37,26 @@
 //#  define VBOXWDDMDISP_DEBUG_NOSHARED
 # endif
+
+/* debug config vars */
+extern DWORD g_VBoxVDbgFDumpSetTexture;
+extern DWORD g_VBoxVDbgFDumpDrawPrim;
+extern DWORD g_VBoxVDbgFDumpTexBlt;
+extern DWORD g_VBoxVDbgFDumpBlt;
+extern DWORD g_VBoxVDbgFDumpRtSynch;
+extern DWORD g_VBoxVDbgFDumpFlush;
+extern DWORD g_VBoxVDbgFDumpShared;
+extern DWORD g_VBoxVDbgFDumpLock;
+extern DWORD g_VBoxVDbgFDumpUnlock;
+
+extern DWORD g_VBoxVDbgFBreakShared;
+extern DWORD g_VBoxVDbgFBreakDdi;
+
+
+/* log enable flags */
+extern DWORD g_VBoxVDbgFLogRel;
+extern DWORD g_VBoxVDbgFLog;
+extern DWORD g_VBoxVDbgFLogFlow;
+
+
 #endif
 
@@ -72,5 +94,5 @@
 # define DbgPrintUsr(_m) do { vboxDispLogDbgPrintF _m; } while (0)
 # define DbgPrintUsrRel(_m) do { vboxDispLogDbgPrintF _m; } while (0)
-# define DbgPrintUsrFlow(_m) do { } while (0)
+# define DbgPrintUsrFlow(_m) do { vboxDispLogDbgPrintF _m; } while (0)
 #else
 # define DbgPrintUsr(_m) do { } while (0)
@@ -83,38 +105,46 @@
 # define WARN_BREAK() do { } while (0)
 #endif
+
+#ifdef VBOXWDDMDISP_DEBUG
+#define vboxVDbgInternalLog(_p) if (g_VBoxVDbgFLog) { _p }
+#define vboxVDbgInternalLogFlow(_p) if (g_VBoxVDbgFLogFlow) { _p }
+#define vboxVDbgInternalLogRel(_p) if (g_VBoxVDbgFLogRel) { _p }
+#else
+#define vboxVDbgInternalLog(_p) do {} while (0)
+#define vboxVDbgInternalLogFlow(_p) do {} while (0)
+#define vboxVDbgInternalLogRel(_p) do { _p } while (0)
+#endif
+
 #define WARN(_m) do { \
-        Log(_m); \
-        DbgPrintUsr(_m); \
-        DbgPrintDrv(_m); \
+        vboxVDbgInternalLog( \
+            Log(_m); \
+            DbgPrintUsr(_m); \
+            DbgPrintDrv(_m); \
+        ); \
         WARN_BREAK(); \
     } while (0)
 #define vboxVDbgPrint(_m) do { \
-        Log(_m); \
-        DbgPrintUsr(_m); \
-        DbgPrintDrv(_m); \
+        vboxVDbgInternalLog( \
+            Log(_m); \
+            DbgPrintUsr(_m); \
+            DbgPrintDrv(_m); \
+        ); \
     } while (0)
 #define vboxVDbgPrintF(_m)  do { \
-        LogFlow(_m); \
-        DbgPrintUsrFlow(_m); \
-        DbgPrintDrvFlow(_m); \
+        vboxVDbgInternalLogFlow( \
+            LogFlow(_m); \
+            DbgPrintUsrFlow(_m); \
+            DbgPrintDrvFlow(_m); \
+        ); \
     } while (0)
 #define vboxVDbgPrintR(_m)  do { \
-        LogRel(_m); \
-        DbgPrintUsrRel(_m); \
-        DbgPrintDrvRel(_m); \
+        vboxVDbgInternalLogRel( \
+            LogRel(_m); \
+            DbgPrintUsrRel(_m); \
+            DbgPrintDrvRel(_m); \
+        ); \
     } while (0)
 
 #ifdef VBOXWDDMDISP_DEBUG
-extern DWORD g_VBoxVDbgFDumpSetTexture;
-extern DWORD g_VBoxVDbgFDumpDrawPrim;
-extern DWORD g_VBoxVDbgFDumpTexBlt;
-extern DWORD g_VBoxVDbgFDumpBlt;
-extern DWORD g_VBoxVDbgFDumpRtSynch;
-extern DWORD g_VBoxVDbgFDumpFlush;
-extern DWORD g_VBoxVDbgFDumpShared;
-extern DWORD g_VBoxVDbgFDumpLock;
-extern DWORD g_VBoxVDbgFDumpUnlock;
-
-extern DWORD g_VBoxVDbgFBreakShared;
 
 void vboxDispLogDrvF(char * szString, ...);
@@ -174,4 +204,10 @@
         if (VBOXVDBG_IS_BREAK_SHARED_ALLOWED(_pRc)) { \
             vboxVDbgPrint(("Break on shared access: Rc(0x%p), SharedHandle(0x%p)\n", (_pRc), (_pRc)->aAllocations[0].hSharedHandle)); \
+            AssertFailed(); \
+        } \
+    } while (0)
+
+#define VBOXVDBG_BREAK_DDI() do { \
+        if (VBOXVDBG_IS_BREAK_ALLOWED(Ddi)) { \
             AssertFailed(); \
         } \
@@ -293,4 +329,5 @@
 #define VBOXVDBG_DUMP_UNLOCK_ST(_pData) do { } while (0)
 #define VBOXVDBG_BREAK_SHARED(_pRc) do { } while (0)
+#define VBOXVDBG_BREAK_DDI() do { } while (0)
 #endif
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 38929)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp	(revision 38930)
@@ -480,5 +480,6 @@
         }
 
-        memset(&pSwapchain->ViewRect, 0, sizeof (pSwapchain->ViewRect));
+        /* do not zero up the view rect since it may still be valid */
+//        memset(&pSwapchain->ViewRect, 0, sizeof (pSwapchain->ViewRect));
         if (pSwapchain->pLastReportedRects)
         {
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/context.c
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/context.c	(revision 38929)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/context.c	(revision 38930)
@@ -2339,5 +2339,6 @@
                 swapchain = (IWineD3DSwapChainImpl *)This->swapchains[This->NumberOfSwapChains-1]; /* just fallback to anything to avoid NPE */
             if (swapchain->backBuffer) target = swapchain->backBuffer[0];
-            else target = swapchain->frontBuffer;
+            else if (swapchain->frontBuffer) target = swapchain->frontBuffer;
+            else target = swapchain->presentRt;
         }
     }
