VirtualBox

Changeset 95055 in vbox for trunk


Ignore:
Timestamp:
May 21, 2022 10:32:50 AM (3 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
151521
Message:

Devices/Graphics: stream output; ClearView; typeless formats: bugref:9830

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

Legend:

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

    r95017 r95055  
    9191        SVGA_CASE_ID2STR(SVGA_3D_CMD_DEACTIVATE_SURFACE);
    9292        SVGA_CASE_ID2STR(SVGA_3D_CMD_SCREEN_DMA);
    93         SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD1);
     93        SVGA_CASE_ID2STR(SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION); /* SVGA_3D_CMD_DEAD1 */
    9494        SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD2);
    9595        SVGA_CASE_ID2STR(SVGA_3D_CMD_DEAD12); /* Old SVGA_3D_CMD_LOGICOPS_BITBLT */
     
    41294129{
    41304130#ifdef VMSVGA3D_DX
    4131     DEBUG_BREAKPOINT_TEST();
    4132     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    4133     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    4134     return vmsvga3dDXDefineStreamOutputWithMob(pThisCC, idDXContext);
     4131    //DEBUG_BREAKPOINT_TEST();
     4132    RT_NOREF(cbCmd);
     4133    return vmsvga3dDXDefineStreamOutputWithMob(pThisCC, idDXContext, pCmd);
    41354134#else
    41364135    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    41594158{
    41604159#ifdef VMSVGA3D_DX
    4161     DEBUG_BREAKPOINT_TEST();
    4162     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    4163     RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    4164     return vmsvga3dDXBindStreamOutput(pThisCC, idDXContext);
     4160    //DEBUG_BREAKPOINT_TEST();
     4161    RT_NOREF(cbCmd);
     4162    return vmsvga3dDXBindStreamOutput(pThisCC, idDXContext, pCmd);
    41654163#else
    41664164    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    41934191    RT_NOREF(pSvgaR3State, pCmd, cbCmd);
    41944192    return vmsvga3dDXBindShaderIface(pThisCC, idDXContext);
     4193#else
     4194    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     4195    return VERR_NOT_SUPPORTED;
     4196#endif
     4197}
     4198
     4199
     4200/* SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION  1083 */
     4201static int vmsvga3dCmdVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion *pCmd, uint32_t cbCmd)
     4202{
     4203#ifdef VMSVGA3D_DX
     4204    //DEBUG_BREAKPOINT_TEST();
     4205    SVGASignedRect const *paRect = (SVGASignedRect *)&pCmd[1];
     4206    uint32_t const cRect = (cbCmd - sizeof(*pCmd)) / sizeof(SVGASignedRect);
     4207    return vmsvga3dVBDXClearRenderTargetViewRegion(pThisCC, idDXContext, pCmd, cRect, paRect);
    41954208#else
    41964209    RT_NOREF(pThisCC, idDXContext, pCmd, cbCmd);
     
    46684681    }
    46694682
    4670     case SVGA_3D_CMD_DEAD1:
     4683    /* case SVGA_3D_CMD_DEAD1: New SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION */
    46714684    case SVGA_3D_CMD_DEAD2:
    46724685    case SVGA_3D_CMD_DEAD12: /* Old SVGA_3D_CMD_LOGICOPS_BITBLT */
     
    61416154        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
    61426155        rcParse = vmsvga3dCmdDXBindShaderIface(pThisCC, idDXContext, pCmd, cbCmd);
     6156        break;
     6157    }
     6158
     6159    case SVGA_3D_CMD_VB_DX_CLEAR_RENDERTARGET_VIEW_REGION:
     6160    {
     6161        SVGA3dCmdVBDXClearRenderTargetViewRegion *pCmd = (SVGA3dCmdVBDXClearRenderTargetViewRegion *)pvCmd;
     6162        VMSVGAFIFO_CHECK_3D_CMD_MIN_SIZE_BREAK(sizeof(*pCmd));
     6163        rcParse = vmsvga3dCmdVBDXClearRenderTargetViewRegion(pThisCC, idDXContext, pCmd, cbCmd);
    61436164        break;
    61446165    }
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-dx.cpp

    r95035 r95055  
    339339        u32TrackedState &= ~DX_STATE_RENDERTARGETS;
    340340
    341         SVGA3dDepthStencilViewId const depthStencilViewId = (SVGA3dRenderTargetViewId)pDXContext->svgaDXContext.renderState.depthStencilViewId;
     341        SVGA3dDepthStencilViewId const depthStencilViewId = (SVGA3dDepthStencilViewId)pDXContext->svgaDXContext.renderState.depthStencilViewId;
    342342        uint32_t const cRenderTargetViewId = SVGA3D_MAX_SIMULTANEOUS_RENDER_TARGETS;
    343343        SVGA3dRenderTargetViewId const *paRenderTargetViewId = (SVGA3dRenderTargetViewId *)&pDXContext->svgaDXContext.renderState.renderTargetViewIds[0];
     
    32353235
    32363236
    3237 int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext)
    3238 {
    3239     int rc;
    3240     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3241     AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutputWithMob, VERR_INVALID_STATE);
    3242     PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
    3243     AssertReturn(p3dState, VERR_INVALID_STATE);
    3244 
    3245     PVMSVGA3DDXCONTEXT pDXContext;
    3246     rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
    3247     AssertRCReturn(rc, rc);
    3248 
    3249     rc = pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutputWithMob(pThisCC, pDXContext);
     3237int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutputWithMob const *pCmd)
     3238{
     3239    int rc;
     3240    PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
     3241    AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
     3242    PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
     3243    AssertReturn(p3dState, VERR_INVALID_STATE);
     3244
     3245    PVMSVGA3DDXCONTEXT pDXContext;
     3246    rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
     3247    AssertRCReturn(rc, rc);
     3248
     3249    SVGA3dStreamOutputId const soid = pCmd->soid;
     3250
     3251    ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE);
     3252    ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER);
     3253    ASSERT_GUEST_RETURN(pCmd->numOutputStreamEntries < SVGA3D_MAX_STREAMOUT_DECLS, VERR_INVALID_PARAMETER);
     3254    RT_UNTRUSTED_VALIDATED_FENCE();
     3255
     3256    SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid];
     3257    pEntry->numOutputStreamEntries = pCmd->numOutputStreamEntries;
     3258    RT_ZERO(pEntry->decl);
     3259    memcpy(pEntry->streamOutputStrideInBytes, pCmd->streamOutputStrideInBytes, sizeof(pEntry->streamOutputStrideInBytes));
     3260    pEntry->rasterizedStream = pCmd->rasterizedStream;
     3261    pEntry->numOutputStreamStrides = pCmd->numOutputStreamStrides;
     3262    pEntry->mobid = SVGA_ID_INVALID;
     3263    pEntry->offsetInBytes = 0;
     3264    pEntry->usesMob = 1;
     3265    pEntry->pad0 = 0;
     3266    pEntry->pad1 = 0;
     3267    RT_ZERO(pEntry->pad2);
     3268
     3269    rc = pSvgaR3State->pFuncsDX->pfnDXDefineStreamOutput(pThisCC, pDXContext, soid, pEntry);
    32503270    return rc;
    32513271}
     
    32693289
    32703290
    3271 int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext)
    3272 {
    3273     int rc;
    3274     PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    3275     AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnDXBindStreamOutput, VERR_INVALID_STATE);
    3276     PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
    3277     AssertReturn(p3dState, VERR_INVALID_STATE);
    3278 
    3279     PVMSVGA3DDXCONTEXT pDXContext;
    3280     rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
    3281     AssertRCReturn(rc, rc);
    3282 
    3283     rc = pSvgaR3State->pFuncsDX->pfnDXBindStreamOutput(pThisCC, pDXContext);
    3284     return rc;
     3291int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindStreamOutput const *pCmd)
     3292{
     3293    int rc;
     3294    PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
     3295    AssertReturn(pSvgaR3State->pFuncsDX, VERR_INVALID_STATE);
     3296    PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
     3297    AssertReturn(p3dState, VERR_INVALID_STATE);
     3298
     3299    PVMSVGA3DDXCONTEXT pDXContext;
     3300    rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
     3301    AssertRCReturn(rc, rc);
     3302    SVGA3dStreamOutputId const soid = pCmd->soid;
     3303
     3304    ASSERT_GUEST_RETURN(pDXContext->cot.paStreamOutput, VERR_INVALID_STATE);
     3305    ASSERT_GUEST_RETURN(soid < pDXContext->cot.cStreamOutput, VERR_INVALID_PARAMETER);
     3306    RT_UNTRUSTED_VALIDATED_FENCE();
     3307
     3308    SVGACOTableDXStreamOutputEntry *pEntry = &pDXContext->cot.paStreamOutput[soid];
     3309
     3310    ASSERT_GUEST_RETURN(pCmd->sizeInBytes >= pEntry->numOutputStreamEntries * sizeof(SVGA3dStreamOutputDeclarationEntry), VERR_INVALID_PARAMETER);
     3311    ASSERT_GUEST(pEntry->usesMob);
     3312
     3313    pEntry->mobid = pCmd->mobid;
     3314    pEntry->offsetInBytes = pCmd->offsetInBytes;
     3315    pEntry->usesMob = 1;
     3316
     3317    return VINF_SUCCESS;
    32853318}
    32863319
     
    33193352}
    33203353
     3354
     3355int vmsvga3dVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion const *pCmd, uint32_t cRect, SVGASignedRect const *paRect)
     3356{
     3357    int rc;
     3358    PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
     3359    AssertReturn(pSvgaR3State->pFuncsDX && pSvgaR3State->pFuncsDX->pfnVBDXClearRenderTargetViewRegion, VERR_INVALID_STATE);
     3360    PVMSVGA3DSTATE p3dState = pThisCC->svga.p3dState;
     3361    AssertReturn(p3dState, VERR_INVALID_STATE);
     3362
     3363    PVMSVGA3DDXCONTEXT pDXContext;
     3364    rc = vmsvga3dDXContextFromCid(p3dState, idDXContext, &pDXContext);
     3365    AssertRCReturn(rc, rc);
     3366
     3367    SVGA3dRenderTargetViewId const renderTargetViewId = pCmd->viewId;
     3368
     3369    ASSERT_GUEST_RETURN(pDXContext->cot.paRTView, VERR_INVALID_STATE);
     3370    ASSERT_GUEST_RETURN(renderTargetViewId < pDXContext->cot.cRTView, VERR_INVALID_PARAMETER);
     3371    ASSERT_GUEST_RETURN(cRect <= 65536, VERR_INVALID_PARAMETER); /* Arbitrary limit. */
     3372    RT_UNTRUSTED_VALIDATED_FENCE();
     3373
     3374    rc = pSvgaR3State->pFuncsDX->pfnVBDXClearRenderTargetViewRegion(pThisCC, pDXContext, renderTargetViewId, &pCmd->color, cRect, paRect);
     3375    return rc;
     3376}
     3377
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win-dx.cpp

    r95035 r95055  
    12701270
    12711271
    1272 static int dxDefineStreamOutput(PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid, SVGACOTableDXStreamOutputEntry const *pEntry)
    1273 {
     1272static int dxDefineStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dStreamOutputId soid, SVGACOTableDXStreamOutputEntry const *pEntry)
     1273{
     1274    PVMSVGAR3STATE const pSvgaR3State = pThisCC->svga.pSvgaR3State;
    12741275    DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid];
    12751276
    12761277    /* Make D3D11_SO_DECLARATION_ENTRY array from SVGA3dStreamOutputDeclarationEntry. */
     1278    SVGA3dStreamOutputDeclarationEntry const *paDecls;
     1279    PVMSVGAMOB pMob = NULL;
     1280    if (pEntry->usesMob)
     1281    {
     1282        DEBUG_BREAKPOINT_TEST();
     1283        pMob = vmsvgaR3MobGet(pSvgaR3State, pEntry->mobid);
     1284        ASSERT_GUEST_RETURN(pMob, VERR_INVALID_PARAMETER);
     1285
     1286        /* Create a memory pointer for the MOB, which is accessible by host. */
     1287        int rc = vmsvgaR3MobBackingStoreCreate(pSvgaR3State, pMob, vmsvgaR3MobSize(pMob));
     1288        ASSERT_GUEST_RETURN(RT_SUCCESS(rc), rc);
     1289
     1290        /* Get pointer to the shader bytecode. This will also verify the offset. */
     1291        paDecls = (SVGA3dStreamOutputDeclarationEntry const *)vmsvgaR3MobBackingStorePtr(pMob, pEntry->offsetInBytes);
     1292        AssertReturnStmt(paDecls, vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob), VERR_INTERNAL_ERROR);
     1293    }
     1294    else
     1295        paDecls = &pEntry->decl[0];
     1296
    12771297    pDXStreamOutput->cDeclarationEntry = pEntry->numOutputStreamEntries;
    12781298    for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i)
    12791299    {
    12801300        D3D11_SO_DECLARATION_ENTRY *pDst = &pDXStreamOutput->aDeclarationEntry[i];
    1281         SVGA3dStreamOutputDeclarationEntry const *pSrc = &pEntry->decl[i];
     1301        SVGA3dStreamOutputDeclarationEntry const *pSrc = &paDecls[i];
    12821302
    12831303        uint32_t const registerMask = pSrc->registerMask & 0xF;
     
    12921312        pDst->OutputSlot     = pSrc->outputSlot;
    12931313    }
     1314
     1315    if (pMob)
     1316        vmsvgaR3MobBackingStoreDelete(pSvgaR3State, pMob);
    12941317
    12951318    return VINF_SUCCESS;
     
    17881811                    pEntry->rasterizedStream,
    17891812                    /*pClassLinkage=*/ NULL, &pDXShader->pGeometryShader);
    1790                 Assert(SUCCEEDED(hr));
    1791                 if (SUCCEEDED(hr))
    1792                     pDXShader->soid = soid;
     1813                AssertBreak(SUCCEEDED(hr));
     1814
     1815                pDXShader->soid = soid;
    17931816            }
    17941817            break;
     
    20982121    switch (dxgiFormat)
    20992122    {
     2123        case DXGI_FORMAT_D32_FLOAT:
     2124        case DXGI_FORMAT_R32_FLOAT:
     2125        case DXGI_FORMAT_R32_UINT:
     2126        case DXGI_FORMAT_R32_SINT:
     2127            return DXGI_FORMAT_R32_TYPELESS;                /* 39 */
     2128        case DXGI_FORMAT_D24_UNORM_S8_UINT:
     2129        case DXGI_FORMAT_R24_UNORM_X8_TYPELESS:
     2130        case DXGI_FORMAT_X24_TYPELESS_G8_UINT:
     2131            return DXGI_FORMAT_R24G8_TYPELESS;              /* 44 */
    21002132        case DXGI_FORMAT_B8G8R8A8_UNORM:
    21012133        case DXGI_FORMAT_B8G8R8X8_UNORM :
     
    21042136        case DXGI_FORMAT_B8G8R8X8_TYPELESS:
    21052137        case DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:
    2106             return DXGI_FORMAT_B8G8R8A8_TYPELESS;
     2138            return DXGI_FORMAT_B8G8R8A8_TYPELESS;           /* 90 */
    21072139        /** @todo Other _TYPELESS formats. */
    21082140        default:
     
    21112143
    21122144    return dxgiFormat;
     2145}
     2146
     2147
     2148static bool dxIsDepthStencilFormat(DXGI_FORMAT dxgiFormat)
     2149{
     2150    switch (dxgiFormat)
     2151    {
     2152        case DXGI_FORMAT_D24_UNORM_S8_UINT:
     2153            return true;
     2154        /** @todo Other Depth Stencil formats. */
     2155        default:
     2156            break;
     2157    }
     2158
     2159    return false;
    21132160}
    21142161
     
    21442191    AssertReturn(dxgiFormat != DXGI_FORMAT_UNKNOWN, E_FAIL);
    21452192
    2146     dxgiFormat = dxGetDxgiTypelessFormat(dxgiFormat);
     2193    /* Create typeless textures, unless it is a depth/stencil resource,
     2194     * because D3D11_BIND_DEPTH_STENCIL requires a depth/stencil format.
     2195     * Always use typeless format for staging/dynamic resources.
     2196     */
     2197    DXGI_FORMAT const dxgiFormatTypeless = dxGetDxgiTypelessFormat(dxgiFormat);
     2198    if (!dxIsDepthStencilFormat(dxgiFormat))
     2199        dxgiFormat = dxgiFormatTypeless;
    21472200
    21482201    /*
     
    21932246        {
    21942247            /* Map-able texture. */
     2248            td.Format         = dxgiFormatTypeless;
    21952249            td.Usage          = D3D11_USAGE_DYNAMIC;
    21962250            td.BindFlags      = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
     
    22482302        {
    22492303            /* Map-able texture. */
     2304            td.Format         = dxgiFormatTypeless;
    22502305            td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    22512306            td.ArraySize      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
     
    23032358        {
    23042359            /* Map-able texture. */
     2360            td.Format         = dxgiFormatTypeless;
    23052361            td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    23062362            td.ArraySize      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
     
    23622418            {
    23632419                /* Map-able texture. */
     2420                td.Format         = dxgiFormatTypeless;
    23642421                td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    23652422                td.Usage          = D3D11_USAGE_DYNAMIC;
     
    24202477            {
    24212478                /* Map-able texture. */
     2479                td.Format         = dxgiFormatTypeless;
    24222480                td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    24232481                td.ArraySize      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
     
    53345392
    53355393
    5336 static void vboxDXMatchShaderSignatures(PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader)
     5394static void vboxDXMatchShaderSignatures(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, DXSHADER *pDXShader)
    53375395{
    53385396    SVGA3dShaderId const shaderIdVS = pDXContext->svgaDXContext.shaderState[SVGA3D_SHADERTYPE_VS - SVGA3D_SHADERTYPE_MIN].shaderId;
     
    54455503                SVGACOTableDXStreamOutputEntry const *pStreamOutputEntry = &pDXContext->cot.paStreamOutput[soid];
    54465504                DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[soid];
     5505
     5506                if (pDXStreamOutput->cDeclarationEntry == 0)
     5507                {
     5508                    int rc = dxDefineStreamOutput(pThisCC, pDXContext, soid, pStreamOutputEntry);
     5509                    AssertRCReturnVoid(rc);
     5510                }
    54475511
    54485512                for (uint32_t i = 0; i < pDXStreamOutput->cDeclarationEntry; ++i)
     
    58515915                }
    58525916
    5853                 vboxDXMatchShaderSignatures(pDXContext, pDXShader);
     5917                vboxDXMatchShaderSignatures(pThisCC, pDXContext, pDXShader);
    58545918
    58555919                rc = DXShaderCreateDXBC(&pDXShader->shaderInfo, &pDXShader->pvDXBC, &pDXShader->cbDXBC);
     
    69487012
    69497013
     7014static DECLCALLBACK(int) vmsvga3dBackVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId,
     7015                                                                     SVGA3dRGBAFloat const *pColor, uint32_t cRect, SVGASignedRect const *paRect)
     7016{
     7017    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     7018    RT_NOREF(pBackend);
     7019
     7020    DXDEVICE *pDevice = dxDeviceFromContext(pThisCC->svga.p3dState, pDXContext);
     7021    AssertReturn(pDevice->pDevice, VERR_INVALID_STATE);
     7022
     7023    DXVIEW *pDXView = &pDXContext->pBackendDXContext->paRenderTargetView[renderTargetViewId];
     7024    if (!pDXView->u.pRenderTargetView)
     7025    {
     7026        /* (Re-)create the render target view, because a creation of a view is deferred until a draw or a clear call. */
     7027        SVGACOTableDXRTViewEntry const *pEntry = &pDXContext->cot.paRTView[renderTargetViewId];
     7028        int rc = dxDefineRenderTargetView(pThisCC, pDXContext, renderTargetViewId, pEntry);
     7029        AssertRCReturn(rc, rc);
     7030    }
     7031    pDevice->pImmediateContext->ClearView(pDXView->u.pRenderTargetView, pColor->value, (D3D11_RECT *)paRect, cRect);
     7032    return VINF_SUCCESS;
     7033}
     7034
     7035
    69507036static DECLCALLBACK(int) vmsvga3dBackDXClearDepthStencilView(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t flags, SVGA3dDepthStencilViewId depthStencilViewId, float depth, uint8_t stencil)
    69517037{
     
    75607646    dxDestroyStreamOutput(pDXStreamOutput);
    75617647
    7562     return dxDefineStreamOutput(pDXContext, soid, pEntry);
     7648    RT_NOREF(pEntry);
     7649    return VINF_SUCCESS;
    75637650}
    75647651
     
    78477934                    continue; /* Skip uninitialized entry. */
    78487935
    7849                 dxDefineStreamOutput(pDXContext, i, pEntry);
     7936                /* Reset the stream output backend data. It will be re-created when a GS shader with this streamoutput
     7937                 * will be set in setupPipeline.
     7938                 */
     7939                DXSTREAMOUTPUT *pDXStreamOutput = &pDXContext->pBackendDXContext->paStreamOutput[i];
     7940                dxDestroyStreamOutput(pDXStreamOutput);
    78507941            }
    78517942            break;
     
    85718662
    85728663
    8573 static DECLCALLBACK(int) vmsvga3dBackDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    8574 {
    8575     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    8576 
    8577     RT_NOREF(pBackend, pDXContext);
    8578     AssertFailed(); /** @todo Implement */
    8579     return VERR_NOT_IMPLEMENTED;
    8580 }
    8581 
    8582 
    85838664static DECLCALLBACK(int) vmsvga3dBackDXSetShaderIface(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    8584 {
    8585     PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
    8586 
    8587     RT_NOREF(pBackend, pDXContext);
    8588     AssertFailed(); /** @todo Implement */
    8589     return VERR_NOT_IMPLEMENTED;
    8590 }
    8591 
    8592 
    8593 static DECLCALLBACK(int) vmsvga3dBackDXBindStreamOutput(PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext)
    85948665{
    85958666    PVMSVGA3DBACKEND pBackend = pThisCC->svga.p3dState->pBackend;
     
    88528923                p->pfnDXSetCSUAViews              = vmsvga3dBackDXSetCSUAViews;
    88538924                p->pfnDXSetMinLOD                 = vmsvga3dBackDXSetMinLOD;
    8854                 p->pfnDXDefineStreamOutputWithMob = vmsvga3dBackDXDefineStreamOutputWithMob;
    88558925                p->pfnDXSetShaderIface            = vmsvga3dBackDXSetShaderIface;
    8856                 p->pfnDXBindStreamOutput          = vmsvga3dBackDXBindStreamOutput;
    88578926                p->pfnSurfaceStretchBltNonMSToMS  = vmsvga3dBackSurfaceStretchBltNonMSToMS;
    88588927                p->pfnDXBindShaderIface           = vmsvga3dBackDXBindShaderIface;
     8928                p->pfnVBDXClearRenderTargetViewRegion = vmsvga3dBackVBDXClearRenderTargetViewRegion;
    88598929            }
    88608930        }
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d.h

    r95017 r95055  
    525525    DECLCALLBACKMEMBER(int, pfnDXSetCSUAViews,              (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, uint32_t startIndex, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId));
    526526    DECLCALLBACKMEMBER(int, pfnDXSetMinLOD,                 (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    527     DECLCALLBACKMEMBER(int, pfnDXDefineStreamOutputWithMob, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    528527    DECLCALLBACKMEMBER(int, pfnDXSetShaderIface,            (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    529     DECLCALLBACKMEMBER(int, pfnDXBindStreamOutput,          (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    530528    DECLCALLBACKMEMBER(int, pfnSurfaceStretchBltNonMSToMS,  (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
    531529    DECLCALLBACKMEMBER(int, pfnDXBindShaderIface,           (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext));
     530    DECLCALLBACKMEMBER(int, pfnVBDXClearRenderTargetViewRegion, (PVGASTATECC pThisCC, PVMSVGA3DDXCONTEXT pDXContext, SVGA3dRenderTargetViewId renderTargetViewId, SVGA3dRGBAFloat const *pColor, uint32_t cRect, SVGASignedRect const *paRect));
    532531} VMSVGA3DBACKENDFUNCSDX;
    533532
     
    653652int vmsvga3dDXSetCSUAViews(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXSetCSUAViews const *pCmd, uint32_t cUAViewId, SVGA3dUAViewId const *paUAViewId);
    654653int vmsvga3dDXSetMinLOD(PVGASTATECC pThisCC, uint32_t idDXContext);
    655 int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext);
     654int vmsvga3dDXDefineStreamOutputWithMob(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXDefineStreamOutputWithMob const *pCmd);
    656655int vmsvga3dDXSetShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext);
    657 int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext);
     656int vmsvga3dDXBindStreamOutput(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdDXBindStreamOutput const *pCmd);
    658657int vmsvga3dSurfaceStretchBltNonMSToMS(PVGASTATECC pThisCC, uint32_t idDXContext);
    659658int vmsvga3dDXBindShaderIface(PVGASTATECC pThisCC, uint32_t idDXContext);
    660659int vmsvga3dDXLoadExec(PPDMDEVINS pDevIns, PVGASTATE pThis, PVGASTATECC pThisCC, PSSMHANDLE pSSM, uint32_t uVersion, uint32_t uPass);
    661660int vmsvga3dDXSaveExec(PPDMDEVINS pDevIns, PVGASTATECC pThisCC, PSSMHANDLE pSSM);
     661
     662int vmsvga3dVBDXClearRenderTargetViewRegion(PVGASTATECC pThisCC, uint32_t idDXContext, SVGA3dCmdVBDXClearRenderTargetViewRegion const *pCmd, uint32_t cRect, SVGASignedRect const *paRect);
    662663#endif /* VMSVGA3D_DX */
    663664
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