Module: wine Branch: master Commit: f3dbbba48e5a4ca75b9d69178fefd493d677aa31 URL: http://source.winehq.org/git/wine.git/?a=commit;h=f3dbbba48e5a4ca75b9d69178f...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Wed Jan 16 08:51:47 2013 +0100
wined3d: Initialize the various backends in wined3d_adapter_init_nogl() as well.
---
dlls/wined3d/device.c | 39 +++++++++++++++++---------------------- dlls/wined3d/directx.c | 4 ++++ dlls/wined3d/state.c | 30 ++++++++++++++++++++++++++++++ dlls/wined3d/wined3d_private.h | 1 + 4 files changed, 52 insertions(+), 22 deletions(-)
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index d718b04..487c270 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -5654,32 +5654,27 @@ HRESULT device_init(struct wined3d_device *device, struct wined3d *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->vs_version = shader_caps.vs_version; + device->gs_version = shader_caps.gs_version; + device->ps_version = shader_caps.ps_version; + device->d3d_vshader_constantF = shader_caps.vs_uniform_count; + device->d3d_pshader_constantF = shader_caps.ps_uniform_count; + device->vs_clipping = shader_caps.vs_clipping;
- if (device->shader_backend) - { - device->shader_backend->shader_get_caps(&adapter->gl_info, &shader_caps); - device->vs_version = shader_caps.vs_version; - device->gs_version = shader_caps.gs_version; - device->ps_version = shader_caps.ps_version; - device->d3d_vshader_constantF = shader_caps.vs_uniform_count; - device->d3d_pshader_constantF = shader_caps.ps_uniform_count; - device->vs_clipping = shader_caps.vs_clipping; - } fragment_pipeline = adapter->fragment_pipe; - if (fragment_pipeline) - { - fragment_pipeline->get_caps(&adapter->gl_info, &ffp_caps); - device->max_ffp_textures = ffp_caps.MaxSimultaneousTextures; + 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); - wined3d_decref(device->wined3d); - return hr; - } + if (fragment_pipeline->states + && FAILED(hr = compile_state_table(device->StateTable, device->multistate_funcs, + &adapter->gl_info, ffp_vertexstate_template, fragment_pipeline, misc_state_template))) + { + ERR("Failed to compile state table, hr %#x.\n", hr); + wined3d_decref(device->wined3d); + return hr; } + device->blitter = adapter->blitter;
hr = wined3d_stateblock_create(device, WINED3D_SBT_INIT, &device->stateBlock); diff --git a/dlls/wined3d/directx.c b/dlls/wined3d/directx.c index 2190689..adce77e 100644 --- a/dlls/wined3d/directx.c +++ b/dlls/wined3d/directx.c @@ -5626,6 +5626,10 @@ static void wined3d_adapter_init_nogl(struct wined3d_adapter *adapter, UINT ordi adapter->TextureRam = 128 * 1024 * 1024;
initPixelFormatsNoGL(&adapter->gl_info); + + adapter->fragment_pipe = &none_fragment_pipe; + adapter->shader_backend = &none_shader_backend; + adapter->blitter = &cpu_blit; }
static void STDMETHODCALLTYPE wined3d_null_wined3d_object_destroyed(void *parent) {} diff --git a/dlls/wined3d/state.c b/dlls/wined3d/state.c index 6d97981..afb0d39 100644 --- a/dlls/wined3d/state.c +++ b/dlls/wined3d/state.c @@ -5735,6 +5735,36 @@ const struct fragment_pipeline ffp_fragment_pipeline = { FALSE /* we cannot disable projected textures. The vertex pipe has to do it */ };
+static void fp_none_enable(const struct wined3d_gl_info *gl_info, BOOL enable) {} + +static void fp_none_get_caps(const struct wined3d_gl_info *gl_info, struct fragment_caps *caps) +{ + memset(caps, 0, sizeof(*caps)); +} + +static void *fp_none_alloc(const struct wined3d_shader_backend_ops *shader_backend, void *shader_priv) +{ + return shader_priv; +} + +static void fp_none_free(struct wined3d_device *device) {} + +static BOOL fp_none_color_fixup_supported(struct color_fixup_desc fixup) +{ + return is_identity_fixup(fixup); +} + +const struct fragment_pipeline none_fragment_pipe = +{ + fp_none_enable, + fp_none_get_caps, + fp_none_alloc, + fp_none_free, + fp_none_color_fixup_supported, + NULL, + FALSE, +}; + static unsigned int num_handlers(const APPLYSTATEFUNC *funcs) { unsigned int i; diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index a045f7a..a6dd97c 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -1193,6 +1193,7 @@ struct fragment_pipeline
extern const struct StateEntryTemplate misc_state_template[] DECLSPEC_HIDDEN; extern const struct StateEntryTemplate ffp_vertexstate_template[] DECLSPEC_HIDDEN; +extern const struct fragment_pipeline none_fragment_pipe DECLSPEC_HIDDEN; extern const struct fragment_pipeline ffp_fragment_pipeline DECLSPEC_HIDDEN; extern const struct fragment_pipeline atifs_fragment_pipeline DECLSPEC_HIDDEN; extern const struct fragment_pipeline arbfp_fragment_pipeline DECLSPEC_HIDDEN;