Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp	(revision 52630)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp	(revision 52631)
@@ -526,4 +526,5 @@
         {
             WARN(("pfnAddMode failed, Status 0x%x", Status));
+            VBoxVidPnDumpSourceMode("SourceMode: ", pVidPnModeInfo, "\n");
             NTSTATUS tmpStatus = pVidPnModeSetInterface->pfnReleaseModeInfo(hVidPnModeSet, pVidPnModeInfo);
             Assert(tmpStatus == STATUS_SUCCESS);
@@ -585,4 +586,5 @@
         {
             WARN(("pfnAddMode failed, Status 0x%x", Status));
+            VBoxVidPnDumpTargetMode("TargetMode: ", pVidPnModeInfo, "\n");
             NTSTATUS tmpStatus = pVidPnModeSetInterface->pfnReleaseModeInfo(hVidPnModeSet, pVidPnModeInfo);
             Assert(tmpStatus == STATUS_SUCCESS);
@@ -850,4 +852,8 @@
     {
         WARN(("vboxVidPnTargetModeSetFromArray failed Status(0x%x)", Status));
+        vboxVidPnDumpVidPn("\nVidPn: ---------\n", pDevExt, hVidPn, pVidPnInterface, "\n------\n");
+        VBoxVidPnDumpMonitorModeSet("MonModeSet: --------\n", pDevExt, VidPnTargetId, "\n------\n");
+        NTSTATUS tmpStatus = pVidPnInterface->pfnReleaseTargetModeSet(hVidPn, hVidPnModeSet);
+        Assert(tmpStatus == STATUS_SUCCESS);
         return Status;
     }
@@ -857,4 +863,6 @@
     {
         WARN(("\n\n!!!!!!!\n\n pfnAssignTargetModeSet failed, Status(0x%x)", Status));
+        vboxVidPnDumpVidPn("\nVidPn: ---------\n", pDevExt, hVidPn, pVidPnInterface, "\n------\n");
+        VBoxVidPnDumpMonitorModeSet("MonModeSet: --------\n", pDevExt, VidPnTargetId, "\n------\n");
         NTSTATUS tmpStatus = pVidPnInterface->pfnReleaseTargetModeSet(hVidPn, hVidPnModeSet);
         Assert(tmpStatus == STATUS_SUCCESS);
@@ -908,4 +916,8 @@
     {
         WARN(("vboxVidPnSourceModeSetFromArray failed Status(0x%x)", Status));
+        vboxVidPnDumpVidPn("\nVidPn: ---------\n", pDevExt, hVidPn, pVidPnInterface, "\n------\n");
+        VBoxVidPnDumpMonitorModeSet("MonModeSet: --------\n", pDevExt, VidPnTargetId, "\n------\n");
+        NTSTATUS tmpStatus = pVidPnInterface->pfnReleaseSourceModeSet(hVidPn, hVidPnModeSet);
+        Assert(tmpStatus == STATUS_SUCCESS);
         return Status;
     }
@@ -915,4 +927,6 @@
     {
         WARN(("\n\n!!!!!!!\n\n pfnAssignSourceModeSet failed, Status(0x%x)", Status));
+        vboxVidPnDumpVidPn("\nVidPn: ---------\n", pDevExt, hVidPn, pVidPnInterface, "\n------\n");
+        VBoxVidPnDumpMonitorModeSet("MonModeSet: --------\n", pDevExt, VidPnTargetId, "\n------\n");
         NTSTATUS tmpStatus = pVidPnInterface->pfnReleaseSourceModeSet(hVidPn, hVidPnModeSet);
         Assert(tmpStatus == STATUS_SUCCESS);
@@ -1752,4 +1766,5 @@
         {
             WARN(("vboxVidPnCollectInfoForPathTarget failed Status(0x%x\n", Status));
+            VBoxVidPnDumpCofuncModalityInfo("Modality Info: ", enmPivot, pPivot, "\n");
             break;
         }
@@ -1767,4 +1782,5 @@
         {
             WARN(("vboxVidPnCollectInfoForPathSource failed Status(0x%x\n", Status));
+            VBoxVidPnDumpCofuncModalityInfo("Modality Info: ", enmPivot, pPivot, "\n");
             break;
         }
@@ -1782,4 +1798,5 @@
     {
         WARN(("PathIter failed Status()0x%x\n", Status));
+        VBoxVidPnDumpCofuncModalityInfo("Modality Info: ", enmPivot, pPivot, "\n");
         goto done;
     }
@@ -1824,4 +1841,5 @@
             {
                 WARN(("pfnUpdatePathSupportInfo failed Status()0x%x\n", Status));
+                VBoxVidPnDumpCofuncModalityInfo("Modality Info: ", enmPivot, pPivot, "\n");
                 goto done;
             }
@@ -1840,4 +1858,5 @@
         {
             WARN(("vboxVidPnApplyInfoForPathTarget failed Status(0x%x\n", Status));
+            VBoxVidPnDumpCofuncModalityInfo("Modality Info: ", enmPivot, pPivot, "\n");
             break;
         }
@@ -1853,4 +1872,5 @@
         {
             WARN(("vboxVidPnApplyInfoForPathSource failed Status(0x%x\n", Status));
+            VBoxVidPnDumpCofuncModalityInfo("Modality Info: ", enmPivot, pPivot, "\n");
             break;
         }
@@ -1866,4 +1886,5 @@
     {
         WARN(("PathIter failed Status()0x%x\n", Status));
+        VBoxVidPnDumpCofuncModalityInfo("Modality Info: ", enmPivot, pPivot, "\n");
         goto done;
     }
@@ -2476,4 +2497,18 @@
         VBOXVIDPNDUMP_STRCASE(D3DKMDT_CB_YCBCR);
         VBOXVIDPNDUMP_STRCASE(D3DKMDT_CB_YPBPR);
+        VBOXVIDPNDUMP_STRCASE_UNKNOWN();
+    }
+}
+
+const char * vboxVidPnDumpStrMonCapabilitiesOrigin(D3DKMDT_MONITOR_CAPABILITIES_ORIGIN enmOrigin)
+{
+    switch (enmOrigin)
+    {
+        VBOXVIDPNDUMP_STRCASE(D3DKMDT_MCO_UNINITIALIZED);
+        VBOXVIDPNDUMP_STRCASE(D3DKMDT_MCO_DEFAULTMONITORPROFILE);
+        VBOXVIDPNDUMP_STRCASE(D3DKMDT_MCO_MONITORDESCRIPTOR);
+        VBOXVIDPNDUMP_STRCASE(D3DKMDT_MCO_MONITORDESCRIPTOR_REGISTRYOVERRIDE);
+        VBOXVIDPNDUMP_STRCASE(D3DKMDT_MCO_SPECIFICCAP_REGISTRYOVERRIDE);
+        VBOXVIDPNDUMP_STRCASE(D3DKMDT_MCO_DRIVER);
         VBOXVIDPNDUMP_STRCASE_UNKNOWN();
     }
@@ -2738,5 +2773,5 @@
 }
 
-void vboxVidPnDumpSourceMode(const char *pPrefix, const D3DKMDT_VIDPN_SOURCE_MODE* pVidPnSourceModeInfo, const char *pSuffix)
+void VBoxVidPnDumpSourceMode(const char *pPrefix, const D3DKMDT_VIDPN_SOURCE_MODE* pVidPnSourceModeInfo, const char *pSuffix)
 {
     LOGREL_EXACT(("%sType(%s), ", pPrefix, vboxVidPnDumpStrSourceModeType(pVidPnSourceModeInfo->Type)));
@@ -2758,9 +2793,80 @@
 }
 
-void vboxVidPnDumpTargetMode(const char *pPrefix, const D3DKMDT_VIDPN_TARGET_MODE* CONST  pVidPnTargetModeInfo, const char *pSuffix)
+void VBoxVidPnDumpTargetMode(const char *pPrefix, const D3DKMDT_VIDPN_TARGET_MODE* CONST  pVidPnTargetModeInfo, const char *pSuffix)
 {
     LOGREL_EXACT(("%s", pPrefix));
+    LOGREL_EXACT(("ID: %d, ", pVidPnTargetModeInfo->Id));
     vboxVidPnDumpSignalInfo("VSI: ", &pVidPnTargetModeInfo->VideoSignalInfo, ", ");
     LOGREL_EXACT(("Preference(%s)%s", vboxVidPnDumpStrModePreference(pVidPnTargetModeInfo->Preference), pSuffix));
+}
+
+void VBoxVidPnDumpMonitorMode(const char *pPrefix, const D3DKMDT_MONITOR_SOURCE_MODE *pVidPnModeInfo, const char *pSuffix)
+{
+    LOGREL_EXACT(("%s", pPrefix));
+
+    LOGREL_EXACT(("ID: %d, ", pVidPnModeInfo->Id));
+
+    vboxVidPnDumpSignalInfo("VSI: ", &pVidPnModeInfo->VideoSignalInfo, ", ");
+
+    LOGREL_EXACT(("ColorBasis: %s, ", vboxVidPnDumpStrColorBasis(pVidPnModeInfo->ColorBasis)));
+
+    vboxVidPnDumpRanges("Ranges: ", &pVidPnModeInfo->ColorCoeffDynamicRanges, ", ");
+
+    LOGREL_EXACT(("MonCapOr: %s, ", vboxVidPnDumpStrMonCapabilitiesOrigin(pVidPnModeInfo->Origin)));
+
+    LOGREL_EXACT(("Preference(%s)%s", vboxVidPnDumpStrModePreference(pVidPnModeInfo->Preference), pSuffix));
+}
+
+NTSTATUS VBoxVidPnDumpMonitorModeSet(const char *pPrefix, PVBOXMP_DEVEXT pDevExt, uint32_t u32Target, const char *pSuffix)
+{
+    LOGREL_EXACT(("%s Tgt[%d]\n", pPrefix, u32Target));
+
+    NTSTATUS Status;
+    CONST DXGK_MONITOR_INTERFACE *pMonitorInterface;
+    Status = pDevExt->u.primary.DxgkInterface.DxgkCbQueryMonitorInterface(pDevExt->u.primary.DxgkInterface.DeviceHandle, DXGK_MONITOR_INTERFACE_VERSION_V1, &pMonitorInterface);
+    if (!NT_SUCCESS(Status))
+    {
+        WARN(("DxgkCbQueryMonitorInterface failed, Status()0x%x", Status));
+        return Status;
+    }
+
+    D3DKMDT_HMONITORSOURCEMODESET hVidPnModeSet;
+    CONST DXGK_MONITORSOURCEMODESET_INTERFACE *pVidPnModeSetInterface;
+
+    Status = pMonitorInterface->pfnAcquireMonitorSourceModeSet(pDevExt->u.primary.DxgkInterface.DeviceHandle,
+                                        u32Target,
+                                        &hVidPnModeSet,
+                                        &pVidPnModeSetInterface);
+    if (!NT_SUCCESS(Status))
+    {
+        WARN(("DxgkCbQueryMonitorInterface failed, Status()0x%x", Status));
+        return Status;
+    }
+
+    VBOXVIDPN_MONITORMODE_ITER Iter;
+    const D3DKMDT_MONITOR_SOURCE_MODE *pVidPnModeInfo;
+
+    VBoxVidPnMonitorModeIterInit(&Iter, hVidPnModeSet, pVidPnModeSetInterface);
+
+    while ((pVidPnModeInfo = VBoxVidPnMonitorModeIterNext(&Iter)) != NULL)
+    {
+        VBoxVidPnDumpMonitorMode("MonitorMode: ",pVidPnModeInfo, "\n");
+    }
+
+    VBoxVidPnMonitorModeIterTerm(&Iter);
+
+    Status = VBoxVidPnMonitorModeIterStatus(&Iter);
+    if (!NT_SUCCESS(Status))
+    {
+        WARN(("iter status failed %#x", Status));
+    }
+
+    NTSTATUS tmpStatus = pMonitorInterface->pfnReleaseMonitorSourceModeSet(pDevExt->u.primary.DxgkInterface.DeviceHandle, hVidPnModeSet);
+    if (!NT_SUCCESS(tmpStatus))
+        WARN(("pfnReleaseMonitorSourceModeSet failed tmpStatus(0x%x)", tmpStatus));
+
+    LOGREL_EXACT(("%s", pSuffix));
+
+    return Status;
 }
 
@@ -2783,5 +2889,5 @@
         if (Status == STATUS_SUCCESS)
         {
-            vboxVidPnDumpSourceMode("Source Pinned: ", pPinnedVidPnSourceModeInfo, "\n");
+            VBoxVidPnDumpSourceMode("Source Pinned: ", pPinnedVidPnSourceModeInfo, "\n");
             pCurVidPnSourceModeSetInterface->pfnReleaseModeInfo(hCurVidPnSourceModeSet, pPinnedVidPnSourceModeInfo);
         }
@@ -2806,5 +2912,5 @@
         const D3DKMDT_VIDPN_SOURCE_MODE *pNewVidPnSourceModeInfo, PVOID pContext)
 {
-    vboxVidPnDumpSourceMode("SourceMode: ", pNewVidPnSourceModeInfo, "\n");
+    VBoxVidPnDumpSourceMode("SourceMode: ", pNewVidPnSourceModeInfo, "\n");
     return TRUE;
 }
@@ -2844,5 +2950,5 @@
         const D3DKMDT_VIDPN_TARGET_MODE *pNewVidPnTargetModeInfo, PVOID pContext)
 {
-    vboxVidPnDumpTargetMode("TargetMode: ", pNewVidPnTargetModeInfo, "\n");
+    VBoxVidPnDumpTargetMode("TargetMode: ", pNewVidPnTargetModeInfo, "\n");
     return TRUE;
 }
@@ -2898,5 +3004,5 @@
         if (Status == STATUS_SUCCESS)
         {
-            vboxVidPnDumpTargetMode("Target Pinned: ", pPinnedVidPnTargetModeInfo, "\n");
+            VBoxVidPnDumpTargetMode("Target Pinned: ", pPinnedVidPnTargetModeInfo, "\n");
             pCurVidPnTargetModeSetInterface->pfnReleaseModeInfo(hCurVidPnTargetModeSet, pPinnedVidPnTargetModeInfo);
         }
@@ -2915,4 +3021,10 @@
         LOGREL_EXACT(("ERROR getting TargetModeSet(0x%x)\n", Status));
     }
+}
+
+void VBoxVidPnDumpCofuncModalityInfo(const char *pPrefix, D3DKMDT_ENUMCOFUNCMODALITY_PIVOT_TYPE enmEnumPivotType, const DXGK_ENUM_PIVOT *pPivot, const char *pSuffix)
+{
+    LOGREL_EXACT(("%sPivotType(%s), SourceId(0x%x), TargetId(0x%x),%s", pPrefix, vboxVidPnDumpStrCFMPivotType(enmEnumPivotType),
+            pPivot->VidPnSourceId, pPivot->VidPnTargetId, pSuffix));
 }
 
Index: /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.h
===================================================================
--- /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.h	(revision 52630)
+++ /trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.h	(revision 52631)
@@ -96,4 +96,10 @@
         PFNVBOXVIDPNENUMTARGETSFORSOURCE pfnCallback, PVOID pContext);
 
+void VBoxVidPnDumpTargetMode(const char *pPrefix, const D3DKMDT_VIDPN_TARGET_MODE* CONST  pVidPnTargetModeInfo, const char *pSuffix);
+void VBoxVidPnDumpMonitorMode(const char *pPrefix, const D3DKMDT_MONITOR_SOURCE_MODE *pVidPnModeInfo, const char *pSuffix);
+NTSTATUS VBoxVidPnDumpMonitorModeSet(const char *pPrefix, PVBOXMP_DEVEXT pDevExt, uint32_t u32Target, const char *pSuffix);
+void VBoxVidPnDumpSourceMode(const char *pPrefix, const D3DKMDT_VIDPN_SOURCE_MODE* pVidPnSourceModeInfo, const char *pSuffix);
+void VBoxVidPnDumpCofuncModalityInfo(const char *pPrefix, D3DKMDT_ENUMCOFUNCMODALITY_PIVOT_TYPE enmEnumPivotType, const DXGK_ENUM_PIVOT *pPivot, const char *pSuffix);
+
 void vboxVidPnDumpVidPn(const char * pPrefix, PVBOXMP_DEVEXT pDevExt, D3DKMDT_HVIDPN hVidPn, const DXGK_VIDPN_INTERFACE* pVidPnInterface, const char * pSuffix);
 void vboxVidPnDumpCofuncModalityArg(const char *pPrefix, CONST DXGKARG_ENUMVIDPNCOFUNCMODALITY* CONST  pEnumCofuncModalityArg, const char *pSuffix);
