VirtualBox

Changeset 39016 in vbox


Ignore:
Timestamp:
Oct 18, 2011 11:41:31 AM (13 years ago)
Author:
vboxsync
Message:

wddm: fix aditional win8 ie rendering issues

Location:
trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/context.c

    r38930 r39016  
    846846#ifdef VBOX_WITH_WDDM
    847847        , IWineD3DSwapChainImpl *swapchain
    848 #endif
     848# ifdef DEBUG_misha
     849        , BOOL fExpectedValid
     850# endif
     851#endif
     852
    849853        )
    850854{
    851855#ifdef VBOX_WITH_WDDM
    852     if (!swapchain || context->currentSwapchain == swapchain)
     856    if (!swapchain)
     857    {
     858        swapchain = context->currentSwapchain;
     859    }
     860
     861    if (!swapchain)
     862    {
     863        context->valid = FALSE;
     864# ifdef DEBUG_misha
     865        if (fExpectedValid)
     866        {
     867            ERR("no current swapchain!\n");
     868        }
     869# endif
     870        return;
     871    }
     872
     873    if (swapchain == context->currentSwapchain)
    853874    {
    854875        context->valid = swapchain_validate(context->currentSwapchain);
     
    882903    IWineD3DSwapChainImpl *swapchain = NULL;
    883904
    884     context_validate(context, NULL);
     905    context_validate(context, NULL
     906# ifdef DEBUG_misha
     907                , FALSE
     908# endif
     909            );
    885910    if (context->valid)
    886911        return;
     
    889914    if (swapchain)
    890915    {
    891         context_validate(context, swapchain);
     916        context_validate(context, swapchain
     917# ifdef DEBUG_misha
     918                , TRUE
     919# endif
     920                );
    892921        if (!context->valid)
    893922        {
     
    17901819        IWineD3DSwapChain *swapchain = NULL;
    17911820        if (target && SUCCEEDED(IWineD3DSurface_GetContainer(target, &IID_IWineD3DSwapChain, (void **)&swapchain))) {
    1792             context_validate(context, (IWineD3DSwapChainImpl*)swapchain);
     1821            context_validate(context, (IWineD3DSwapChainImpl*)swapchain
     1822# ifdef DEBUG_misha
     1823                , TRUE
     1824# endif
     1825                    );
    17931826            IWineD3DSwapChain_Release(swapchain);
    17941827        }
     
    23482381        IWineD3DSwapChain *swapchain = NULL;
    23492382        if (SUCCEEDED(IWineD3DSurface_GetContainer(target, &IID_IWineD3DSwapChain, (void **)&swapchain))) {
    2350             context_validate(context, (IWineD3DSwapChainImpl*)swapchain);
     2383            context_validate(context, (IWineD3DSwapChainImpl*)swapchain
     2384# ifdef DEBUG_misha
     2385                , TRUE
     2386# endif
     2387                    );
    23512388            IWineD3DSwapChain_Release(swapchain);
    23522389        }
     
    23612398
    23622399        context = findThreadContextForSwapChain(swapchain);
    2363         context_validate(context, (IWineD3DSwapChainImpl*)swapchain);
     2400        context_validate(context, (IWineD3DSwapChainImpl*)swapchain
     2401# ifdef DEBUG_misha
     2402                , TRUE
     2403# endif
     2404                );
    23642405        IWineD3DSwapChain_Release(swapchain);
    23652406    }
     
    23762417                swapchain = (IWineD3DSwapChainImpl *)This->swapchains[This->NumberOfSwapChains-1]; /* just fallback to anything to avoid NPE */
    23772418            context = findThreadContextForSwapChain((IWineD3DSwapChain*)swapchain);
    2378             context_validate(context, swapchain);
     2419            context_validate(context, swapchain
     2420# ifdef DEBUG_misha
     2421                , TRUE
     2422# endif
     2423                    );
    23792424        }
    23802425
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/surface.c

    r38982 r39016  
    12491249    if (!ref)
    12501250    {
     1251#ifdef VBOX_WITH_WDDM
     1252        IWineD3DDeviceImpl *device = This->resource.device;
     1253        struct wined3d_context *context;
     1254        UINT i;
     1255#endif
    12511256        surface_cleanup(This);
    12521257        This->resource.parent_ops->wined3d_object_destroyed(This->resource.parent);
     1258
     1259#ifdef VBOX_WITH_WDDM
     1260        for (i = 0; i < device->numContexts; ++i)
     1261        {
     1262            context = device->contexts[i];
     1263            /* pretty hacky, @todo: check if the context is acquired and re-acquire it with the new swapchain */
     1264            if (context->current_rt  == This)
     1265            {
     1266                context->current_rt = NULL;
     1267            }
     1268        }
     1269#endif
    12531270
    12541271        TRACE("(%p) Released.\n", This);
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/swapchain.c

    r38903 r39016  
    4949IWineD3DSwapChainImpl * swapchain_find(IWineD3DDeviceImpl *pDevice, HWND hWnd)
    5050{
    51     int i;
     51    UINT i;
    5252    for (i = 0; i < pDevice->NumberOfSwapChains; ++i)
    5353    {
     
    6464VOID swapchain_invalidate(IWineD3DSwapChainImpl *pSwapchain)
    6565{
     66    /* first make sure the swapchain is not used by anyone */
     67    IWineD3DDeviceImpl *device = pSwapchain->device;
     68    struct wined3d_context *context;
     69    UINT i;
     70    for (i = 0; i < device->numContexts; ++i)
     71    {
     72        context = device->contexts[i];
     73        /* pretty hacky, @todo: check if the context is acquired and re-acquire it with the new swapchain */
     74        if (context->currentSwapchain == pSwapchain)
     75        {
     76            context->currentSwapchain = NULL;
     77        }
     78
     79        if (pSwapchain->frontBuffer == context->current_rt)
     80        {
     81            context->current_rt = NULL;
     82        }
     83        else if (pSwapchain->backBuffer)
     84        {
     85            UINT j;
     86            for (j = 0; j < pSwapchain->presentParms.BackBufferCount; ++j)
     87            {
     88                if (pSwapchain->backBuffer[j] == context->current_rt)
     89                {
     90                    context->current_rt = NULL;
     91                    break;
     92                }
     93            }
     94        }
     95    }
     96
    6697    pSwapchain->win_handle = NULL;
    6798    pSwapchain->hDC = NULL;
     
    96127    if (This->backBuffer)
    97128    {
    98         UINT i = This->presentParms.BackBufferCount;
     129        i = This->presentParms.BackBufferCount;
    99130
    100131        while (i--)
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