VirtualBox

Ignore:
Timestamp:
Sep 16, 2010 6:11:27 PM (14 years ago)
Author:
vboxsync
Message:

wddm/3d: aero working on win7 (window contents still corrupted)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp

    r32562 r32577  
    17471747    if (!pSwapchain)
    17481748    {
    1749 //        Assert(0);
     1749#ifdef DEBUG_misha
     1750        Assert(0);
     1751#endif
    17501752        /* first search for the swapchain the alloc might be added to */
    17511753        PVBOXWDDMDISP_SWAPCHAIN pCur = RTListNodeGetFirst(&pDevice->SwapchainList, VBOXWDDMDISP_SWAPCHAIN, ListEntry);
     
    17681770                                    || (pBbRc->fFlags == pRtRc->fFlags
    17691771                                            && pBbRc->RcDesc.enmPool == pRtRc->RcDesc.enmPool
    1770                                             && pBbRc->RcDesc.fFlags.Value == pRtRc->RcDesc.fFlags.Value
     1772//                                            && pBbRc->RcDesc.fFlags.Value == pRtRc->RcDesc.fFlags.Value
    17711773                                        )
    17721774                                ))
     
    23492351        {
    23502352            PVBOXWDDMDISP_ALLOCATION pAlloc = &pRc->aAllocations[i];
    2351             pAlloc->SurfDesc.width = 0x400;
    2352             pAlloc->SurfDesc.height = 0x300;
     2353            pAlloc->SurfDesc.width = 0x4;
     2354            pAlloc->SurfDesc.height = 0x4;
    23532355            pAlloc->SurfDesc.format = D3DDDIFMT_A8R8G8B8;
    23542356        }
     
    36143616    Assert(pSrcRc->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM);
    36153617    Assert(pDstRc->RcDesc.enmPool != D3DDDIPOOL_SYSTEMMEM);
    3616     IDirect3DTexture9 *pD3DIfSrcTex = (IDirect3DTexture9*)pSrcRc->aAllocations[0].pD3DIf;
    3617     IDirect3DTexture9 *pD3DIfDstTex = (IDirect3DTexture9*)pDstRc->aAllocations[0].pD3DIf;
    3618     Assert(pD3DIfSrcTex);
    3619     Assert(pD3DIfDstTex);
    36203618    HRESULT hr = S_OK;
    36213619
    36223620    if (pSrcRc->aAllocations[0].SurfDesc.width == pDstRc->aAllocations[0].SurfDesc.width
    36233621            && pSrcRc->aAllocations[0].SurfDesc.height == pDstRc->aAllocations[0].SurfDesc.height
    3624             && pSrcRc->RcDesc.enmFormat == pDstRc->RcDesc.enmFormat)
    3625     {
    3626         /* first check if we can do IDirect3DDevice9::UpdateTexture */
    3627         if (pData->DstPoint.x == 0 && pData->DstPoint.y == 0
     3622            && pSrcRc->RcDesc.enmFormat == pDstRc->RcDesc.enmFormat
     3623                &&pData->DstPoint.x == 0 && pData->DstPoint.y == 0
    36283624                && pData->SrcRect.left == 0 && pData->SrcRect.top == 0
    36293625                && pData->SrcRect.right - pData->SrcRect.left == pSrcRc->aAllocations[0].SurfDesc.width
    36303626                && pData->SrcRect.bottom - pData->SrcRect.top == pSrcRc->aAllocations[0].SurfDesc.height)
    3631         {
    3632             hr = pDevice9If->UpdateTexture(pD3DIfSrcTex, pD3DIfDstTex);
     3627    {
     3628        IDirect3DTexture9 *pD3DIfSrcTex = (IDirect3DTexture9*)pSrcRc->aAllocations[0].pD3DIf;
     3629        IDirect3DTexture9 *pD3DIfDstTex = (IDirect3DTexture9*)pDstRc->aAllocations[0].pD3DIf;
     3630        Assert(pD3DIfSrcTex);
     3631        Assert(pD3DIfDstTex);
     3632        hr = pDevice9If->UpdateTexture(pD3DIfSrcTex, pD3DIfDstTex);
     3633        Assert(hr == S_OK);
     3634    }
     3635    else
     3636    {
     3637        IDirect3DSurface9 *pSrcSurfIf = NULL;
     3638        IDirect3DSurface9 *pDstSurfIf = NULL;
     3639        hr = vboxWddmSurfGet(pDstRc, 0, &pDstSurfIf);
     3640        Assert(hr == S_OK);
     3641        if (hr == S_OK)
     3642        {
     3643            hr = vboxWddmSurfGet(pSrcRc, 0, &pSrcSurfIf);
    36333644            Assert(hr == S_OK);
    3634         }
    3635         else
    3636         {
    3637             Assert(0);
    3638             /* @todo: impl */
    3639         }
    3640     }
    3641     else
    3642     {
    3643         Assert(0);
    3644         /* @todo: impl */
     3645            if (hr == S_OK)
     3646            {
     3647                RECT DstRect;
     3648                vboxWddmRectMoved(&DstRect, &pData->SrcRect, pData->DstPoint.x, pData->DstPoint.y);
     3649#ifdef DEBUG
     3650                RECT tstRect = {0,0, pDstRc->aAllocations[0].SurfDesc.width, pDstRc->aAllocations[0].SurfDesc.height};
     3651                Assert(vboxWddmRectIsCoveres(&tstRect, &DstRect));
     3652#endif
     3653                hr = pDevice9If->StretchRect(pSrcSurfIf, &pData->SrcRect, pDstSurfIf, &DstRect, D3DTEXF_NONE);
     3654                Assert(hr == S_OK);
     3655                pSrcSurfIf->Release();
     3656            }
     3657            pDstSurfIf->Release();
     3658        }
    36453659    }
    36463660
     
    47614775                            if (hr == S_OK)
    47624776                            {
     4777#if 0
    47634778                                if(pResource->Flags.Primary)
    47644779                                {
     
    47694784                                    Assert(bIssueCreateResource);
    47704785                                }
     4786#endif
    47714787                                continue;
    47724788                            }
     
    67526768                    }
    67536769#else
    6754 # define VBOXDISP_TEST_SWAPCHAIN
     6770//# define VBOXDISP_TEST_SWAPCHAIN
    67556771# ifdef VBOXDISP_TEST_SWAPCHAIN
    67566772                    VBOXDISP_D3DEV(pDevice);
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