Module: wine Branch: master Commit: 8a7744b06ec3d243a0f39bc7f8bbfc5705a6e39f URL: http://source.winehq.org/git/wine.git/?a=commit;h=8a7744b06ec3d243a0f39bc7f8...
Author: Henri Verbeet hverbeet@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