VirtualBox

Changeset 86886 in vbox


Ignore:
Timestamp:
Nov 14, 2020 2:30:53 AM (4 years ago)
Author:
vboxsync
Message:

Devices/Graphics: Map and GBO interfaces. bugref:9830

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

Legend:

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

    r86885 r86886  
    279279# ifdef VBOX_WITH_VMSVGA3D
    280280/*
    281  * Stubs for old backends.
     281 * Stub for old backends.
    282282 */
    283 int vmsvga3dScreenTargetBind(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, uint32_t sid)
    284 {
    285     RT_NOREF(pThisCC, pScreen, sid);
    286     return VERR_NOT_IMPLEMENTED;
    287 }
    288 
    289 int vmsvga3dScreenTargetUpdate(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, SVGA3dRect const *pRect)
    290 {
    291     RT_NOREF(pThisCC, pScreen, pRect);
    292     return VERR_NOT_IMPLEMENTED;
    293 }
    294 
    295 int vmsvga3dSurfaceMap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox, VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap)
    296 {
    297     RT_NOREF(pThisCC, pImage, pBox, enmMapType, pMap);
    298     return VERR_NOT_IMPLEMENTED;
    299 }
    300 
    301 int vmsvga3dSurfaceUnmap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten)
    302 {
    303     RT_NOREF(pThisCC, pImage, pMap, fWritten);
    304     return VERR_NOT_IMPLEMENTED;
    305 }
    306 
    307283int vmsvga3dQueryInterface(PVGASTATECC pThisCC, char const *pszInterfaceName, void *pvInterfaceFuncs, size_t cbInterfaceFuncs)
    308284{
     
    12451221        {
    12461222            VMSVGA3D_MAPPED_SURFACE map;
    1247             rc = vmsvga3dSurfaceMap(pThisCC, &pCmd->image, &pCmd->box, VMSVGA3D_SURFACE_MAP_WRITE_DISCARD, &map);
     1223            rc = pSvgaR3State->pFuncsMap->pfnSurfaceMap(pThisCC, &pCmd->image, &pCmd->box, VMSVGA3D_SURFACE_MAP_WRITE_DISCARD, &map);
    12481224            if (RT_SUCCESS(rc))
    12491225            {
     
    12711247                // vmsvga3dMapWriteBmpFile(&map, "Dynamic");
    12721248
    1273                 vmsvga3dSurfaceUnmap(pThisCC, &pCmd->image, &map, /* fWritten =  */true);
     1249                pSvgaR3State->pFuncsMap->pfnSurfaceUnmap(pThisCC, &pCmd->image, &map, /* fWritten =  */true);
    12741250            }
    12751251        }
     
    14411417            {
    14421418                VMSVGASCREENOBJECT *pScreen = &pSvgaR3State->aScreens[pCmd->stid];
    1443                 rc = vmsvga3dScreenTargetBind(pThisCC, pScreen, pCmd->image.sid);
     1419                rc = pSvgaR3State->pFuncsGBO->pfnScreenTargetBind(pThisCC, pScreen, pCmd->image.sid);
    14441420                AssertRC(rc);
    14451421            }
     
    14851461                    {
    14861462                        /* Copy the screen target surface to the backend's screen. */
    1487                         vmsvga3dScreenTargetUpdate(pThisCC, pScreen, &targetRect);
     1463                        pSvgaR3State->pFuncsGBO->pfnScreenTargetUpdate(pThisCC, pScreen, &targetRect);
    14881464                    }
    14891465                    else if (pScreen->pvScreenBitmap)
     
    14911467                        /* Copy the screen target surface to the memory buffer. */
    14921468                        VMSVGA3D_MAPPED_SURFACE map;
    1493                         rc = vmsvga3dSurfaceMap(pThisCC, &entryScreenTarget.image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
     1469                        rc = pSvgaR3State->pFuncsMap->pfnSurfaceMap(pThisCC, &entryScreenTarget.image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
    14941470                        if (RT_SUCCESS(rc))
    14951471                        {
     
    15081484                            }
    15091485
    1510                             vmsvga3dSurfaceUnmap(pThisCC, &entryScreenTarget.image, &map, /* fWritten =  */ false);
     1486                            pSvgaR3State->pFuncsMap->pfnSurfaceUnmap(pThisCC, &entryScreenTarget.image, &map, /* fWritten =  */ false);
    15111487
    15121488                            vmsvgaR3UpdateScreen(pThisCC, pScreen, pCmd->rect.x, pCmd->rect.y, pCmd->rect.w, pCmd->rect.h);
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA-internal.h

    r86885 r86886  
    190190
    191191# ifdef VBOX_WITH_VMSVGA3D
     192    VMSVGA3DBACKENDFUNCSMAP *pFuncsMap;
     193    VMSVGA3DBACKENDFUNCSGBO *pFuncsGBO;
    192194    VMSVGA3DBACKENDFUNCSDX  *pFuncsDX;
    193195# endif
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA.cpp

    r86885 r86886  
    56665666
    56675667# ifdef VBOX_WITH_VMSVGA3D
     5668    RTMemFree(pSVGAState->pFuncsMap);
     5669    pSVGAState->pFuncsMap = NULL;
     5670    RTMemFree(pSVGAState->pFuncsGBO);
     5671    pSVGAState->pFuncsGBO = NULL;
    56685672    RTMemFree(pSVGAState->pFuncsDX);
    56695673    pSVGAState->pFuncsDX = NULL;
     
    57215725
    57225726        vmsvga3dQueryInterface(pThisCC, VMSVGA3D_BACKEND_INTERFACE_NAME_DX, pSVGAState->pFuncsDX, sizeof(VMSVGA3DBACKENDFUNCSDX));
     5727    }
     5728
     5729    rc = vmsvga3dQueryInterface(pThisCC, VMSVGA3D_BACKEND_INTERFACE_NAME_MAP, NULL, sizeof(VMSVGA3DBACKENDFUNCSMAP));
     5730    if (RT_SUCCESS(rc))
     5731    {
     5732        pSVGAState->pFuncsMap = (VMSVGA3DBACKENDFUNCSMAP *)RTMemAllocZ(sizeof(VMSVGA3DBACKENDFUNCSMAP));
     5733        AssertReturn(pSVGAState->pFuncsMap, VERR_NO_MEMORY);
     5734
     5735        vmsvga3dQueryInterface(pThisCC, VMSVGA3D_BACKEND_INTERFACE_NAME_MAP, pSVGAState->pFuncsMap, sizeof(VMSVGA3DBACKENDFUNCSMAP));
     5736    }
     5737
     5738    rc = vmsvga3dQueryInterface(pThisCC, VMSVGA3D_BACKEND_INTERFACE_NAME_GBO, NULL, sizeof(VMSVGA3DBACKENDFUNCSGBO));
     5739    if (RT_SUCCESS(rc))
     5740    {
     5741        pSVGAState->pFuncsGBO = (VMSVGA3DBACKENDFUNCSGBO *)RTMemAllocZ(sizeof(VMSVGA3DBACKENDFUNCSGBO));
     5742        AssertReturn(pSVGAState->pFuncsGBO, VERR_NO_MEMORY);
     5743
     5744        vmsvga3dQueryInterface(pThisCC, VMSVGA3D_BACKEND_INTERFACE_NAME_GBO, pSVGAState->pFuncsGBO, sizeof(VMSVGA3DBACKENDFUNCSGBO));
    57235745    }
    57245746
     
    57555777        pThis->svga.u32DeviceCaps |= SVGA_CAP_COMMAND_BUFFERS /* Enable register based command buffer submission. */
    57565778//                                  |  SVGA_CAP_CMD_BUFFERS_2   /* Support for SVGA_REG_CMD_PREPEND_LOW/HIGH */
    5757 //                                  |  SVGA_CAP_GBOBJECTS       /* Enable guest-backed objects and surfaces. */
    57585779                                  ;
    57595780
    57605781# ifdef VBOX_WITH_VMSVGA3D
    57615782        PVMSVGAR3STATE pSVGAState = pThisCC->svga.pSvgaR3State;
     5783        if (pSVGAState->pFuncsGBO)
     5784           pThis->svga.u32DeviceCaps |= SVGA_CAP_GBOBJECTS;     /* Enable guest-backed objects and surfaces. */
    57625785        if (pSVGAState->pFuncsDX)
    57635786           pThis->svga.u32DeviceCaps |= SVGA_CAP_CMD_BUFFERS_3; /* AKA SVGA_CAP_DX. Enable support for DX commands, and command buffers in a mob. */
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp

    r86885 r86886  
    893893
    894894
    895 int vmsvga3dSurfaceMap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox,
    896                        VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap)
     895static DECLCALLBACK(int) vmsvga3dSurfaceMap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox,
     896                                            VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap)
    897897{
    898898    PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
     
    987987
    988988
    989 int vmsvga3dSurfaceUnmap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten)
     989static DECLCALLBACK(int) vmsvga3dSurfaceUnmap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten)
    990990{
    991991    PVMSVGA3DSTATE pState = pThisCC->svga.p3dState;
     
    11221122
    11231123
    1124 int vmsvga3dScreenTargetBind(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, uint32_t sid)
     1124static DECLCALLBACK(int) vmsvga3dScreenTargetBind(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, uint32_t sid)
    11251125{
    11261126    int rc = VINF_SUCCESS;
     
    11731173
    11741174
    1175 int vmsvga3dScreenTargetUpdate(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, SVGA3dRect const *pRect)
     1175static DECLCALLBACK(int) vmsvga3dScreenTargetUpdate(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, SVGA3dRect const *pRect)
    11761176{
    11771177    VMSVGAHWSCREEN *pHwScreen = pScreen->pHwScreen;
     
    31173117        }
    31183118    }
     3119    else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_MAP) == 0)
     3120    {
     3121        if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSMAP))
     3122        {
     3123            if (pvInterfaceFuncs)
     3124            {
     3125                VMSVGA3DBACKENDFUNCSMAP *p = (VMSVGA3DBACKENDFUNCSMAP *)pvInterfaceFuncs;
     3126                p->pfnSurfaceMap   = vmsvga3dSurfaceMap;
     3127                p->pfnSurfaceUnmap = vmsvga3dSurfaceUnmap;
     3128            }
     3129        }
     3130        else
     3131        {
     3132            AssertFailed();
     3133            rc = VERR_INVALID_PARAMETER;
     3134        }
     3135    }
     3136    else if (RTStrCmp(pszInterfaceName, VMSVGA3D_BACKEND_INTERFACE_NAME_GBO) == 0)
     3137    {
     3138        if (cbInterfaceFuncs == sizeof(VMSVGA3DBACKENDFUNCSGBO))
     3139        {
     3140            if (pvInterfaceFuncs)
     3141            {
     3142                VMSVGA3DBACKENDFUNCSGBO *p = (VMSVGA3DBACKENDFUNCSGBO *)pvInterfaceFuncs;
     3143                p->pfnScreenTargetBind   = vmsvga3dScreenTargetBind;
     3144                p->pfnScreenTargetUpdate = vmsvga3dScreenTargetUpdate;
     3145            }
     3146        }
     3147        else
     3148        {
     3149            AssertFailed();
     3150            rc = VERR_INVALID_PARAMETER;
     3151        }
     3152    }
    31193153    else
    31203154        rc = VERR_NOT_IMPLEMENTED;
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h

    r86885 r86886  
    130130int vmsvga3dQueryWait(PVGASTATE pThis, PVGASTATECC pThisCC, uint32_t cid, SVGA3dQueryType type, SVGAGuestPtr guestResult);
    131131
    132 int vmsvga3dScreenTargetBind(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, uint32_t sid);
    133 int vmsvga3dScreenTargetUpdate(PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, SVGA3dRect const *pRect);
    134 
    135 int vmsvga3dSurfaceMap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox, VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap);
    136 int vmsvga3dSurfaceUnmap(PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten);
    137 
    138132/* DevVGA-SVGA3d-shared.h: */
    139133#if defined(RT_OS_WINDOWS) && defined(IN_RING3)
     
    271265const char *vmsvga3dPrimitiveType2String(SVGA3dPrimitiveType PrimitiveType);
    272266#endif
     267
     268
     269#define VMSVGA3D_BACKEND_INTERFACE_NAME_GBO "GBO"
     270typedef struct
     271{
     272    DECLCALLBACKMEMBER(int, pfnScreenTargetBind,   (PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, uint32_t sid));
     273    DECLCALLBACKMEMBER(int, pfnScreenTargetUpdate, (PVGASTATECC pThisCC, VMSVGASCREENOBJECT *pScreen, SVGA3dRect const *pRect));
     274} VMSVGA3DBACKENDFUNCSGBO;
     275
     276#define VMSVGA3D_BACKEND_INTERFACE_NAME_MAP "MAP"
     277typedef struct
     278{
     279    DECLCALLBACKMEMBER(int, pfnSurfaceMap,   (PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, SVGA3dBox const *pBox, VMSVGA3D_SURFACE_MAP enmMapType, VMSVGA3D_MAPPED_SURFACE *pMap));
     280    DECLCALLBACKMEMBER(int, pfnSurfaceUnmap, (PVGASTATECC pThisCC, SVGA3dSurfaceImageId const *pImage, VMSVGA3D_MAPPED_SURFACE *pMap, bool fWritten));
     281} VMSVGA3DBACKENDFUNCSMAP;
    273282
    274283#define VMSVGA3D_BACKEND_INTERFACE_NAME_DX "DX"
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