wined3d: Pass the client stateblock state to wined3d stateblock methods.
Signed-off-by: Zebediah Figura <z.figura12@gmail.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
3f918c9479
commit
da6ea7ddc0
|
@ -1909,7 +1909,7 @@ static HRESULT WINAPI d3d8_device_BeginStateBlock(IDirect3DDevice8 *iface)
|
|||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr = wined3d_stateblock_create(device->wined3d_device, WINED3D_SBT_RECORDED, &stateblock)))
|
||||
if (SUCCEEDED(hr = wined3d_stateblock_create(device->wined3d_device, NULL, WINED3D_SBT_RECORDED, &stateblock)))
|
||||
device->update_state = device->recording = stateblock;
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
|
@ -1985,7 +1985,7 @@ static HRESULT WINAPI d3d8_device_ApplyStateBlock(IDirect3DDevice8 *iface, DWORD
|
|||
wined3d_mutex_unlock();
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
wined3d_stateblock_apply(stateblock);
|
||||
wined3d_stateblock_apply(stateblock, device->state);
|
||||
device->sysmem_vb = 0;
|
||||
for (i = 0; i < D3D8_MAX_STREAMS; ++i)
|
||||
{
|
||||
|
@ -2025,7 +2025,7 @@ static HRESULT WINAPI d3d8_device_CaptureStateBlock(IDirect3DDevice8 *iface, DWO
|
|||
wined3d_mutex_unlock();
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
wined3d_stateblock_capture(stateblock);
|
||||
wined3d_stateblock_capture(stateblock, device->state);
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
return D3D_OK;
|
||||
|
@ -2081,7 +2081,7 @@ static HRESULT WINAPI d3d8_device_CreateStateBlock(IDirect3DDevice8 *iface,
|
|||
WARN("Trying to create a stateblock while recording, returning D3DERR_INVALIDCALL.\n");
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
hr = wined3d_stateblock_create(device->wined3d_device, (enum wined3d_stateblock_type)type, &stateblock);
|
||||
hr = wined3d_stateblock_create(device->wined3d_device, device->state, (enum wined3d_stateblock_type)type, &stateblock);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
wined3d_mutex_unlock();
|
||||
|
@ -3685,7 +3685,7 @@ HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wine
|
|||
return hr;
|
||||
}
|
||||
|
||||
if (FAILED(hr = wined3d_stateblock_create(device->wined3d_device, WINED3D_SBT_PRIMARY, &device->state)))
|
||||
if (FAILED(hr = wined3d_stateblock_create(device->wined3d_device, NULL, WINED3D_SBT_PRIMARY, &device->state)))
|
||||
{
|
||||
ERR("Failed to create primary stateblock, hr %#x.\n", hr);
|
||||
wined3d_device_decref(device->wined3d_device);
|
||||
|
|
|
@ -2407,7 +2407,7 @@ static HRESULT WINAPI d3d9_device_BeginStateBlock(IDirect3DDevice9Ex *iface)
|
|||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
if (SUCCEEDED(hr = wined3d_stateblock_create(device->wined3d_device, WINED3D_SBT_RECORDED, &stateblock)))
|
||||
if (SUCCEEDED(hr = wined3d_stateblock_create(device->wined3d_device, device->state, WINED3D_SBT_RECORDED, &stateblock)))
|
||||
device->update_state = device->recording = stateblock;
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
|
@ -4593,7 +4593,7 @@ HRESULT device_init(struct d3d9_device *device, struct d3d9 *parent, struct wine
|
|||
if (flags & D3DCREATE_ADAPTERGROUP_DEVICE)
|
||||
count = caps.NumberOfAdaptersInGroup;
|
||||
|
||||
if (FAILED(hr = wined3d_stateblock_create(device->wined3d_device, WINED3D_SBT_PRIMARY, &device->state)))
|
||||
if (FAILED(hr = wined3d_stateblock_create(device->wined3d_device, NULL, WINED3D_SBT_PRIMARY, &device->state)))
|
||||
{
|
||||
ERR("Failed to create the primary stateblock, hr %#x.\n", hr);
|
||||
wined3d_device_decref(device->wined3d_device);
|
||||
|
|
|
@ -106,7 +106,7 @@ static HRESULT WINAPI d3d9_stateblock_Capture(IDirect3DStateBlock9 *iface)
|
|||
WARN("Trying to capture stateblock while recording, returning D3DERR_INVALIDCALL.\n");
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
wined3d_stateblock_capture(stateblock->wined3d_stateblock);
|
||||
wined3d_stateblock_capture(stateblock->wined3d_stateblock, device->state);
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
return D3D_OK;
|
||||
|
@ -134,7 +134,7 @@ static HRESULT WINAPI d3d9_stateblock_Apply(IDirect3DStateBlock9 *iface)
|
|||
WARN("Trying to apply stateblock while recording, returning D3DERR_INVALIDCALL.\n");
|
||||
return D3DERR_INVALIDCALL;
|
||||
}
|
||||
wined3d_stateblock_apply(stateblock->wined3d_stateblock);
|
||||
wined3d_stateblock_apply(stateblock->wined3d_stateblock, device->state);
|
||||
device->sysmem_vb = 0;
|
||||
for (i = 0; i < D3D9_MAX_STREAMS; ++i)
|
||||
{
|
||||
|
@ -193,7 +193,7 @@ HRESULT stateblock_init(struct d3d9_stateblock *stateblock, struct d3d9_device *
|
|||
else
|
||||
{
|
||||
wined3d_mutex_lock();
|
||||
hr = wined3d_stateblock_create(device->wined3d_device,
|
||||
hr = wined3d_stateblock_create(device->wined3d_device, device->state,
|
||||
(enum wined3d_stateblock_type)type, &stateblock->wined3d_stateblock);
|
||||
wined3d_mutex_unlock();
|
||||
if (FAILED(hr))
|
||||
|
|
|
@ -900,7 +900,8 @@ static HRESULT ddraw_set_cooperative_level(struct ddraw *ddraw, HWND window,
|
|||
{
|
||||
restore_state = TRUE;
|
||||
|
||||
if (FAILED(hr = wined3d_stateblock_create(ddraw->wined3d_device, WINED3D_SBT_ALL, &stateblock)))
|
||||
if (FAILED(hr = wined3d_stateblock_create(ddraw->wined3d_device,
|
||||
ddraw->state, WINED3D_SBT_ALL, &stateblock)))
|
||||
{
|
||||
ERR("Failed to create stateblock, hr %#x.\n", hr);
|
||||
goto done;
|
||||
|
@ -937,7 +938,7 @@ static HRESULT ddraw_set_cooperative_level(struct ddraw *ddraw, HWND window,
|
|||
wined3d_rendertarget_view_decref(rtv);
|
||||
}
|
||||
|
||||
wined3d_stateblock_apply(stateblock);
|
||||
wined3d_stateblock_apply(stateblock, ddraw->state);
|
||||
wined3d_stateblock_decref(stateblock);
|
||||
}
|
||||
|
||||
|
@ -5026,7 +5027,7 @@ HRESULT ddraw_init(struct ddraw *ddraw, DWORD flags, enum wined3d_device_type de
|
|||
|
||||
list_init(&ddraw->surface_list);
|
||||
|
||||
if (FAILED(hr = wined3d_stateblock_create(ddraw->wined3d_device, WINED3D_SBT_PRIMARY, &ddraw->state)))
|
||||
if (FAILED(hr = wined3d_stateblock_create(ddraw->wined3d_device, NULL, WINED3D_SBT_PRIMARY, &ddraw->state)))
|
||||
{
|
||||
ERR("Failed to create the primary stateblock, hr %#x.\n", hr);
|
||||
wined3d_device_decref(ddraw->wined3d_device);
|
||||
|
|
|
@ -5642,7 +5642,7 @@ static HRESULT d3d_device7_BeginStateBlock(IDirect3DDevice7 *iface)
|
|||
WARN("Trying to begin a stateblock while recording, returning D3DERR_INBEGINSTATEBLOCK.\n");
|
||||
return D3DERR_INBEGINSTATEBLOCK;
|
||||
}
|
||||
if (SUCCEEDED(hr = wined3d_stateblock_create(device->wined3d_device, WINED3D_SBT_RECORDED, &stateblock)))
|
||||
if (SUCCEEDED(hr = wined3d_stateblock_create(device->wined3d_device, NULL, WINED3D_SBT_RECORDED, &stateblock)))
|
||||
device->update_state = device->recording = stateblock;
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
|
@ -5822,7 +5822,7 @@ static HRESULT d3d_device7_ApplyStateBlock(IDirect3DDevice7 *iface, DWORD stateb
|
|||
return D3DERR_INVALIDSTATEBLOCK;
|
||||
}
|
||||
|
||||
wined3d_stateblock_apply(wined3d_sb);
|
||||
wined3d_stateblock_apply(wined3d_sb, device->state);
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
return D3D_OK;
|
||||
|
@ -5882,7 +5882,7 @@ static HRESULT d3d_device7_CaptureStateBlock(IDirect3DDevice7 *iface, DWORD stat
|
|||
return D3DERR_INVALIDSTATEBLOCK;
|
||||
}
|
||||
|
||||
wined3d_stateblock_capture(wined3d_sb);
|
||||
wined3d_stateblock_capture(wined3d_sb, device->state);
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
return D3D_OK;
|
||||
|
@ -6012,7 +6012,7 @@ static HRESULT d3d_device7_CreateStateBlock(IDirect3DDevice7 *iface,
|
|||
}
|
||||
|
||||
/* The D3DSTATEBLOCKTYPE enum is fine here. */
|
||||
hr = wined3d_stateblock_create(device->wined3d_device, type, &wined3d_sb);
|
||||
hr = wined3d_stateblock_create(device->wined3d_device, device->state, type, &wined3d_sb);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
WARN("Failed to create stateblock, hr %#x.\n", hr);
|
||||
|
|
|
@ -395,7 +395,7 @@ void CDECL wined3d_stateblock_init_contained_states(struct wined3d_stateblock *s
|
|||
}
|
||||
}
|
||||
|
||||
static void stateblock_init_lights(struct list *dst_map, struct list *src_map)
|
||||
static void stateblock_init_lights(struct list *dst_map, const struct list *src_map)
|
||||
{
|
||||
unsigned int i;
|
||||
|
||||
|
@ -757,13 +757,14 @@ static void wined3d_state_record_lights(struct wined3d_light_state *dst_state,
|
|||
}
|
||||
}
|
||||
|
||||
void CDECL wined3d_stateblock_capture(struct wined3d_stateblock *stateblock)
|
||||
void CDECL wined3d_stateblock_capture(struct wined3d_stateblock *stateblock,
|
||||
const struct wined3d_stateblock *device_state)
|
||||
{
|
||||
const struct wined3d_stateblock_state *state = &stateblock->device->stateblock_state;
|
||||
const struct wined3d_stateblock_state *state = &device_state->stateblock_state;
|
||||
unsigned int i;
|
||||
DWORD map;
|
||||
|
||||
TRACE("stateblock %p.\n", stateblock);
|
||||
TRACE("stateblock %p, device_state %p.\n", stateblock, device_state);
|
||||
|
||||
if (stateblock->changed.vertexShader && stateblock->stateblock_state.vs != state->vs)
|
||||
{
|
||||
|
@ -1029,14 +1030,15 @@ void CDECL wined3d_stateblock_capture(struct wined3d_stateblock *stateblock)
|
|||
TRACE("Capture done.\n");
|
||||
}
|
||||
|
||||
void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock)
|
||||
void CDECL wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock,
|
||||
struct wined3d_stateblock *device_state)
|
||||
{
|
||||
struct wined3d_stateblock_state *state = &stateblock->device->stateblock_state;
|
||||
struct wined3d_stateblock_state *state = &device_state->stateblock_state;
|
||||
struct wined3d_device *device = stateblock->device;
|
||||
unsigned int i;
|
||||
DWORD map;
|
||||
|
||||
TRACE("Applying stateblock %p to device %p.\n", stateblock, device);
|
||||
TRACE("stateblock %p, device_state %p.\n", stateblock, device_state);
|
||||
|
||||
if (stateblock->changed.vertexShader)
|
||||
{
|
||||
|
@ -1989,7 +1991,7 @@ void wined3d_stateblock_state_init(struct wined3d_stateblock_state *state,
|
|||
|
||||
}
|
||||
|
||||
static HRESULT stateblock_init(struct wined3d_stateblock *stateblock,
|
||||
static HRESULT stateblock_init(struct wined3d_stateblock *stateblock, const struct wined3d_stateblock *device_state,
|
||||
struct wined3d_device *device, enum wined3d_stateblock_type type)
|
||||
{
|
||||
const struct wined3d_d3d_info *d3d_info = &device->adapter->d3d_info;
|
||||
|
@ -2010,7 +2012,7 @@ static HRESULT stateblock_init(struct wined3d_stateblock *stateblock,
|
|||
{
|
||||
case WINED3D_SBT_ALL:
|
||||
stateblock_init_lights(stateblock->stateblock_state.light_state.light_map,
|
||||
device->stateblock_state.light_state.light_map);
|
||||
device_state->stateblock_state.light_state.light_map);
|
||||
stateblock_savedstates_set_all(&stateblock->changed,
|
||||
d3d_info->limits.vs_uniform_count, d3d_info->limits.ps_uniform_count);
|
||||
break;
|
||||
|
@ -2022,7 +2024,7 @@ static HRESULT stateblock_init(struct wined3d_stateblock *stateblock,
|
|||
|
||||
case WINED3D_SBT_VERTEX_STATE:
|
||||
stateblock_init_lights(stateblock->stateblock_state.light_state.light_map,
|
||||
device->stateblock_state.light_state.light_map);
|
||||
device_state->stateblock_state.light_state.light_map);
|
||||
stateblock_savedstates_set_vertex(&stateblock->changed,
|
||||
d3d_info->limits.vs_uniform_count);
|
||||
break;
|
||||
|
@ -2033,7 +2035,7 @@ static HRESULT stateblock_init(struct wined3d_stateblock *stateblock,
|
|||
}
|
||||
|
||||
wined3d_stateblock_init_contained_states(stateblock);
|
||||
wined3d_stateblock_capture(stateblock);
|
||||
wined3d_stateblock_capture(stateblock, device_state);
|
||||
|
||||
/* According to the tests, stream offset is not updated in the captured state if
|
||||
* the state was captured on state block creation. This is not the case for
|
||||
|
@ -2044,19 +2046,19 @@ static HRESULT stateblock_init(struct wined3d_stateblock *stateblock,
|
|||
return WINED3D_OK;
|
||||
}
|
||||
|
||||
HRESULT CDECL wined3d_stateblock_create(struct wined3d_device *device,
|
||||
HRESULT CDECL wined3d_stateblock_create(struct wined3d_device *device, const struct wined3d_stateblock *device_state,
|
||||
enum wined3d_stateblock_type type, struct wined3d_stateblock **stateblock)
|
||||
{
|
||||
struct wined3d_stateblock *object;
|
||||
HRESULT hr;
|
||||
|
||||
TRACE("device %p, type %#x, stateblock %p.\n",
|
||||
device, type, stateblock);
|
||||
TRACE("device %p, device_state %p, type %#x, stateblock %p.\n",
|
||||
device, device_state, type, stateblock);
|
||||
|
||||
if (!(object = heap_alloc_zero(sizeof(*object))))
|
||||
return E_OUTOFMEMORY;
|
||||
|
||||
hr = stateblock_init(object, device, type);
|
||||
hr = stateblock_init(object, device_state, device, type);
|
||||
if (FAILED(hr))
|
||||
{
|
||||
WARN("Failed to initialize stateblock, hr %#x.\n", hr);
|
||||
|
|
|
@ -255,9 +255,9 @@
|
|||
@ cdecl wined3d_shader_resource_view_get_parent(ptr)
|
||||
@ cdecl wined3d_shader_resource_view_incref(ptr)
|
||||
|
||||
@ cdecl wined3d_stateblock_apply(ptr)
|
||||
@ cdecl wined3d_stateblock_capture(ptr)
|
||||
@ cdecl wined3d_stateblock_create(ptr long ptr)
|
||||
@ cdecl wined3d_stateblock_apply(ptr ptr)
|
||||
@ cdecl wined3d_stateblock_capture(ptr ptr)
|
||||
@ cdecl wined3d_stateblock_create(ptr ptr long ptr)
|
||||
@ cdecl wined3d_stateblock_decref(ptr)
|
||||
@ cdecl wined3d_stateblock_incref(ptr)
|
||||
@ cdecl wined3d_stateblock_init_contained_states(ptr)
|
||||
|
|
|
@ -2659,9 +2659,11 @@ void __cdecl wined3d_shader_resource_view_generate_mipmaps(struct wined3d_shader
|
|||
void * __cdecl wined3d_shader_resource_view_get_parent(const struct wined3d_shader_resource_view *view);
|
||||
ULONG __cdecl wined3d_shader_resource_view_incref(struct wined3d_shader_resource_view *view);
|
||||
|
||||
void __cdecl wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock);
|
||||
void __cdecl wined3d_stateblock_capture(struct wined3d_stateblock *stateblock);
|
||||
HRESULT __cdecl wined3d_stateblock_create(struct wined3d_device *device,
|
||||
void __cdecl wined3d_stateblock_apply(const struct wined3d_stateblock *stateblock,
|
||||
struct wined3d_stateblock *device_state);
|
||||
void __cdecl wined3d_stateblock_capture(struct wined3d_stateblock *stateblock,
|
||||
const struct wined3d_stateblock *device_state);
|
||||
HRESULT __cdecl wined3d_stateblock_create(struct wined3d_device *device, const struct wined3d_stateblock *device_state,
|
||||
enum wined3d_stateblock_type type, struct wined3d_stateblock **stateblock);
|
||||
ULONG __cdecl wined3d_stateblock_decref(struct wined3d_stateblock *stateblock);
|
||||
ULONG __cdecl wined3d_stateblock_incref(struct wined3d_stateblock *stateblock);
|
||||
|
|
Loading…
Reference in New Issue