VirtualBox

Changeset 37300 in vbox


Ignore:
Timestamp:
Jun 1, 2011 7:45:51 PM (14 years ago)
Author:
vboxsync
Message:

wddm: memory leaks fixes, some cleanup

Location:
trunk/src/VBox/Additions/WINNT/Graphics
Files:
9 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.cpp

    r37216 r37300  
    9797{
    9898    PVBOXDISPDBG pDbg = vboxDispDbgGet();
    99 #ifdef DEBUG_misha
    100     Assert(pDbg);
    101 #endif
    10299    if (!pDbg)
     100    {
     101        /* do not use WARN her esince this would lead to a recursion */
     102        WARN_BREAK();
    103103        return;
     104    }
    104105
    105106    VBOXDISPKMT_ADAPTER Adapter;
    106107    HRESULT hr = vboxDispKmtOpenAdapter(&pDbg->KmtCallbacks, &Adapter);
    107     Assert(hr == S_OK);
    108108    if (hr == S_OK)
    109109    {
     
    111111        uint32_t cbCmd = RT_OFFSETOF(VBOXDISPIFESCAPE_DBGPRINT, aStringBuf[cbString]);
    112112        PVBOXDISPIFESCAPE_DBGPRINT pCmd = (PVBOXDISPIFESCAPE_DBGPRINT)RTMemAllocZ(cbCmd);
    113         Assert(pCmd);
    114113        if (pCmd)
    115114        {
     
    127126
    128127            int Status = pDbg->KmtCallbacks.pfnD3DKMTEscape(&EscapeData);
    129             Assert(!Status);
     128            if (Status)
     129            {
     130                WARN_BREAK();
     131            }
    130132
    131133            RTMemFree(pCmd);
    132134        }
     135        else
     136        {
     137            WARN_BREAK();
     138        }
    133139        hr = vboxDispKmtCloseAdapter(&Adapter);
    134         Assert(hr == S_OK);
     140        if(hr != S_OK)
     141        {
     142            WARN_BREAK();
     143        }
    135144    }
    136145}
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispDbg.h

    r37216 r37300  
    7676# define DbgPrintUsrFlow(_m) do { } while (0)
    7777#endif
     78#ifdef DEBUG_misha
     79# define WARN_BREAK() do { AssertFailed(); } while (0)
     80#else
     81# define WARN_BREAK() do { } while (0)
     82#endif
     83#define WARN(_m) do { \
     84        Log(_m); \
     85        DbgPrintUsr(_m); \
     86        DbgPrintDrv(_m); \
     87        WARN_BREAK(); \
     88    } while (0)
    7889#define vboxVDbgPrint(_m) do { \
    7990        Log(_m); \
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxDispKmt.cpp

    r36867 r37300  
    149149        {
    150150            DWORD winEr = GetLastError();
     151            WARN_BREAK();
     152            hr = HRESULT_FROM_WIN32(winEr);
    151153#ifdef DEBUG_misha
    152             Assert(0);
     154            Assert(FAILED(hr));
    153155#endif
    154             Log((__FUNCTION__": EnumDisplayDevices failed, winEr (%d)\n", winEr));
    155             hr = HRESULT_FROM_WIN32(winEr);
    156             Assert(FAILED(hr));
     156            if (!FAILED(hr))
     157            {
     158                hr = E_FAIL;
     159            }
    157160            break;
    158161        }
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/disp/wddm/VBoxUhgsmiKmt.cpp

    r36867 r37300  
    412412{
    413413    HRESULT hr = vboxDispKmtCallbacksInit(&pHgsmi->Callbacks);
    414     Assert(hr == S_OK);
    415414    if (hr == S_OK)
    416415    {
    417416        hr = vboxDispKmtOpenAdapter(&pHgsmi->Callbacks, &pHgsmi->Adapter);
    418 #ifdef DEBUG_misha
    419         /* may fail with xpdm driver */
    420         Assert(hr == S_OK);
    421 #endif
    422417        if (hr == S_OK)
    423418        {
    424419            hr = vboxDispKmtCreateDevice(&pHgsmi->Adapter, &pHgsmi->Device);
    425             Assert(hr == S_OK);
    426420            if (hr == S_OK)
    427421            {
     
    429423                        bD3D ? VBOXWDDM_CONTEXT_TYPE_CUSTOM_UHGSMI_3D : VBOXWDDM_CONTEXT_TYPE_CUSTOM_UHGSMI_GL,
    430424                                NULL, 0);
    431                 Assert(hr == S_OK);
    432425                if (hr == S_OK)
    433426                {
    434427                    return S_OK;
    435428                }
     429                else
     430                {
     431                    WARN(("vboxDispKmtCreateContext failed, hr(0x%x)", hr));
     432                }
    436433                vboxDispKmtDestroyDevice(&pHgsmi->Device);
    437434            }
     435            else
     436            {
     437                WARN(("vboxDispKmtCreateDevice failed, hr(0x%x)", hr));
     438            }
    438439            vboxDispKmtCloseAdapter(&pHgsmi->Adapter);
    439440        }
     441        else
     442        {
     443            WARN(("vboxDispKmtOpenAdapter failed, hr(0x%x)", hr));
     444        }
     445
    440446        vboxDispKmtCallbacksTerm(&pHgsmi->Callbacks);
     447    }
     448    else
     449    {
     450        WARN(("vboxDispKmtCallbacksInit failed, hr(0x%x)", hr));
    441451    }
    442452    return hr;
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.cpp

    r36867 r37300  
    2121#include <stdio.h>
    2222
     23/* simple handle -> value table API */
    2324NTSTATUS vboxWddmHTableCreate(PVBOXWDDM_HTABLE pTbl, uint32_t cSize)
    2425{
     
    3536VOID vboxWddmHTableDestroy(PVBOXWDDM_HTABLE pTbl)
    3637{
     38    if (!pTbl->paData)
     39        return;
     40
    3741    vboxWddmMemFree(pTbl->paData);
    3842}
     
    5458    {
    5559        PVOID *pvNewData = (PVOID*)vboxWddmMemAllocZero(sizeof (pTbl->paData[0]) * cNewSize);
     60        if (!pvNewData)
     61        {
     62            WARN(("vboxWddmMemAllocZero failed for size (%d)", sizeof (pTbl->paData[0]) * cNewSize));
     63            return STATUS_NO_MEMORY;
     64        }
    5665        memcpy(pvNewData, pTbl->paData, sizeof (pTbl->paData[0]) * pTbl->cSize);
     66        vboxWddmMemFree(pTbl->paData);
    5767        pTbl->iNext2Search = pTbl->cSize;
    5868        pTbl->cSize = cNewSize;
     
    6171    }
    6272    else if (cNewSize >= pTbl->cData)
     73    {
     74        AssertFailed();
    6375        return STATUS_NOT_IMPLEMENTED;
     76    }
    6477    return STATUS_INVALID_PARAMETER;
    6578
     
    324337    Assert(pTst == pSwapchain);
    325338    RemoveEntryList(&pSwapchain->DevExtListEntry);
    326 //    pSwapchain->pContext = NULL;
    327339    pSwapchain->hSwapchainKm = NULL;
    328340    if (pSwapchain->pLastReportedRects)
     
    334346}
    335347
     348/* adds the given swapchain to the context's swapchain list
     349 * @return true on success */
    336350BOOLEAN vboxWddmSwapchainCtxAdd(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext, PVBOXWDDM_SWAPCHAIN pSwapchain)
    337351{
     
    343357}
    344358
     359/* removes the given swapchain from the context's swapchain list
     360 * */
    345361VOID vboxWddmSwapchainCtxRemove(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext, PVBOXWDDM_SWAPCHAIN pSwapchain)
    346362{
     
    350366}
    351367
     368/* destroys all swapchains for the given context
     369 * */
    352370VOID vboxWddmSwapchainCtxDestroyAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext)
    353371{
     
    370388}
    371389
     390/* process the swapchain info passed from user-mode display driver & synchronizes the driver state with it */
    372391NTSTATUS vboxWddmSwapchainCtxEscape(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext, PVBOXDISPIFESCAPE_SWAPCHAININFO pSwapchainInfo, UINT cbSize)
    373392{
     
    403422    if (pSwapchainInfo->SwapchainInfo.hSwapchainKm)
    404423    {
    405 //            ExAcquireFastMutex(&pContext->SwapchainMutex);
    406424        ExAcquireFastMutex(&pDevExt->ContextMutex);
    407425        pSwapchain = (PVBOXWDDM_SWAPCHAIN)vboxWddmHTableGet(&pContext->Swapchains, (VBOXWDDM_HANDLE)pSwapchainInfo->SwapchainInfo.hSwapchainKm);
     
    455473    }
    456474
    457 //    ExReleaseFastMutex(&pContext->SwapchainMutex);
    458475    ExReleaseFastMutex(&pDevExt->ContextMutex);
    459476
     
    471488
    472489    return STATUS_SUCCESS;
     490}
     491
     492NTSTATUS vboxWddmSwapchainCtxInit(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext)
     493{
     494    NTSTATUS Status = vboxWddmHTableCreate(&pContext->Swapchains, 4);
     495    if (!NT_SUCCESS(Status))
     496    {
     497        WARN(("vboxWddmHTableCreate failes, Status (x%x)", Status));
     498        return Status;
     499    }
     500
     501    return STATUS_SUCCESS;
     502}
     503
     504VOID vboxWddmSwapchainCtxTerm(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext)
     505{
     506    vboxWddmSwapchainCtxDestroyAll(pDevExt, pContext);
     507    vboxWddmHTableDestroy(&pContext->Swapchains);
    473508}
    474509
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPMisc.h

    r36867 r37300  
    7979VOID vboxWddmSwapchainCtxDestroyAll(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
    8080NTSTATUS vboxWddmSwapchainCtxEscape(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext, PVBOXDISPIFESCAPE_SWAPCHAININFO pSwapchainInfo, UINT cbSize);
     81NTSTATUS vboxWddmSwapchainCtxInit(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
     82VOID vboxWddmSwapchainCtxTerm(PVBOXMP_DEVEXT pDevExt, PVBOXWDDM_CONTEXT pContext);
    8183
    8284
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPTypes.h

    r36867 r37300  
    197197    UINT  EngineAffinity;
    198198//    UINT uLastCompletedCmdFenceId;
    199     FAST_MUTEX SwapchainMutex;
    200199    VBOXWDDM_HTABLE Swapchains;
    201200    VBOXVIDEOCM_CTX CmContext;
  • trunk/src/VBox/Additions/WINNT/Graphics/Video/mp/wddm/VBoxMPWddm.cpp

    r37207 r37300  
    12281228    /* DxgkDdiUnload should be made pageable. */
    12291229    PAGED_CODE();
    1230     LOGF(("ENTER"));
     1230    LOGF((": unloading"));
    12311231
    12321232    vboxVDbgBreakFv();
    12331233
    1234     LOGF(("LEAVE"));
     1234    PRTLOGGER pLogger = RTLogRelSetDefaultInstance(NULL);
     1235    if (pLogger)
     1236    {
     1237        RTLogDestroy(pLogger);
     1238    }
     1239    pLogger = RTLogSetDefaultInstance(NULL);
     1240    if (pLogger)
     1241    {
     1242        RTLogDestroy(pLogger);
     1243    }
    12351244}
    12361245
     
    35863595        {
    35873596            /* @todo: check that we actually need the current source->target */
    3588             D3DKMDT_2DREGION Resolution;
    35893597            PVBOXWDDM_VIDEOMODES_INFO pInfo = &pInfos[i];
    35903598            VIDEO_MODE_INFORMATION *pModeInfo = &pInfo->aModes[pInfo->iPreferredMode];
     3599#if 1
     3600            D3DKMDT_2DREGION Resolution;
    35913601            Resolution.cx = pModeInfo->VisScreenWidth;
    35923602            Resolution.cy = pModeInfo->VisScreenHeight;
    35933603            Status = vboxVidPnCheckAddMonitorModes(pDevExt, i, D3DKMDT_MCO_DRIVER, &Resolution, 1);
     3604#else
     3605            Status = vboxVidPnCheckAddMonitorModes(pDevExt, i, D3DKMDT_MCO_DRIVER, pInfo->aResolutions, pInfo->cResolutions);
     3606#endif
    35943607            Assert(Status == STATUS_SUCCESS);
    35953608            if (Status != STATUS_SUCCESS)
     
    50535066                        if (Status == STATUS_SUCCESS)
    50545067                        {
    5055                             ExInitializeFastMutex(&pContext->SwapchainMutex);
    5056                             Status = vboxWddmHTableCreate(&pContext->Swapchains, 4);
     5068                            Status = vboxWddmSwapchainCtxInit(pDevExt, pContext);
    50575069                            Assert(Status == STATUS_SUCCESS);
    50585070                            if (Status == STATUS_SUCCESS)
     
    50695081                                    break;
    50705082                                }
    5071                                 vboxWddmHTableDestroy(&pContext->Swapchains);
     5083
     5084                                vboxWddmSwapchainCtxTerm(pDevExt, pContext);
    50725085                            }
    50735086                        }
     
    51495162        if (Status == STATUS_SUCCESS)
    51505163        {
    5151             vboxWddmSwapchainCtxDestroyAll(pDevExt, pContext);
     5164            vboxWddmSwapchainCtxTerm(pDevExt, pContext);
    51525165            vboxWddmMemFree(pContext);
    51535166        }
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/swapchain.c

    r37216 r37300  
    373373    {
    374374        HWND wnd = WindowFromDC(context->hdc);
    375         Assert(context->currentSwapchain && context->win_handle==swapchain->win_handle);
     375        Assert(context->currentSwapchain && context->win_handle==context->currentSwapchain->win_handle);
    376376        Assert(wnd==context->win_handle);
    377377        Assert(IsWindow(context->win_handle));
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