VirtualBox

Ignore:
Timestamp:
May 9, 2022 6:48:47 AM (3 years ago)
Author:
vboxsync
Message:

WDDM: Fill and DiscardContent paging operations; various fixes. bugref:9845

File:
1 edited

Legend:

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

    r94881 r94927  
    19651965
    19661966    NTSTATUS Status;
     1967    AssertCompile(NIL_RTR0MEMOBJ == 0);
    19671968
    19681969    *ppMob = (PVMSVGAMOB)GaMemAllocZero(sizeof(VMSVGAMOB));
     
    19861987        ExReleaseFastMutex(&pSvga->SvgaMutex);
    19871988
    1988         if (pMob->hMemObj)
    1989         {
    1990             int rc = RTR0MemObjFree(pMob->hMemObj, true);
     1989        if (pMob->hMemObjPT != NIL_RTR0MEMOBJ)
     1990        {
     1991            int rc = RTR0MemObjFree(pMob->hMemObjPT, true);
    19911992            AssertRC(rc);
     1993            pMob->hMemObjPT = NIL_RTR0MEMOBJ;
    19921994        }
    19931995
     
    20352037    if (pMob->cDescriptionPages)
    20362038    {
    2037         int rc = RTR0MemObjAllocPageTag(&pMob->hMemObj, pMob->cDescriptionPages * PAGE_SIZE,
     2039        int rc = RTR0MemObjAllocPageTag(&pMob->hMemObjPT, pMob->cDescriptionPages * PAGE_SIZE,
    20382040                                        false /* executable R0 mapping */, "VMSVGAMOB");
    20392041        AssertRCReturnStmt(rc, SvgaMobFree(pSvga, pMob), STATUS_INSUFFICIENT_RESOURCES);
     
    20442046             * Skip the level 2 page at index 0.
    20452047             */
    2046             PPN64 *paPpn = (PPN64 *)RTR0MemObjAddress(pMob->hMemObj);
     2048            PPN64 *paPpn = (PPN64 *)RTR0MemObjAddress(pMob->hMemObjPT);
    20472049            for (unsigned i = 1; i < pMob->cDescriptionPages; ++i)
    2048                 paPpn[i - 1] = RTR0MemObjGetPagePhysAddr(pMob->hMemObj, i) >> PAGE_SHIFT;
     2050                paPpn[i - 1] = RTR0MemObjGetPagePhysAddr(pMob->hMemObjPT, i) >> PAGE_SHIFT;
    20492051        }
    20502052    }
     
    20722074    {
    20732075        /* The first of pages is alway the base. It is either the level 2 page or the single level 1 page */
    2074         pMob->base = RTR0MemObjGetPagePhysAddr(pMob->hMemObj, 0) >> PAGE_SHIFT;
    2075 
    2076         PPN64 *paPpn = (PPN64 *)RTR0MemObjAddress(pMob->hMemObj);
     2076        pMob->base = RTR0MemObjGetPagePhysAddr(pMob->hMemObjPT, 0) >> PAGE_SHIFT;
     2077
     2078        PPN64 *paPpn = (PPN64 *)RTR0MemObjAddress(pMob->hMemObjPT);
    20772079        PPN64 *paPpnMdlPfn;
    20782080        if (pMob->enmMobFormat == SVGA3D_MOBFMT_PTDEPTH64_2)
     
    21022104    {
    21032105        /* The first of pages is alway the base. It is either the level 2 page or the single level 1 page */
    2104         pMob->base = RTR0MemObjGetPagePhysAddr(pMob->hMemObj, 0) >> PAGE_SHIFT;
    2105 
    2106         PPN64 *paPpn = (PPN64 *)RTR0MemObjAddress(pMob->hMemObj);
     2106        pMob->base = RTR0MemObjGetPagePhysAddr(pMob->hMemObjPT, 0) >> PAGE_SHIFT;
     2107
     2108        PPN64 *paPpn = (PPN64 *)RTR0MemObjAddress(pMob->hMemObjPT);
    21072109        PPN64 *paPpnMob;
    21082110        if (pMob->enmMobFormat == SVGA3D_MOBFMT_PTDEPTH64_2)
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