VirtualBox

Changeset 83374 in vbox


Ignore:
Timestamp:
Mar 23, 2020 5:14:57 PM (5 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
136582
Message:

VMSVGA: Check for mode changes from the outer FIFO loop as well, so that mode changes don't depend on FIFO commands being sent (see bugref:9424).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp

    r83354 r83374  
    35603560
    35613561
     3562/**
     3563 * Called by the FIFO thread to process pending actions.
     3564 *
     3565 * @param   pDevIns     The device instance.
     3566 * @param   pThis       The shared VGA/VMSVGA instance data.
     3567 * @param   pThisCC     The VGA/VMSVGA state for ring-3.
     3568 */
     3569void vmsvgaR3FifoPendingActions(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC)
     3570{
     3571    RT_NOREF(pDevIns);
     3572
     3573    /* Currently just mode changes. */
     3574    if (ASMBitTestAndClear(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE_BIT))
     3575    {
     3576        vmsvgaR3ChangeMode(pThis, pThisCC);
     3577# ifdef VBOX_WITH_VMSVGA3D
     3578        if (pThisCC->svga.p3dState != NULL)
     3579            vmsvga3dChangeMode(pThisCC);
     3580# endif
     3581    }
     3582}
     3583
     3584
    35623585/*
    35633586 * These two macros are put outside vmsvgaR3FifoLoop because doxygen gets confused,
     
    36863709            vmsvga3dCocoaServiceRunLoop();
    36873710# endif
     3711
     3712        /* First check any pending actions. */
     3713        vmsvgaR3FifoPendingActions(pDevIns, pThis, pThisCC);
    36883714
    36893715        /*
     
    38353861
    38363862            /* First check any pending actions. */
    3837             if (ASMBitTestAndClear(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE_BIT))
    3838             {
    3839                 vmsvgaR3ChangeMode(pThis, pThisCC);
    3840 # ifdef VBOX_WITH_VMSVGA3D
    3841                 if (pThisCC->svga.p3dState != NULL)
    3842                     vmsvga3dChangeMode(pThisCC);
    3843 # endif
    3844             }
     3863            vmsvgaR3FifoPendingActions(pDevIns, pThis, pThisCC);
    38453864
    38463865            /* Check for pending external commands (reset). */
     
    60146033    PVMSVGAR3STATE  pSVGAState = pThisCC->svga.pSvgaR3State;
    60156034
    6016     ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
    6017 
    60186035    /* Set the active cursor. */
    60196036    if (pSVGAState->Cursor.fActive)
     
    60456062        vgaR3UnregisterVRAMHandler(pDevIns, pThis);
    60466063    }
     6064
     6065    /* Let the FIFO thread deal with changing the mode. */
     6066    ASMAtomicOrU32(&pThis->svga.u32ActionFlags, VMSVGA_ACTION_CHANGEMODE);
    60476067
    60486068    return VINF_SUCCESS;
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