Alexandre Julliard : wined3d: Don' t crash during initialization if the adapter doesn't have full GL info.

Alexandre Julliard julliard at winehq.org
Thu May 6 11:13:23 CDT 2010


Module: wine
Branch: master
Commit: e45926d582ea3887f8ade611365654174cdd754f
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e45926d582ea3887f8ade611365654174cdd754f

Author: Alexandre Julliard <julliard at winehq.org>
Date:   Thu May  6 14:57:21 2010 +0200

wined3d: Don't crash during initialization if the adapter doesn't have full GL info.

---

 dlls/wined3d/device.c |   34 +++++++++++++++++++---------------
 1 files changed, 19 insertions(+), 15 deletions(-)

diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index f001591..2b8f231 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -7034,25 +7034,29 @@ HRESULT device_init(IWineD3DDeviceImpl *device, IWineD3DImpl *wined3d,
     select_shader_mode(&adapter->gl_info, &device->ps_selected_mode, &device->vs_selected_mode);
     device->shader_backend = adapter->shader_backend;
 
-    device->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps);
-    device->d3d_vshader_constantF = shader_caps.MaxVertexShaderConst;
-    device->d3d_pshader_constantF = shader_caps.MaxPixelShaderConst;
-    device->vs_clipping = shader_caps.VSClipping;
-
+    if (device->shader_backend)
+    {
+        device->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps);
+        device->d3d_vshader_constantF = shader_caps.MaxVertexShaderConst;
+        device->d3d_pshader_constantF = shader_caps.MaxPixelShaderConst;
+        device->vs_clipping = shader_caps.VSClipping;
+    }
     fragment_pipeline = adapter->fragment_pipe;
     device->frag_pipe = fragment_pipeline;
-    fragment_pipeline->get_caps(&adapter->gl_info, &ffp_caps);
-    device->max_ffp_textures = ffp_caps.MaxSimultaneousTextures;
-
-    hr = compile_state_table(device->StateTable, device->multistate_funcs, &adapter->gl_info,
-            ffp_vertexstate_template, fragment_pipeline, misc_state_template);
-    if (FAILED(hr))
+    if (fragment_pipeline)
     {
-        ERR("Failed to compile state table, hr %#x.\n", hr);
-        IWineD3D_Release(device->wined3d);
-        return hr;
-    }
+        fragment_pipeline->get_caps(&adapter->gl_info, &ffp_caps);
+        device->max_ffp_textures = ffp_caps.MaxSimultaneousTextures;
 
+        hr = compile_state_table(device->StateTable, device->multistate_funcs, &adapter->gl_info,
+                                 ffp_vertexstate_template, fragment_pipeline, misc_state_template);
+        if (FAILED(hr))
+        {
+            ERR("Failed to compile state table, hr %#x.\n", hr);
+            IWineD3D_Release(device->wined3d);
+            return hr;
+        }
+    }
     device->blitter = adapter->blitter;
 
     return WINED3D_OK;




More information about the wine-cvs mailing list