VirtualBox

儲存庫 vbox 的更動 34939


忽略:
時間撮記:
2010-12-10 上午09:53:02 (14 年 以前)
作者:
vboxsync
訊息:

wddm/3d: impl missing lock/unlock surface functionality, remove deprecated assertions, disable some todo assertions

檔案:
修改 1 筆資料

圖例:

未更動
新增
刪除
  • trunk/src/VBox/Additions/WINNT/Graphics/Display/wddm/VBoxDispD3D.cpp

    r34917 r34939  
    21372137                    if (pvSwapchain != pSwapchain->pSwapChainIf)
    21382138                    {
     2139#ifdef DEBUG_misha
     2140                        /* @todo: we can not generally update the render target directly, implement */
    21392141                        Assert(iBb != (~0));
    2140 //                        Assert(0);
    2141 #if 0 //def DEBUG_misha
    2142                         vboxVDbgDumpAllocSurfData((pDevice, "Synch Src:\n", pAlloc, pD3D9OldSurf, NULL, "\n"));
    2143                         vboxVDbgDumpAllocData((pDevice, "Synch ALLOC:\n", pAlloc, NULL, "\n"));
    21442142#endif
    21452143                        hr = pDevice->pDevice9If->StretchRect(pD3D9OldSurf, NULL, pD3D9Surf, NULL, D3DTEXF_NONE);
    21462144                        Assert(hr == S_OK);
    2147 #if 0 //def DEBUG_misha
    2148                         vboxVDbgDumpAllocSurfData((pDevice, "Synch Dst:\n", pAlloc, pD3D9Surf, NULL, "\n"));
    2149 #endif
    21502145                        if (pSwapchain->cRTs == 1)
    21512146                        {
     
    22102205{
    22112206    Assert(pSwapchain->cRTs);
     2207#ifdef DEBUG_misha
     2208    /* not supported by wine properly, need to use offscreen render targets and blit their data to swapchain RTs*/
    22122209    Assert(pSwapchain->cRTs <= 2);
     2210#endif
    22132211    memset(pParams, 0, sizeof (D3DPRESENT_PARAMETERS));
    22142212    PVBOXWDDMDISP_RENDERTGT pRt = vboxWddmSwapchainGetBb(pSwapchain);
     
    23122310                if (pOldIf)
    23132311                {
    2314                     Assert(0);
    23152312                    /* copy current rt data to offscreen render targets */
    23162313                    IDirect3DSurface9* pD3D9OldFb = NULL;
     
    33653362//    VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
    33663363    vboxVDbgPrintF(("<== "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     3364#ifdef DEBUG_misha
     3365    /* @todo: check if it's ok to always return success */
     3366    vboxVDbgPrint((__FUNCTION__": @todo: check if it's ok to always return success\n"));
    33673367    Assert(0);
    3368     vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    3369     return E_FAIL;
     3368#endif
     3369    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
     3370    return S_OK;
    33703371}
    33713372
     
    44064407
    44074408        if (pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_TEXTURE
    4408             || pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_CUBE_TEXTURE)
     4409            || pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_CUBE_TEXTURE
     4410            || pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE)
    44094411        {
    44104412            PVBOXWDDMDISP_ALLOCATION pTexAlloc = &pRc->aAllocations[0];
     
    44134415            IDirect3DTexture9 *pD3DIfTex = (IDirect3DTexture9*)pTexAlloc->pD3DIf;
    44144416            IDirect3DCubeTexture9 *pD3DIfCubeTex = (IDirect3DCubeTexture9*)pTexAlloc->pD3DIf;
     4417            IDirect3DSurface9 *pD3DIfSurface = (IDirect3DSurface9*)pTexAlloc->pD3DIf;
    44154418            Assert(pTexAlloc->pD3DIf);
    44164419            RECT *pRect = NULL;
     
    44254428            /* else - we lock the entire texture, pRect == NULL */
    44264429
    4427 //            Assert(!pLockAlloc->LockInfo.cLocks);
    44284430            if (!pLockAlloc->LockInfo.cLocks)
    44294431            {
    4430                 if (pTexAlloc->enmD3DIfType==VBOXDISP_D3DIFTYPE_TEXTURE)
    4431                 {
    4432                     hr = pD3DIfTex->LockRect(pData->SubResourceIndex,
    4433                             &pLockAlloc->LockInfo.LockedRect,
    4434                             pRect,
    4435                             vboxDDI2D3DLockFlags(pData->Flags));
    4436                 }
    4437                 else /*VBOXDISP_D3DIFTYPE_CUBE_TEXTURE*/
    4438                 {
    4439                     hr = pD3DIfCubeTex->LockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
    4440                             VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex),
    4441                             &pLockAlloc->LockInfo.LockedRect,
    4442                             pRect,
    4443                             vboxDDI2D3DLockFlags(pData->Flags));
     4432                switch (pTexAlloc->enmD3DIfType)
     4433                {
     4434                    case VBOXDISP_D3DIFTYPE_TEXTURE:
     4435                        hr = pD3DIfTex->LockRect(pData->SubResourceIndex,
     4436                                &pLockAlloc->LockInfo.LockedRect,
     4437                                pRect,
     4438                                vboxDDI2D3DLockFlags(pData->Flags));
     4439                        break;
     4440                    case VBOXDISP_D3DIFTYPE_CUBE_TEXTURE:
     4441                        hr = pD3DIfCubeTex->LockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
     4442                                VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex),
     4443                                &pLockAlloc->LockInfo.LockedRect,
     4444                                pRect,
     4445                                vboxDDI2D3DLockFlags(pData->Flags));
     4446                        break;
     4447                    case VBOXDISP_D3DIFTYPE_SURFACE:
     4448                        hr = pD3DIfSurface->LockRect(&pLockAlloc->LockInfo.LockedRect,
     4449                                pRect,
     4450                                vboxDDI2D3DLockFlags(pData->Flags));
     4451                        break;
     4452                    default:
     4453                        Assert(0);
     4454                        break;
    44444455                }
    44454456                Assert(hr == S_OK);
    44464457                if (hr == S_OK)
    44474458                {
    4448 
    4449 //                    Assert(pLockAlloc->LockInfo.fFlags.Value == 0);
    44504459                    pLockAlloc->LockInfo.fFlags = pData->Flags;
    44514460                    if (pRect)
     
    44534462                        pLockAlloc->LockInfo.Area = *pRect;
    44544463                        Assert(pLockAlloc->LockInfo.fFlags.AreaValid == 1);
    4455 //                        pLockAlloc->LockInfo.fFlags.AreaValid = 1;
    44564464                    }
    44574465                    else
    44584466                    {
    44594467                        Assert(pLockAlloc->LockInfo.fFlags.AreaValid == 0);
    4460 //                        pLockAlloc->LockInfo.fFlags.AreaValid = 0;
    44614468                    }
    44624469
     
    44664473            else
    44674474            {
    4468 //                Assert(pLockAlloc->LockInfo.fFlags.Value == pData->Flags.Value);
    4469 //                if (pLockAlloc->LockInfo.fFlags.Value != pData->Flags.Value)
    4470 //                {
    4471 //                }
    44724475                Assert(pLockAlloc->LockInfo.fFlags.AreaValid == pData->Flags.AreaValid);
    44734476                if (pLockAlloc->LockInfo.fFlags.AreaValid && pData->Flags.AreaValid)
     
    44844487                Assert(!bNeedResynch);
    44854488
    4486                 if (/*(pLockAlloc->LockInfo.fFlags.Discard && !pData->Flags.Discard)
    4487                         || */
    4488                         (pLockAlloc->LockInfo.fFlags.ReadOnly && !pData->Flags.ReadOnly))
    4489                 {
    4490                     if (pTexAlloc->enmD3DIfType==VBOXDISP_D3DIFTYPE_TEXTURE)
     4489                if (pLockAlloc->LockInfo.fFlags.ReadOnly && !pData->Flags.ReadOnly)
     4490                {
     4491                    switch (pTexAlloc->enmD3DIfType)
    44914492                    {
    4492                         hr = pD3DIfTex->UnlockRect(pData->SubResourceIndex);
    4493                     }
    4494                     else /*VBOXDISP_D3DIFTYPE_CUBE_TEXTURE*/
    4495                     {
    4496                         hr = pD3DIfCubeTex->UnlockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
    4497                                 VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex));
     4493                        case VBOXDISP_D3DIFTYPE_TEXTURE:
     4494                            hr = pD3DIfTex->UnlockRect(pData->SubResourceIndex);
     4495                            break;
     4496                        case VBOXDISP_D3DIFTYPE_CUBE_TEXTURE:
     4497                            hr = pD3DIfCubeTex->UnlockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
     4498                                    VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex));
     4499                            break;
     4500                        case VBOXDISP_D3DIFTYPE_SURFACE:
     4501                            hr = pD3DIfSurface->UnlockRect();
     4502                            break;
     4503                        default:
     4504                            Assert(0);
     4505                            break;
    44984506                    }
    44994507                    Assert(hr == S_OK);
    45004508                    if (hr == S_OK)
    45014509                    {
    4502                         if (pTexAlloc->enmD3DIfType==VBOXDISP_D3DIFTYPE_TEXTURE)
     4510                        switch (pTexAlloc->enmD3DIfType)
    45034511                        {
    4504                             hr = pD3DIfTex->LockRect(pData->SubResourceIndex,
    4505                                     &pLockAlloc->LockInfo.LockedRect,
    4506                                     pRect,
    4507                                     vboxDDI2D3DLockFlags(pData->Flags));
    4508                         }
    4509                         else /*VBOXDISP_D3DIFTYPE_CUBE_TEXTURE*/
    4510                         {
    4511                             hr = pD3DIfCubeTex->LockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
    4512                                     VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex),
    4513                                     &pLockAlloc->LockInfo.LockedRect,
    4514                                     pRect,
    4515                                     vboxDDI2D3DLockFlags(pData->Flags));
     4512                            case VBOXDISP_D3DIFTYPE_TEXTURE:
     4513                                hr = pD3DIfTex->LockRect(pData->SubResourceIndex,
     4514                                        &pLockAlloc->LockInfo.LockedRect,
     4515                                        pRect,
     4516                                        vboxDDI2D3DLockFlags(pData->Flags));
     4517                                break;
     4518                            case VBOXDISP_D3DIFTYPE_CUBE_TEXTURE:
     4519                                hr = pD3DIfCubeTex->LockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
     4520                                        VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex),
     4521                                        &pLockAlloc->LockInfo.LockedRect,
     4522                                        pRect,
     4523                                        vboxDDI2D3DLockFlags(pData->Flags));
     4524                                break;
     4525                            case VBOXDISP_D3DIFTYPE_SURFACE:
     4526                                hr = pD3DIfSurface->LockRect(&pLockAlloc->LockInfo.LockedRect,
     4527                                        pRect,
     4528                                        vboxDDI2D3DLockFlags(pData->Flags));
     4529                                break;
     4530                            default:
     4531                                Assert(0);
     4532                                break;
    45164533                        }
    45174534                        Assert(hr == S_OK);
     
    45374554                    Assert(pLockAlloc->pvMem);
    45384555                    Assert(pRc->RcDesc.enmPool == D3DDDIPOOL_SYSTEMMEM);
    4539 #if 0
    4540                     if (bNeedResynch)
    4541                         vboxWddmLockUnlockMemSynch(pLockAlloc, &pLockAlloc->LockInfo.LockedRect, pRect, false /*bool bToLockInfo*/);
    4542 #endif
    45434556                }
    45444557            }
     
    45614574            /* else - we lock the entire vertex buffer, pRect == NULL */
    45624575
    4563             Assert(!pAlloc->LockInfo.cLocks);
    45644576            if (!pAlloc->LockInfo.cLocks)
    45654577            {
     
    45944606            else
    45954607            {
    4596 //                Assert(pAlloc->LockInfo.fFlags.Value == pData->Flags.Value);
    4597 //                if (pAlloc->LockInfo.fFlags.Value != pData->Flags.Value)
    4598 //                {
    4599 //                }
    46004608                Assert(pAlloc->LockInfo.fFlags.RangeValid == pData->Flags.RangeValid);
    46014609                if (pAlloc->LockInfo.fFlags.RangeValid && pData->Flags.RangeValid)
     
    46584666            /* else - we lock the entire vertex buffer, pRect == NULL */
    46594667
    4660             Assert(!pAlloc->LockInfo.cLocks);
    46614668            if (!pAlloc->LockInfo.cLocks)
    46624669            {
     
    46914698            else
    46924699            {
    4693 //                Assert(pAlloc->LockInfo.fFlags.Value == pData->Flags.Value);
    4694 //                if (pAlloc->LockInfo.fFlags.Value != pData->Flags.Value)
    4695 //                {
    4696 //                }
    46974700                Assert(pAlloc->LockInfo.fFlags.RangeValid == pData->Flags.RangeValid);
    46984701                if (pAlloc->LockInfo.fFlags.RangeValid && pData->Flags.RangeValid)
     
    48314834    {
    48324835        if (pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_TEXTURE
    4833             || pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_CUBE_TEXTURE)
     4836            || pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_CUBE_TEXTURE
     4837            || pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_SURFACE)
    48344838        {
    48354839            Assert(pData->SubResourceIndex < pRc->cAllocations);
     
    48384842            --pLockAlloc->LockInfo.cLocks;
    48394843            Assert(pLockAlloc->LockInfo.cLocks < UINT32_MAX);
    4840 //            pLockAlloc->LockInfo.cLocks = 0;
    48414844            if (!pLockAlloc->LockInfo.cLocks)
    48424845            {
    48434846                PVBOXWDDMDISP_ALLOCATION pTexAlloc = &pRc->aAllocations[0];
    4844 //                Assert(!pLockAlloc->LockInfo.cLocks);
    48454847                Assert(pTexAlloc->pD3DIf);
    4846                 /* this is a sysmem texture, update  */
    4847 #if 0
    4848                 if (pLockAlloc->pvMem && !pLockAlloc->LockInfo.fFlags.ReadOnly)
    4849                 {
    4850                     vboxWddmLockUnlockMemSynch(pLockAlloc, &pLockAlloc->LockInfo.LockedRect,
    4851                             pLockAlloc->LockInfo.fFlags.AreaValid ? &pLockAlloc->LockInfo.Area : NULL,
    4852                             true /*bool bToLockInfo*/);
    4853                 }
    4854 #endif
    4855                 if (pRc->aAllocations[0].enmD3DIfType == VBOXDISP_D3DIFTYPE_TEXTURE)
    4856                 {
    4857                     IDirect3DTexture9 *pD3DIfTex = (IDirect3DTexture9*)pTexAlloc->pD3DIf;
    4858                     hr = pD3DIfTex->UnlockRect(pData->SubResourceIndex);
    4859                 }
    4860                 else
    4861                 {
    4862                     IDirect3DCubeTexture9 *pD3DIfCubeTex = (IDirect3DCubeTexture9*)pTexAlloc->pD3DIf;
    4863                     hr = pD3DIfCubeTex->UnlockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
    4864                             VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex));
     4848                switch (pRc->aAllocations[0].enmD3DIfType)
     4849                {
     4850                    case VBOXDISP_D3DIFTYPE_TEXTURE:
     4851                    {
     4852                        IDirect3DTexture9 *pD3DIfTex = (IDirect3DTexture9*)pTexAlloc->pD3DIf;
     4853                        hr = pD3DIfTex->UnlockRect(pData->SubResourceIndex);
     4854                        break;
     4855                    }
     4856                    case VBOXDISP_D3DIFTYPE_CUBE_TEXTURE:
     4857                    {
     4858                        IDirect3DCubeTexture9 *pD3DIfCubeTex = (IDirect3DCubeTexture9*)pTexAlloc->pD3DIf;
     4859                        hr = pD3DIfCubeTex->UnlockRect(VBOXDISP_CUBEMAP_INDEX_TO_FACE(pRc, pData->SubResourceIndex),
     4860                                VBOXDISP_CUBEMAP_INDEX_TO_LEVEL(pRc, pData->SubResourceIndex));
     4861                        break;
     4862                    }
     4863                    case VBOXDISP_D3DIFTYPE_SURFACE:
     4864                    {
     4865                        IDirect3DSurface9 *pD3DIfSurf = (IDirect3DSurface9*)pTexAlloc->pD3DIf;
     4866                        hr = pD3DIfSurf->UnlockRect();
     4867                        break;
     4868                    }
     4869                    default:
     4870                        Assert(0);
     4871                        break;
    48654872                }
    48664873                Assert(hr == S_OK);
     
    73487355    vboxVDbgPrintF(("==> "__FUNCTION__", hDevice(0x%p)\n", hDevice));
    73497356    PVBOXWDDMDISP_DEVICE pDevice = (PVBOXWDDMDISP_DEVICE)hDevice;
    7350 //    Assert(pDevice);
    7351 //    VBOXDISPCRHGSMI_SCOPE_SET_DEV(pDevice);
    7352 
    7353     Assert(0);
     7357
    73547358    HRESULT hr = S_OK;
     7359    /* @todo check residency for the "real" allocations */
    73557360#if 0
    73567361    for (UINT i = 0; i < pData->NumResources; ++i)
注意: 瀏覽 TracChangeset 來幫助您使用更動檢視器

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