VirtualBox

Ignore:
Timestamp:
Jun 15, 2010 10:42:46 PM (15 years ago)
Author:
vboxsync
Message:

wddm/2d: overlay flip/destroy in UMD

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp

    r30215 r30216  
    36963696static HRESULT APIENTRY vboxWddmDDevFlipOverlay(HANDLE hDevice, CONST D3DDDIARG_FLIPOVERLAY* pData)
    36973697{
    3698     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    3699     AssertBreakpoint();
    3700     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    3701     return E_FAIL;
     3698    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     3699    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     3700    PVBOXWDDMDISP_RESOURCE pRc = (PVBOXWDDMDISP_RESOURCE)pData->hSource;
     3701    Assert(pRc);
     3702    Assert(pRc->cAllocations > pData->SourceIndex);
     3703    PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[pData->SourceIndex];
     3704    HRESULT hr = S_OK;
     3705    PVBOXWDDMDISP_OVERLAY pOverlay = (PVBOXWDDMDISP_OVERLAY)pData->hOverlay;
     3706    VBOXWDDM_OVERLAYFLIP_INFO OurInfo;
     3707    vboxWddmDirtyRegionClear(&OurInfo.DirtyRegion);
     3708    Assert(!pAlloc->LockInfo.cLocks);
     3709    vboxWddmDirtyRegionUnite(&OurInfo.DirtyRegion, &pAlloc->DirtyRegion);
     3710    D3DDDICB_FLIPOVERLAY OverInfo;
     3711    OverInfo.hKernelOverlay = pOverlay->hOverlay;
     3712    OverInfo.hSource = pAlloc->hAllocation;
     3713    OverInfo.pPrivateDriverData = &OurInfo;
     3714    OverInfo.PrivateDriverDataSize = sizeof (OurInfo);
     3715    hr = pDevice->RtCallbacks.pfnFlipOverlayCb(pDevice->hDevice, &OverInfo);
     3716    Assert(hr == S_OK);
     3717    if (hr == S_OK)
     3718    {
     3719        Assert(!pAlloc->LockInfo.cLocks);
     3720        if (!pAlloc->LockInfo.cLocks)
     3721        {
     3722            /* we have reported the dirty rect, may clear it if no locks are pending currently */
     3723            vboxWddmDirtyRegionClear(&pAlloc->DirtyRegion);
     3724        }
     3725    }
     3726
     3727    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     3728    return hr;
    37023729}
    37033730static HRESULT APIENTRY vboxWddmDDevGetOverlayColorControls(HANDLE hDevice, D3DDDIARG_GETOVERLAYCOLORCONTROLS* pData)
     
    37173744static HRESULT APIENTRY vboxWddmDDevDestroyOverlay(HANDLE hDevice, CONST D3DDDIARG_DESTROYOVERLAY* pData)
    37183745{
    3719     vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    3720     AssertBreakpoint();
    3721     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    3722     return E_FAIL;
     3746    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     3747    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
     3748    PVBOXWDDMDISP_OVERLAY pOverlay = (PVBOXWDDMDISP_OVERLAY)pData->hOverlay;
     3749    D3DDDICB_DESTROYOVERLAY OverInfo;
     3750    OverInfo.hKernelOverlay = pOverlay->hOverlay;
     3751    HRESULT hr = pDevice->RtCallbacks.pfnDestroyOverlayCb(pDevice->hDevice, &OverInfo);
     3752    Assert(hr == S_OK);
     3753    if (hr == S_OK)
     3754    {
     3755        RTMemFree(pOverlay);
     3756    }
     3757
     3758    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     3759    return hr;
    37233760}
    37243761static HRESULT APIENTRY vboxWddmDDevQueryResourceResidency(HANDLE hDevice, CONST D3DDDIARG_QUERYRESOURCERESIDENCY* pData)
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