Changeset 69201 in vbox for trunk/src/VBox/Additions/WINNT/VBoxTray
- Timestamp:
- Oct 24, 2017 11:50:08 AM (7 years ago)
- svn:sync-xref-src-repo-rev:
- 118512
- Location:
- trunk/src/VBox/Additions/WINNT/VBoxTray
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.cpp
r68367 r69201 1472 1472 } 1473 1473 1474 VBOXWDDM_RECOMMENDVIDPN VidPnData;1475 1476 memset(&VidPnData, 0, sizeof (VidPnData));1477 1478 uint32_t cElements = 0;1479 1480 for (uint32_t i = 0; i < cDevModes; ++i)1481 {1482 if ((i == iChangedMode) ? fEnable : (paDisplayDevices[i].StateFlags & DISPLAY_DEVICE_ACTIVE))1483 {1484 VidPnData.aSources[cElements].Size.cx = paDeviceModes[i].dmPelsWidth;1485 VidPnData.aSources[cElements].Size.cy = paDeviceModes[i].dmPelsHeight;1486 VidPnData.aTargets[cElements].iSource = cElements;1487 ++cElements;1488 }1489 else1490 VidPnData.aTargets[cElements].iSource = -1;1491 }1492 1493 1474 /* The pfnD3DKMTInvalidateActiveVidPn was deprecated since Win7 and causes deadlocks since Win10 TH2. 1494 1475 Instead, the VidPn Manager can replace an old VidPn as soon as SetDisplayConfig or ChangeDisplaySettingsEx will try to set a new display mode. … … 1496 1477 if (Op.pIf->enmMode < VBOXDISPIF_MODE_WDDM_W7) 1497 1478 { 1498 D3DKMT_INVALIDATEACTIVEVIDPN DdiData = {0}; 1499 1500 DdiData.hAdapter = Op.Adapter.hAdapter; 1501 DdiData.pPrivateDriverData = &VidPnData; 1502 DdiData.PrivateDriverDataSize = sizeof (VidPnData); 1479 D3DKMT_INVALIDATEACTIVEVIDPN ddiArgInvalidateVidPN; 1480 VBOXWDDM_RECOMMENDVIDPN vboxRecommendVidPN; 1481 1482 memset(&ddiArgInvalidateVidPN, 0, sizeof(ddiArgInvalidateVidPN)); 1483 memset(&vboxRecommendVidPN, 0, sizeof(vboxRecommendVidPN)); 1484 1485 uint32_t cElements = 0; 1486 1487 for (uint32_t i = 0; i < cDevModes; ++i) 1488 { 1489 if ((i == iChangedMode) ? fEnable : (paDisplayDevices[i].StateFlags & DISPLAY_DEVICE_ACTIVE)) 1490 { 1491 vboxRecommendVidPN.aSources[cElements].Size.cx = paDeviceModes[i].dmPelsWidth; 1492 vboxRecommendVidPN.aSources[cElements].Size.cy = paDeviceModes[i].dmPelsHeight; 1493 vboxRecommendVidPN.aTargets[cElements].iSource = cElements; 1494 ++cElements; 1495 } 1496 else 1497 vboxRecommendVidPN.aTargets[cElements].iSource = -1; 1498 } 1499 1500 ddiArgInvalidateVidPN.hAdapter = Op.Adapter.hAdapter; 1501 ddiArgInvalidateVidPN.pPrivateDriverData = &vboxRecommendVidPN; 1502 ddiArgInvalidateVidPN.PrivateDriverDataSize = sizeof (vboxRecommendVidPN); 1503 1503 1504 1504 NTSTATUS Status; 1505 Status = Op.pIf->modeData.wddm.KmtCallbacks.pfnD3DKMTInvalidateActiveVidPn(& DdiData);1505 Status = Op.pIf->modeData.wddm.KmtCallbacks.pfnD3DKMTInvalidateActiveVidPn(&ddiArgInvalidateVidPN); 1506 1506 LogFunc(("D3DKMTInvalidateActiveVidPn returned %d)\n", Status)); 1507 1507 } -
trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDisplay.cpp
r69180 r69201 726 726 } 727 727 728 #ifdef VBOX_WITH_WDDM729 728 if (enmDriverType == VBOXDISPLAY_DRIVER_TYPE_WDDM) 730 729 { 731 LogFlowFunc(("Request to resize the displa\n"));732 730 DWORD err = VBoxDispIfResizeModes(&pCtx->pEnv->dispIf, Id, fEnabled, fExtDispSup, paDisplayDevices, paDeviceModes, DevNum); 733 if (err != ERROR_RETRY) 734 { 735 if (err == NO_ERROR) 736 LogFlowFunc(("VBoxDispIfResizeModes succeeded\n")); 737 else 738 LogFlowFunc(("Failure VBoxDispIfResizeModes (%d)\n", err)); 739 return FALSE; 740 } 741 742 LogFlowFunc(("ResizeDisplayDevice: RETRY requested\n")); 743 return TRUE; 744 } 745 #endif 746 /* Without this, Windows will not ask the miniport for its 747 * mode table but uses an internal cache instead. 731 732 return (err == ERROR_RETRY); 733 } 734 735 /* The XPDM code path goes below. 736 * Re-requesting modes with EnumDisplaySettings forces Windows to again ask the miniport for its mode table. 748 737 */ 749 738 for (i = 0; i < NumDevices; i++)
Note:
See TracChangeset
for help on using the changeset viewer.