VirtualBox

Changeset 98052 in vbox for trunk/src/VBox/Devices


Ignore:
Timestamp:
Jan 11, 2023 5:57:27 AM (2 years ago)
Author:
vboxsync
Message:

Devices/Graphics: allow to use different formats for staging and dynamic resources; logging. bugref:9830

File:
1 edited

Legend:

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

    r97722 r98052  
    24422442        dxgiFormat = dxgiFormatTypeless;
    24432443
     2444    /* Format for staging resource is always the typeless one. */
     2445    DXGI_FORMAT const dxgiFormatStaging = dxgiFormatTypeless;
     2446
     2447    DXGI_FORMAT dxgiFormatDynamic;
     2448    /* Some drivers do not allow to use depth typeless formats for dynamic resources.
     2449     * Create a placeholder texture (it does not work with CopySubresource).
     2450     */
     2451    /** @todo Implement upload from such textures. */
     2452    if (dxgiFormatTypeless == DXGI_FORMAT_R24G8_TYPELESS)
     2453        dxgiFormatDynamic = DXGI_FORMAT_R32_UINT;
     2454    else if (dxgiFormatTypeless == DXGI_FORMAT_R32G8X24_TYPELESS)
     2455        dxgiFormatDynamic = DXGI_FORMAT_R32G32_UINT;
     2456    else
     2457        dxgiFormatDynamic = dxgiFormatTypeless;
     2458
    24442459    /*
    24452460     * Create D3D11 texture object.
     
    24892504        {
    24902505            /* Map-able texture. */
    2491             td.Format         = dxgiFormatTypeless;
     2506            td.Format         = dxgiFormatDynamic;
    24922507            td.Usage          = D3D11_USAGE_DYNAMIC;
    24932508            td.BindFlags      = D3D11_BIND_SHADER_RESOURCE; /* Have to specify a supported flag, otherwise E_INVALIDARG will be returned. */
     
    25012516        {
    25022517            /* Staging texture. */
     2518            td.Format         = dxgiFormatStaging;
    25032519            td.Usage          = D3D11_USAGE_STAGING;
    25042520            td.BindFlags      = 0; /* No flags allowed. */
     
    25452561        {
    25462562            /* Map-able texture. */
    2547             td.Format         = dxgiFormatTypeless;
     2563            td.Format         = dxgiFormatDynamic;
    25482564            td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    25492565            td.ArraySize      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
     
    25592575        {
    25602576            /* Staging texture. */
     2577            td.Format         = dxgiFormatStaging;
    25612578            td.Usage          = D3D11_USAGE_STAGING;
    25622579            td.BindFlags      = 0; /* No flags allowed. */
     
    26012618        {
    26022619            /* Map-able texture. */
    2603             td.Format         = dxgiFormatTypeless;
     2620            td.Format         = dxgiFormatDynamic;
    26042621            td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    26052622            td.ArraySize      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
     
    26152632        {
    26162633            /* Staging texture. */
     2634            td.Format         = dxgiFormatStaging;
    26172635            td.Usage          = D3D11_USAGE_STAGING;
    26182636            td.BindFlags      = 0; /* No flags allowed. */
     
    26612679            {
    26622680                /* Map-able texture. */
    2663                 td.Format         = dxgiFormatTypeless;
     2681                td.Format         = dxgiFormatDynamic;
    26642682                td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    26652683                td.Usage          = D3D11_USAGE_DYNAMIC;
     
    26742692            {
    26752693                /* Staging texture. */
     2694                td.Format         = dxgiFormatStaging;
    26762695                td.Usage          = D3D11_USAGE_STAGING;
    26772696                td.BindFlags      = 0; /* No flags allowed. */
     
    27202739            {
    27212740                /* Map-able texture. */
    2722                 td.Format         = dxgiFormatTypeless;
     2741                td.Format         = dxgiFormatDynamic;
    27232742                td.MipLevels      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
    27242743                td.ArraySize      = 1; /* Must be for D3D11_USAGE_DYNAMIC. */
     
    27342753            {
    27352754                /* Staging texture. */
     2755                td.Format         = dxgiFormatStaging;
    27362756                td.Usage          = D3D11_USAGE_STAGING;
    27372757                td.BindFlags      = 0; /* No flags allowed. */
     
    27502770            }
    27512771        }
     2772    }
     2773
     2774    if (hr == DXGI_ERROR_DEVICE_REMOVED)
     2775    {
     2776        DEBUG_BREAKPOINT_TEST();
     2777        hr = pDXDevice->pDevice->GetDeviceRemovedReason();
    27522778    }
    27532779
     
    37753801    else if (pBackendSurface->enmResType == VMSVGA3D_RESTYPE_BUFFER)
    37763802    {
     3803        Log4(("Unmap buffer sid = %u:\n%.*Rhxd\n", pSurface->id, pMap->cbRow, pMap->pvData));
     3804
    37773805        /* Unmap the staging buffer. */
    37783806        UINT const Subresource = 0; /* Buffers have only one subresource. */
     
    59705998            || pBufferContext->offset != pBufferPipeline->offset)
    59715999        {
    5972             LogFunc(("vertex buffer: [%u]: sid = %u, %p -> %p\n",
    5973                      i, pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].bufferId, pBufferPipeline->pBuffer, pBufferContext->pBuffer));
     6000            LogFunc(("vertex buffer: [%u]: sid = %u, %p (stride %d, off %d) -> %p (stride %d, off %d)\n",
     6001                     i, pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].bufferId,
     6002                     pBufferPipeline->pBuffer, pBufferPipeline->stride, pBufferPipeline->offset,
     6003                     pBufferContext->pBuffer, pBufferContext->stride, pBufferContext->offset));
    59746004
    59756005            if (pBufferContext->pBuffer != pBufferPipeline->pBuffer)
     
    59836013            idxMaxSlot = i;
    59846014        }
     6015#ifdef LOG_ENABLED
     6016        else if (pBufferContext->pBuffer)
     6017        {
     6018            LogFunc(("vertex buffer: [%u]: sid = %u, %p (stride %d, off %d)\n",
     6019                     i, pDXContext->svgaDXContext.inputAssembly.vertexBuffers[i].bufferId,
     6020                     pBufferContext->pBuffer, pBufferContext->stride, pBufferContext->offset));
     6021        }
     6022#endif
    59856023
    59866024        paResources[i] = pBufferContext->pBuffer;
     
    59976035    }
    59986036
     6037    LogFunc(("idxMaxSlot = %d\n", idxMaxSlot));
    59996038    if (idxMaxSlot >= 0)
    60006039        pDXDevice->pImmediateContext->IASetVertexBuffers(0, idxMaxSlot + 1, paResources, paStride, paOffset);
     
    76117650    pDevice->pImmediateContext->CopySubresourceRegion(pDstResource, DstSubresource, DstX, DstY, DstZ,
    76127651                                                      pSrcResource, SrcSubresource, &SrcBox);
     7652
     7653#ifdef DUMP_BITMAPS
     7654    SVGA3dSurfaceImageId image;
     7655    image.sid = pDstSurface->id;
     7656    image.face = 0;
     7657    image.mipmap = 0;
     7658    VMSVGA3D_MAPPED_SURFACE map;
     7659    int rc2 = vmsvga3dSurfaceMap(pThisCC, &image, NULL, VMSVGA3D_SURFACE_MAP_READ, &map);
     7660    if (RT_SUCCESS(rc2))
     7661    {
     7662        vmsvga3dMapWriteBmpFile(&map, "copyregion-");
     7663        vmsvga3dSurfaceUnmap(pThisCC, &image, &map, /* fWritten =  */ false);
     7664    }
     7665    else
     7666        Log(("Map failed %Rrc\n", rc));
     7667#endif
    76137668
    76147669    pDstSurface->pBackendSurface->cidDrawing = pDXContext->cid;
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