VirtualBox

Changeset 42158 in vbox


Ignore:
Timestamp:
Jul 16, 2012 11:28:07 AM (13 years ago)
Author:
vboxsync
Message:

wddm: multimon and other fixes

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVdma.cpp

    r42081 r42158  
    585585            {
    586586                if (pAlloc->AllocData.SurfDesc.VidPnSourceId != D3DDDI_ID_UNINITIALIZED
    587                         && pAlloc->bAssigned
    588 #if 0//def VBOXWDDM_RENDER_FROM_SHADOW
    589                         && pAlloc->enmType == VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE
    590 #else
    591                         && pAlloc->enmType == VBOXWDDM_ALLOC_TYPE_STD_SHAREDPRIMARYSURFACE
    592 #endif
     587                        && VBOXWDDM_IS_FB_ALLOCATION(pDevExt, pAlloc)
     588                        && pAlloc->bVisible
    593589                        )
    594590                {
     
    768764                vboxVdmaGgDmaBlt(pDevExt, &pBlt->Blt);
    769765
    770                 if ((pDstAlloc->enmType == VBOXWDDM_ALLOC_TYPE_STD_SHAREDPRIMARYSURFACE
    771                         || pDstAlloc->enmType == VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC)
    772                         && pDstAlloc->bAssigned)
     766                if (VBOXWDDM_IS_FB_ALLOCATION(pDevExt, pDstAlloc)
     767                        && pDstAlloc->bVisible)
    773768                {
    774769                    VBOXWDDM_SOURCE *pSource = &pDevExt->aSources[pDstAlloc->AllocData.SurfDesc.VidPnSourceId];
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPVidPn.cpp

    r42128 r42158  
    15711571    if (pNewVidPnPresentPathInfo->VidPnSourceId != pNewVidPnPresentPathInfo->VidPnTargetId)
    15721572    {
    1573         WARN(("unsupported source(%d)->target(%d) pair", pNewVidPnPresentPathInfo->VidPnSourceId, pNewVidPnPresentPathInfo->VidPnTargetId));
     1573        LOG(("unsupported source(%d)->target(%d) pair", pNewVidPnPresentPathInfo->VidPnSourceId, pNewVidPnPresentPathInfo->VidPnTargetId));
    15741574        return FALSE;
    15751575    }
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r42154 r42158  
    29812981            fRenderFromSharedDisabled = vboxWddmModeRenderFromShadowCheckOnSubmitCommand(pDevExt, NULL);
    29822982            vboxWddmCheckUpdateFramebufferAddress(pDevExt, pSource);
    2983             uint32_t cUnlockedVBVADisabled = ASMAtomicReadU32(&pDevExt->cUnlockedVBVADisabled);
    2984             if (!cUnlockedVBVADisabled)
    2985                 VBOXVBVA_OP(ReportDirtyRect, pDevExt, pSource, &pS2P->Shadow2Primary.SrcRect);
    2986             else
    2987             {
    2988                 Assert(KeGetCurrentIrql() == DISPATCH_LEVEL);
    2989                 VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, pSource, &pS2P->Shadow2Primary.SrcRect);
    2990             }
    2991             /* get DPC data at IRQL */
     2983            if (pSrcAlloc->bVisible)
     2984            {
     2985                uint32_t cUnlockedVBVADisabled = ASMAtomicReadU32(&pDevExt->cUnlockedVBVADisabled);
     2986                if (!cUnlockedVBVADisabled)
     2987                    VBOXVBVA_OP(ReportDirtyRect, pDevExt, pSource, &pS2P->Shadow2Primary.SrcRect);
     2988                else
     2989                {
     2990                    Assert(KeGetCurrentIrql() == DISPATCH_LEVEL);
     2991                    VBOXVBVA_OP_WITHLOCK_ATDPC(ReportDirtyRect, pDevExt, pSource, &pS2P->Shadow2Primary.SrcRect);
     2992                }
     2993            }
    29922994
    29932995            Status = vboxVdmaDdiCmdFenceComplete(pDevExt, pContext->NodeOrdinal, pSubmitCommand->SubmissionFenceId, DXGK_INTERRUPT_DMA_COMPLETED);
     
    30013003            PVBOXWDDM_ALLOCATION pDstAlloc = pBlt->Blt.DstAlloc.pAlloc;
    30023004            PVBOXWDDM_ALLOCATION pSrcAlloc = pBlt->Blt.SrcAlloc.pAlloc;
    3003             VBOXWDDM_SOURCE *pSource = &pDevExt->aSources[pDstAlloc->AllocData.SurfDesc.VidPnSourceId];
    3004 
    3005             Assert(pDstAlloc->AllocData.SurfDesc.VidPnSourceId < VBOX_VIDEO_MAX_SCREENS);
    30063005
    30073006            vboxWddmAddrSetVram(&pDstAlloc->AllocData.Addr, pBlt->Blt.DstAlloc.segmentIdAlloc, pBlt->Blt.DstAlloc.offAlloc);
     
    30183017                    )
    30193018            {
     3019                VBOXWDDM_SOURCE *pSource = &pDevExt->aSources[pDstAlloc->AllocData.SurfDesc.VidPnSourceId];
     3020                Assert(pDstAlloc->AllocData.SurfDesc.VidPnSourceId < VBOX_VIDEO_MAX_SCREENS);
     3021
    30203022                if (pSrcAlloc->enmType == VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE)
    30213023                    vboxWddmAssignShadow(pDevExt, pSource, pSrcAlloc, pDstAlloc->AllocData.SurfDesc.VidPnSourceId);
     
    30303032                    )
    30313033            {
     3034                VBOXWDDM_SOURCE *pSource = &pDevExt->aSources[pDstAlloc->AllocData.SurfDesc.VidPnSourceId];
     3035                Assert(pDstAlloc->AllocData.SurfDesc.VidPnSourceId < VBOX_VIDEO_MAX_SCREENS);
     3036
    30323037                if (pDstAlloc->enmType == VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE)
    30333038                    vboxWddmAssignShadow(pDevExt, pSource, pDstAlloc, pSrcAlloc->AllocData.SurfDesc.VidPnSourceId);
     
    30483053                    if (pDstAlloc->bAssigned)
    30493054                    {
    3050                         Assert(pSource->pPrimaryAllocation == pDstAlloc);
     3055//                        Assert(pSource->pPrimaryAllocation == pDstAlloc);
    30513056
    30523057                        switch (pSrcAlloc->enmType)
     
    30563061                                fBltFlags.fVisibleRegions = !!cContexts3D;
    30573062                                Assert(pContext->enmType == VBOXWDDM_CONTEXT_TYPE_SYSTEM);
    3058 
    3059                                 if (!fRenderFromSharedDisabled)
     3063                                VBOXWDDM_SOURCE *pSource = &pDevExt->aSources[pDstAlloc->AllocData.SurfDesc.VidPnSourceId];
     3064                                Assert(pDstAlloc->AllocData.SurfDesc.VidPnSourceId < VBOX_VIDEO_MAX_SCREENS);
     3065
     3066                                if (!fRenderFromSharedDisabled && pSource->bVisible)
    30603067                                {
    30613068                                    RECT rect;
     
    43554362    if (fDisabledFound)
    43564363    {
    4357         WARN(("found unsupported path"));
     4364        LOG(("found unsupported path"));
    43584365        bSupported = FALSE;
    43594366    }
     
    46514658# endif
    46524659                    pDevExt->fRenderToShadowDisabled
     4660                    || (pAllocation && pAllocation->enmType == VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC)
    46534661                    )
    46544662#endif
     
    47074715# endif
    47084716                        pDevExt->fRenderToShadowDisabled
     4717                        || (pAllocation && pAllocation->enmType == VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC)
    47094718                        )
    47104719#endif
     
    54925501                            Assert(pContext->enmType == VBOXWDDM_CONTEXT_TYPE_SYSTEM);
    54935502                            Assert(pDstAlloc->bAssigned);
    5494                             Assert(pDstAlloc->bVisible);
    5495                             if (pDstAlloc->bAssigned
    5496                                     && pDstAlloc->bVisible)
     5503                            if (pDstAlloc->bAssigned)
    54975504                            {
    54985505#ifdef VBOX_WITH_VIDEOHWACCEL
     
    62956302    }
    62966303
    6297     if (bUpdateRectInited)
     6304    if (bUpdateRectInited && pSource->bVisible)
    62986305    {
    62996306        VBOXVBVA_OP_WITHLOCK(ReportDirtyRect, pDevExt, pSource, &UpdateRect);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.h

    r42124 r42158  
    126126        Assert(!pAllocation->bAssigned);
    127127        Assert(!pAllocation->bVisible);
    128         pAllocation->bVisible = FALSE;
    129128        /* this check ensures the shadow is not used for other source simultaneously */
    130129        Assert(pAllocation->AllocData.SurfDesc.VidPnSourceId == D3DDDI_ID_UNINITIALIZED);
    131130        pAllocation->AllocData.SurfDesc.VidPnSourceId = srcId;
    132131        pAllocation->bAssigned = TRUE;
     132        pAllocation->bVisible = pSource->bVisible;
     133
    133134        if(!vboxWddmAddrVramEqual(&pSource->AllocData.Addr, &pAllocation->AllocData.Addr))
    134135            pSource->bGhSynced = FALSE; /* force guest->host notification */
     
    159160    if (pAllocation)
    160161    {
    161         pAllocation->bVisible = FALSE;
    162162        Assert(pAllocation->AllocData.SurfDesc.VidPnSourceId == srcId);
    163163        pAllocation->bAssigned = TRUE;
     164        pAllocation->bVisible = pSource->bVisible;
    164165
    165166        if(!vboxWddmAddrVramEqual(&pSource->AllocData.Addr, &pAllocation->AllocData.Addr))
     
    192193#ifdef VBOXWDDM_RENDER_FROM_SHADOW
    193194# ifdef VBOX_WDDM_WIN8
    194 #  define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ( (g_VBoxDisplayOnly || (_pDevExt)->fRenderToShadowDisabled) ? (_pSrc)->pPrimaryAllocation : (_pSrc)->pShadowAllocation)
     195#  define VBOXWDDM_IS_FB_ALLOCATION(_pDevExt, _pAlloc) ( (_pAlloc)->bAssigned \
     196        && (  (_pAlloc)->enmType == VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC \
     197           || (_pAlloc)->enmType == \
     198               ((g_VBoxDisplayOnly || (_pDevExt)->fRenderToShadowDisabled) ? VBOXWDDM_ALLOC_TYPE_STD_SHAREDPRIMARYSURFACE : VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE) \
     199               ))
    195200# else
    196 #  define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ((_pDevExt)->fRenderToShadowDisabled ? (_pSrc)->pPrimaryAllocation : (_pSrc)->pShadowAllocation)
     201#  define VBOXWDDM_IS_FB_ALLOCATION(_pDevExt, _pAlloc) ( (_pAlloc)->bAssigned \
     202        && (  (_pAlloc)->enmType == VBOXWDDM_ALLOC_TYPE_UMD_RC_GENERIC \
     203           || (_pAlloc)->enmType == \
     204               (((_pDevExt)->fRenderToShadowDisabled) ? VBOXWDDM_ALLOC_TYPE_STD_SHAREDPRIMARYSURFACE : VBOXWDDM_ALLOC_TYPE_STD_SHADOWSURFACE) \
     205               ))
    197206# endif
     207# define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ( ((_pSrc)->pPrimaryAllocation && VBOXWDDM_IS_FB_ALLOCATION(_pDevExt, (_pSrc)->pPrimaryAllocation)) ? \
     208                (_pSrc)->pPrimaryAllocation : ( \
     209                        ((_pSrc)->pShadowAllocation && VBOXWDDM_IS_FB_ALLOCATION(_pDevExt, (_pSrc)->pShadowAllocation)) ? \
     210                                (_pSrc)->pShadowAllocation : NULL \
     211                        ) \
     212                )
    198213#else
    199214# define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ((_pSrc)->pPrimaryAllocation)
Note: See TracChangeset for help on using the changeset viewer.

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