VirtualBox

Changeset 79681 in vbox


Ignore:
Timestamp:
Jul 10, 2019 9:02:36 PM (6 years ago)
Author:
vboxsync
Message:

DevVGA-SVGA3d-win.cpp: Sync vmsvga3dSurfaceGetSharedCopy with vmsvga3dBackCreateTexture; create bounce texture for D3DFMT_D24S8 and D3DFMT_D24X8; use helper to get DepthStencil render target surface.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Devices/Graphics/DevVGA-SVGA3d-win.cpp

    r79668 r79681  
    12421242                                                      &pSurface->hSharedObject);
    12431243        else if (pSurface->enmD3DResType == VMSVGA3D_D3DRESTYPE_TEXTURE)
    1244             hr = pContext->pDevice->CreateTexture(cWidth,
    1245                                                   cHeight,
    1246                                                   numMipLevels,
    1247                                                   pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
    1248                                                   pSurface->formatD3D,
    1249                                                   D3DPOOL_DEFAULT,
    1250                                                   &pSharedSurface->u.pTexture,
    1251                                                   &pSurface->hSharedObject);
     1244        {
     1245            if (pSurface->fStencilAsTexture)
     1246            {
     1247                /* Use the INTZ format for a depth/stencil surface that will be used as a texture */
     1248                hr = pContext->pDevice->CreateTexture(cWidth,
     1249                                                      cHeight,
     1250                                                      1, /* mip levels */
     1251                                                      D3DUSAGE_DEPTHSTENCIL,
     1252                                                      FOURCC_INTZ,
     1253                                                      D3DPOOL_DEFAULT,
     1254                                                      &pSharedSurface->u.pTexture,
     1255                                                      &pSurface->hSharedObject);
     1256            }
     1257            else
     1258            {
     1259                hr = pContext->pDevice->CreateTexture(cWidth,
     1260                                                      cHeight,
     1261                                                      numMipLevels,
     1262                                                      pSurface->fUsageD3D | D3DUSAGE_RENDERTARGET,
     1263                                                      pSurface->formatD3D,
     1264                                                      D3DPOOL_DEFAULT,
     1265                                                      &pSharedSurface->u.pTexture,
     1266                                                      &pSurface->hSharedObject);
     1267            }
     1268        }
    12521269        else
    12531270            hr = E_FAIL;
     
    18911908                                              &pSurface->u.pTexture,
    18921909                                              &pSurface->hSharedObject /* might result in poor performance */);
     1910        if (   hr == D3D_OK
     1911            && (   pSurface->formatD3D == D3DFMT_D24S8
     1912                || pSurface->formatD3D == D3DFMT_D24X8))
     1913        {
     1914            /* Create another texture object to serve as a bounce buffer as the
     1915             * D3DFMT_D24S8 and D3DFMT_D24X8 surface can't be locked apparently (from testing).
     1916             */
     1917            hr = pContext->pDevice->CreateTexture(cWidth,
     1918                                                  cHeight,
     1919                                                  1, /* mip levels */
     1920                                                  D3DUSAGE_DYNAMIC /* Lockable */,
     1921                                                  FOURCC_INTZ,
     1922                                                  D3DPOOL_SYSTEMMEM,
     1923                                                  &pSurface->bounce.pTexture,
     1924                                                  NULL);
     1925            AssertMsgReturn(hr == D3D_OK, ("CreateTexture (systemmem) failed with %x\n", hr), VERR_INTERNAL_ERROR);
     1926        }
    18931927        AssertMsgReturn(hr == D3D_OK, ("CreateTexture INTZ failed with %x\n", hr), VERR_INTERNAL_ERROR);
    18941928
     
    40484082#endif
    40494083        }
    4050         Assert(pRenderTarget->idAssociatedContext == cid);
    40514084
    40524085        /** @todo Assert(!pRenderTarget->fDirty); */
     
    40614094            IDirect3DSurface9 *pStencilSurface;
    40624095
    4063             hr = pRenderTarget->u.pTexture->GetSurfaceLevel(0, &pStencilSurface);
    4064             AssertMsgReturn(hr == D3D_OK, ("GetSurfaceLevel failed with %x\n", hr), VERR_INTERNAL_ERROR);
     4096            rc = vmsvga3dGetD3DSurface(pState, pContext, pRenderTarget, target.face, target.mipmap, /*fLockable=*/ false, &pStencilSurface);
     4097            AssertRCReturn(rc, rc);
    40654098
    40664099            hr = pContext->pDevice->SetDepthStencilSurface(pStencilSurface);
     
    40704103        else
    40714104        {
     4105            Assert(pRenderTarget->idAssociatedContext == cid);
    40724106            hr = pContext->pDevice->SetDepthStencilSurface(pRenderTarget->u.pSurface);
    40734107            AssertMsgReturn(hr == D3D_OK, ("SetDepthStencilSurface failed with %x\n", hr), VERR_INTERNAL_ERROR);
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette