VirtualBox

Ignore:
Timestamp:
Sep 15, 2010 11:15:38 AM (14 years ago)
Author:
vboxsync
Message:

wddm/3d: wine multiswapchain fixes

File:
1 edited

Legend:

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

    r32501 r32508  
    853853
    854854    context_validate(context
    855 #ifdef VBOXWDDM
    856             , NULL//context->device->swapchains[0]
     855#ifdef VBOXWDDM/* tmp work-around */
     856            , context->device->swapchains[context->device->NumberOfSwapChains-1]
    857857#endif
    858858            );
     
    15951595        const struct wined3d_format_desc *ds_format_desc)
    15961596{
    1597     IWineD3DSwapChainImpl *swapChain = NULL;
    15981597    int i, j;
    15991598    int swapchains = IWineD3DDevice_GetNumberOfSwapChains(device);
     
    16051604    for(i = 0 ; i < swapchains ; i ++)
    16061605    {
    1607         IWineD3DDevice_GetSwapChain(device, i, &swapChain);
    1608         if (swapChain->ds_format == ds_format_desc)
    1609         {
    1610             for(j = 0; j < swapChain->num_contexts; j++) {
    1611                 if(swapChain->context[j]->tid == tid
    1612                         && swapChain->context[j]->tid == tid) {
    1613                     context = swapChain->context[j];
     1606        IWineD3DSwapChainImpl *curSwapChain;
     1607        IWineD3DDevice_GetSwapChain(device, i, &curSwapChain);
     1608        if (curSwapChain->ds_format == ds_format_desc)
     1609        {
     1610            for(j = 0; j < curSwapChain->num_contexts; j++) {
     1611                if(curSwapChain->context[j]->tid == tid) {
     1612                    context = curSwapChain->context[j];
    16141613                    break;
    16151614                }
     
    16211620        }
    16221621
     1622        IWineD3DSwapChain_Release(curSwapChain);
     1623
    16231624        if (context)
    16241625            break;
    1625         IWineD3DSwapChain_Release(swapChain);
    16261626    }
    16271627
     
    16331633    else
    16341634    {
    1635         Assert(swapChain);
    1636         context_validate(context, swapChain);
     1635        context_validate(context, swapchain);
    16371636        context_setup_target(device, context, target);
    16381637        context_enter(context);
    16391638        Assert(context->valid);
    1640         IWineD3DSwapChain_Release(swapChain);
    16411639    }
    16421640
     
    19681966        else
    19691967        {
     1968#ifdef VBOXWDDM
     1969            /* tmp work-around */
     1970            IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)This->swapchains[This->NumberOfSwapChains-1];
     1971#else
    19701972            IWineD3DSwapChainImpl *swapchain = (IWineD3DSwapChainImpl *)This->swapchains[0];
     1973#endif
    19711974            if (swapchain->backBuffer) target = swapchain->backBuffer[0];
    19721975            else target = swapchain->frontBuffer;
     
    19761979    if (current_context && current_context->current_rt == target)
    19771980    {
    1978         context_validate(current_context
    19791981#ifdef VBOXWDDM
    1980                 , NULL// current_context->device->swapchains[0]
    1981 #endif
    1982                                                     );
     1982        IWineD3DSwapChainImpl *swapchain = NULL;
     1983        if (SUCCEEDED(IWineD3DSurface_GetContainer(target, &IID_IWineD3DSwapChain, (void **)&swapchain))) {
     1984            context_validate(current_context, swapchain);
     1985            IWineD3DSwapChain_Release(swapchain);
     1986        }
     1987        else {
     1988                                                                                                    /* tmp work-around */
     1989            context_validate(current_context, current_context->device->swapchains[current_context->device->NumberOfSwapChains-1]);
     1990        }
     1991#else
     1992        context_validate(current_context);
     1993#endif
    19831994        return current_context;
    19841995    }
     
    19881999
    19892000        context = findThreadContextForSwapChain(swapchain, tid);
    1990         IWineD3DSwapChain_Release(swapchain);
    19912001#ifdef VBOXWDDM
    19922002        context_validate(context, swapchain);
    19932003#endif
     2004        IWineD3DSwapChain_Release(swapchain);
    19942005    }
    19952006    else
     
    20162027             * Can also happen on thread switches - in that case findThreadContextForSwapChain
    20172028             * is perfect to call. */
     2029#ifdef VBOXWDDM /* tmp work-around */
     2030            context = findThreadContextForSwapChain(This->swapchains[This->NumberOfSwapChains-1], tid);
     2031#else
    20182032            context = findThreadContextForSwapChain(This->swapchains[0], tid);
     2033#endif
    20192034        }
    20202035#ifdef VBOXWDDM
    20212036        context_validate(context,
    2022                 NULL//This->swapchains[0]
     2037                This->swapchains[This->NumberOfSwapChains-1] /* tmp work-around */
    20232038                                 );
    20242039#endif
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