VirtualBox

Changeset 95008 in vbox


Ignore:
Timestamp:
May 13, 2022 4:20:40 PM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
151437
Message:

Devices/Graphics: 64 bit surface flags and increased save state version; unordered access views; new commands: bugref:9830

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

Legend:

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

    r94989 r95008  
    19511951    entry.arraySize = pCmd->arraySize;
    19521952    // entry.mobPitch = 0;
    1953     // ...
     1953    // entry.mobPitch = 0;
     1954    // entry.surface2Flags = 0;
     1955    // entry.multisamplePattern = 0;
     1956    // entry.qualityLevel = 0;
     1957    // entry.bufferByteStride = 0;
     1958    // entry.minLOD = 0;
    19541959
    19551960    int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
     
    36243629
    36253630/* SVGA_3D_CMD_DEFINE_GB_SURFACE_V3 1239 */
    3626 static int vmsvga3dCmdDefineGBSurface_v3(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDefineGBSurface_v3 const *pCmd, uint32_t cbCmd)
     3631static int vmsvga3dCmdDefineGBSurface_v3(PVGASTATECC pThisCC, SVGA3dCmdDefineGBSurface_v3 const *pCmd)
    36273632{
    36283633#ifdef VMSVGA3D_DX
    36293634    DEBUG_BREAKPOINT_TEST();
    36303635    PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3631     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3632     return vmsvga3dDefineGBSurface_v3(pThisCC, idDXContext);
     3636
     3637    /* Update the entry in the pSvgaR3State->pGboOTableSurface. */
     3638    SVGAOTableSurfaceEntry entry;
     3639    RT_ZERO(entry);
     3640    entry.format = pCmd->format;
     3641    entry.surface1Flags = (uint32_t)(pCmd->surfaceFlags);
     3642    entry.numMipLevels = pCmd->numMipLevels;
     3643    entry.multisampleCount = pCmd->multisampleCount;
     3644    entry.autogenFilter = pCmd->autogenFilter;
     3645    entry.size = pCmd->size;
     3646    entry.mobid = SVGA_ID_INVALID;
     3647    entry.arraySize = pCmd->arraySize;
     3648    // entry.mobPitch = 0;
     3649    // entry.mobPitch = 0;
     3650    entry.surface2Flags = (uint32_t)(pCmd->surfaceFlags >> UINT64_C(32));
     3651    // entry.multisamplePattern = 0;
     3652    // entry.qualityLevel = 0;
     3653    // entry.bufferByteStride = 0;
     3654    // entry.minLOD = 0;
     3655
     3656    int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
     3657                                 pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
     3658    if (RT_SUCCESS(rc))
     3659    {
     3660        /* Create the host surface. */
     3661        /** @todo SVGAOTableSurfaceEntry as input parameter? */
     3662        vmsvga3dSurfaceDefine(pThisCC, pCmd->sid, pCmd->surfaceFlags, pCmd->format,
     3663                              pCmd->multisampleCount, pCmd->autogenFilter,
     3664                              pCmd->numMipLevels, &pCmd->size, pCmd->arraySize, /* fAllocMipLevels = */ false);
     3665    }
     3666    return rc;
    36333667#else
    36343668    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    37173751{
    37183752#ifdef VMSVGA3D_DX
    3719     DEBUG_BREAKPOINT_TEST();
    3720     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3721     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3722     return vmsvga3dDXDefineUAView(pThisCC, idDXContext);
     3753    //DEBUG_BREAKPOINT_TEST();
     3754    RT_NOREF(cbCmd);
     3755    return vmsvga3dDXDefineUAView(pThisCC, idDXContext, pCmd);
    37233756#else
    37243757    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    37333766#ifdef VMSVGA3D_DX
    37343767    DEBUG_BREAKPOINT_TEST();
    3735     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3736     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3737     return vmsvga3dDXDestroyUAView(pThisCC, idDXContext);
     3768    RT_NOREF(cbCmd);
     3769    return vmsvga3dDXDestroyUAView(pThisCC, idDXContext, pCmd);
    37383770#else
    37393771    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    37483780#ifdef VMSVGA3D_DX
    37493781    DEBUG_BREAKPOINT_TEST();
    3750     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3751     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3752     return vmsvga3dDXClearUAViewUint(pThisCC, idDXContext);
     3782    RT_NOREF(cbCmd);
     3783    return vmsvga3dDXClearUAViewUint(pThisCC, idDXContext, pCmd);
    37533784#else
    37543785    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    37633794#ifdef VMSVGA3D_DX
    37643795    DEBUG_BREAKPOINT_TEST();
    3765     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3766     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3767     return vmsvga3dDXClearUAViewFloat(pThisCC, idDXContext);
     3796    RT_NOREF(cbCmd);
     3797    return vmsvga3dDXClearUAViewFloat(pThisCC, idDXContext, pCmd);
    37683798#else
    37693799    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    37923822{
    37933823#ifdef VMSVGA3D_DX
    3794     DEBUG_BREAKPOINT_TEST();
    3795     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3796     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3797     return vmsvga3dDXSetUAViews(pThisCC, idDXContext);
     3824    //DEBUG_BREAKPOINT_TEST();
     3825    SVGA3dUAViewId const *paUAViewId = (SVGA3dUAViewId *)&pCmd[1];
     3826    uint32_t const cUAViewId = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dUAViewId);
     3827    return vmsvga3dDXSetUAViews(pThisCC, idDXContext, pCmd, cUAViewId, paUAViewId);
    37983828#else
    37993829    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    38373867{
    38383868#ifdef VMSVGA3D_DX
    3839     DEBUG_BREAKPOINT_TEST();
    3840     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3841     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    3842     return vmsvga3dDXDispatch(pThisCC, idDXContext);
     3869    //DEBUG_BREAKPOINT_TEST();
     3870    RT_NOREF(cbCmd);
     3871    return vmsvga3dDXDispatch(pThisCC, idDXContext, pCmd);
    38433872#else
    38443873    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    40144043
    40154044/* SVGA_3D_CMD_DEFINE_GB_SURFACE_V4 1267 */
    4016 static int vmsvga3dCmdDefineGBSurface_v4(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDefineGBSurface_v4 const *pCmd, uint32_t cbCmd)
    4017 {
    4018 #ifdef VMSVGA3D_DX
    4019     DEBUG_BREAKPOINT_TEST();
    4020     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    4021     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    4022     return vmsvga3dDefineGBSurface_v4(pThisCC, idDXContext);
     4045static int vmsvga3dCmdDefineGBSurface_v4(PVGASTATECC pThisCC, SVGA3dCmdDefineGBSurface_v4 const *pCmd)
     4046{
     4047#ifdef VMSVGA3D_DX
     4048    //DEBUG_BREAKPOINT_TEST();
     4049    PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
     4050
     4051    /* Update the entry in the pSvgaR3State->pGboOTableSurface. */
     4052    SVGAOTableSurfaceEntry entry;
     4053    RT_ZERO(entry);
     4054    entry.format = pCmd->format;
     4055    entry.surface1Flags = (uint32_t)(pCmd->surfaceFlags);
     4056    entry.numMipLevels = pCmd->numMipLevels;
     4057    entry.multisampleCount = pCmd->multisampleCount;
     4058    entry.autogenFilter = pCmd->autogenFilter;
     4059    entry.size = pCmd->size;
     4060    entry.mobid = SVGA_ID_INVALID;
     4061    entry.arraySize = pCmd->arraySize;
     4062    // entry.mobPitch = 0;
     4063    // entry.mobPitch = 0;
     4064    entry.surface2Flags = (uint32_t)(pCmd->surfaceFlags >> UINT64_C(32));
     4065    // entry.multisamplePattern = 0;
     4066    // entry.qualityLevel = 0;
     4067    entry.bufferByteStride = pCmd->bufferByteStride;
     4068    // entry.minLOD = 0;
     4069
     4070    int rc = vmsvgaR3OTableWrite(pSvgaR3State, &pSvgaR3State->aGboOTables[SVGA_OTABLE_SURFACE],
     4071                                 pCmd->sid, SVGA3D_OTABLE_SURFACE_ENTRY_SIZE, &entry, sizeof(entry));
     4072    if (RT_SUCCESS(rc))
     4073    {
     4074        /* Create the host surface. */
     4075        /** @todo SVGAOTableSurfaceEntry as input parameter? */
     4076        vmsvga3dSurfaceDefine(pThisCC, pCmd->sid, pCmd->surfaceFlags, pCmd->format,
     4077                              pCmd->multisampleCount, pCmd->autogenFilter,
     4078                              pCmd->numMipLevels, &pCmd->size, pCmd->arraySize, /* fAllocMipLevels = */ false);
     4079    }
     4080    return rc;
    40234081#else
    40244082    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    40324090{
    40334091#ifdef VMSVGA3D_DX
    4034     DEBUG_BREAKPOINT_TEST();
    4035     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    4036     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    4037     return vmsvga3dDXSetCSUAViews(pThisCC, idDXContext);
     4092    //DEBUG_BREAKPOINT_TEST();
     4093    SVGA3dUAViewId const *paUAViewId = (SVGA3dUAViewId *)&pCmd[1];
     4094    uint32_t const cUAViewId = (cbCmd - sizeof(*pCmd)) / sizeof(SVGA3dUAViewId);
     4095    return vmsvga3dDXSetCSUAViews(pThisCC, idDXContext, pCmd, cUAViewId, paUAViewId);
    40384096#else
    40394097    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    57915849        SVGA3dCmdDefineGBSurface_v3 *pCmd = (SVGA3dCmdDefineGBSurface_v3 *)pvCmd;
    57925850        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    5793         rcParse = vmsvga3dCmdDefineGBSurface_v3(pThisCC, idDXContext, pCmd, cbCmd);
     5851        rcParse = vmsvga3dCmdDefineGBSurface_v3(pThisCC, pCmd);
    57945852        break;
    57955853    }
     
    60116069        SVGA3dCmdDefineGBSurface_v4 *pCmd = (SVGA3dCmdDefineGBSurface_v4 *)pvCmd;
    60126070        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    6013         rcParse = vmsvga3dCmdDefineGBSurface_v4(pThisCC, idDXContext, pCmd, cbCmd);
     6071        rcParse = vmsvga3dCmdDefineGBSurface_v4(pThisCC, pCmd);
    60146072        break;
    60156073    }
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp

    r94989 r95008  
    883883        pDXContext->svgaDXContext.renderState.renderTargetViewIds[i] = paRenderTargetViewId[i];
    884884
     885    /* Remember how many render target slots must be set. */
     886    pDXContext->cRenderTargets = RT_MAX(pDXContext->cRenderTargets, cRenderTargetViewId);
     887
    885888    rc = pSvgaR3State->pFuncsDX->pfnDXSetRenderTargets(pThisCC, pDXContext, depthStencilViewId, cRenderTargetViewId, paRenderTargetViewId);
    886889    return rc;
     
    20092012         */
    20102013        uint32_t cbSignaturesAvail = pEntry->sizeInBytes - cToken * 4; /* How many bytes for signatures are available. */
    2011         if (cbSignaturesAvail > sizeof(SVGA3dDXSignatureHeader))
     2014        if (cbSignaturesAvail >= sizeof(SVGA3dDXSignatureHeader))
    20122015        {
    20132016            cbSignaturesAvail -= sizeof(SVGA3dDXSignatureHeader);
     
    26962699
    26972700
    2698 int vmsvga3dDefineGBSurface_v3(PVGASTATECC pThisCC, uint32_t idDXContext)
    2699 {
    2700     int rc;
    2701     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    2702     AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDefineGBSurface_v3, VERR_INVALID_STATE);
    2703     PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
    2704     AssertReturn(p3dState, VERR_INVALID_STATE);
    2705 
    2706     PVMSVGA3DDXCONTEXT pDXContext;
    2707     rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
    2708     AssertRCReturn(rc, rc);
    2709 
    2710     rc = pSvgaR3State->pFuncsDX->pfnDefineGBSurface_v3(pThisCC, pDXContext);
    2711     return rc;
    2712 }
    2713 
    2714 
    27152701int vmsvga3dDXResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext)
    27162702{
     
    27982784
    27992785
    2800 int vmsvga3dDXDefineUAView(PVGASTATECC pThisCC, uint32_t idDXContext)
     2786int vmsvga3dDXDefineUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineUAView const *pCmd)
    28012787{
    28022788    int rc;
     
    28102796    AssertRCReturn(rc, rc);
    28112797
    2812     rc = pSvgaR3State->pFuncsDX->pfnDXDefineUAView(pThisCC, pDXContext);
    2813     return rc;
    2814 }
    2815 
    2816 
    2817 int vmsvga3dDXDestroyUAView(PVGASTATECC pThisCC, uint32_t idDXContext)
     2798    SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
     2799
     2800    ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
     2801    ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
     2802    RT_UNTRUSTED_VALIDATED_FENCE();
     2803
     2804    SVGACOTableDXUAViewEntry *pEntry = &pDXContext->cot.paUAView[uaViewId];
     2805    pEntry->sid               = pCmd->sid;
     2806    pEntry->format            = pCmd->format;
     2807    pEntry->resourceDimension = pCmd->resourceDimension;
     2808    pEntry->desc              = pCmd->desc;
     2809    pEntry->structureCount    = 0;
     2810
     2811    rc = pSvgaR3State->pFuncsDX->pfnDXDefineUAView(pThisCC, pDXContext, uaViewId, pEntry);
     2812    return rc;
     2813}
     2814
     2815
     2816int vmsvga3dDXDestroyUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyUAView const *pCmd)
    28182817{
    28192818    int rc;
     
    28272826    AssertRCReturn(rc, rc);
    28282827
    2829     rc = pSvgaR3State->pFuncsDX->pfnDXDestroyUAView(pThisCC, pDXContext);
    2830     return rc;
    2831 }
    2832 
    2833 
    2834 int vmsvga3dDXClearUAViewUint(PVGASTATECC pThisCC, uint32_t idDXContext)
     2828    SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
     2829
     2830    ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
     2831    ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
     2832    RT_UNTRUSTED_VALIDATED_FENCE();
     2833
     2834    SVGACOTableDXUAViewEntry *pEntry = &pDXContext->cot.paUAView[uaViewId];
     2835    RT_ZERO(*pEntry);
     2836
     2837    rc = pSvgaR3State->pFuncsDX->pfnDXDestroyUAView(pThisCC, pDXContext, uaViewId);
     2838    return rc;
     2839}
     2840
     2841
     2842int vmsvga3dDXClearUAViewUint(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewUint const *pCmd)
    28352843{
    28362844    int rc;
     
    28442852    AssertRCReturn(rc, rc);
    28452853
    2846     rc = pSvgaR3State->pFuncsDX->pfnDXClearUAViewUint(pThisCC, pDXContext);
    2847     return rc;
    2848 }
    2849 
    2850 
    2851 int vmsvga3dDXClearUAViewFloat(PVGASTATECC pThisCC, uint32_t idDXContext)
     2854    SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
     2855
     2856    ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
     2857    ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
     2858    RT_UNTRUSTED_VALIDATED_FENCE();
     2859
     2860    rc = pSvgaR3State->pFuncsDX->pfnDXClearUAViewUint(pThisCC, pDXContext, uaViewId, pCmd->value.value);
     2861    return rc;
     2862}
     2863
     2864
     2865int vmsvga3dDXClearUAViewFloat(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewFloat const *pCmd)
    28522866{
    28532867    int rc;
     
    28612875    AssertRCReturn(rc, rc);
    28622876
    2863     rc = pSvgaR3State->pFuncsDX->pfnDXClearUAViewFloat(pThisCC, pDXContext);
     2877    SVGA3dUAViewId const uaViewId = pCmd->uaViewId;
     2878
     2879    ASSERT_GUEST_RETURN(pDXContext->cot.paUAView, VERR_INVALID_STATE);
     2880    ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, VERR_INVALID_PARAMETER);
     2881    RT_UNTRUSTED_VALIDATED_FENCE();
     2882
     2883    rc = pSvgaR3State->pFuncsDX->pfnDXClearUAViewFloat(pThisCC, pDXContext, uaViewId, pCmd->value.value);
    28642884    return rc;
    28652885}
     
    28832903
    28842904
    2885 int vmsvga3dDXSetUAViews(PVGASTATECC pThisCC, uint32_t idDXContext)
     2905int vmsvga3dDXSetUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
    28862906{
    28872907    int rc;
     
    28952915    AssertRCReturn(rc, rc);
    28962916
    2897     rc = pSvgaR3State->pFuncsDX->pfnDXSetUAViews(pThisCC, pDXContext);
     2917    ASSERT_GUEST_RETURN(pCmd->uavSpliceIndex < SVGA3D_DX11_1_MAX_UAVIEWS, VERR_INVALID_PARAMETER);
     2918    ASSERT_GUEST_RETURN(cUAViewId <= SVGA3D_DX11_1_MAX_UAVIEWS - pCmd->uavSpliceIndex, VERR_INVALID_PARAMETER);
     2919    for (uint32_t i = 0; i < cUAViewId; ++i)
     2920        ASSERT_GUEST_RETURN(   paUAViewId[i] < pDXContext->cot.cUAView
     2921                            || paUAViewId[i] == SVGA3D_INVALID_ID, VERR_INVALID_PARAMETER);
     2922    RT_UNTRUSTED_VALIDATED_FENCE();
     2923
     2924    for (uint32_t i = 0; i < cUAViewId; ++i)
     2925    {
     2926        SVGA3dUAViewId const uaViewId = paUAViewId[i];
     2927        pDXContext->svgaDXContext.uaViewIds[pCmd->uavSpliceIndex + i] = uaViewId;
     2928    }
     2929    pDXContext->svgaDXContext.uavSpliceIndex = pCmd->uavSpliceIndex;
     2930
     2931    rc = pSvgaR3State->pFuncsDX->pfnDXSetUAViews(pThisCC, pDXContext, pCmd->uavSpliceIndex, cUAViewId, paUAViewId);
    28982932    return rc;
    28992933}
     
    29342968
    29352969
    2936 int vmsvga3dDXDispatch(PVGASTATECC pThisCC, uint32_t idDXContext)
     2970int vmsvga3dDXDispatch(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDispatch const *pCmd)
    29372971{
    29382972    int rc;
     
    29462980    AssertRCReturn(rc, rc);
    29472981
    2948     rc = pSvgaR3State->pFuncsDX->pfnDXDispatch(pThisCC, pDXContext);
     2982    rc = pSvgaR3State->pFuncsDX->pfnDXDispatch(pThisCC, pDXContext, pCmd->threadGroupCountX, pCmd->threadGroupCountY, pCmd->threadGroupCountZ);
    29492983    return rc;
    29502984}
     
    31383172
    31393173
    3140 int vmsvga3dDefineGBSurface_v4(PVGASTATECC pThisCC, uint32_t idDXContext)
    3141 {
    3142     int rc;
    3143     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3144     AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDefineGBSurface_v4, VERR_INVALID_STATE);
    3145     PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
    3146     AssertReturn(p3dState, VERR_INVALID_STATE);
    3147 
    3148     PVMSVGA3DDXCONTEXT pDXContext;
    3149     rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
    3150     AssertRCReturn(rc, rc);
    3151 
    3152     rc = pSvgaR3State->pFuncsDX->pfnDefineGBSurface_v4(pThisCC, pDXContext);
    3153     return rc;
    3154 }
    3155 
    3156 
    3157 int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext)
     3174int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
    31583175{
    31593176    int rc;
     
    31673184    AssertRCReturn(rc, rc);
    31683185
    3169     rc = pSvgaR3State->pFuncsDX->pfnDXSetCSUAViews(pThisCC, pDXContext);
     3186    ASSERT_GUEST_RETURN(pCmd->startIndex < SVGA3D_DX11_1_MAX_UAVIEWS, VERR_INVALID_PARAMETER);
     3187    ASSERT_GUEST_RETURN(cUAViewId <= SVGA3D_DX11_1_MAX_UAVIEWS - pCmd->startIndex, VERR_INVALID_PARAMETER);
     3188    for (uint32_t i = 0; i < cUAViewId; ++i)
     3189        ASSERT_GUEST_RETURN(   paUAViewId[i] < pDXContext->cot.cUAView
     3190                            || paUAViewId[i] == SVGA3D_INVALID_ID, VERR_INVALID_PARAMETER);
     3191    RT_UNTRUSTED_VALIDATED_FENCE();
     3192
     3193    for (uint32_t i = 0; i < cUAViewId; ++i)
     3194    {
     3195        SVGA3dUAViewId const uaViewId = paUAViewId[i];
     3196        pDXContext->svgaDXContext.csuaViewIds[pCmd->startIndex + i] = uaViewId;
     3197    }
     3198
     3199    rc = pSvgaR3State->pFuncsDX->pfnDXSetCSUAViews(pThisCC, pDXContext, pCmd->startIndex, cUAViewId, paUAViewId);
    31703200    return rc;
    31713201}
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-info.cpp

    r93115 r95008  
    17811781    pHlp->pfnPrintf(pHlp, "Format:                  %s\n",
    17821782                    vmsvgaFormatEnumValueEx(szTmp, sizeof(szTmp), NULL, (int)pSurface->format, false, &g_SVGA3dSurfaceFormat2String));
    1783     pHlp->pfnPrintf(pHlp, "Flags:                   %#x", pSurface->surfaceFlags);
    1784     vmsvga3dInfoU32Flags(pHlp, pSurface->surfaceFlags, "SVGA3D_SURFACE_", g_aSvga3DSurfaceFlags, RT_ELEMENTS(g_aSvga3DSurfaceFlags));
     1783    pHlp->pfnPrintf(pHlp, "Flags:                   0x%RX64", pSurface->f.surfaceFlags);
     1784    vmsvga3dInfoU32Flags(pHlp, pSurface->f.s.surface1Flags, "SVGA3D_SURFACE_", g_aSvga3DSurfaceFlags, RT_ELEMENTS(g_aSvga3DSurfaceFlags));
    17851785    pHlp->pfnPrintf(pHlp, "\n");
    17861786    if (pSurface->cFaces != 0)
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-internal.h

    r94401 r95008  
    556556    VMSVGA3D_SURFACE_DESC   surfaceDesc;
    557557
    558     SVGA3dSurface1Flags     surfaceFlags; /** @todo SVGA3dSurfaceAllFlags as an union. */
     558    union
     559    {
     560        struct
     561        {
     562            SVGA3dSurface1Flags surface1Flags;
     563            SVGA3dSurface2Flags surface2Flags;
     564        } s;
     565        SVGA3dSurfaceAllFlags surfaceFlags;
     566    } f;
    559567    SVGA3dSurfaceFormat     format;
    560568#ifdef VMSVGA3D_OPENGL
     
    644652    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, id),
    645653    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, idAssociatedContext),
    646     SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, surfaceFlags),
     654    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, f.s.surface1Flags),
     655    SSMFIELD_ENTRY_VER(             VMSVGA3DSURFACE, f.s.surface2Flags, VGA_SAVEDSTATE_VERSION_VMSVGA_DX_SFLAGS),
    647656    SSMFIELD_ENTRY(                 VMSVGA3DSURFACE, format),
    648657# ifdef VMSVGA3D_OPENGL
     
    967976    /** . */
    968977    uint32_t                  u32Reserved;
     978    /** . */
     979    uint32_t                  cRenderTargets;
    969980    /** Backend specific data. */
    970981    PVMSVGA3DBACKENDDXCONTEXT pBackendDXContext;
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-ogl.cpp

    r94385 r95008  
    20952095            AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface),
    20962096                      ("hint=%#x, type=%d\n",
    2097                        (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK), pSurface->enmOGLResType));
     2097                       (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK), pSurface->enmOGLResType));
    20982098            break;
    20992099    }
     
    21462146        if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurfaceDst))
    21472147        {
    2148             LogFunc(("dest sid=%u type=0x%x format=%d -> create texture\n", dest.sid, pSurfaceDst->surfaceFlags, pSurfaceDst->format));
     2148            LogFunc(("dest sid=%u type=0x%x format=%d -> create texture\n", dest.sid, pSurfaceDst->f.s.surface1Flags, pSurfaceDst->format));
    21492149            rc = vmsvga3dBackCreateTexture(pThisCC, pContext, pContext->id, pSurfaceDst);
    21502150            AssertRCReturn(rc, rc);
     
    24352435    GLenum binding;
    24362436    GLenum target;
    2437     if (pSurface->surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
     2437    if (pSurface->f.s.surface1Flags & SVGA3D_SURFACE_CUBEMAP)
    24382438    {
    24392439        Assert(pSurface->cFaces == 6);
     
    26872687    VMSVGA3D_CHECK_LAST_ERROR(pState, pContext);
    26882688
    2689     pSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_TEXTURE;
     2689    pSurface->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_TEXTURE;
    26902690    pSurface->targetGL = target;
    26912691    pSurface->bindingGL = binding;
     
    27212721    RT_NOREF(pThis);
    27222722
    2723     AssertReturn(   RT_BOOL(pSrcSurface->surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
    2724                  == RT_BOOL(pDstSurface->surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL), VERR_NOT_IMPLEMENTED);
     2723    AssertReturn(   RT_BOOL(pSrcSurface->f.s.surface1Flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
     2724                 == RT_BOOL(pDstSurface->f.s.surface1Flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL), VERR_NOT_IMPLEMENTED);
    27252725
    27262726    GLenum glAttachment = GL_COLOR_ATTACHMENT0;
    27272727    GLbitfield glMask = GL_COLOR_BUFFER_BIT;
    2728     if (pDstSurface->surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
     2728    if (pDstSurface->f.s.surface1Flags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
    27292729    {
    27302730        /** @todo Need GL_DEPTH_STENCIL_ATTACHMENT for depth/stencil formats? */
     
    31703170#endif
    31713171                Log(("Lock %s memory for rectangle (%d,%d)(%d,%d)\n",
    3172                      (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_VERTEXBUFFER ? "vertex" :
    3173                        (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_INDEXBUFFER ? "index" : "buffer",
     3172                     (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_VERTEXBUFFER ? "vertex" :
     3173                       (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK) == SVGA3D_SURFACE_HINT_INDEXBUFFER ? "index" : "buffer",
    31743174                     pBox->x, pBox->y, pBox->x + pBox->w, pBox->y + pBox->h));
    31753175
     
    32303230    {
    32313231        /* Unknown surface type; turn it into a texture. */
    3232         LogFunc(("unknown src surface id=%x type=%d format=%d -> create texture\n", sid, pSurface->surfaceFlags, pSurface->format));
     3232        LogFunc(("unknown src surface id=%x type=%d format=%d -> create texture\n", sid, pSurface->f.s.surface1Flags, pSurface->format));
    32333233        rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pSurface);
    32343234        AssertRCReturn(rc, rc);
     
    39443944    if (!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
    39453945    {
    3946         LogFunc(("src sid=%u flags=0x%x format=%d -> create texture\n", srcImage.sid, pSurface->surfaceFlags, pSurface->format));
     3946        LogFunc(("src sid=%u flags=0x%x format=%d -> create texture\n", srcImage.sid, pSurface->f.s.surface1Flags, pSurface->format));
    39473947        rc = vmsvga3dBackCreateTexture(pThisCC, &pState->SharedCtx, VMSVGA3D_SHARED_CTX_ID, pSurface);
    39483948        AssertRCReturn(rc, rc);
     
    53765376        {
    53775377            LogFunc(("create depth texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n",
    5378                      target.sid, pRenderTarget->surfaceFlags, pRenderTarget->format));
     5378                     target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->format));
    53795379            rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pRenderTarget);
    53805380            AssertRCReturn(rc, rc);
     
    53845384        Assert(!pRenderTarget->fDirty);
    53855385
    5386         pRenderTarget->surfaceFlags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
     5386        pRenderTarget->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
    53875387
    53885388        pState->ext.glFramebufferTexture2D(GL_FRAMEBUFFER,
     
    53945394        if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
    53955395        {
    5396             Log(("vmsvga3dSetRenderTarget: create renderbuffer to be used as render target; surface id=%x type=%d format=%d\n", target.sid, pRenderTarget->surfaceFlags, pRenderTarget->internalFormatGL));
     5396            Log(("vmsvga3dSetRenderTarget: create renderbuffer to be used as render target; surface id=%x type=%d format=%d\n", target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->internalFormatGL));
    53975397            pContext = &pState->SharedCtx;
    53985398            VMSVGA3D_SET_CURRENT_CONTEXT(pState, pContext);
     
    54235423        AssertReturn(pRenderTarget->oglId.texture != OPENGL_INVALID_ID, VERR_INVALID_PARAMETER);
    54245424
    5425         pRenderTarget->surfaceFlags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
     5425        pRenderTarget->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
    54265426
    54275427        pState->ext.glFramebufferRenderbuffer(GL_FRAMEBUFFER,
     
    54445444        if (pRenderTarget->oglId.texture == OPENGL_INVALID_ID)
    54455445        {
    5446             Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->surfaceFlags, pRenderTarget->format));
     5446            Log(("vmsvga3dSetRenderTarget: create texture to be used as render target; surface id=%x type=%d format=%d -> create texture\n", target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->format));
    54475447            rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pRenderTarget);
    54485448            AssertRCReturn(rc, rc);
     
    54525452        Assert(!pRenderTarget->fDirty);
    54535453
    5454         pRenderTarget->surfaceFlags |= SVGA3D_SURFACE_HINT_RENDERTARGET;
     5454        pRenderTarget->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_RENDERTARGET;
    54555455
    54565456        GLenum textarget;
    5457         if (pRenderTarget->surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
     5457        if (pRenderTarget->f.s.surface1Flags & SVGA3D_SURFACE_CUBEMAP)
    54585458            textarget = vmsvga3dCubemapFaceFromIndex(target.face);
    54595459        else
     
    68466846        pVertexSurface->fDirty = false;
    68476847
    6848         pVertexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
     6848        pVertexSurface->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
    68496849
    68506850        pState->ext.glBindBuffer(GL_ARRAY_BUFFER, OPENGL_INVALID_ID);
     
    72407240                pIndexSurface->fDirty = false;
    72417241
    7242                 pIndexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
     7242                pIndexSurface->f.s.surface1Flags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
    72437243
    72447244                pState->ext.glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, OPENGL_INVALID_ID);
     
    78227822     * wast memory on them).
    78237823     */
    7824     uint32_t const fSwitchFlags = pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
     7824    uint32_t const fSwitchFlags = pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
    78257825    if (   fSwitchFlags != SVGA3D_SURFACE_HINT_DEPTHSTENCIL
    78267826        && fSwitchFlags != (SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE))
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-savedstate.cpp

    r94401 r95008  
    195195        pSurface->id                       = surfacePreMipLevels.id;
    196196        pSurface->idAssociatedContext      = surfacePreMipLevels.idAssociatedContext;
    197         pSurface->surfaceFlags             = surfacePreMipLevels.surfaceFlags;
     197        pSurface->f.s.surface1Flags        = surfacePreMipLevels.surfaceFlags;
     198        pSurface->f.s.surface2Flags        = 0;
    198199        pSurface->format                   = surfacePreMipLevels.format;
    199200#ifdef VMSVGA3D_OPENGL
     
    673674                }
    674675
    675                 rc = vmsvga3dSurfaceDefine(pThisCC, sid, surface.surfaceFlags, surface.format, surface.multiSampleCount,
     676                rc = vmsvga3dSurfaceDefine(pThisCC, sid, surface.f.surfaceFlags, surface.format, surface.multiSampleCount,
    676677                                           surface.autogenFilter, surface.cLevels, &pMipmapLevelSize[0], /* arraySize = */ 0, /* fAllocMipLevels = */ true);
    677678                AssertRCReturn(rc, rc);
     
    991992                        case VMSVGA3D_D3DRESTYPE_TEXTURE:
    992993                        {
    993                             if (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
     994                            if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_DEPTHSTENCIL)
    994995                            {
    995996                               /** @todo unable to easily fetch depth surface data in d3d 9 */
     
    9991000
    10001001                            fTexture = (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE);
    1001                             fRenderTargetTexture = fTexture && (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET);
     1002                            fRenderTargetTexture = fTexture && (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET);
    10021003
    10031004                            D3DLOCKED_RECT LockedRect;
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp

    r94989 r95008  
    8888    VMSVGA3D_VIEWTYPE_RENDERTARGET   = 1,
    8989    VMSVGA3D_VIEWTYPE_DEPTHSTENCIL   = 2,
    90     VMSVGA3D_VIEWTYPE_SHADERRESOURCE = 3
     90    VMSVGA3D_VIEWTYPE_SHADERRESOURCE = 3,
     91    VMSVGA3D_VIEWTYPE_UNORDEREDACCESS = 4
    9192} VMSVGA3DBACKVIEWTYPE;
    9293
     
    117118        ID3D11DepthStencilView   *pDepthStencilView;
    118119        ID3D11ShaderResourceView *pShaderResourceView;
     120        ID3D11UnorderedAccessView *pUnorderedAccessView;
    119121    } u;
    120122
     
    260262    uint32_t                   cShader;                /* paShader */
    261263    uint32_t                   cStreamOutput;          /* paStreamOutput */
     264    uint32_t                   cUnorderedAccessView;   /* paUnorderedAccessView */
    262265    ID3D11BlendState         **papBlendState;
    263266    ID3D11DepthStencilState  **papDepthStencilState;
     
    271274    DXSHADER                  *paShader;
    272275    DXSTREAMOUTPUT            *paStreamOutput;
     276    DXVIEW                    *paUnorderedAccessView;
    273277
    274278    uint32_t                   cSOTarget;              /* How many SO targets are currently set (SetSOTargets) */
     
    298302static int dxDeviceFlush(DXDEVICE *pDevice);
    299303static int dxDefineShaderResourceView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dShaderResourceViewId shaderResourceViewId, SVGACOTableDXSRViewEntry const *pEntry);
     304static int dxDefineUnorderedAccessView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry);
    300305static int dxDefineRenderTargetView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGACOTableDXRTViewEntry const *pEntry);
    301306static int dxDefineDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dDepthStencilViewId depthStencilViewId, SVGACOTableDXDSViewEntry const *pEntry);
    302307static int dxSetRenderTargets(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext);
     308static int dxSetCSUnorderedAccessViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext);
    303309static DECLCALLBACK(void) vmsvga3dBackSurfaceDestroy(PVGASTATECC pThisCC, PVMSVGA3DSURFACE pSurface);
    304310static int dxDestroyShader(DXSHADER *pDXShader);
     
    507513
    508514        case SVGA3D_B4G4R4A4_UNORM:             return DXGI_FORMAT_;
    509         case SVGA3D_BC6H_TYPELESS:              return DXGI_FORMAT_;
    510         case SVGA3D_BC6H_UF16:                  return DXGI_FORMAT_;
    511         case SVGA3D_BC6H_SF16:                  return DXGI_FORMAT_;
    512         case SVGA3D_BC7_TYPELESS:               return DXGI_FORMAT_;
    513         case SVGA3D_BC7_UNORM:                  return DXGI_FORMAT_;
    514         case SVGA3D_BC7_UNORM_SRGB:             return DXGI_FORMAT_;
     515        case SVGA3D_BC6H_TYPELESS:              return DXGI_FORMAT_BC6H_TYPELESS;
     516        case SVGA3D_BC6H_UF16:                  return DXGI_FORMAT_BC6H_UF16;
     517        case SVGA3D_BC6H_SF16:                  return DXGI_FORMAT_BC6H_SF16;
     518        case SVGA3D_BC7_TYPELESS:               return DXGI_FORMAT_BC7_TYPELESS;
     519        case SVGA3D_BC7_UNORM:                  return DXGI_FORMAT_BC7_UNORM;
     520        case SVGA3D_BC7_UNORM_SRGB:             return DXGI_FORMAT_BC7_UNORM_SRGB;
    515521        case SVGA3D_AYUV:                       return DXGI_FORMAT_;
    516522
     
    10271033{
    10281034    /* It is not expected that volume textures will be shared between contexts. */
    1029     if (pSurface->surfaceFlags & SVGA3D_SURFACE_VOLUME)
     1035    if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_VOLUME)
    10301036        return false;
    10311037
    1032     return pSurface->surfaceFlags & SVGA3D_SURFACE_SCREENTARGET
    1033         || pSurface->surfaceFlags & SVGA3D_SURFACE_BIND_RENDER_TARGET;
     1038    return (pSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET)
     1039        || (pSurface->f.surfaceFlags & SVGA3D_SURFACE_BIND_RENDER_TARGET);
    10341040}
    10351041
     
    12011207    SVGACOTableDXSRViewEntry const *pSRViewEntry = &pDXContext->cot.paSRView[shaderResourceViewId];
    12021208    return pSRViewEntry;
     1209}
     1210
     1211
     1212static SVGACOTableDXUAViewEntry const *dxGetUnorderedAccessViewEntry(PVMSVGA3DDXCONTEXT pDXContext, uint32_t uaViewId)
     1213{
     1214    ASSERT_GUEST_RETURN(uaViewId < pDXContext->cot.cUAView, NULL);
     1215
     1216    SVGACOTableDXUAViewEntry const *pUAViewEntry = &pDXContext->cot.paUAView[uaViewId];
     1217    return pUAViewEntry;
    12031218}
    12041219
     
    14641479    RT_ZERO(desc);
    14651480    desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
    1466     AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN, E_FAIL);
     1481    AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
    14671482    switch (pEntry->resourceDimension)
    14681483    {
     
    15381553    RT_ZERO(desc);
    15391554    desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
    1540     AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN, E_FAIL);
     1555    AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
    15411556
    15421557    switch (pEntry->resourceDimension)
     
    16171632
    16181633
     1634static HRESULT dxUnorderedAccessViewCreate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableDXUAViewEntry const *pEntry, VMSVGA3DSURFACE *pSurface, ID3D11UnorderedAccessView **pp)
     1635{
     1636    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     1637
     1638    ID3D11Resource *pResource = dxResource(pThisCC->svga.p3dState, pSurface, pDXContext);
     1639
     1640    D3D11_UNORDERED_ACCESS_VIEW_DESC desc;
     1641    RT_ZERO(desc);
     1642    desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
     1643    AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
     1644
     1645    switch (pEntry->resourceDimension)
     1646    {
     1647        case SVGA3D_RESOURCE_BUFFER:
     1648            desc.ViewDimension = D3D11_UAV_DIMENSION_BUFFER;
     1649            desc.Buffer.FirstElement = pEntry->desc.buffer.firstElement;
     1650            desc.Buffer.NumElements = pEntry->desc.buffer.numElements;
     1651            desc.Buffer.Flags = pEntry->desc.buffer.flags;
     1652            break;
     1653        case SVGA3D_RESOURCE_TEXTURE1D:
     1654            if (pSurface->surfaceDesc.numArrayElements <= 1)
     1655            {
     1656                desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE1D;
     1657                desc.Texture1D.MipSlice = pEntry->desc.tex.mipSlice;
     1658            }
     1659            else
     1660            {
     1661                desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE1DARRAY;
     1662                desc.Texture1DArray.MipSlice = pEntry->desc.tex.mipSlice;
     1663                desc.Texture1DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
     1664                desc.Texture1DArray.ArraySize = pEntry->desc.tex.arraySize;
     1665            }
     1666            break;
     1667        case SVGA3D_RESOURCE_TEXTURE2D:
     1668            if (pSurface->surfaceDesc.numArrayElements <= 1)
     1669            {
     1670                desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2D;
     1671                desc.Texture2D.MipSlice = pEntry->desc.tex.mipSlice;
     1672            }
     1673            else
     1674            {
     1675                desc.ViewDimension = D3D11_UAV_DIMENSION_TEXTURE2DARRAY;
     1676                desc.Texture2DArray.MipSlice = pEntry->desc.tex.mipSlice;
     1677                desc.Texture2DArray.FirstArraySlice = pEntry->desc.tex.firstArraySlice;
     1678                desc.Texture2DArray.ArraySize = pEntry->desc.tex.arraySize;
     1679            }
     1680            break;
     1681        case SVGA3D_RESOURCE_TEXTURE3D:
     1682            desc.Texture3D.MipSlice = pEntry->desc.tex3D.mipSlice;
     1683            desc.Texture3D.FirstWSlice = pEntry->desc.tex3D.firstW;
     1684            desc.Texture3D.WSize = pEntry->desc.tex3D.wSize;
     1685            break;
     1686        default:
     1687            ASSERT_GUEST_FAILED_RETURN(E_INVALIDARG);
     1688    }
     1689
     1690    HRESULT hr = pDevice->pDevice->CreateUnorderedAccessView(pResource, &desc, pp);
     1691    Assert(SUCCEEDED(hr));
     1692    return hr;
     1693}
     1694
     1695
    16191696static HRESULT dxDepthStencilViewCreate(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGACOTableDXDSViewEntry const *pEntry, VMSVGA3DSURFACE *pSurface, ID3D11DepthStencilView **pp)
    16201697{
     
    16261703    RT_ZERO(desc);
    16271704    desc.Format = vmsvgaDXSurfaceFormat2Dxgi(pEntry->format);
    1628     AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN, E_FAIL);
     1705    AssertReturn(desc.Format != DXGI_FORMAT_UNKNOWN || pEntry->format == SVGA3D_BUFFER, E_FAIL);
    16291706    desc.Flags = pEntry->flags;
    16301707    switch (pEntry->resourceDimension)
     
    17231800        }
    17241801        case SVGA3D_SHADERTYPE_HS:
     1802            hr = pDevice->pDevice->CreateHullShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pHullShader);
     1803            Assert(SUCCEEDED(hr));
     1804            break;
    17251805        case SVGA3D_SHADERTYPE_DS:
     1806            hr = pDevice->pDevice->CreateDomainShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pDomainShader);
     1807            Assert(SUCCEEDED(hr));
     1808            break;
    17261809        case SVGA3D_SHADERTYPE_CS:
     1810            hr = pDevice->pDevice->CreateComputeShader(pDXShader->pvDXBC, pDXShader->cbDXBC, NULL, &pDXShader->pComputeShader);
     1811            Assert(SUCCEEDED(hr));
     1812            break;
    17271813        default:
    17281814            ASSERT_GUEST_FAILED_RETURN(E_INVALIDARG);
     
    17511837        } break;
    17521838        case SVGA3D_SHADERTYPE_HS:
     1839            pDevice->pImmediateContext->HSSetShader(pDXShader ? pDXShader->pHullShader : NULL, NULL, 0);
     1840            break;
    17531841        case SVGA3D_SHADERTYPE_DS:
     1842            pDevice->pImmediateContext->DSSetShader(pDXShader ? pDXShader->pDomainShader : NULL, NULL, 0);
     1843            break;
    17541844        case SVGA3D_SHADERTYPE_CS:
     1845            pDevice->pImmediateContext->CSSetShader(pDXShader ? pDXShader->pComputeShader : NULL, NULL, 0);
     1846            break;
    17551847        default:
    17561848            ASSERT_GUEST_FAILED_RETURN_VOID();
     
    17731865            break;
    17741866        case SVGA3D_SHADERTYPE_HS:
     1867            pDevice->pImmediateContext->HSSetConstantBuffers(slot, 1, &pConstantBuffer);
     1868            break;
    17751869        case SVGA3D_SHADERTYPE_DS:
     1870            pDevice->pImmediateContext->DSSetConstantBuffers(slot, 1, &pConstantBuffer);
     1871            break;
    17761872        case SVGA3D_SHADERTYPE_CS:
     1873            pDevice->pImmediateContext->CSSetConstantBuffers(slot, 1, &pConstantBuffer);
     1874            break;
    17771875        default:
    17781876            ASSERT_GUEST_FAILED_RETURN_VOID();
     
    18231921            break;
    18241922        case SVGA3D_SHADERTYPE_HS:
     1923            pDevice->pImmediateContext->HSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
     1924            break;
    18251925        case SVGA3D_SHADERTYPE_DS:
     1926            pDevice->pImmediateContext->DSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
     1927            break;
    18261928        case SVGA3D_SHADERTYPE_CS:
     1929            pDevice->pImmediateContext->CSSetShaderResources(startView, cShaderResourceView, papShaderResourceView);
     1930            break;
    18271931        default:
    18281932            ASSERT_GUEST_FAILED_RETURN_VOID();
    18291933    }
     1934}
     1935
     1936
     1937static void dxCSUnorderedAccessViewSet(DXDEVICE *pDevice, uint32_t startView, uint32_t cView, ID3D11UnorderedAccessView * const *papUnorderedAccessView, UINT *pUAVInitialCounts)
     1938{
     1939    pDevice->pImmediateContext->CSSetUnorderedAccessViews(startView, cView, papUnorderedAccessView, pUAVInitialCounts);
    18301940}
    18311941
     
    18741984
    18751985    /* Surface must have SCREEN_TARGET flag. */
    1876     ASSERT_GUEST_RETURN(RT_BOOL(pSurface->surfaceFlags & SVGA3D_SURFACE_SCREENTARGET), VERR_INVALID_PARAMETER);
     1986    ASSERT_GUEST_RETURN(RT_BOOL(pSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET), VERR_INVALID_PARAMETER);
    18771987
    18781988    if (VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface))
     
    20402150
    20412151    HRESULT hr = S_OK;
    2042     if (pSurface->surfaceFlags & SVGA3D_SURFACE_SCREENTARGET)
     2152    if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET)
    20432153    {
    20442154        /*
     
    20912201        }
    20922202    }
    2093     else if (pSurface->surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
     2203    else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
    20942204    {
    20952205        Assert(pSurface->cFaces == 6);
     
    21082218        td.SampleDesc.Quality = 0;
    21092219        td.Usage              = D3D11_USAGE_DEFAULT;
    2110         td.BindFlags          = dxBindFlags(pSurface->surfaceFlags);
     2220        td.BindFlags          = dxBindFlags(pSurface->f.surfaceFlags);
    21112221        td.CPUAccessFlags     = 0; /** @todo */
    21122222        td.MiscFlags          = MiscFlags | D3D11_RESOURCE_MISC_TEXTURECUBE; /** @todo */
     
    21492259        }
    21502260    }
    2151     else if (pSurface->surfaceFlags & SVGA3D_SURFACE_1D)
     2261    else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_1D)
    21522262    {
    21532263        /*
     
    21632273        td.Format             = dxgiFormat;
    21642274        td.Usage              = D3D11_USAGE_DEFAULT;
    2165         td.BindFlags          = dxBindFlags(pSurface->surfaceFlags);
     2275        td.BindFlags          = dxBindFlags(pSurface->f.surfaceFlags);
    21662276        td.CPUAccessFlags     = 0;
    21672277        td.MiscFlags          = MiscFlags; /** @todo */
     
    22062316    else
    22072317    {
    2208         if (pSurface->surfaceFlags & SVGA3D_SURFACE_VOLUME)
     2318        if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_VOLUME)
    22092319        {
    22102320            /*
     
    22222332            td.Format             = dxgiFormat;
    22232333            td.Usage              = D3D11_USAGE_DEFAULT;
    2224             td.BindFlags          = dxBindFlags(pSurface->surfaceFlags);
     2334            td.BindFlags          = dxBindFlags(pSurface->f.surfaceFlags);
    22252335            td.CPUAccessFlags     = 0; /** @todo */
    22262336            td.MiscFlags          = MiscFlags; /** @todo */
     
    22802390            td.SampleDesc.Quality = 0;
    22812391            td.Usage              = D3D11_USAGE_DEFAULT;
    2282             td.BindFlags          = dxBindFlags(pSurface->surfaceFlags);
     2392            td.BindFlags          = dxBindFlags(pSurface->f.surfaceFlags);
    22832393            td.CPUAccessFlags     = 0; /** @todo */
    22842394            td.MiscFlags          = MiscFlags; /** @todo */
     
    23602470
    23612471    /* Buffers should be created as such. */
    2362     AssertReturn(RT_BOOL(pSurface->surfaceFlags & (  SVGA3D_SURFACE_HINT_INDEXBUFFER
    2363                                                    | SVGA3D_SURFACE_HINT_VERTEXBUFFER
    2364                                                    | SVGA3D_SURFACE_BIND_VERTEX_BUFFER
    2365                                                    | SVGA3D_SURFACE_BIND_INDEX_BUFFER
     2472    AssertReturn(RT_BOOL(pSurface->f.surfaceFlags & (  SVGA3D_SURFACE_HINT_INDEXBUFFER
     2473                                                     | SVGA3D_SURFACE_HINT_VERTEXBUFFER
     2474                                                     | SVGA3D_SURFACE_BIND_VERTEX_BUFFER
     2475                                                     | SVGA3D_SURFACE_BIND_INDEX_BUFFER
    23662476                        )), VERR_INVALID_PARAMETER);
    23672477
     
    24272537
    24282538    /* Buffers should be created as such. */
    2429     AssertReturn(RT_BOOL(pSurface->surfaceFlags & SVGA3D_SURFACE_BIND_STREAM_OUTPUT), VERR_INVALID_PARAMETER);
     2539    AssertReturn(RT_BOOL(pSurface->f.surfaceFlags & SVGA3D_SURFACE_BIND_STREAM_OUTPUT), VERR_INVALID_PARAMETER);
    24302540
    24312541    if (pSurface->pBackendSurface != NULL)
     
    24432553    bd.ByteWidth           = pSurface->paMipmapLevels[0].cbSurface;
    24442554    bd.Usage               = D3D11_USAGE_DEFAULT;
    2445     bd.BindFlags           = dxBindFlags(pSurface->surfaceFlags); // D3D11_BIND_VERTEX_BUFFER | D3D11_BIND_STREAM_OUTPUT;
     2555    bd.BindFlags           = dxBindFlags(pSurface->f.surfaceFlags); // D3D11_BIND_VERTEX_BUFFER | D3D11_BIND_STREAM_OUTPUT;
    24462556    bd.CPUAccessFlags      = 0; /// @todo ? D3D11_CPU_ACCESS_READ;
    24472557    bd.MiscFlags           = 0;
     
    24732583
    24742584    /* Buffers should be created as such. */
    2475     AssertReturn(RT_BOOL(pSurface->surfaceFlags & ( SVGA3D_SURFACE_BIND_CONSTANT_BUFFER)), VERR_INVALID_PARAMETER);
     2585    AssertReturn(RT_BOOL(pSurface->f.surfaceFlags & ( SVGA3D_SURFACE_BIND_CONSTANT_BUFFER)), VERR_INVALID_PARAMETER);
    24762586
    24772587    if (pSurface->pBackendSurface != NULL)
     
    25352645
    25362646
    2537 static int vmsvga3dBackSurfaceCreateResource(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGA3DSURFACE pSurface)
     2647static int vmsvga3dBackSurfaceCreateResource(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, PVMSVGA3DSURFACE pSurface, UINT MiscFlags = 0)
    25382648{
    25392649    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     
    25772687        bd.ByteWidth = pMipLevel->cbSurface;
    25782688
    2579         if (pSurface->surfaceFlags & (SVGA3D_SURFACE_STAGING_UPLOAD | SVGA3D_SURFACE_STAGING_DOWNLOAD))
     2689        if (pSurface->f.surfaceFlags & (SVGA3D_SURFACE_STAGING_UPLOAD | SVGA3D_SURFACE_STAGING_DOWNLOAD))
    25802690            bd.Usage = D3D11_USAGE_STAGING;
    2581         else if (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_DYNAMIC)
     2691        else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_DYNAMIC)
    25822692            bd.Usage = D3D11_USAGE_DYNAMIC;
    2583         else if (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_STATIC)
     2693        else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_STATIC)
    25842694            bd.Usage = D3D11_USAGE_IMMUTABLE;
    2585         else if (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_INDIRECT_UPDATE)
     2695        else if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_INDIRECT_UPDATE)
    25862696            bd.Usage = D3D11_USAGE_DEFAULT;
    25872697
    2588         bd.BindFlags = dxBindFlags(pSurface->surfaceFlags);
     2698        bd.BindFlags = dxBindFlags(pSurface->f.surfaceFlags);
    25892699
    25902700        if (bd.Usage == D3D11_USAGE_STAGING)
     
    25922702        else if (bd.Usage == D3D11_USAGE_DYNAMIC)
    25932703            bd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
     2704
     2705        bd.MiscFlags |= MiscFlags;
    25942706
    25952707        hr = pDevice->pDevice->CreateBuffer(&bd, pInitialData, &pBackendSurface->u.pBuffer);
     
    51875299
    51885300    /*
    5189      * Render targets
     5301     * Compute shader unordered access views
     5302     */
     5303
     5304    for (uint32_t idxUA = 0; idxUA < SVGA3D_DX11_1_MAX_UAVIEWS; ++idxUA)
     5305    {
     5306        SVGA3dUAViewId const uaViewId = pDXContext->svgaDXContext.csuaViewIds[idxUA];
     5307        if (uaViewId != SVGA3D_INVALID_ID)
     5308        {
     5309//DEBUG_BREAKPOINT_TEST();
     5310            ASSERT_GUEST_RETURN_VOID(uaViewId < pDXContext->pBackendDXContext->cUnorderedAccessView);
     5311
     5312            SVGACOTableDXUAViewEntry const *pUAViewEntry = dxGetUnorderedAccessViewEntry(pDXContext, uaViewId);
     5313            AssertContinue(pUAViewEntry != NULL);
     5314
     5315            uint32_t const sid = pUAViewEntry->sid;
     5316
     5317            PVMSVGA3DSURFACE pSurface;
     5318            rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
     5319            AssertRCReturnVoid(rc);
     5320
     5321            /* The guest might have invalidated the surface in which case pSurface->pBackendSurface is NULL. */
     5322            /** @todo This is not needed for "single DX device" mode. */
     5323            if (pSurface->pBackendSurface)
     5324            {
     5325                /* Wait for the surface to finish drawing. */
     5326                dxSurfaceWait(pThisCC->svga.p3dState, pSurface, pDXContext->cid);
     5327            }
     5328
     5329            /* If a view has not been created yet, do it now. */
     5330            if (!pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId].u.pView)
     5331            {
     5332                LogFunc(("Re-creating UAV: sid=%u uaid = %u\n", sid, uaViewId));
     5333                rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pUAViewEntry);
     5334                AssertContinue(RT_SUCCESS(rc));
     5335            }
     5336
     5337            LogFunc(("uav[%d] sid = %u, uaid = %u\n", idxUA, sid, uaViewId));
     5338        }
     5339    }
     5340
     5341    /* Set views. */
     5342    rc = dxSetCSUnorderedAccessViews(pThisCC, pDXContext);
     5343    AssertRC(rc);
     5344
     5345    /*
     5346     * Render targets and unordered access views.
    51905347     */
    51915348
     
    52405397                AssertReturnVoid(RT_SUCCESS(rc));
    52415398            }
     5399        }
     5400    }
     5401
     5402    for (uint32_t idxUA = 0; idxUA < SVGA3D_DX11_1_MAX_UAVIEWS; ++idxUA)
     5403    {
     5404        SVGA3dUAViewId const uaViewId = pDXContext->svgaDXContext.uaViewIds[idxUA];
     5405        if (uaViewId != SVGA3D_INVALID_ID)
     5406        {
     5407//DEBUG_BREAKPOINT_TEST();
     5408            ASSERT_GUEST_RETURN_VOID(uaViewId < pDXContext->pBackendDXContext->cUnorderedAccessView);
     5409
     5410            SVGACOTableDXUAViewEntry const *pUAViewEntry = dxGetUnorderedAccessViewEntry(pDXContext, uaViewId);
     5411            AssertContinue(pUAViewEntry != NULL);
     5412
     5413            uint32_t const sid = pUAViewEntry->sid;
     5414
     5415            PVMSVGA3DSURFACE pSurface;
     5416            rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, sid, &pSurface);
     5417            AssertRCReturnVoid(rc);
     5418
     5419            /* The guest might have invalidated the surface in which case pSurface->pBackendSurface is NULL. */
     5420            /** @todo This is not needed for "single DX device" mode. */
     5421            if (pSurface->pBackendSurface)
     5422            {
     5423                /* Wait for the surface to finish drawing. */
     5424                dxSurfaceWait(pThisCC->svga.p3dState, pSurface, pDXContext->cid);
     5425            }
     5426
     5427            /* If a view has not been created yet, do it now. */
     5428            if (!pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId].u.pView)
     5429            {
     5430                LogFunc(("Re-creating UAV: sid=%u uaid = %u\n", sid, uaViewId));
     5431                rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pUAViewEntry);
     5432                AssertContinue(RT_SUCCESS(rc));
     5433            }
     5434
     5435            LogFunc(("uav[%d] sid = %u, uaid = %u\n", idxUA, sid, uaViewId));
    52425436        }
    52435437    }
     
    59186112    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
    59196113
     6114    UINT UAVStartSlot = 0;
     6115    UINT NumUAVs = 0;
     6116    ID3D11UnorderedAccessView *apUnorderedAccessViews[SVGA3D_DX11_1_MAX_UAVIEWS];
     6117    UINT aUAVInitialCounts[SVGA3D_DX11_1_MAX_UAVIEWS];
     6118    for (uint32_t idxUA = 0; idxUA < SVGA3D_DX11_1_MAX_UAVIEWS; ++idxUA)
     6119    {
     6120        SVGA3dUAViewId const uaViewId = pDXContext->svgaDXContext.uaViewIds[idxUA];
     6121        if (uaViewId != SVGA3D_INVALID_ID)
     6122        {
     6123            if (NumUAVs == 0)
     6124                UAVStartSlot = idxUA;
     6125            NumUAVs = idxUA - UAVStartSlot + 1;
     6126            apUnorderedAccessViews[idxUA] = pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId].u.pUnorderedAccessView;
     6127        }
     6128        else
     6129            apUnorderedAccessViews[idxUA] =  NULL;
     6130
     6131        /** @todo */
     6132        aUAVInitialCounts[idxUA] = (UINT)-1;
     6133    }
     6134
    59206135    ID3D11RenderTargetView *apRenderTargetViews[SVGA3D_MAX_RENDER_TARGETS];
    59216136    RT_ZERO(apRenderTargetViews);
    5922     for (uint32_t i = 0; i < SVGA3D_MAX_RENDER_TARGETS; ++i)
     6137    for (uint32_t i = 0; i < pDXContext->cRenderTargets; ++i)
    59236138    {
    59246139        SVGA3dRenderTargetViewId const renderTargetViewId = pDXContext->svgaDXContext.renderState.renderTargetViewIds[i];
     
    59356150        pDepthStencilView = pDXContext->pBackendDXContext->paDepthStencilView[depthStencilViewId].u.pDepthStencilView;
    59366151
    5937     pDevice->pImmediateContext->OMSetRenderTargets(SVGA3D_MAX_RENDER_TARGETS,
     6152    pDevice->pImmediateContext->OMSetRenderTargets(pDXContext->cRenderTargets,
    59386153                                                   apRenderTargetViews,
    59396154                                                   pDepthStencilView);
     6155//    Assert(NumUAVs == 0);
     6156    if (NumUAVs != 0)
     6157        pDevice->pImmediateContext->OMSetRenderTargetsAndUnorderedAccessViews(D3D11_KEEP_RENDER_TARGETS_AND_DEPTH_STENCIL,
     6158                                                       NULL,
     6159                                                       NULL,
     6160                                                       pDXContext->svgaDXContext.uavSpliceIndex,
     6161                                                       NumUAVs,
     6162                                                       apUnorderedAccessViews,
     6163                                                       aUAVInitialCounts);
    59406164    return VINF_SUCCESS;
    59416165}
     
    64566680    LogFunc(("cid %d: src cid %d%s -> dst cid %d%s\n",
    64576681             pDXContext->cid, pSrcSurface->idAssociatedContext,
    6458              (pSrcSurface->surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : "",
     6682             (pSrcSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : "",
    64596683             pDstSurface->idAssociatedContext,
    6460              (pDstSurface->surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : ""));
     6684             (pDstSurface->f.surfaceFlags & SVGA3D_SURFACE_SCREENTARGET) ? " st" : ""));
    64616685
    64626686    /* Clip the box. */
     
    73347558            break;
    73357559        case SVGA_COTABLE_UAVIEW:
    7336             AssertFailed(); /** @todo Implement */
     7560            if (pBackendDXContext->paUnorderedAccessView)
     7561            {
     7562                for (uint32_t i = 0; i < pBackendDXContext->cUnorderedAccessView; ++i)
     7563                {
     7564                    DXVIEW *pDXView = &pBackendDXContext->paUnorderedAccessView[i];
     7565                    if (i < cValidEntries)
     7566                        dxViewRemoveFromList(pDXView); /* Remove from list because DXVIEW array will be reallocated. */
     7567                    else
     7568                        dxViewDestroy(pDXView);
     7569                }
     7570            }
     7571
     7572            rc = dxCOTableRealloc((void **)&pBackendDXContext->paUnorderedAccessView, &pBackendDXContext->cUnorderedAccessView,
     7573                                  sizeof(pBackendDXContext->paUnorderedAccessView[0]), pDXContext->cot.cUAView, cValidEntries);
     7574            AssertRCBreak(rc);
     7575
     7576            for (uint32_t i = 0; i < cValidEntries; ++i)
     7577            {
     7578                SVGACOTableDXUAViewEntry const *pEntry = &pDXContext->cot.paUAView[i];
     7579                if (ASMMemFirstNonZero(pEntry, sizeof(*pEntry)) == NULL)
     7580                    continue; /* Skip uninitialized entry. */
     7581
     7582                /* Define views which were not defined yet in backend. */
     7583                DXVIEW *pDXView = &pBackendDXContext->paUnorderedAccessView[i];
     7584                /** @todo Verify that the pEntry content still corresponds to the view. */
     7585                if (pDXView->u.pView)
     7586                    dxViewAddToList(pThisCC, pDXView);
     7587                else if (pDXView->enmViewType == VMSVGA3D_VIEWTYPE_NONE)
     7588                    dxDefineUnorderedAccessView(pThisCC, pDXContext, i, pEntry);
     7589            }
    73377590            break;
    73387591        case SVGA_COTABLE_MAX: break; /* Compiler warning */
     
    75127765
    75137766
    7514 static DECLCALLBACK(int) vmsvga3dBackDefineGBSurface_v3(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7767static DECLCALLBACK(int) vmsvga3dBackDXResolveCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75157768{
    75167769    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75227775
    75237776
    7524 static DECLCALLBACK(int) vmsvga3dBackDXResolveCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7777static DECLCALLBACK(int) vmsvga3dBackDXPredResolveCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75257778{
    75267779    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75327785
    75337786
    7534 static DECLCALLBACK(int) vmsvga3dBackDXPredResolveCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7787static DECLCALLBACK(int) vmsvga3dBackDXPredConvertRegion(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75357788{
    75367789    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75427795
    75437796
    7544 static DECLCALLBACK(int) vmsvga3dBackDXPredConvertRegion(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7797static DECLCALLBACK(int) vmsvga3dBackDXPredConvert(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75457798{
    75467799    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75527805
    75537806
    7554 static DECLCALLBACK(int) vmsvga3dBackDXPredConvert(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7807static DECLCALLBACK(int) vmsvga3dBackWholeSurfaceCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75557808{
    75567809    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75627815
    75637816
    7564 static DECLCALLBACK(int) vmsvga3dBackWholeSurfaceCopy(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7817static int dxDefineUnorderedAccessView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry)
     7818{
     7819    /* Get corresponding resource for pEntry->sid. Create the surface if does not yet exist. */
     7820    PVMSVGA3DSURFACE pSurface;
     7821    int rc = vmsvga3dSurfaceFromSid(pThisCC->svga.p3dState, pEntry->sid, &pSurface);
     7822    AssertRCReturn(rc, rc);
     7823
     7824    ID3D11UnorderedAccessView *pUnorderedAccessView;
     7825    DXVIEW *pView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
     7826    Assert(pView->u.pView == NULL);
     7827
     7828    if (pSurface->pBackendSurface == NULL)
     7829    {
     7830        /* Create the actual texture or buffer. */
     7831        /** @todo One function to create all resources from surfaces. */
     7832        if (pSurface->format != SVGA3D_BUFFER)
     7833            rc = vmsvga3dBackSurfaceCreateTexture(pThisCC, pDXContext, pSurface);
     7834        else
     7835        {
     7836            UINT MiscFlags = 0;
     7837            if (   pEntry->resourceDimension == SVGA3D_RESOURCE_BUFFER
     7838                && (pEntry->desc.buffer.flags & (SVGA3D_UABUFFER_APPEND | SVGA3D_UABUFFER_COUNTER)))
     7839                MiscFlags |= D3D11_RESOURCE_MISC_BUFFER_STRUCTURED;
     7840
     7841            rc = vmsvga3dBackSurfaceCreateResource(pThisCC, pDXContext, pSurface, MiscFlags);
     7842        }
     7843
     7844        AssertRCReturn(rc, rc);
     7845    }
     7846
     7847    HRESULT hr = dxUnorderedAccessViewCreate(pThisCC, pDXContext, pEntry, pSurface, &pUnorderedAccessView);
     7848    AssertReturn(SUCCEEDED(hr), VERR_INVALID_STATE);
     7849
     7850    return dxViewInit(pView, pSurface, pDXContext, uaViewId, VMSVGA3D_VIEWTYPE_UNORDEREDACCESS, pUnorderedAccessView);
     7851}
     7852
     7853
     7854static DECLCALLBACK(int) vmsvga3dBackDXDefineUAView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry)
     7855{
     7856    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     7857    RT_NOREF(pBackend);
     7858
     7859    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     7860    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     7861
     7862    /** @todo Probably not necessary because UAVs are defined in setupPipeline. */
     7863    return dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pEntry);
     7864}
     7865
     7866
     7867static DECLCALLBACK(int) vmsvga3dBackDXDestroyUAView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId)
     7868{
     7869    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     7870    RT_NOREF(pBackend);
     7871
     7872    return dxViewDestroy(&pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId]);
     7873}
     7874
     7875
     7876static DECLCALLBACK(int) vmsvga3dBackDXClearUAViewUint(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, uint32_t const aValues[4])
     7877{
     7878    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     7879    RT_NOREF(pBackend);
     7880
     7881    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     7882    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     7883
     7884    DXVIEW *pDXView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
     7885    if (!pDXView->u.pUnorderedAccessView)
     7886    {
     7887        /* (Re-)create the view, because a creation of a view is deferred until a draw or a clear call. */
     7888        SVGACOTableDXUAViewEntry const *pEntry = &pDXContext->cot.paUAView[uaViewId];
     7889        int rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pEntry);
     7890        AssertRCReturn(rc, rc);
     7891    }
     7892    pDevice->pImmediateContext->ClearUnorderedAccessViewUint(pDXView->u.pUnorderedAccessView, aValues);
     7893    return VINF_SUCCESS;
     7894}
     7895
     7896
     7897static DECLCALLBACK(int) vmsvga3dBackDXClearUAViewFloat(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, float const aValues[4])
     7898{
     7899    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     7900    RT_NOREF(pBackend);
     7901
     7902    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     7903    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     7904
     7905    DXVIEW *pDXView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
     7906    if (!pDXView->u.pUnorderedAccessView)
     7907    {
     7908        /* (Re-)create the view, because a creation of a view is deferred until a draw or a clear call. */
     7909        SVGACOTableDXUAViewEntry const *pEntry = &pDXContext->cot.paUAView[uaViewId];
     7910        int rc = dxDefineUnorderedAccessView(pThisCC, pDXContext, uaViewId, pEntry);
     7911        AssertRCReturn(rc, rc);
     7912    }
     7913    pDevice->pImmediateContext->ClearUnorderedAccessViewFloat(pDXView->u.pUnorderedAccessView, aValues);
     7914    return VINF_SUCCESS;
     7915}
     7916
     7917
     7918static DECLCALLBACK(int) vmsvga3dBackDXCopyStructureCount(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75657919{
    75667920    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75727926
    75737927
    7574 static DECLCALLBACK(int) vmsvga3dBackDXDefineUAView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7928static DECLCALLBACK(int) vmsvga3dBackDXSetUAViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t uavSpliceIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
     7929{
     7930    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     7931    RT_NOREF(pBackend);
     7932
     7933    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     7934    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     7935
     7936    RT_NOREF(uavSpliceIndex, cUAViewId, paUAViewId);
     7937
     7938    return VINF_SUCCESS;
     7939}
     7940
     7941
     7942static DECLCALLBACK(int) vmsvga3dBackDXDrawIndexedInstancedIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75757943{
    75767944    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75827950
    75837951
    7584 static DECLCALLBACK(int) vmsvga3dBackDXDestroyUAView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7952static DECLCALLBACK(int) vmsvga3dBackDXDrawInstancedIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75857953{
    75867954    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    75927960
    75937961
    7594 static DECLCALLBACK(int) vmsvga3dBackDXClearUAViewUint(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7962static DECLCALLBACK(int) vmsvga3dBackDXDispatch(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ)
     7963{
     7964    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     7965    RT_NOREF(pBackend);
     7966
     7967    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     7968    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     7969
     7970    pDevice->pImmediateContext->Dispatch(threadGroupCountX, threadGroupCountY, threadGroupCountZ);
     7971
     7972    return VINF_SUCCESS;
     7973}
     7974
     7975
     7976static DECLCALLBACK(int) vmsvga3dBackDXDispatchIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    75957977{
    75967978    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76027984
    76037985
    7604 static DECLCALLBACK(int) vmsvga3dBackDXClearUAViewFloat(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7986static DECLCALLBACK(int) vmsvga3dBackWriteZeroSurface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76057987{
    76067988    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76127994
    76137995
    7614 static DECLCALLBACK(int) vmsvga3dBackDXCopyStructureCount(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     7996static DECLCALLBACK(int) vmsvga3dBackHintZeroSurface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76157997{
    76167998    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76228004
    76238005
    7624 static DECLCALLBACK(int) vmsvga3dBackDXSetUAViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8006static DECLCALLBACK(int) vmsvga3dBackDXTransferToBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76258007{
    76268008    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76328014
    76338015
    7634 static DECLCALLBACK(int) vmsvga3dBackDXDrawIndexedInstancedIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8016static DECLCALLBACK(int) vmsvga3dBackDXSetStructureCount(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76358017{
    76368018    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76428024
    76438025
    7644 static DECLCALLBACK(int) vmsvga3dBackDXDrawInstancedIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8026static DECLCALLBACK(int) vmsvga3dBackLogicOpsBitBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76458027{
    76468028    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76528034
    76538035
    7654 static DECLCALLBACK(int) vmsvga3dBackDXDispatch(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8036static DECLCALLBACK(int) vmsvga3dBackLogicOpsTransBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76558037{
    76568038    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76628044
    76638045
    7664 static DECLCALLBACK(int) vmsvga3dBackDXDispatchIndirect(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8046static DECLCALLBACK(int) vmsvga3dBackLogicOpsStretchBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76658047{
    76668048    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76728054
    76738055
    7674 static DECLCALLBACK(int) vmsvga3dBackWriteZeroSurface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8056static DECLCALLBACK(int) vmsvga3dBackLogicOpsColorFill(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76758057{
    76768058    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76828064
    76838065
    7684 static DECLCALLBACK(int) vmsvga3dBackHintZeroSurface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8066static DECLCALLBACK(int) vmsvga3dBackLogicOpsAlphaBlend(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76858067{
    76868068    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    76928074
    76938075
    7694 static DECLCALLBACK(int) vmsvga3dBackDXTransferToBuffer(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8076static DECLCALLBACK(int) vmsvga3dBackLogicOpsClearTypeBlend(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    76958077{
    76968078    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    77028084
    77038085
    7704 static DECLCALLBACK(int) vmsvga3dBackDXSetStructureCount(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7705 {
    7706     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7707 
    7708     RT_NOREF(pBackend, pDXContext);
    7709     AssertFailed(); /** @todo Implement */
    7710     return VERR_NOT_IMPLEMENTED;
    7711 }
    7712 
    7713 
    7714 static DECLCALLBACK(int) vmsvga3dBackLogicOpsBitBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7715 {
    7716     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7717 
    7718     RT_NOREF(pBackend, pDXContext);
    7719     AssertFailed(); /** @todo Implement */
    7720     return VERR_NOT_IMPLEMENTED;
    7721 }
    7722 
    7723 
    7724 static DECLCALLBACK(int) vmsvga3dBackLogicOpsTransBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7725 {
    7726     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7727 
    7728     RT_NOREF(pBackend, pDXContext);
    7729     AssertFailed(); /** @todo Implement */
    7730     return VERR_NOT_IMPLEMENTED;
    7731 }
    7732 
    7733 
    7734 static DECLCALLBACK(int) vmsvga3dBackLogicOpsStretchBlt(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7735 {
    7736     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7737 
    7738     RT_NOREF(pBackend, pDXContext);
    7739     AssertFailed(); /** @todo Implement */
    7740     return VERR_NOT_IMPLEMENTED;
    7741 }
    7742 
    7743 
    7744 static DECLCALLBACK(int) vmsvga3dBackLogicOpsColorFill(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7745 {
    7746     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7747 
    7748     RT_NOREF(pBackend, pDXContext);
    7749     AssertFailed(); /** @todo Implement */
    7750     return VERR_NOT_IMPLEMENTED;
    7751 }
    7752 
    7753 
    7754 static DECLCALLBACK(int) vmsvga3dBackLogicOpsAlphaBlend(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7755 {
    7756     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7757 
    7758     RT_NOREF(pBackend, pDXContext);
    7759     AssertFailed(); /** @todo Implement */
    7760     return VERR_NOT_IMPLEMENTED;
    7761 }
    7762 
    7763 
    7764 static DECLCALLBACK(int) vmsvga3dBackLogicOpsClearTypeBlend(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7765 {
    7766     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7767 
    7768     RT_NOREF(pBackend, pDXContext);
    7769     AssertFailed(); /** @todo Implement */
    7770     return VERR_NOT_IMPLEMENTED;
    7771 }
    7772 
    7773 
    7774 static DECLCALLBACK(int) vmsvga3dBackDefineGBSurface_v4(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7775 {
    7776     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7777 
    7778     RT_NOREF(pBackend, pDXContext);
    7779     AssertFailed(); /** @todo Implement */
    7780     return VERR_NOT_IMPLEMENTED;
    7781 }
    7782 
    7783 
    7784 static DECLCALLBACK(int) vmsvga3dBackDXSetCSUAViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    7785 {
    7786     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    7787 
    7788     RT_NOREF(pBackend, pDXContext);
    7789     AssertFailed(); /** @todo Implement */
    7790     return VERR_NOT_IMPLEMENTED;
     8086static int dxSetCSUnorderedAccessViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
     8087{
     8088    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     8089    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     8090
     8091//DEBUG_BREAKPOINT_TEST();
     8092    uint32_t const *pUAIds = &pDXContext->svgaDXContext.csuaViewIds[0];
     8093    ID3D11UnorderedAccessView *papUnorderedAccessView[SVGA3D_DX11_1_MAX_UAVIEWS];
     8094    UINT aUAVInitialCounts[SVGA3D_DX11_1_MAX_UAVIEWS];
     8095    for (uint32_t i = 0; i < SVGA3D_DX11_1_MAX_UAVIEWS; ++i)
     8096    {
     8097        SVGA3dUAViewId const uaViewId = pUAIds[i];
     8098        if (uaViewId != SVGA3D_INVALID_ID)
     8099        {
     8100            ASSERT_GUEST_RETURN(uaViewId < pDXContext->pBackendDXContext->cUnorderedAccessView, VERR_INVALID_PARAMETER);
     8101
     8102            DXVIEW *pDXView = &pDXContext->pBackendDXContext->paUnorderedAccessView[uaViewId];
     8103            Assert(pDXView->u.pUnorderedAccessView);
     8104            papUnorderedAccessView[i] = pDXView->u.pUnorderedAccessView;
     8105        }
     8106        else
     8107            papUnorderedAccessView[i] = NULL;
     8108
     8109        aUAVInitialCounts[i] = (UINT)-1; /** @todo */
     8110    }
     8111
     8112    dxCSUnorderedAccessViewSet(pDevice, 0, SVGA3D_DX11_1_MAX_UAVIEWS, papUnorderedAccessView, aUAVInitialCounts);
     8113    return VINF_SUCCESS;
     8114}
     8115
     8116
     8117static DECLCALLBACK(int) vmsvga3dBackDXSetCSUAViews(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId)
     8118{
     8119    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     8120    RT_NOREF(pBackend);
     8121
     8122    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     8123    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     8124
     8125    RT_NOREF(startIndex, cUAViewId, paUAViewId);
     8126
     8127    return VINF_SUCCESS;
    77918128}
    77928129
     
    80578394                p->pfnDXGrowCOTable               = vmsvga3dBackDXGrowCOTable;
    80588395                p->pfnIntraSurfaceCopy            = vmsvga3dBackIntraSurfaceCopy;
    8059                 p->pfnDefineGBSurface_v3          = vmsvga3dBackDefineGBSurface_v3;
    80608396                p->pfnDXResolveCopy               = vmsvga3dBackDXResolveCopy;
    80618397                p->pfnDXPredResolveCopy           = vmsvga3dBackDXPredResolveCopy;
     
    80838419                p->pfnLogicOpsAlphaBlend          = vmsvga3dBackLogicOpsAlphaBlend;
    80848420                p->pfnLogicOpsClearTypeBlend      = vmsvga3dBackLogicOpsClearTypeBlend;
    8085                 p->pfnDefineGBSurface_v4          = vmsvga3dBackDefineGBSurface_v4;
    80868421                p->pfnDXSetCSUAViews              = vmsvga3dBackDXSetCSUAViews;
    80878422                p->pfnDXSetMinLOD                 = vmsvga3dBackDXSetMinLOD;
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp

    r94232 r95008  
    11631163    default:
    11641164        AssertMsg(!VMSVGA3DSURFACE_HAS_HW_SURFACE(pSurface),
    1165                   ("surfaceFlags=0x%x\n", (pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)));
     1165                  ("surfaceFlags=0x%x\n", (pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK)));
    11661166        break;
    11671167    }
     
    15281528    if (   pSurfaceSrc->u.pSurface
    15291529        && !pSurfaceDest->u.pSurface
    1530         && RT_BOOL(pSurfaceDest->surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE))
     1530        && RT_BOOL(pSurfaceDest->f.surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE))
    15311531    {
    15321532        /* Create the destination texture in the same context as the source texture. */
     
    15381538        AssertReturn(pContextSrc->pDevice, VERR_INTERNAL_ERROR);
    15391539
    1540         LogFunc(("sid=%u type=%x format=%d -> create dest texture\n", sidDest, pSurfaceDest->surfaceFlags, pSurfaceDest->format));
     1540        LogFunc(("sid=%u type=%x format=%d -> create dest texture\n", sidDest, pSurfaceDest->f.s.surface1Flags, pSurfaceDest->format));
    15411541        rc = vmsvga3dBackCreateTexture(pThisCC, pContextSrc, cidSrc, pSurfaceDest);
    15421542        AssertRCReturn(rc, rc);
     
    18811881     * Create D3D texture object.
    18821882     */
    1883     if (pSurface->surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
     1883    if (pSurface->f.surfaceFlags & SVGA3D_SURFACE_CUBEMAP)
    18841884    {
    18851885        Assert(pSurface->cFaces == 6);
     
    22592259    Assert(pSurface->enmD3DResType != VMSVGA3D_D3DRESTYPE_NONE);
    22602260
    2261     pSurface->surfaceFlags       |= SVGA3D_SURFACE_HINT_TEXTURE;
     2261    pSurface->f.surfaceFlags       |= SVGA3D_SURFACE_HINT_TEXTURE;
    22622262    pSurface->idAssociatedContext = idAssociatedContext;
    22632263    return VINF_SUCCESS;
     
    24062406            {
    24072407                /** @todo inefficient for VRAM buffers!! */
    2408                 if (RT_BOOL(pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET))
     2408                if (RT_BOOL(pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_RENDERTARGET))
    24092409                {
    24102410                    /* Copy the texture mipmap level to the bounce texture. */
     
    25302530    else
    25312531    {
    2532         AssertMsgFailed(("Unsupported surface flags 0x%08X, type %d\n", pSurface->surfaceFlags, pSurface->enmD3DResType));
     2532        AssertMsgFailed(("Unsupported surface flags 0x%08X, type %d\n", pSurface->f.s.surface1Flags, pSurface->enmD3DResType));
    25332533    }
    25342534
     
    25632563
    25642564        /* Unknown surface type; turn it into a texture. */
    2565         LogFunc(("unknown src surface sid=%u type=%d format=%d -> create texture\n", sid, pSurface->surfaceFlags, pSurface->format));
     2565        LogFunc(("unknown src surface sid=%u type=%d format=%d -> create texture\n", sid, pSurface->f.s.surface1Flags, pSurface->format));
    25662566        rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pSurface);
    25672567        AssertRCReturn(rc, rc);
     
    27202720                LogFunc(("Remove all dependencies for surface sid=%u\n", sid));
    27212721
    2722                 uint32_t const              surfaceFlags     = pSurface->surfaceFlags;
     2722                SVGA3dSurfaceAllFlags const surfaceFlags     = pSurface->f.surfaceFlags;
    27232723                SVGA3dSurfaceFormat const   format           = pSurface->format;
    27242724                uint32_t const              multisampleCount = pSurface->multiSampleCount;
     
    41074107
    41084108        pRenderTarget->fUsageD3D            |= D3DUSAGE_DEPTHSTENCIL;
    4109         pRenderTarget->surfaceFlags         |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
     4109        pRenderTarget->f.surfaceFlags       |= SVGA3D_SURFACE_HINT_DEPTHSTENCIL;
    41104110
    41114111        if (pRenderTarget->fStencilAsTexture)
     
    41444144        vmsvga3dSurfaceFlush(pRenderTarget);
    41454145
    4146         if (pRenderTarget->surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE)
     4146        if (pRenderTarget->f.surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE)
    41474147        {
    41484148            fTexture = true;
     
    41514151            if (!pRenderTarget->u.pTexture)
    41524152            {
    4153                 LogFunc(("Create texture to be used as render target; sid=%u type=%d format=%d -> create texture\n", target.sid, pRenderTarget->surfaceFlags, pRenderTarget->format));
     4153                LogFunc(("Create texture to be used as render target; sid=%u type=%d format=%d -> create texture\n", target.sid, pRenderTarget->f.s.surface1Flags, pRenderTarget->format));
    41544154                rc = vmsvga3dBackCreateTexture(pThisCC, pContext, cid, pRenderTarget);
    41554155                AssertRCReturn(rc, rc);
     
    42094209
    42104210        pRenderTarget->fUsageD3D            |= D3DUSAGE_RENDERTARGET;
    4211         pRenderTarget->surfaceFlags         |= SVGA3D_SURFACE_HINT_RENDERTARGET;
     4211        pRenderTarget->f.surfaceFlags       |= SVGA3D_SURFACE_HINT_RENDERTARGET;
    42124212
    42134213        hr = pContext->pDevice->SetRenderTarget(type - SVGA3D_RT_COLOR0, pSurface);
     
    50065006        pVertexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_VERTEX_BUFFER;
    50075007        pVertexSurface->idAssociatedContext = pContext->id;
    5008         pVertexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
     5008        pVertexSurface->f.surfaceFlags |= SVGA3D_SURFACE_HINT_VERTEXBUFFER;
    50095009        fSync = true;
    50105010    }
     
    50625062        pIndexSurface->enmD3DResType = VMSVGA3D_D3DRESTYPE_INDEX_BUFFER;
    50635063        pIndexSurface->idAssociatedContext = pContext->id;
    5064         pIndexSurface->surfaceFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
     5064        pIndexSurface->f.surfaceFlags |= SVGA3D_SURFACE_HINT_INDEXBUFFER;
    50655065        fSync = true;
    50665066    }
     
    62036203     * wast memory on them).
    62046204     */
    6205     uint32_t const fSwitchFlags = pSurface->surfaceFlags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
     6205    uint32_t const fSwitchFlags = pSurface->f.s.surface1Flags & VMSVGA3D_SURFACE_HINT_SWITCH_MASK;
    62066206    if (   fSwitchFlags != SVGA3D_SURFACE_HINT_DEPTHSTENCIL
    62076207        && fSwitchFlags != (SVGA3D_SURFACE_HINT_DEPTHSTENCIL | SVGA3D_SURFACE_HINT_TEXTURE))
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.cpp

    r94377 r95008  
    8383 * @param   fAllocMipLevels     .
    8484 */
    85 int vmsvga3dSurfaceDefine(PVGASTATECC pThisCC, uint32_t sid, SVGA3dSurface1Flags surfaceFlags, SVGA3dSurfaceFormat format,
     85int vmsvga3dSurfaceDefine(PVGASTATECC pThisCC, uint32_t sid, SVGA3dSurfaceAllFlags surfaceFlags, SVGA3dSurfaceFormat format,
    8686                          uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter,
    8787                          uint32_t numMipLevels, SVGA3dSize const *pMipLevel0Size, uint32_t arraySize, bool fAllocMipLevels)
     
    214214    }
    215215
    216     pSurface->surfaceFlags      = surfaceFlags;
     216    pSurface->f.surfaceFlags    = surfaceFlags;
    217217    pSurface->format            = format;
    218218    /* cFaces is 6 for a cubemaps and 1 otherwise. */
     
    518518    {
    519519        /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
    520         LogFunc(("unknown src sid=%u type=%d format=%d -> create texture\n", sidSrc, pSrcSurface->surfaceFlags, pSrcSurface->format));
     520        LogFunc(("unknown src sid=%u type=%d format=%d -> create texture\n", sidSrc, pSrcSurface->f.s.surface1Flags, pSrcSurface->format));
    521521        rc = pSvgaR3State->pFuncs3D->pfnCreateTexture(pThisCC, pContext, pContext->id, pSrcSurface);
    522522        AssertRCReturn(rc, rc);
     
    526526    {
    527527        /* Unknown surface type; turn it into a texture, which can be used for other purposes too. */
    528         LogFunc(("unknown dest sid=%u type=%d format=%d -> create texture\n", sidDst, pDstSurface->surfaceFlags, pDstSurface->format));
     528        LogFunc(("unknown dest sid=%u type=%d format=%d -> create texture\n", sidDst, pDstSurface->f.s.surface1Flags, pDstSurface->format));
    529529        rc = pSvgaR3State->pFuncs3D->pfnCreateTexture(pThisCC, pContext, pContext->id, pDstSurface);
    530530        AssertRCReturn(rc, rc);
     
    573573
    574574    LogFunc(("%sguestptr gmr=%x offset=%x pitch=%x host sid=%u face=%d mipmap=%d transfer=%s cCopyBoxes=%d\n",
    575              (pSurface->surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE) ? "TEXTURE " : "",
     575             (pSurface->f.surfaceFlags & SVGA3D_SURFACE_HINT_TEXTURE) ? "TEXTURE " : "",
    576576             guest.ptr.gmrId, guest.ptr.offset, guest.pitch,
    577577             host.sid, host.face, host.mipmap, (transfer == SVGA3D_WRITE_HOST_VRAM) ? "READ" : "WRITE", cCopyBoxes));
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h

    r94989 r95008  
    9797int vmsvga3dQueryCaps(PVGASTATECC pThisCC, SVGA3dDevCapIndex idx3dCaps, uint32_t *pu32Val);
    9898
    99 int vmsvga3dSurfaceDefine(PVGASTATECC pThisCC, uint32_t sid, SVGA3dSurface1Flags surfaceFlags, SVGA3dSurfaceFormat format,
     99int vmsvga3dSurfaceDefine(PVGASTATECC pThisCC, uint32_t sid, SVGA3dSurfaceAllFlags surfaceFlags, SVGA3dSurfaceFormat format,
    100100                          uint32_t multisampleCount, SVGA3dTextureFilter autogenFilter,
    101101                          uint32_t cMipLevels, SVGA3dSize const *pMipLevel0Size, uint32_t arraySize, bool fAllocMipLevels);
     
    499499    DECLCALLBACKMEMBER(int, pfnDXGrowCOTable,               (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    500500    DECLCALLBACKMEMBER(int, pfnIntraSurfaceCopy,            (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    501     DECLCALLBACKMEMBER(int, pfnDefineGBSurface_v3,          (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    502501    DECLCALLBACKMEMBER(int, pfnDXResolveCopy,               (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    503502    DECLCALLBACKMEMBER(int, pfnDXPredResolveCopy,           (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     
    505504    DECLCALLBACKMEMBER(int, pfnDXPredConvert,               (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    506505    DECLCALLBACKMEMBER(int, pfnWholeSurfaceCopy,            (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    507     DECLCALLBACKMEMBER(int, pfnDXDefineUAView,              (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    508     DECLCALLBACKMEMBER(int, pfnDXDestroyUAView,             (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    509     DECLCALLBACKMEMBER(int, pfnDXClearUAViewUint,           (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    510     DECLCALLBACKMEMBER(int, pfnDXClearUAViewFloat,          (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     506    DECLCALLBACKMEMBER(int, pfnDXDefineUAView,              (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, SVGACOTableDXUAViewEntry const *pEntry));
     507    DECLCALLBACKMEMBER(int, pfnDXDestroyUAView,             (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId));
     508    DECLCALLBACKMEMBER(int, pfnDXClearUAViewUint,           (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, uint32_t const aValues[4]));
     509    DECLCALLBACKMEMBER(int, pfnDXClearUAViewFloat,          (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dUAViewId uaViewId, float const aValues[4]));
    511510    DECLCALLBACKMEMBER(int, pfnDXCopyStructureCount,        (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    512     DECLCALLBACKMEMBER(int, pfnDXSetUAViews,                (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     511    DECLCALLBACKMEMBER(int, pfnDXSetUAViews,                (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t uavSpliceIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId));
    513512    DECLCALLBACKMEMBER(int, pfnDXDrawIndexedInstancedIndirect, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    514513    DECLCALLBACKMEMBER(int, pfnDXDrawInstancedIndirect,     (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    515     DECLCALLBACKMEMBER(int, pfnDXDispatch,                  (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     514    DECLCALLBACKMEMBER(int, pfnDXDispatch,                  (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t threadGroupCountX, uint32_t threadGroupCountY, uint32_t threadGroupCountZ));
    516515    DECLCALLBACKMEMBER(int, pfnDXDispatchIndirect,          (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    517516    DECLCALLBACKMEMBER(int, pfnWriteZeroSurface,            (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     
    525524    DECLCALLBACKMEMBER(int, pfnLogicOpsAlphaBlend,          (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    526525    DECLCALLBACKMEMBER(int, pfnLogicOpsClearTypeBlend,      (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    527     DECLCALLBACKMEMBER(int, pfnDefineGBSurface_v4,          (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    528     DECLCALLBACKMEMBER(int, pfnDXSetCSUAViews,              (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     526    DECLCALLBACKMEMBER(int, pfnDXSetCSUAViews,              (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId));
    529527    DECLCALLBACKMEMBER(int, pfnDXSetMinLOD,                 (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    530528    DECLCALLBACKMEMBER(int, pfnDXDefineStreamOutputWithMob, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     
    629627int vmsvga3dDXGrowCOTable(PVGASTATECC pThisCC, uint32_t idDXContext);
    630628int vmsvga3dIntraSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
    631 int vmsvga3dDefineGBSurface_v3(PVGASTATECC pThisCC, uint32_t idDXContext);
    632629int vmsvga3dDXResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
    633630int vmsvga3dDXPredResolveCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
     
    635632int vmsvga3dDXPredConvert(PVGASTATECC pThisCC, uint32_t idDXContext);
    636633int vmsvga3dWholeSurfaceCopy(PVGASTATECC pThisCC, uint32_t idDXContext);
    637 int vmsvga3dDXDefineUAView(PVGASTATECC pThisCC, uint32_t idDXContext);
    638 int vmsvga3dDXDestroyUAView(PVGASTATECC pThisCC, uint32_t idDXContext);
    639 int vmsvga3dDXClearUAViewUint(PVGASTATECC pThisCC, uint32_t idDXContext);
    640 int vmsvga3dDXClearUAViewFloat(PVGASTATECC pThisCC, uint32_t idDXContext);
     634int vmsvga3dDXDefineUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineUAView const *pCmd);
     635int vmsvga3dDXDestroyUAView(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDestroyUAView const *pCmd);
     636int vmsvga3dDXClearUAViewUint(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewUint const *pCmd);
     637int vmsvga3dDXClearUAViewFloat(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXClearUAViewFloat const *pCmd);
    641638int vmsvga3dDXCopyStructureCount(PVGASTATECC pThisCC, uint32_t idDXContext);
    642 int vmsvga3dDXSetUAViews(PVGASTATECC pThisCC, uint32_t idDXContext);
     639int vmsvga3dDXSetUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId);
    643640int vmsvga3dDXDrawIndexedInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext);
    644641int vmsvga3dDXDrawInstancedIndirect(PVGASTATECC pThisCC, uint32_t idDXContext);
    645 int vmsvga3dDXDispatch(PVGASTATECC pThisCC, uint32_t idDXContext);
     642int vmsvga3dDXDispatch(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDispatch const *pCmd);
    646643int vmsvga3dDXDispatchIndirect(PVGASTATECC pThisCC, uint32_t idDXContext);
    647644int vmsvga3dWriteZeroSurface(PVGASTATECC pThisCC, uint32_t idDXContext);
     
    655652int vmsvga3dLogicOpsAlphaBlend(PVGASTATECC pThisCC, uint32_t idDXContext);
    656653int vmsvga3dLogicOpsClearTypeBlend(PVGASTATECC pThisCC, uint32_t idDXContext);
    657 int vmsvga3dDefineGBSurface_v4(PVGASTATECC pThisCC, uint32_t idDXContext);
    658 int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext);
     654int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId);
    659655int vmsvga3dDXSetMinLOD(PVGASTATECC pThisCC, uint32_t idDXContext);
    660656int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext);
  • trunk/src/VBox/Devices/Graphics/DevVGASavedState.h

    r94632 r95008  
    4747    } while (0)
    4848
    49 #define VGA_SAVEDSTATE_VERSION                   25
     49#define VGA_SAVEDSTATE_VERSION                   26
     50#define VGA_SAVEDSTATE_VERSION_VMSVGA_DX_SFLAGS  26 /* SVGA3dSurfaceAllFlags. */
    5051#define VGA_SAVEDSTATE_VERSION_VMSVGA_DX_CMDBUF  25 /* Command buffers capability is not tied to VGPU10 setting. */
    5152#define VGA_SAVEDSTATE_VERSION_VMSVGA_DX         24 /* VGPU10. */
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