Henri Verbeet : wined3d: Call state_init_default() from state_init() when the appropriate flag is set.

Alexandre Julliard julliard at winehq.org
Mon Sep 30 16:07:55 CDT 2013


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

Author: Henri Verbeet <hverbeet at codeweavers.com>
Date:   Mon Sep 30 09:40:40 2013 +0200

wined3d: Call state_init_default() from state_init() when the appropriate flag is set.

---

 dlls/wined3d/cs.c              |    4 +-
 dlls/wined3d/device.c          |    8 ++--
 dlls/wined3d/stateblock.c      |   62 +++++++++++++++++++++------------------
 dlls/wined3d/wined3d_private.h |    5 ++-
 4 files changed, 42 insertions(+), 37 deletions(-)

diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index a03e608..bf88f9f 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -224,13 +224,13 @@ struct wined3d_cs *wined3d_cs_create(struct wined3d_device *device)
         return NULL;
     }
 
-    if (FAILED(state_init(&cs->state, &cs->fb, &device->adapter->d3d_info, WINED3D_STATE_NO_REF)))
+    if (FAILED(state_init(&cs->state, &cs->fb, gl_info, &device->adapter->d3d_info,
+            WINED3D_STATE_NO_REF | WINED3D_STATE_INIT_DEFAULT)))
     {
         HeapFree(GetProcessHeap(), 0, cs->fb.render_targets);
         HeapFree(GetProcessHeap(), 0, cs);
         return NULL;
     }
-    state_init_default(&cs->state, gl_info);
 
     cs->ops = &wined3d_cs_st_ops;
     cs->device = device;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 391e876..d7ef129 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -4705,9 +4705,9 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
         if (device->d3d_initialized)
             delete_opengl_contexts(device, swapchain);
 
-        if (FAILED(hr = state_init(&device->state, &device->fb, &device->adapter->d3d_info, 0)))
+        if (FAILED(hr = state_init(&device->state, &device->fb, &device->adapter->gl_info,
+                &device->adapter->d3d_info, WINED3D_STATE_INIT_DEFAULT)))
             ERR("Failed to initialize device state, hr %#x.\n", hr);
-        state_init_default(&device->state, &device->adapter->gl_info);
         device->update_state = &device->state;
 
         device_init_swapchain_state(device, swapchain);
@@ -4969,12 +4969,12 @@ HRESULT device_init(struct wined3d_device *device, struct wined3d *wined3d,
 
     device->blitter = adapter->blitter;
 
-    if (FAILED(hr = state_init(&device->state, &device->fb, &adapter->d3d_info, 0)))
+    if (FAILED(hr = state_init(&device->state, &device->fb, &adapter->gl_info,
+            &adapter->d3d_info, WINED3D_STATE_INIT_DEFAULT)))
     {
         ERR("Failed to initialize device state, hr %#x.\n", hr);
         goto err;
     }
-    state_init_default(&device->state, &adapter->gl_info);
     device->update_state = &device->state;
 
     if (!(device->cs = wined3d_cs_create(device)))
diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c
index c0d37f0..24c4362 100644
--- a/dlls/wined3d/stateblock.c
+++ b/dlls/wined3d/stateblock.c
@@ -599,33 +599,6 @@ void state_cleanup(struct wined3d_state *state)
     HeapFree(GetProcessHeap(), 0, state->ps_consts_f);
 }
 
-HRESULT state_init(struct wined3d_state *state, struct wined3d_fb_state *fb,
-        const struct wined3d_d3d_info *d3d_info, DWORD flags)
-{
-    unsigned int i;
-
-    state->flags = flags;
-    state->fb = fb;
-
-    for (i = 0; i < LIGHTMAP_SIZE; i++)
-    {
-        list_init(&state->light_map[i]);
-    }
-
-    if (!(state->vs_consts_f = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
-            4 * sizeof(float) * d3d_info->limits.vs_uniform_count)))
-        return E_OUTOFMEMORY;
-
-    if (!(state->ps_consts_f = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
-            4 * sizeof(float) * d3d_info->limits.ps_uniform_count)))
-    {
-        HeapFree(GetProcessHeap(), 0, state->vs_consts_f);
-        return E_OUTOFMEMORY;
-    }
-
-    return WINED3D_OK;
-}
-
 ULONG CDECL wined3d_stateblock_decref(struct wined3d_stateblock *stateblock)
 {
     ULONG refcount = InterlockedDecrement(&stateblock->ref);
@@ -1173,7 +1146,7 @@ void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock)
     TRACE("Applied stateblock %p.\n", stateblock);
 }
 
-void state_init_default(struct wined3d_state *state, const struct wined3d_gl_info *gl_info)
+static void state_init_default(struct wined3d_state *state, const struct wined3d_gl_info *gl_info)
 {
     union
     {
@@ -1379,6 +1352,37 @@ void state_init_default(struct wined3d_state *state, const struct wined3d_gl_inf
     }
 }
 
+HRESULT state_init(struct wined3d_state *state, struct wined3d_fb_state *fb,
+        const struct wined3d_gl_info *gl_info, const struct wined3d_d3d_info *d3d_info,
+        DWORD flags)
+{
+    unsigned int i;
+
+    state->flags = flags;
+    state->fb = fb;
+
+    for (i = 0; i < LIGHTMAP_SIZE; i++)
+    {
+        list_init(&state->light_map[i]);
+    }
+
+    if (!(state->vs_consts_f = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            4 * sizeof(float) * d3d_info->limits.vs_uniform_count)))
+        return E_OUTOFMEMORY;
+
+    if (!(state->ps_consts_f = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY,
+            4 * sizeof(float) * d3d_info->limits.ps_uniform_count)))
+    {
+        HeapFree(GetProcessHeap(), 0, state->vs_consts_f);
+        return E_OUTOFMEMORY;
+    }
+
+    if (flags & WINED3D_STATE_INIT_DEFAULT)
+        state_init_default(state, gl_info);
+
+    return WINED3D_OK;
+}
+
 static HRESULT stateblock_init(struct wined3d_stateblock *stateblock,
         struct wined3d_device *device, enum wined3d_stateblock_type type)
 {
@@ -1388,7 +1392,7 @@ static HRESULT stateblock_init(struct wined3d_stateblock *stateblock,
     stateblock->ref = 1;
     stateblock->device = device;
 
-    if (FAILED(hr = state_init(&stateblock->state, NULL, d3d_info, 0)))
+    if (FAILED(hr = state_init(&stateblock->state, NULL, &device->adapter->gl_info, d3d_info, 0)))
         return hr;
 
     if (FAILED(hr = stateblock_allocate_shader_constants(stateblock)))
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 6d6b3a9..5fd759a 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -1805,6 +1805,7 @@ struct wined3d_stream_state
 };
 
 #define WINED3D_STATE_NO_REF        0x00000001
+#define WINED3D_STATE_INIT_DEFAULT  0x00000002
 
 struct wined3d_state
 {
@@ -2454,8 +2455,8 @@ void stateblock_init_contained_states(struct wined3d_stateblock *stateblock) DEC
 
 void state_cleanup(struct wined3d_state *state) DECLSPEC_HIDDEN;
 HRESULT state_init(struct wined3d_state *state, struct wined3d_fb_state *fb,
-        const struct wined3d_d3d_info *d3d_info, DWORD flags) DECLSPEC_HIDDEN;
-void state_init_default(struct wined3d_state *state, const struct wined3d_gl_info *gl_info) DECLSPEC_HIDDEN;
+        const struct wined3d_gl_info *gl_info, const struct wined3d_d3d_info *d3d_info,
+        DWORD flags) DECLSPEC_HIDDEN;
 void state_unbind_resources(struct wined3d_state *state) DECLSPEC_HIDDEN;
 
 struct wined3d_cs_ops




More information about the wine-cvs mailing list