VirtualBox

Ignore:
Timestamp:
Aug 24, 2009 1:02:40 PM (16 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
51391
Message:

HGSMI/VBVA updates

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/DisplayImpl.cpp

    r22277 r22412  
    213213        memset (&maFramebuffers[ul].dirtyRect, 0 , sizeof (maFramebuffers[ul].dirtyRect));
    214214        memset (&maFramebuffers[ul].pendingResize, 0 , sizeof (maFramebuffers[ul].pendingResize));
     215#ifdef VBOX_WITH_HGSMI
     216        maFramebuffers[ul].fVBVAEnabled = false;
     217#endif /* VBOX_WITH_HGSMI */
    215218    }
    216219
     
    582585    pFramebuffer->Unlock();
    583586
     587#ifndef VBOX_WITH_HGSMI
    584588    if (!mfVideoAccelEnabled)
    585589    {
     590#else
     591    if (!mfVideoAccelEnabled && !maFramebuffers[uScreenId].fVBVAEnabled)
     592    {
     593        LogFlowFunc(("HGSMI: VRDP update without VBVA.\n"));
     594#endif /* VBOX_WITH_HGSMI */
    586595        /* When VBVA is enabled, the VRDP server is informed in the VideoAccelFlush.
    587596         * Inform the server here only if VBVA is disabled.
     
    23762385#endif
    23772386
     2387#ifdef VBOX_WITH_HGSMI
     2388DECLCALLBACK(int) Display::displayVBVAEnable(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId)
     2389{
     2390    LogFlowFunc(("uScreenId %d\n", uScreenId));
     2391
     2392    PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
     2393    Display *pThis = pDrv->pDisplay;
     2394
     2395    pThis->maFramebuffers[uScreenId].fVBVAEnabled = true;
     2396   
     2397    return VINF_SUCCESS;
     2398}
     2399
     2400DECLCALLBACK(void) Display::displayVBVADisable(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId)
     2401{
     2402    LogFlowFunc(("uScreenId %d\n", uScreenId));
     2403
     2404    PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
     2405    Display *pThis = pDrv->pDisplay;
     2406
     2407    pThis->maFramebuffers[uScreenId].fVBVAEnabled = false;
     2408}
     2409
     2410DECLCALLBACK(void) Display::displayVBVAUpdateBegin(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId)
     2411{
     2412    LogFlowFunc(("uScreenId %d\n", uScreenId));
     2413
     2414    PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
     2415    Display *pThis = pDrv->pDisplay;
     2416
     2417    NOREF(uScreenId);
     2418}
     2419
     2420DECLCALLBACK(void) Display::displayVBVAUpdateProcess(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId, const PVBVACMDHDR pCmd, size_t cbCmd)
     2421{
     2422    LogFlowFunc(("uScreenId %d pCmd %p cbCmd %d\n", uScreenId, pCmd, cbCmd));
     2423
     2424    PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
     2425    Display *pThis = pDrv->pDisplay;
     2426
     2427    pThis->mParent->consoleVRDPServer()->SendUpdate (uScreenId, pCmd, cbCmd);
     2428}
     2429
     2430DECLCALLBACK(void) Display::displayVBVAUpdateEnd(PPDMIDISPLAYCONNECTOR pInterface, unsigned uScreenId, uint32_t x, uint32_t y, uint32_t cx, uint32_t cy)
     2431{
     2432    LogFlowFunc(("uScreenId %d %d,%d %dx%d\n", uScreenId, x, y, cx, cy));
     2433
     2434    PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
     2435    Display *pThis = pDrv->pDisplay;
     2436
     2437    /* @todo handleFramebufferUpdate (uScreenId,
     2438     *                                x - pThis->maFramebuffers[uScreenId].xOrigin,
     2439     *                                y - pThis->maFramebuffers[uScreenId].yOrigin,
     2440     *                                cx, cy);
     2441     */
     2442    pThis->handleDisplayUpdate(x, y, cx, cy);
     2443}
     2444
     2445DECLCALLBACK(int) Display::displayVBVAResize(PPDMIDISPLAYCONNECTOR pInterface, const PVBVAINFOVIEW pView, const PVBVAINFOSCREEN pScreen, void *pvVRAM)
     2446{
     2447    LogFlowFunc(("pScreen %p, pvVRAM %p\n", pScreen, pvVRAM));
     2448
     2449    PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
     2450    Display *pThis = pDrv->pDisplay;
     2451
     2452    DISPLAYFBINFO *pFBInfo = &pThis->maFramebuffers[pScreen->u32ViewIndex];
     2453
     2454    pFBInfo->u32Offset = pView->u32ViewOffset; /* Not used in HGSMI. */
     2455    pFBInfo->u32MaxFramebufferSize = pView->u32MaxScreenSize; /* Not used in HGSMI. */
     2456    pFBInfo->u32InformationSize = 0; /* Not used in HGSMI. */
     2457
     2458    pFBInfo->xOrigin = pScreen->i32OriginX;
     2459    pFBInfo->yOrigin = pScreen->i32OriginY;
     2460
     2461    pFBInfo->w = pScreen->u32Width;
     2462    pFBInfo->h = pScreen->u32Height;
     2463
     2464    return pThis->handleDisplayResize(pScreen->u32ViewIndex, pScreen->u16BitsPerPixel,
     2465                                      (uint8_t *)pvVRAM + pScreen->u32StartOffset,
     2466                                      pScreen->u32LineSize, pScreen->u32Width, pScreen->u32Height);
     2467}
     2468
     2469DECLCALLBACK(int) Display::displayVBVAMousePointerShape(PPDMIDISPLAYCONNECTOR pInterface, bool fVisible, bool fAlpha,
     2470                                                        uint32_t xHot, uint32_t yHot,
     2471                                                        uint32_t cx, uint32_t cy,
     2472                                                        const void *pvShape)
     2473{
     2474    LogFlowFunc(("\n"));
     2475
     2476    PDRVMAINDISPLAY pDrv = PDMIDISPLAYCONNECTOR_2_MAINDISPLAY(pInterface);
     2477    Display *pThis = pDrv->pDisplay;
     2478
     2479    /* Tell the console about it */
     2480    pDrv->pDisplay->mParent->onMousePointerShapeChange(fVisible, fAlpha,
     2481                                                       xHot, yHot, cx, cy, (void *)pvShape);
     2482
     2483    return VINF_SUCCESS;
     2484}
     2485#endif /* VBOX_WITH_HGSMI */
     2486
    23782487/**
    23792488 * Queries an interface to the driver.
     
    24582567    pData->Connector.pfnVHWACommandProcess = Display::displayVHWACommandProcess;
    24592568#endif
     2569#ifdef VBOX_WITH_HGSMI
     2570    pData->Connector.pfnVBVAEnable         = Display::displayVBVAEnable;
     2571    pData->Connector.pfnVBVADisable        = Display::displayVBVADisable;
     2572    pData->Connector.pfnVBVAUpdateBegin    = Display::displayVBVAUpdateBegin;
     2573    pData->Connector.pfnVBVAUpdateProcess  = Display::displayVBVAUpdateProcess;
     2574    pData->Connector.pfnVBVAUpdateEnd      = Display::displayVBVAUpdateEnd;
     2575    pData->Connector.pfnVBVAResize         = Display::displayVBVAResize;
     2576    pData->Connector.pfnVBVAMousePointerShape = Display::displayVBVAMousePointerShape;
     2577#endif
     2578
    24602579
    24612580    /*
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