[PATCH 4/5] wined3d: Replace InitAdapters() with a function to initialize a single adapter.

Henri Verbeet hverbeet at codeweavers.com
Fri Jan 18 05:05:24 CST 2013


---
 dlls/wined3d/directx.c | 124 ++++++++++++++++++++++---------------------------
 1 file changed, 55 insertions(+), 69 deletions(-)

diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c
index fb886da..7b388af 100644
--- a/dlls/wined3d/directx.c
+++ b/dlls/wined3d/directx.c
@@ -5502,18 +5502,17 @@ static void wined3d_adapter_init_fb_cfgs(struct wined3d_adapter *adapter, HDC dc
 }
 
 /* Do not call while under the GL lock. */
-static BOOL InitAdapters(struct wined3d *wined3d)
+static BOOL wined3d_adapter_init(struct wined3d_adapter *adapter, UINT ordinal)
 {
-    struct wined3d_adapter *adapter = &wined3d->adapters[0];
     struct wined3d_gl_info *gl_info = &adapter->gl_info;
-    BOOL ret;
-    int ps_selected_mode, vs_selected_mode;
+    struct wined3d_fake_gl_ctx fake_gl_ctx = {0};
+    DISPLAY_DEVICEW display_device;
 
-    /* No need to hold any lock. The calling library makes sure only one thread calls
-     * wined3d simultaneously
-     */
+    TRACE("adapter %p, ordinal %u.\n", adapter, ordinal);
 
-    TRACE("Initializing adapters\n");
+    adapter->ordinal = ordinal;
+    adapter->monitorPoint.x = -1;
+    adapter->monitorPoint.y = -1;
 
 /* Dynamically load all GL core functions */
 #ifdef USE_WIN32_OPENGL
@@ -5539,74 +5538,58 @@ static BOOL InitAdapters(struct wined3d *wined3d)
     glEnableWINE = gl_info->gl_ops.gl.p_glEnable;
     glDisableWINE = gl_info->gl_ops.gl.p_glDisable;
 
-    /* For now only one default adapter */
+    if (!AllocateLocallyUniqueId(&adapter->luid))
     {
-        struct wined3d_fake_gl_ctx fake_gl_ctx = {0};
-        DISPLAY_DEVICEW DisplayDevice;
-
-        TRACE("Initializing default adapter\n");
-        adapter->ordinal = 0;
-        adapter->monitorPoint.x = -1;
-        adapter->monitorPoint.y = -1;
-
-        if (!AllocateLocallyUniqueId(&adapter->luid))
-        {
-            DWORD err = GetLastError();
-            ERR("Failed to set adapter LUID (%#x).\n", err);
-            return FALSE;
-        }
-        TRACE("Allocated LUID %08x:%08x for adapter.\n",
-                adapter->luid.HighPart, adapter->luid.LowPart);
+        ERR("Failed to set adapter LUID (%#x).\n", GetLastError());
+        return FALSE;
+    }
+    TRACE("Allocated LUID %08x:%08x for adapter %p.\n",
+            adapter->luid.HighPart, adapter->luid.LowPart, adapter);
 
-        if (!WineD3D_CreateFakeGLContext(&fake_gl_ctx))
-        {
-            ERR("Failed to get a gl context for default adapter\n");
-            return FALSE;
-        }
+    if (!WineD3D_CreateFakeGLContext(&fake_gl_ctx))
+    {
+        ERR("Failed to get a GL context for adapter %p.\n", adapter);
+        return FALSE;
+    }
 
-        ret = wined3d_adapter_init_gl_caps(adapter);
-        if(!ret) {
-            ERR("Failed to initialize gl caps for default adapter\n");
-            WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
-            return FALSE;
-        }
+    if (!wined3d_adapter_init_gl_caps(adapter))
+    {
+        ERR("Failed to initialize GL caps for adapter %p.\n", adapter);
+        WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
+        return FALSE;
+    }
 
-        wined3d_adapter_init_fb_cfgs(adapter, fake_gl_ctx.dc);
-        /* We haven't found any suitable formats. This should only happen in
-         * case of GDI software rendering, which is pretty useless anyway. */
-        if (!adapter->cfg_count)
-        {
-            ERR("Disabling Direct3D because no hardware accelerated pixel formats have been found!\n");
-            WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
-            HeapFree(GetProcessHeap(), 0, adapter->cfgs);
-            return FALSE;
-        }
+    wined3d_adapter_init_fb_cfgs(adapter, fake_gl_ctx.dc);
+    /* We haven't found any suitable formats. This should only happen in
+     * case of GDI software rendering, which is pretty useless anyway. */
+    if (!adapter->cfg_count)
+    {
+        WARN("No suitable pixel formats found.\n");
+        WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
+        HeapFree(GetProcessHeap(), 0, adapter->cfgs);
+        return FALSE;
+    }
 
-        ret = initPixelFormats(&adapter->gl_info, adapter->driver_info.vendor);
-        if(!ret) {
-            ERR("Failed to init gl formats\n");
-            WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
-            HeapFree(GetProcessHeap(), 0, adapter->cfgs);
-            return FALSE;
-        }
+    if (!initPixelFormats(&adapter->gl_info, adapter->driver_info.vendor))
+    {
+        ERR("Failed to initialize GL format info.\n");
+        WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
+        HeapFree(GetProcessHeap(), 0, adapter->cfgs);
+        return FALSE;
+    }
 
-        adapter->TextureRam = adapter->driver_info.vidmem;
-        adapter->UsedTextureRam = 0;
-        TRACE("Emulating %dMB of texture ram\n", adapter->TextureRam/(1024*1024));
+    adapter->TextureRam = adapter->driver_info.vidmem;
+    adapter->UsedTextureRam = 0;
+    TRACE("Emulating %u MB of texture ram.\n", adapter->TextureRam / (1024 * 1024));
 
-        /* Initialize the Adapter's DeviceName which is required for ChangeDisplaySettings and friends */
-        DisplayDevice.cb = sizeof(DisplayDevice);
-        EnumDisplayDevicesW(NULL, 0 /* Adapter 0 = iDevNum 0 */, &DisplayDevice, 0);
-        TRACE("DeviceName: %s\n", debugstr_w(DisplayDevice.DeviceName));
-        strcpyW(adapter->DeviceName, DisplayDevice.DeviceName);
+    display_device.cb = sizeof(display_device);
+    EnumDisplayDevicesW(NULL, ordinal, &display_device, 0);
+    TRACE("DeviceName: %s\n", debugstr_w(display_device.DeviceName));
+    strcpyW(adapter->DeviceName, display_device.DeviceName);
 
-        WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
+    WineD3D_ReleaseFakeGLContext(&fake_gl_ctx);
 
-        select_shader_mode(&adapter->gl_info, &ps_selected_mode, &vs_selected_mode);
-        fillGLAttribFuncs(&adapter->gl_info);
-    }
-    wined3d->adapter_count = 1;
-    TRACE("%u adapters successfully initialized.\n", wined3d->adapter_count);
+    fillGLAttribFuncs(&adapter->gl_info);
 
     return TRUE;
 }
@@ -5646,6 +5629,8 @@ HRESULT wined3d_init(struct wined3d *wined3d, UINT version, DWORD flags)
     wined3d->ref = 1;
     wined3d->flags = flags;
 
+    TRACE("Initializing adapters.\n");
+
     if (flags & WINED3D_NO3D)
     {
         wined3d_adapter_init_nogl(&wined3d->adapters[0], 0);
@@ -5653,11 +5638,12 @@ HRESULT wined3d_init(struct wined3d *wined3d, UINT version, DWORD flags)
         return WINED3D_OK;
     }
 
-    if (!InitAdapters(wined3d))
+    if (!wined3d_adapter_init(&wined3d->adapters[0], 0))
     {
-        WARN("Failed to initialize adapters.\n");
+        WARN("Failed to initialize adapter.\n");
         return E_FAIL;
     }
+    wined3d->adapter_count = 1;
 
     return WINED3D_OK;
 }
-- 
1.7.12.4




More information about the wine-patches mailing list