VirtualBox

Changeset 28379 in vbox


Ignore:
Timestamp:
Apr 15, 2010 5:14:16 PM (15 years ago)
Author:
vboxsync
Message:

dev/VGA: avoid extra resizes when HGSMI & VBVA is used (for now enabled only when Wddm driver is isnatalled in the guest)

Location:
trunk/src/VBox/Devices/Graphics
Files:
4 edited

Legend:

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

    r28240 r28379  
    21262126    const unsigned cBits = s->get_bpp(s);
    21272127
    2128     /* Take into account the programmed start address (in DWORDs) of the visible screen. */
    2129     int rc = s->pDrv->pfnResize(s->pDrv, cBits, s->CTX_SUFF(vram_ptr) + s->start_addr * 4, s->line_offset, cx, cy);
     2128    int rc;
     2129#ifdef VBOXVDMA
     2130    /* do not do pfnResize in case VBVA is on since all mode changes are poerofmed over VBVA
     2131     * we are checking for VDMA state here to ensure this code works only for WDDM driver,
     2132     * although we should avoid calling pfnResize for XPDM as well, since pfnResize is actually an extra resize
     2133     * event and generally only pfnVBVAxxx calls should be used with HGSMI + VBVA
     2134     *
     2135     * The reason for doing this for WDDM driver only now is to avoid regressions of the current code */
     2136    PVBOXVDMAHOST pVdma = s->pVdma;
     2137    if (pVdma && vboxVDMAIsEnabled(pVdma))
     2138        rc = VINF_SUCCESS;
     2139    else
     2140#endif
     2141    {
     2142        /* Take into account the programmed start address (in DWORDs) of the visible screen. */
     2143        rc = s->pDrv->pfnResize(s->pDrv, cBits, s->CTX_SUFF(vram_ptr) + s->start_addr * 4, s->line_offset, cx, cy);
     2144    }
    21302145
    21312146    /* last stuff */
  • trunk/src/VBox/Devices/Graphics/DevVGA.h

    r28210 r28379  
    470470int      VBVAUpdateDisplay (PVGASTATE pVGAState);
    471471void     VBVAReset (PVGASTATE pVGAState);
     472
     473bool VBVAIsEnabled(PVGASTATE pVGAState);
     474
    472475/* @return host-guest flags that were set on reset
    473476 * this allows the caller to make further cleaning when needed,
     
    494497void vboxVDMAControl(PVBOXVDMAHOST pVdma, PVBOXVDMA_CTL pCmd);
    495498void vboxVDMACommand(PVBOXVDMAHOST pVdma, PVBOXVDMACBUF_DR pCmd);
     499bool vboxVDMAIsEnabled(PVBOXVDMAHOST pVdma);
    496500# endif /* VBOXVDMA */
    497501
  • trunk/src/VBox/Devices/Graphics/DevVGA_VBVA.cpp

    r28228 r28379  
    525525    pVGAState->pDrv->pfnVBVADisable (pVGAState->pDrv, uScreenId);
    526526    return VINF_SUCCESS;
     527}
     528
     529bool VBVAIsEnabled(PVGASTATE pVGAState)
     530{
     531    PHGSMIINSTANCE pHGSMI = pVGAState->pHGSMI;
     532    if (pHGSMI)
     533    {
     534        VBVACONTEXT *pCtx = (VBVACONTEXT *)HGSMIContext(pHGSMI);
     535        if (pCtx)
     536        {
     537            if (pCtx->cViews)
     538            {
     539                VBVAVIEW * pView = &pCtx->aViews[0];
     540                if (pView->pVBVA)
     541                    return true;
     542            }
     543        }
     544    }
     545    return false;
    527546}
    528547
  • trunk/src/VBox/Devices/Graphics/DevVGA_VDMA.cpp

    r27429 r28379  
    8787    PHGSMIINSTANCE pHgsmi;
    8888    PVGASTATE pVGAState;
     89    bool bEnabled;
    8990    VBOXVDMAPIPE_CMD_POOL CmdPool;
    9091} VBOXVDMAHOST, *PVBOXVDMAHOST;
     
    780781    {
    781782        case VBOXVDMA_CTL_TYPE_ENABLE:
     783            pVdma->bEnabled = true;
    782784            pCmd->i32Result = VINF_SUCCESS;
    783785            break;
    784786        case VBOXVDMA_CTL_TYPE_DISABLE:
     787            pVdma->bEnabled = false;
    785788            pCmd->i32Result = VINF_SUCCESS;
    786789            break;
     
    853856}
    854857
     858bool vboxVDMAIsEnabled(PVBOXVDMAHOST pVdma)
     859{
     860    return pVdma->bEnabled;
     861}
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