VirtualBox

Changeset 63611 in vbox for trunk/src/VBox/Additions/WINNT


Ignore:
Timestamp:
Aug 22, 2016 2:47:03 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
110321
Message:

3D: Special handling of PM events in DdiCommitVidPn by introducing VBVA_SCREEN_F_BLANK2, bugref:8387.

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPTypes.h

    r63039 r63611  
    129129    BOOLEAN fTargetsReported;
    130130    BOOLEAN bVisible;
     131    BOOLEAN bPowerOff;
    131132#ifdef VBOX_WITH_CROGL
    132133    /* specifies whether the source has 3D overlay data visible */
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp

    r63566 r63611  
    23272327NTSTATUS VBoxVidPnCommitSourceModeForSrcId(PVBOXMP_DEVEXT pDevExt, const D3DKMDT_HVIDPN hDesiredVidPn, const DXGK_VIDPN_INTERFACE* pVidPnInterface,
    23282328        PVBOXWDDM_ALLOCATION pAllocation,
    2329         D3DDDI_VIDEO_PRESENT_SOURCE_ID  VidPnSourceId, VBOXWDDM_SOURCE *paSources, VBOXWDDM_TARGET *paTargets)
     2329        D3DDDI_VIDEO_PRESENT_SOURCE_ID  VidPnSourceId, VBOXWDDM_SOURCE *paSources, VBOXWDDM_TARGET *paTargets, BOOLEAN bPathPowerTransition)
    23302330{
    23312331    D3DKMDT_HVIDPNSOURCEMODESET hCurVidPnSourceModeSet;
     
    24152415    }
    24162416
     2417    pSource->bPowerOff = bPathPowerTransition;
    24172418    return Status;
    24182419}
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.h

    r62522 r63611  
    7474NTSTATUS VBoxVidPnCommitSourceModeForSrcId(PVBOXMP_DEVEXT pDevExt, const D3DKMDT_HVIDPN hDesiredVidPn, const DXGK_VIDPN_INTERFACE* pVidPnInterface,
    7575        PVBOXWDDM_ALLOCATION pAllocation,
    76         D3DDDI_VIDEO_PRESENT_SOURCE_ID  VidPnSourceId, VBOXWDDM_SOURCE *paSources, VBOXWDDM_TARGET *paTargets);
     76        D3DDDI_VIDEO_PRESENT_SOURCE_ID  VidPnSourceId, VBOXWDDM_SOURCE *paSources, VBOXWDDM_TARGET *paTargets, BOOLEAN bPathPowerTransition = false);
    7777
    7878NTSTATUS VBoxVidPnCommitAll(PVBOXMP_DEVEXT pDevExt, const D3DKMDT_HVIDPN hDesiredVidPn, const DXGK_VIDPN_INTERFACE* pVidPnInterface,
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r63566 r63611  
    395395}
    396396
    397 NTSTATUS vboxWddmGhDisplaySetInfoNew(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData, const uint32_t *pTargetMap, const POINT * pVScreenPos, uint8_t u8CurCyncState)
     397NTSTATUS vboxWddmGhDisplaySetInfoNew(PVBOXMP_DEVEXT pDevExt, const VBOXWDDM_ALLOC_DATA *pAllocData, const uint32_t *pTargetMap, const POINT * pVScreenPos, uint8_t u8CurCyncState, BOOLEAN bPowerOff = false)
    398398{
    399399    NTSTATUS Status = STATUS_SUCCESS;
    400     bool fEnabled = !!pAllocData->SurfDesc.width;
    401     uint16_t fu16Flags = fEnabled ? VBVA_SCREEN_F_ACTIVE : VBVA_SCREEN_F_DISABLED;
    402     if (fEnabled)
     400    bool bValidAlloc = pAllocData->SurfDesc.width > 0 && pAllocData->SurfDesc.height > 0;
     401    uint16_t fu16Flags;
     402
     403    PVBOXMP_COMMON pCommon = VBoxCommonFromDeviceExt(pDevExt);
     404    uint16_t fu16SupportedFlags = VBoxHGSMIGetScreenFlags(&pCommon->guestCtx);
     405    if (   bPowerOff
     406        && RT_BOOL(fu16SupportedFlags & VBVA_SCREEN_F_BLANK2))
     407    {
     408        fu16Flags = VBVA_SCREEN_F_ACTIVE | VBVA_SCREEN_F_BLANK2;
     409    }
     410    else
     411    {
     412        fu16Flags = bValidAlloc ? VBVA_SCREEN_F_ACTIVE : VBVA_SCREEN_F_DISABLED;
     413    }
     414
     415    if (bValidAlloc)
    403416    {
    404417#ifdef VBOX_WITH_CROGL
     
    423436        {
    424437#ifdef VBOX_WITH_CROGL
    425             if (fEnabled && pDevExt->f3DEnabled)
     438            if (bValidAlloc && pDevExt->f3DEnabled)
    426439            {
    427440                Status = vboxVdmaTexPresentSetAlloc(pDevExt, pAllocData);
     
    467480    }
    468481
    469     NTSTATUS Status = vboxWddmGhDisplaySetInfoNew(pDevExt, &pSource->AllocData, pTargetMap, &pSource->VScreenPos, pSource->u8SyncState);
     482    NTSTATUS Status = vboxWddmGhDisplaySetInfoNew(pDevExt, &pSource->AllocData, pTargetMap, &pSource->VScreenPos, pSource->u8SyncState, pSource->bPowerOff);
    470483    if (NT_SUCCESS(Status))
    471484    {
     
    10321045
    10331046    NTSTATUS Status = STATUS_SUCCESS;
    1034     PVBOXMP_DEVEXT pDevExt;
     1047    PVBOXMP_DEVEXT pDevExt = NULL;
    10351048
    10361049    WCHAR RegKeyBuf[512];
     
    53595372                    pCommitVidPnArg->hFunctionalVidPn, pVidPnInterface,
    53605373                    (PVBOXWDDM_ALLOCATION)pCommitVidPnArg->hPrimaryAllocation,
    5361                     pCommitVidPnArg->AffectedVidPnSourceId, paSources, paTargets);
     5374                    pCommitVidPnArg->AffectedVidPnSourceId, paSources, paTargets, (BOOLEAN)pCommitVidPnArg->Flags.PathPowerTransition);
    53625375            if (!NT_SUCCESS(Status))
    53635376            {
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.h

    r63039 r63611  
    171171{
    172172    VBOXVIDEOOFFSET offVram = vboxWddmAddrFramOffset(&pAllocData->Addr);
    173     if (offVram == VBOXVIDEOOFFSET_VOID && !(fFlags & VBVA_SCREEN_F_DISABLED))
     173    if (offVram == VBOXVIDEOOFFSET_VOID && !(fFlags & (VBVA_SCREEN_F_DISABLED | VBVA_SCREEN_F_BLANK2)))
    174174    {
    175175        WARN(("offVram == VBOXVIDEOOFFSET_VOID"));
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