Module: wine Branch: master Commit: e45926d582ea3887f8ade611365654174cdd754f URL: http://source.winehq.org/git/wine.git/?a=commit;h=e45926d582ea3887f8ade61136...
Author: Alexandre Julliard julliard@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;