VirtualBox

Ignore:
Timestamp:
Aug 1, 2012 10:26:43 AM (13 years ago)
Author:
vboxsync
Message:

crOgl/wddm: per-context connections

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

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/d3d9/d3d9_private.h

    r40388 r42499  
    192192
    193193HRESULT device_init(IDirect3DDevice9Impl *device, IWineD3D *wined3d, UINT adapter, D3DDEVTYPE device_type,
    194         HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters) DECLSPEC_HIDDEN;
     194        HWND focus_window, DWORD flags
     195#ifdef VBOX_WITH_WDDM
     196        , VBOXWINEEX_D3DPRESENT_PARAMETERS *parameters
     197#else
     198        , D3DPRESENT_PARAMETERS *parameters
     199#endif
     200        ) DECLSPEC_HIDDEN;
    195201
    196202/* IDirect3DDevice9: */
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/d3d9/device.c

    r40388 r42499  
    31533153};
    31543154
     3155#ifdef VBOX_WITH_WDDM
     3156# define PP_BASE(_p) (&(_p)->Base)
     3157#else
     3158# define PP_BASE(_p) (_p)
     3159#endif
    31553160HRESULT device_init(IDirect3DDevice9Impl *device, IWineD3D *wined3d, UINT adapter, D3DDEVTYPE device_type,
    3156         HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters)
     3161        HWND focus_window, DWORD flags
     3162#ifdef VBOX_WITH_WDDM
     3163        , VBOXWINEEX_D3DPRESENT_PARAMETERS *parameters
     3164#else
     3165        , D3DPRESENT_PARAMETERS *parameters
     3166#endif
     3167        )
    31573168{
    31583169    WINED3DPRESENT_PARAMETERS *wined3d_parameters;
     
    32093220    for (i = 0; i < count; ++i)
    32103221    {
    3211         wined3d_parameters[i].BackBufferWidth = parameters[i].BackBufferWidth;
    3212         wined3d_parameters[i].BackBufferHeight = parameters[i].BackBufferHeight;
    3213         wined3d_parameters[i].BackBufferFormat = wined3dformat_from_d3dformat(parameters[i].BackBufferFormat);
    3214         wined3d_parameters[i].BackBufferCount = parameters[i].BackBufferCount;
    3215         wined3d_parameters[i].MultiSampleType = parameters[i].MultiSampleType;
    3216         wined3d_parameters[i].MultiSampleQuality = parameters[i].MultiSampleQuality;
    3217         wined3d_parameters[i].SwapEffect = parameters[i].SwapEffect;
    3218         wined3d_parameters[i].hDeviceWindow = parameters[i].hDeviceWindow;
    3219         wined3d_parameters[i].Windowed = parameters[i].Windowed;
    3220         wined3d_parameters[i].EnableAutoDepthStencil = parameters[i].EnableAutoDepthStencil;
     3222        wined3d_parameters[i].BackBufferWidth = PP_BASE(&parameters[i])->BackBufferWidth;
     3223        wined3d_parameters[i].BackBufferHeight =PP_BASE(&parameters[i])->BackBufferHeight;
     3224        wined3d_parameters[i].BackBufferFormat = wined3dformat_from_d3dformat(PP_BASE(&parameters[i])->BackBufferFormat);
     3225        wined3d_parameters[i].BackBufferCount = PP_BASE(&parameters[i])->BackBufferCount;
     3226        wined3d_parameters[i].MultiSampleType =PP_BASE(&parameters[i])->MultiSampleType;
     3227        wined3d_parameters[i].MultiSampleQuality =PP_BASE(&parameters[i])->MultiSampleQuality;
     3228        wined3d_parameters[i].SwapEffect =PP_BASE(&parameters[i])->SwapEffect;
     3229        wined3d_parameters[i].hDeviceWindow =PP_BASE(&parameters[i])->hDeviceWindow;
     3230        wined3d_parameters[i].Windowed =PP_BASE(&parameters[i])->Windowed;
     3231        wined3d_parameters[i].EnableAutoDepthStencil =PP_BASE(&parameters[i])->EnableAutoDepthStencil;
    32213232        wined3d_parameters[i].AutoDepthStencilFormat =
    3222                 wined3dformat_from_d3dformat(parameters[i].AutoDepthStencilFormat);
    3223         wined3d_parameters[i].Flags = parameters[i].Flags;
    3224         wined3d_parameters[i].FullScreen_RefreshRateInHz = parameters[i].FullScreen_RefreshRateInHz;
    3225         wined3d_parameters[i].PresentationInterval = parameters[i].PresentationInterval;
     3233                wined3dformat_from_d3dformat(PP_BASE(&parameters[i])->AutoDepthStencilFormat);
     3234        wined3d_parameters[i].Flags =PP_BASE(&parameters[i])->Flags;
     3235        wined3d_parameters[i].FullScreen_RefreshRateInHz =PP_BASE(&parameters[i])->FullScreen_RefreshRateInHz;
     3236        wined3d_parameters[i].PresentationInterval =PP_BASE(&parameters[i])->PresentationInterval;
    32263237        wined3d_parameters[i].AutoRestoreDisplayMode = TRUE;
     3238#ifdef VBOX_WITH_WDDM
     3239        wined3d_parameters[i].pHgsmi = parameters[i].pHgsmi;
     3240#endif
    32273241    }
    32283242
     
    32443258    for (i = 0; i < count; ++i)
    32453259    {
    3246         parameters[i].BackBufferWidth = wined3d_parameters[i].BackBufferWidth;
    3247         parameters[i].BackBufferHeight = wined3d_parameters[i].BackBufferHeight;
    3248         parameters[i].BackBufferFormat = d3dformat_from_wined3dformat(wined3d_parameters[i].BackBufferFormat);
    3249         parameters[i].BackBufferCount = wined3d_parameters[i].BackBufferCount;
    3250         parameters[i].MultiSampleType = wined3d_parameters[i].MultiSampleType;
    3251         parameters[i].MultiSampleQuality = wined3d_parameters[i].MultiSampleQuality;
    3252         parameters[i].SwapEffect = wined3d_parameters[i].SwapEffect;
    3253         parameters[i].hDeviceWindow = wined3d_parameters[i].hDeviceWindow;
    3254         parameters[i].Windowed = wined3d_parameters[i].Windowed;
    3255         parameters[i].EnableAutoDepthStencil = wined3d_parameters[i].EnableAutoDepthStencil;
    3256         parameters[i].AutoDepthStencilFormat =
     3260        PP_BASE(&parameters[i])->BackBufferWidth = wined3d_parameters[i].BackBufferWidth;
     3261        PP_BASE(&parameters[i])->BackBufferHeight = wined3d_parameters[i].BackBufferHeight;
     3262        PP_BASE(&parameters[i])->BackBufferFormat = d3dformat_from_wined3dformat(wined3d_parameters[i].BackBufferFormat);
     3263        PP_BASE(&parameters[i])->BackBufferCount = wined3d_parameters[i].BackBufferCount;
     3264        PP_BASE(&parameters[i])->MultiSampleType = wined3d_parameters[i].MultiSampleType;
     3265        PP_BASE(&parameters[i])->MultiSampleQuality = wined3d_parameters[i].MultiSampleQuality;
     3266        PP_BASE(&parameters[i])->SwapEffect = wined3d_parameters[i].SwapEffect;
     3267        PP_BASE(&parameters[i])->hDeviceWindow = wined3d_parameters[i].hDeviceWindow;
     3268        PP_BASE(&parameters[i])->Windowed = wined3d_parameters[i].Windowed;
     3269        PP_BASE(&parameters[i])->EnableAutoDepthStencil = wined3d_parameters[i].EnableAutoDepthStencil;
     3270        PP_BASE(&parameters[i])->AutoDepthStencilFormat =
    32573271                d3dformat_from_wined3dformat(wined3d_parameters[i].AutoDepthStencilFormat);
    3258         parameters[i].Flags = wined3d_parameters[i].Flags;
    3259         parameters[i].FullScreen_RefreshRateInHz = wined3d_parameters[i].FullScreen_RefreshRateInHz;
    3260         parameters[i].PresentationInterval = wined3d_parameters[i].PresentationInterval;
     3272        PP_BASE(&parameters[i])->Flags = wined3d_parameters[i].Flags;
     3273        PP_BASE(&parameters[i])->FullScreen_RefreshRateInHz = wined3d_parameters[i].FullScreen_RefreshRateInHz;
     3274        PP_BASE(&parameters[i])->PresentationInterval = wined3d_parameters[i].PresentationInterval;
    32613275    }
    32623276    HeapFree(GetProcessHeap(), 0, wined3d_parameters);
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/d3d9/directx.c

    r40389 r42499  
    523523    }
    524524
    525     hr = device_init(object, This->WineD3D, adapter, device_type, focus_window, flags, parameters);
     525    hr = device_init(object, This->WineD3D, adapter, device_type, focus_window, flags,
     526#ifdef VBOX_WITH_WDDM
     527        (VBOXWINEEX_D3DPRESENT_PARAMETERS *)
     528#endif
     529                    parameters);
    526530    if (FAILED(hr))
    527531    {
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/vbox/VBoxWineEx.h

    r40388 r42499  
    8484VBOXWINEEX_DECL(HRESULT) VBoxWineExD3DSwapchain9Present(IDirect3DSwapChain9 *iface,
    8585                                IDirect3DSurface9 *surf); /* use the given surface as a frontbuffer content source */
     86
     87typedef struct VBOXWINEEX_D3DPRESENT_PARAMETERS
     88{
     89    D3DPRESENT_PARAMETERS Base;
     90    struct VBOXUHGSMI *pHgsmi;
     91} VBOXWINEEX_D3DPRESENT_PARAMETERS, *PVBOXWINEEX_D3DPRESENT_PARAMETERS;
    8692#ifdef __cplusplus
    8793}
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/vbox/libWineStub/include/wine/wined3d.h

    r42285 r42499  
    22622262    UINT PresentationInterval;
    22632263    BOOL AutoRestoreDisplayMode;
     2264#ifdef VBOX_WITH_WDDM
     2265    struct VBOXUHGSMI *pHgsmi;
     2266#endif
    22642267} WINED3DPRESENT_PARAMETERS;
    22652268typedef struct _WINED3DSURFACE_DESC {
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/context.c

    r42285 r42499  
    15321532 *****************************************************************************/
    15331533struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target,
    1534         const struct wined3d_format_desc *ds_format_desc)
     1534        const struct wined3d_format_desc *ds_format_desc
     1535#ifdef VBOX_WITH_WDDM
     1536        , struct VBOXUHGSMI *pHgsmi
     1537#endif
     1538        )
    15351539{
    15361540    IWineD3DDeviceImpl *device = swapchain->device;
     
    15491553    TRACE("swapchain %p, target %p, window %p.\n", swapchain, target, swapchain->win_handle);
    15501554
     1555#ifdef VBOX_WITH_WDDM
     1556    if (!pHgsmi)
     1557    {
     1558        ERR("HGSMI should be specified!");
     1559        return NULL;
     1560    }
     1561#endif
     1562
    15511563    ret = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*ret));
    15521564    if (!ret)
     
    16441656    }
    16451657
    1646     ctx = pwglCreateContext(hdc);
     1658    ctx = pVBoxCreateContext(hdc
     1659#ifdef VBOX_WITH_WDDM
     1660            , pHgsmi
     1661#else
     1662            , NULL
     1663#endif
     1664            );
    16471665    if (device->numContexts)
    16481666    {
     
    19551973    {
    19561974        Assert(!device->NumberOfSwapChains);
    1957         context = context_create(swapchain, target, ds_format_desc);
     1975        context = context_create(swapchain, target, ds_format_desc
     1976#ifdef VBOX_WITH_WDDM
     1977                , device->pHgsmi
     1978#endif
     1979                );
    19581980    }
    19591981    else
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/device.c

    r42408 r42499  
    16051605    if(!This->adapter->opengl) return WINED3DERR_INVALIDCALL;
    16061606
     1607#ifdef VBOX_WITH_WDDM
     1608    if (!pPresentationParameters->pHgsmi)
     1609    {
     1610        ERR("hgsmi not specified!");
     1611        return WINED3DERR_INVALIDCALL;
     1612    }
     1613    This->pHgsmi = pPresentationParameters->pHgsmi;
     1614#endif
    16071615    TRACE("(%p) : Creating stateblock\n", This);
    16081616    /* Creating the startup stateBlock - Note Special Case: 0 => Don't fill in yet! */
     
    64566464    IWineD3DSurfaceImpl *target;
    64576465
     6466#ifdef VBOX_WITH_WDDM
     6467    ERR("Should not be here!");
     6468#endif
     6469
    64586470#ifndef VBOX_WITH_WDDM
    64596471    /* Recreate the primary swapchain's context */
     
    64676479
    64686480    target = (IWineD3DSurfaceImpl *)(swapchain->backBuffer ? swapchain->backBuffer[0] : swapchain->frontBuffer);
    6469     if (!(context = context_create(swapchain, target, swapchain->ds_format)))
     6481    if (!(context = context_create(swapchain, target, swapchain->ds_format
     6482#ifdef VBOX_WITH_WDDM
     6483                , This->pHgsmi
     6484#endif
     6485            )))
    64706486    {
    64716487        WARN("Failed to create context.\n");
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/directx.c

    r42285 r42499  
    3636#include <stdio.h>
    3737#include "wined3d_private.h"
     38
     39#ifdef VBOX_WITH_WDDM
     40# include <VBox/VBoxCrHgsmi.h>
     41#endif
    3842
    3943WINE_DEFAULT_DEBUG_CHANNEL(d3d);
     
    254258}
    255259
    256 static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx)
     260static BOOL WineD3D_CreateFakeGLContext(struct wined3d_fake_gl_ctx *ctx, struct VBOXUHGSMI *pHgsmi)
    257261{
    258262    PIXELFORMATDESCRIPTOR pfd;
     
    300304
    301305    /* Create a GL context. */
    302     ctx->gl_ctx = pwglCreateContext(ctx->dc);
     306    ctx->gl_ctx = pVBoxCreateContext(ctx->dc, pHgsmi);
    303307    if (!ctx->gl_ctx)
    304308    {
     
    53095313    BOOL ret;
    53105314    int ps_selected_mode, vs_selected_mode;
     5315    struct VBOXUHGSMI *pHgsmi = NULL;
    53115316
    53125317    /* No need to hold any lock. The calling library makes sure only one thread calls
     
    53555360#define USE_WGL_FUNC(pfn) p##pfn = (void*)GetProcAddress(mod_gl, #pfn);
    53565361    WGL_FUNCS_GEN;
     5362    VBOX_FUNCS_GEN;
    53575363#undef USE_WGL_FUNC
    53585364
     
    53805386    glDisableWINE = glDisable;
    53815387
     5388#ifdef VBOX_WITH_WDDM
     5389    pHgsmi = VBoxCrHgsmiCreate();
     5390    if (!pHgsmi)
     5391    {
     5392        ERR("VBoxCrHgsmiCreate failed");
     5393        goto nogl_adapter;
     5394    }
     5395#endif
     5396
    53825397    /* For now only one default adapter */
    53835398    {
     
    54065421                adapter->luid.HighPart, adapter->luid.LowPart);
    54075422
    5408         if (!WineD3D_CreateFakeGLContext(&fake_gl_ctx))
     5423        if (!WineD3D_CreateFakeGLContext(&fake_gl_ctx, pHgsmi))
    54095424        {
    54105425            ERR("Failed to get a gl context for default adapter\n");
     
    55955610    TRACE("%u adapters successfully initialized\n", This->adapter_count);
    55965611
     5612#ifdef VBOX_WITH_WDDM
     5613    VBoxCrHgsmiDestroy(pHgsmi);
     5614    pHgsmi = NULL;
     5615#endif
     5616
    55975617    return TRUE;
    55985618
     
    56155635#endif
    56165636    initPixelFormatsNoGL(&This->adapters[0].gl_info);
     5637
     5638#ifdef VBOX_WITH_WDDM
     5639    if (pHgsmi)
     5640    {
     5641        VBoxCrHgsmiDestroy(pHgsmi);
     5642        pHgsmi = NULL;
     5643    }
     5644#endif
    56175645
    56185646    This->adapter_count = 1;
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/swapchain.c

    r39869 r42499  
    12331233    TRACE("Creating a new context for swapchain %p, thread %d\n", This, GetCurrentThreadId());
    12341234
    1235     if (!(ctx = context_create(This, (IWineD3DSurfaceImpl *)This->frontBuffer, This->ds_format)))
     1235#ifdef VBOX_WITH_WDDM
     1236     ERR("Should not be here");
     1237#endif
     1238
     1239    if (!(ctx = context_create(This, (IWineD3DSurfaceImpl *)This->frontBuffer, This->ds_format
     1240#ifdef VBOX_WITH_WDDM
     1241                , This->device->pHgsmi
     1242#endif
     1243            )))
    12361244    {
    12371245        ERR("Failed to create a new context for the swapchain\n");
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/vboxext.c

    r42408 r42499  
    1818#include "wined3d_private.h"
    1919#include "vboxext.h"
     20#ifdef VBOX_WITH_WDDM
     21#include <VBox/VBoxCrHgsmi.h>
     22#include <iprt/err.h>
     23#endif
    2024
    2125WINE_DEFAULT_DEBUG_CHANNEL(d3d_vbox);
     
    282286{
    283287    HRESULT hr = S_OK;
     288#ifdef VBOX_WITH_WDDM
     289    int rc = VBoxCrHgsmiInit();
     290    if (!RT_SUCCESS(rc))
     291    {
     292        ERR("VBoxCrHgsmiInit failed rc %d", rc);
     293        return E_FAIL;
     294    }
     295#endif
    284296    memset(&g_VBoxExtGlobal, 0, sizeof (g_VBoxExtGlobal));
    285297    hr = VBoxExtWorkerCreate(&g_VBoxExtGlobal.Worker);
     298    if (SUCCEEDED(hr))
     299        return S_OK;
     300
     301    /* failure branch */
     302#ifdef VBOX_WITH_WDDM
     303    VBoxCrHgsmiTerm();
     304#endif
    286305    return hr;
    287306}
     
    305324        return hr;
    306325    }
     326
     327#ifdef VBOX_WITH_WDDM
     328    VBoxCrHgsmiTerm();
     329#endif
     330
    307331    return S_OK;
    308332}
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/wined3d_gl.h

    r41929 r42499  
    13741374
    13751375/* WGL functions */
    1376 HGLRC (WINAPI *pwglCreateContext)(HDC) DECLSPEC_HIDDEN;
    13771376BOOL (WINAPI *pwglDeleteContext)(HGLRC) DECLSPEC_HIDDEN;
    13781377HGLRC (WINAPI *pwglGetCurrentContext)(void) DECLSPEC_HIDDEN;
     
    13821381BOOL (WINAPI *pwglSwapLayerBuffers)(HDC, UINT) DECLSPEC_HIDDEN;
    13831382BOOL (WINAPI *pwglShareLists)(HGLRC, HGLRC) DECLSPEC_HIDDEN;
     1383
     1384HGLRC (WINAPI *pVBoxCreateContext)(HDC, struct VBOXUHGSMI*) DECLSPEC_HIDDEN;
    13841385
    13851386#define GL_FUNCS_GEN \
     
    17211722
    17221723#define WGL_FUNCS_GEN \
    1723     USE_WGL_FUNC(wglCreateContext) \
    17241724    USE_WGL_FUNC(wglDeleteContext) \
    17251725    USE_WGL_FUNC(wglGetCurrentContext) \
     
    17291729    USE_WGL_FUNC(wglShareLists) \
    17301730    USE_WGL_FUNC(wglSwapLayerBuffers)
     1731
     1732#define VBOX_FUNCS_GEN \
     1733    USE_WGL_FUNC(VBoxCreateContext)
    17311734
    17321735/* OpenGL extensions. */
  • trunk/src/VBox/Additions/WINNT/Graphics/Wine/wined3d/wined3d_private.h

    r42408 r42499  
    12831283        GLenum fbo_target, DWORD idx, IWineD3DSurfaceImpl *surface) DECLSPEC_HIDDEN;
    12841284struct wined3d_context *context_create(IWineD3DSwapChainImpl *swapchain, IWineD3DSurfaceImpl *target,
    1285         const struct wined3d_format_desc *ds_format_desc) DECLSPEC_HIDDEN;
     1285        const struct wined3d_format_desc *ds_format_desc
     1286#ifdef VBOX_WITH_WDDM
     1287                , struct VBOXUHGSMI *pHgsmi
     1288#endif
     1289        ) DECLSPEC_HIDDEN;
    12861290struct IWineD3DDeviceImpl *context_get_device(const struct wined3d_context *context); DECLSPEC_HIDDEN;
    12871291#ifdef VBOX_WITH_WDDM
     
    18001804    struct wined3d_context **contexts;
    18011805    UINT                    numContexts;
     1806
     1807#ifdef VBOX_WITH_WDDM
     1808    struct VBOXUHGSMI *pHgsmi;
     1809#endif
    18021810
    18031811#ifdef VBOX_WINE_WITH_SHADER_CACHE
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