VirtualBox

Changeset 57633 in vbox


Ignore:
Timestamp:
Sep 4, 2015 3:04:47 PM (9 years ago)
Author:
vboxsync
Message:

WDDM: minor fixes for VBOXWDDMDISP_DEVICE::cRTs greater than 1

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxD3DIf.h

    r49244 r57633  
    8080        case VBOXDISP_D3DIFTYPE_TEXTURE:
    8181        {
    82             Assert(pRc->cAllocations == 1); /* <- VBoxD3DIfSurfGet is typically used in Blt & ColorFill functions
    83                                              * in this case, if texture is used as a destination,
    84                                              * we should update sub-layers as well which is not done currently
    85                                              * so for now check VBoxD3DIfSurfGet is used for one-level textures */
     82            /* @todo VBoxD3DIfSurfGet is typically used in Blt & ColorFill functions
     83             * in this case, if texture is used as a destination,
     84             * we should update sub-layers as well which is not done currently. */
    8685            IDirect3DTexture9 *pD3DIfTex = (IDirect3DTexture9*)pD3DIf;
    8786            IDirect3DSurface9 *pSurfaceLevel;
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispD3D.cpp

    r56974 r57633  
    686686static VOID vboxWddmDbgRcSynchMemCheck(PVBOXWDDMDISP_RESOURCE pRc)
    687687{
     688    if (!pRc)
     689    {
     690        return;
     691    }
     692
    688693    if (pRc->RcDesc.enmPool != D3DDDIPOOL_SYSTEMMEM)
    689694    {
     
    13781383    {
    13791384        PVBOXWDDMDISP_ALLOCATION pRtAlloc = pDevice->apRTs[i];
     1385        if (!pRtAlloc) continue;
    13801386        for (UINT j = 0; j < pSwapchain->cRTs; ++j)
    13811387        {
     
    18941900{
    18951901    IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice);
    1896     PVBOXWDDMDISP_SWAPCHAIN pSwapchain = vboxWddmSwapchainForAlloc(pAlloc);
    18971902    HRESULT hr = S_OK;
    1898     IDirect3DSurface9 *pD3D9Surf;
    1899     if (pSwapchain)
    1900     {
    1901         hr = vboxWddmSwapchainRtSurfGet(pDevice, pSwapchain, iRt, pAlloc, bOnSwapchainSynch, &pD3D9Surf);
    1902         if (FAILED(hr))
    1903         {
    1904             WARN(("vboxWddmSwapchainRtSurfGet failed, hr(0x%x)",hr));
    1905             return hr;
    1906         }
    1907     }
    1908     else
    1909     {
    1910         hr = VBoxD3DIfSurfGet(pAlloc->pRc, pAlloc->iAlloc, &pD3D9Surf);
    1911         if (FAILED(hr))
    1912         {
    1913             WARN(("VBoxD3DIfSurfGet failed, hr(0x%x)",hr));
    1914             return hr;
    1915         }
    1916     }
    1917 
    1918     Assert(pD3D9Surf);
     1903    IDirect3DSurface9 *pD3D9Surf = NULL;
     1904    if (pAlloc)
     1905    {
     1906        PVBOXWDDMDISP_SWAPCHAIN pSwapchain = vboxWddmSwapchainForAlloc(pAlloc);
     1907        if (pSwapchain)
     1908        {
     1909            hr = vboxWddmSwapchainRtSurfGet(pDevice, pSwapchain, iRt, pAlloc, bOnSwapchainSynch, &pD3D9Surf);
     1910            if (FAILED(hr))
     1911            {
     1912                WARN(("vboxWddmSwapchainRtSurfGet failed, hr(0x%x)",hr));
     1913                return hr;
     1914            }
     1915        }
     1916        else
     1917        {
     1918            hr = VBoxD3DIfSurfGet(pAlloc->pRc, pAlloc->iAlloc, &pD3D9Surf);
     1919            if (FAILED(hr))
     1920            {
     1921                WARN(("VBoxD3DIfSurfGet failed, hr(0x%x)",hr));
     1922                return hr;
     1923            }
     1924        }
     1925
     1926        Assert(pD3D9Surf);
     1927    }
    19191928
    19201929    hr = pDevice9If->SetRenderTarget(iRt, pD3D9Surf);
    1921     Assert(hr == S_OK);
    19221930    if (hr == S_OK)
    19231931    {
     
    19251933        pDevice->apRTs[iRt] = pAlloc;
    19261934    }
    1927     pD3D9Surf->Release();
     1935    else
     1936    {
     1937        /* @todo This is workaround for wine 1 render target. */
     1938        if (!pAlloc)
     1939        {
     1940            pDevice->apRTs[iRt] = NULL;
     1941            hr = S_OK;
     1942        }
     1943        else
     1944        {
     1945            AssertFailed();
     1946        }
     1947    }
     1948
     1949    if (pD3D9Surf)
     1950    {
     1951        pD3D9Surf->Release();
     1952    }
    19281953
    19291954    return hr;
     
    52875312    IDirect3DDevice9 * pDevice9If = VBOXDISP_D3DEV(pDevice);
    52885313    PVBOXWDDMDISP_RESOURCE pRc = (PVBOXWDDMDISP_RESOURCE)pData->hRenderTarget;
    5289     VBOXVDBG_CHECK_SMSYNC(pRc);
    5290     Assert(pRc);
    5291     Assert(pData->SubResourceIndex < pRc->cAllocations);
    5292     PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[pData->SubResourceIndex];
     5314    PVBOXWDDMDISP_ALLOCATION pAlloc = NULL;
     5315    if (pRc)
     5316    {
     5317        VBOXVDBG_CHECK_SMSYNC(pRc);
     5318        Assert(pRc);
     5319        Assert(pData->SubResourceIndex < pRc->cAllocations);
     5320        pAlloc = &pRc->aAllocations[pData->SubResourceIndex];
     5321    }
    52935322    HRESULT hr = vboxWddmRenderTargetSet(pDevice, pData->RenderTargetIndex, pAlloc, FALSE);
    52945323    Assert(hr == S_OK);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp

    r56279 r57633  
    391391        IDirect3DSurface9 *pRt;
    392392        PVBOXWDDMDISP_ALLOCATION pAlloc = pDevice->apRTs[i];
     393        if (!pAlloc) continue;
    393394        IDirect3DDevice9 *pDeviceIf = pDevice->pDevice9If;
    394395        HRESULT hr = pDeviceIf->GetRenderTarget(i, &pRt);
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h

    r49263 r57633  
    339339        for (UINT i = 0; i < (_pDevice)->cRTs; ++i) { \
    340340            PVBOXWDDMDISP_ALLOCATION pRtVar = (_pDevice)->apRTs[i]; \
    341             if (pRtVar->pRc->RcDesc.fFlags.SharedResource) { *(_pIsShared) = TRUE; break; } \
     341            if (pRtVar && pRtVar->pRc->RcDesc.fFlags.SharedResource) { *(_pIsShared) = TRUE; break; } \
    342342        } \
    343343        if (!*(_pIsShared)) { \
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