VirtualBox

Changeset 69848 in vbox for trunk/src/VBox


Ignore:
Timestamp:
Nov 27, 2017 6:08:01 PM (7 years ago)
Author:
vboxsync
Message:

Devices/Graphics: VDMA: ability to work when SharedOpenGL HGCM service is disabled (second try).

File:
1 edited

Legend:

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

    r69847 r69848  
    12781278    }
    12791279
    1280     if (!pVdma->CrSrvInfo.pfnEnable)
    1281     {
    1282 # ifdef DEBUG_misha
    1283         WARN(("pfnEnable is NULL\n"));
    1284         return VERR_NOT_SUPPORTED;
    1285 # endif
    1286     }
    1287 
    12881280    int rc = VBoxVBVAExHSEnable(&pVdma->CmdVbva, pVBVA);
    12891281    if (RT_SUCCESS(rc))
    12901282    {
     1283        if (!pVdma->CrSrvInfo.pfnEnable)
     1284        {
     1285            /* "HGCM-less" mode. All inited. */
     1286            return VINF_SUCCESS;
     1287        }
     1288
    12911289        VBOXCRCMDCTL_DISABLE Disable;
    12921290        Disable.Hdr.enmType = VBOXCRCMDCTL_TYPE_DISABLE;
     
    13301328    }
    13311329
     1330    if (!pVdma->CrSrvInfo.pfnDisable)
     1331    {
     1332        /* "HGCM-less" mode. Just undo what vdmaVBVAEnableProcess did. */
     1333        VBoxVBVAExHSDisable(&pVdma->CmdVbva);
     1334        return VINF_SUCCESS;
     1335    }
     1336
    13321337    int rc = pVdma->CrSrvInfo.pfnDisable(pVdma->CrSrvInfo.hSvr);
    13331338    if (RT_SUCCESS(rc))
     
    13741379                return VERR_INVALID_STATE;
    13751380            }
     1381            if (!pVdma->CrSrvInfo.pfnHostCtl)
     1382            {
     1383                /* Should not be. */
     1384                WARN(("VBVAEXHOSTCTL_TYPE_GHH_BE_OPAQUE for HGCM-less mode\n"));
     1385                return VERR_INVALID_STATE;
     1386            }
    13761387            return pVdma->CrSrvInfo.pfnHostCtl(pVdma->CrSrvInfo.hSvr, pCmd->u.cmd.pu8Cmd, pCmd->u.cmd.cbCmd);
    13771388        }
     
    14181429            VGA_SAVED_STATE_PUT_MARKER(pCmd->u.state.pSSM, 4);
    14191430
     1431            if (!pVdma->CrSrvInfo.pfnSaveState)
     1432            {
     1433                /* Done. */
     1434                return VINF_SUCCESS;
     1435            }
     1436
    14201437            return pVdma->CrSrvInfo.pfnSaveState(pVdma->CrSrvInfo.hSvr, pCmd->u.state.pSSM);
    14211438        }
     
    14331450
    14341451            VGA_SAVED_STATE_GET_MARKER_RETURN_ON_MISMATCH(pCmd->u.state.pSSM, pCmd->u.state.u32Version, 4);
     1452            if (!pVdma->CrSrvInfo.pfnLoadState)
     1453            {
     1454                /* Done. */
     1455                return VINF_SUCCESS;
     1456            }
     1457
    14351458            rc = pVdma->CrSrvInfo.pfnLoadState(pVdma->CrSrvInfo.hSvr, pCmd->u.state.pSSM, pCmd->u.state.u32Version);
    14361459            if (RT_FAILURE(rc))
     
    15491572    ASMBitClearRange(aTargetMap, pVGAState->cMonitors, VBOX_VIDEO_MAX_SCREENS);
    15501573
    1551     rc = pVdma->CrSrvInfo.pfnResize(pVdma->CrSrvInfo.hSvr, &Screen, aTargetMap);
    1552     if (RT_FAILURE(rc))
    1553     {
    1554         WARN(("pfnResize failed %d\n", rc));
    1555         return rc;
     1574    if (pVdma->CrSrvInfo.pfnResize)
     1575    {
     1576        /* Also inform the HGCM service, if it is there. */
     1577        rc = pVdma->CrSrvInfo.pfnResize(pVdma->CrSrvInfo.hSvr, &Screen, aTargetMap);
     1578        if (RT_FAILURE(rc))
     1579        {
     1580            WARN(("pfnResize failed %d\n", rc));
     1581            return rc;
     1582        }
    15561583    }
    15571584
     
    16141641            {
    16151642                WARN(("VBVAEXHOSTCTL_TYPE_GHH_BE_OPAQUE for disabled vdma VBVA\n"));
     1643                return VERR_INVALID_STATE;
     1644            }
     1645            if (!pVdma->CrSrvInfo.pfnGuestCtl)
     1646            {
     1647                /* Unexpected. */
     1648                WARN(("VBVAEXHOSTCTL_TYPE_GHH_BE_OPAQUE in HGCM-less mode\n"));
    16161649                return VERR_INVALID_STATE;
    16171650            }
     
    18951928        }
    18961929        default:
     1930            if (!pVdma->CrSrvInfo.pfnCmd)
     1931            {
     1932                /* Unexpected. */
     1933                WARN(("no HGCM"));
     1934                return -1;
     1935            }
    18971936            return pVdma->CrSrvInfo.pfnCmd(pVdma->CrSrvInfo.hSvr, pCmd, cbCmd);
    18981937    }
     
    28002839                {
    28012840                    pVGAState->pVdma = pVdma;
    2802                     int rcIgnored = vboxVDMACrCtlHgsmiSetup(pVdma); NOREF(rcIgnored); /** @todo is this ignoring intentional? */
     2841
     2842                    /* No HGCM service if VMSVGA is enabled. */
     2843                    if (!pVGAState->fVMSVGAEnabled)
     2844                    {
     2845                        int rcIgnored = vboxVDMACrCtlHgsmiSetup(pVdma); NOREF(rcIgnored); /** @todo is this ignoring intentional? */
     2846                    }
    28032847                    return VINF_SUCCESS;
    28042848                }
     
    28432887        return VINF_SUCCESS;
    28442888#ifdef VBOX_WITH_CRHGSMI
    2845     vdmaVBVACtlDisableSync(pVdma);
     2889    if (pVdma->pVGAState->fVMSVGAEnabled)
     2890        VBoxVBVAExHSDisable(&pVdma->CmdVbva);
     2891    else
     2892    {
     2893        /** @todo Remove. It does nothing because pVdma->CmdVbva is already disabled at this point
     2894         *        as the result of the SharedOpenGL HGCM service unloading.
     2895         */
     2896        vdmaVBVACtlDisableSync(pVdma);
     2897    }
    28462898    VBoxVDMAThreadCleanup(&pVdma->Thread);
    28472899    VBoxVBVAExHSTerm(&pVdma->CmdVbva);
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