Henri Verbeet : wined3d: Initialize the various backends in wined3d_adapter_init_nogl() as well.

Alexandre Julliard julliard at winehq.org
Wed Jan 16 13:47:42 CST 2013


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

Author: Henri Verbeet <hverbeet at 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;




More information about the wine-cvs mailing list