VirtualBox

Ignore:
Timestamp:
Jul 10, 2012 9:47:29 AM (13 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
79022
Message:

wddm/display-only: more imple and fixes

File:
1 edited

Legend:

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

    r41638 r42081  
    3535#define VBOXWDDM_CFG_STR_LOG_UM L"VBoxLogUm"
    3636extern DWORD g_VBoxLogUm;
     37extern DWORD g_VBoxDisplayOnly;
    3738
    3839RT_C_DECLS_BEGIN
     
    7576}
    7677
     78DECLINLINE(VOID) vboxWddmAddrSetVram(PVBOXWDDM_ADDR pAddr, UINT SegmentId, VBOXVIDEOOFFSET offVram)
     79{
     80    pAddr->SegmentId = SegmentId;
     81    pAddr->offVram = offVram;
     82}
     83
     84DECLINLINE(bool) vboxWddmAddrVramEqual(PVBOXWDDM_ADDR pAddr1, PVBOXWDDM_ADDR pAddr2)
     85{
     86    return pAddr1->SegmentId == pAddr2->SegmentId && pAddr1->offVram == pAddr2->offVram;
     87}
     88
     89DECLINLINE(VBOXVIDEOOFFSET) vboxWddmVramAddrToOffset(PVBOXMP_DEVEXT pDevExt, PHYSICAL_ADDRESS Addr)
     90{
     91    PVBOXMP_COMMON pCommon = VBoxCommonFromDeviceExt(pDevExt);
     92    AssertRelease(pCommon->phVRAM.QuadPart < Addr.QuadPart);
     93    return (VBOXVIDEOOFFSET)Addr.QuadPart - pCommon->phVRAM.QuadPart;
     94}
     95
    7796#ifdef VBOXWDDM_RENDER_FROM_SHADOW
    7897DECLINLINE(void) vboxWddmAssignShadow(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_SOURCE pSource, PVBOXWDDM_ALLOCATION pAllocation, D3DDDI_VIDEO_PRESENT_SOURCE_ID srcId)
     
    90109        pOldAlloc->bVisible = FALSE;
    91110        pOldAlloc->bAssigned = FALSE;
    92         Assert(pOldAlloc->SurfDesc.VidPnSourceId == srcId);
     111        Assert(pOldAlloc->AllocData.SurfDesc.VidPnSourceId == srcId);
    93112        /* release the shadow surface */
    94         pOldAlloc->SurfDesc.VidPnSourceId = D3DDDI_ID_UNINITIALIZED;
     113        pOldAlloc->AllocData.SurfDesc.VidPnSourceId = D3DDDI_ID_UNINITIALIZED;
    95114    }
    96115
     
    101120        pAllocation->bVisible = FALSE;
    102121        /* this check ensures the shadow is not used for other source simultaneously */
    103         Assert(pAllocation->SurfDesc.VidPnSourceId == D3DDDI_ID_UNINITIALIZED);
    104         pAllocation->SurfDesc.VidPnSourceId = srcId;
     122        Assert(pAllocation->AllocData.SurfDesc.VidPnSourceId == D3DDDI_ID_UNINITIALIZED);
     123        pAllocation->AllocData.SurfDesc.VidPnSourceId = srcId;
    105124        pAllocation->bAssigned = TRUE;
    106         if (!vboxWddmCmpSurfDescsBase(&pSource->SurfDesc, &pAllocation->SurfDesc))
    107             pSource->offVram = VBOXVIDEOOFFSET_VOID; /* force guest->host notification */
    108         pSource->SurfDesc = pAllocation->SurfDesc;
     125        if(!vboxWddmAddrVramEqual(&pSource->AllocData.Addr, &pAllocation->AllocData.Addr))
     126            pSource->bGhSynced = FALSE; /* force guest->host notification */
     127        pSource->AllocData.Addr = pAllocation->AllocData.Addr;
    109128    }
    110129
     
    125144        pOldAlloc->bVisible = FALSE;
    126145        pOldAlloc->bAssigned = FALSE;
    127         Assert(pOldAlloc->SurfDesc.VidPnSourceId == srcId);
     146        Assert(pOldAlloc->AllocData.SurfDesc.VidPnSourceId == srcId);
    128147
    129148        vboxWddmAllocationRelease(pOldAlloc);
     
    133152    {
    134153        pAllocation->bVisible = FALSE;
    135         Assert(pAllocation->SurfDesc.VidPnSourceId == srcId);
     154        Assert(pAllocation->AllocData.SurfDesc.VidPnSourceId == srcId);
    136155        pAllocation->bAssigned = TRUE;
     156
     157        if(!vboxWddmAddrVramEqual(&pSource->AllocData.Addr, &pAllocation->AllocData.Addr))
     158            pSource->bGhSynced = FALSE; /* force guest->host notification */
     159        pSource->AllocData.Addr = pAllocation->AllocData.Addr;
    137160
    138161        vboxWddmAllocationRetain(pAllocation);
     
    157180}
    158181
    159 
    160182#define VBOXWDDMENTRY_2_SWAPCHAIN(_pE) ((PVBOXWDDM_SWAPCHAIN)((uint8_t*)(_pE) - RT_OFFSETOF(VBOXWDDM_SWAPCHAIN, DevExtListEntry)))
    161183
    162184#ifdef VBOXWDDM_RENDER_FROM_SHADOW
    163 # define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ((_pDevExt)->fRenderToShadowDisabled ? (_pSrc)->pPrimaryAllocation : (_pSrc)->pShadowAllocation)
     185# ifdef VBOX_WDDM_WIN8
     186#  define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ( (g_VBoxDisplayOnly || (_pDevExt)->fRenderToShadowDisabled) ? (_pSrc)->pPrimaryAllocation : (_pSrc)->pShadowAllocation)
     187# else
     188#  define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ((_pDevExt)->fRenderToShadowDisabled ? (_pSrc)->pPrimaryAllocation : (_pSrc)->pShadowAllocation)
     189# endif
    164190#else
    165191# define VBOXWDDM_FB_ALLOCATION(_pDevExt, _pSrc) ((_pSrc)->pPrimaryAllocation)
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