VirtualBox

Ignore:
Timestamp:
Nov 15, 2018 4:09:11 PM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
126644
Message:

WDDM: Gallium miniport driver: wait until the host completes submitted commands.

File:
1 edited

Legend:

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

    r75460 r75487  
    18761876
    18771877    DXGKRNL_INTERFACE *pDxgkInterface = &pDevExt->u.primary.DxgkInterface;
    1878     BOOLEAN bReturnValue = FALSE;
    1879     Status = pDxgkInterface->DxgkCbSynchronizeExecution(pDxgkInterface->DeviceHandle,
    1880                                                         gaQueryCurrentFenceCb, pDevExt, 0, &bReturnValue);
    1881     Assert(bReturnValue);
     1878    LARGE_INTEGER DelayInterval;
     1879    DelayInterval.QuadPart = -10LL * 1000LL * 1000LL;
     1880    uint32_t u32LastCompletedFenceId = 0;
     1881
     1882    /* Wait until the host processes all submitted buffers to allow delays on the host (debug, etc). */
     1883    for (;;)
     1884    {
     1885        BOOLEAN bReturnValue = FALSE;
     1886        Status = pDxgkInterface->DxgkCbSynchronizeExecution(pDxgkInterface->DeviceHandle,
     1887                                                            gaQueryCurrentFenceCb, pDevExt, 0, &bReturnValue);
     1888        Assert(bReturnValue);
     1889        if (Status != STATUS_SUCCESS)
     1890        {
     1891            break;
     1892        }
     1893
     1894        u32LastCompletedFenceId = ASMAtomicReadU32(&pGaDevExt->u32LastCompletedFenceId);
     1895        uint32_t const u32LastSubmittedFenceId = ASMAtomicReadU32(&pGaDevExt->u32LastSubmittedFenceId);
     1896        if (u32LastCompletedFenceId == u32LastSubmittedFenceId)
     1897        {
     1898            break;
     1899        }
     1900
     1901        GALOG(("hAdapter %p, LastCompletedFenceId %d, LastSubmittedFenceId %d...\n", hAdapter, u32LastCompletedFenceId, u32LastSubmittedFenceId));
     1902
     1903        KeDelayExecutionThread(KernelMode, FALSE, &DelayInterval);
     1904    }
    18821905
    18831906    if (Status == STATUS_SUCCESS)
    18841907    {
    1885         /** @todo Wait until the host processes some or all submitted buffers? */
    1886         pCurrentFence->CurrentFence = ASMAtomicReadU32(&pGaDevExt->u32LastCompletedFenceId);
     1908        pCurrentFence->CurrentFence = u32LastCompletedFenceId;
    18871909    }
    18881910
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