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