VirtualBox

Ignore:
Timestamp:
Oct 24, 2017 11:50:08 AM (7 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
118512
Message:

Additions/win/vboxtray: Code cleanup in VBoxDisplay service, step 2.

Location:
trunk/src/VBox/Additions/WINNT/VBoxTray
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDispIf.cpp

    r68367 r69201  
    14721472    }
    14731473
    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         else
    1490             VidPnData.aTargets[cElements].iSource = -1;
    1491     }
    1492 
    14931474/*  The pfnD3DKMTInvalidateActiveVidPn was deprecated since Win7 and causes deadlocks since Win10 TH2.
    14941475    Instead, the VidPn Manager can replace an old VidPn as soon as SetDisplayConfig or ChangeDisplaySettingsEx will try to set a new display mode.
     
    14961477    if (Op.pIf->enmMode < VBOXDISPIF_MODE_WDDM_W7)
    14971478    {
    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);
    15031503
    15041504        NTSTATUS Status;
    1505         Status = Op.pIf->modeData.wddm.KmtCallbacks.pfnD3DKMTInvalidateActiveVidPn(&DdiData);
     1505        Status = Op.pIf->modeData.wddm.KmtCallbacks.pfnD3DKMTInvalidateActiveVidPn(&ddiArgInvalidateVidPN);
    15061506        LogFunc(("D3DKMTInvalidateActiveVidPn returned %d)\n", Status));
    15071507    }
  • trunk/src/VBox/Additions/WINNT/VBoxTray/VBoxDisplay.cpp

    r69180 r69201  
    726726    }
    727727
    728 #ifdef VBOX_WITH_WDDM
    729728    if (enmDriverType == VBOXDISPLAY_DRIVER_TYPE_WDDM)
    730729    {
    731         LogFlowFunc(("Request to resize the displa\n"));
    732730        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.
    748737     */
    749738    for (i = 0; i < NumDevices; i++)
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette