Commit af5634fb authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

d3d8: Use wined3d_stateblock_* methods directly in BeginStateBlock() and EndStateBlock().

parent 332fd135
...@@ -1902,7 +1902,14 @@ static HRESULT WINAPI d3d8_device_BeginStateBlock(IDirect3DDevice8 *iface) ...@@ -1902,7 +1902,14 @@ static HRESULT WINAPI d3d8_device_BeginStateBlock(IDirect3DDevice8 *iface)
TRACE("iface %p.\n", iface); TRACE("iface %p.\n", iface);
wined3d_mutex_lock(); wined3d_mutex_lock();
if (SUCCEEDED(hr = wined3d_device_begin_stateblock(device->wined3d_device, &stateblock))) if (device->recording)
{
wined3d_mutex_unlock();
WARN("Trying to begin a stateblock while recording, returning D3DERR_INBEGINSTATEBLOCK.\n");
return D3DERR_INVALIDCALL;
}
if (SUCCEEDED(hr = wined3d_stateblock_create(device->wined3d_device, WINED3D_SBT_RECORDED, &stateblock)))
device->update_state = device->recording = stateblock; device->update_state = device->recording = stateblock;
wined3d_mutex_unlock(); wined3d_mutex_unlock();
...@@ -1913,7 +1920,6 @@ static HRESULT WINAPI d3d8_device_EndStateBlock(IDirect3DDevice8 *iface, DWORD * ...@@ -1913,7 +1920,6 @@ static HRESULT WINAPI d3d8_device_EndStateBlock(IDirect3DDevice8 *iface, DWORD *
{ {
struct d3d8_device *device = impl_from_IDirect3DDevice8(iface); struct d3d8_device *device = impl_from_IDirect3DDevice8(iface);
struct wined3d_stateblock *stateblock; struct wined3d_stateblock *stateblock;
HRESULT hr;
TRACE("iface %p, token %p.\n", iface, token); TRACE("iface %p, token %p.\n", iface, token);
...@@ -1921,14 +1927,14 @@ static HRESULT WINAPI d3d8_device_EndStateBlock(IDirect3DDevice8 *iface, DWORD * ...@@ -1921,14 +1927,14 @@ static HRESULT WINAPI d3d8_device_EndStateBlock(IDirect3DDevice8 *iface, DWORD *
* of memory later and cause locking problems) * of memory later and cause locking problems)
*/ */
wined3d_mutex_lock(); wined3d_mutex_lock();
hr = wined3d_device_end_stateblock(device->wined3d_device); if (!device->recording)
if (FAILED(hr))
{ {
WARN("Failed to end the state block, %#x.\n", hr);
wined3d_mutex_unlock(); wined3d_mutex_unlock();
return hr; WARN("Trying to end a stateblock, but no stateblock is being recorded.\n");
return D3DERR_INVALIDCALL;
} }
stateblock = device->recording; stateblock = device->recording;
wined3d_stateblock_init_contained_states(stateblock);
device->recording = NULL; device->recording = NULL;
device->update_state = device->state; device->update_state = device->state;
...@@ -1947,7 +1953,7 @@ static HRESULT WINAPI d3d8_device_EndStateBlock(IDirect3DDevice8 *iface, DWORD * ...@@ -1947,7 +1953,7 @@ static HRESULT WINAPI d3d8_device_EndStateBlock(IDirect3DDevice8 *iface, DWORD *
TRACE("Returning %#x (%p).\n", *token, stateblock); TRACE("Returning %#x (%p).\n", *token, stateblock);
return hr; return D3D_OK;
} }
static HRESULT WINAPI d3d8_device_ApplyStateBlock(IDirect3DDevice8 *iface, DWORD token) static HRESULT WINAPI d3d8_device_ApplyStateBlock(IDirect3DDevice8 *iface, DWORD token)
......
...@@ -9665,20 +9665,12 @@ static void test_draw_primitive(void) ...@@ -9665,20 +9665,12 @@ static void test_draw_primitive(void)
hr = IDirect3DDevice8_GetStreamSource(device, 0, &current_vb, &stride); hr = IDirect3DDevice8_GetStreamSource(device, 0, &current_vb, &stride);
ok(SUCCEEDED(hr), "GetStreamSource failed, hr %#x.\n", hr); ok(SUCCEEDED(hr), "GetStreamSource failed, hr %#x.\n", hr);
todo_wine {
ok(!current_vb, "Unexpected vb %p.\n", current_vb); ok(!current_vb, "Unexpected vb %p.\n", current_vb);
ok(!stride, "Unexpected stride %u.\n", stride); ok(!stride, "Unexpected stride %u.\n", stride);
}
if (current_vb)
IDirect3DVertexBuffer8_Release(current_vb);
hr = IDirect3DDevice8_GetIndices(device, &current_ib, &base_vertex_index); hr = IDirect3DDevice8_GetIndices(device, &current_ib, &base_vertex_index);
ok(SUCCEEDED(hr), "GetIndices failed, hr %#x.\n", hr); ok(SUCCEEDED(hr), "GetIndices failed, hr %#x.\n", hr);
todo_wine {
ok(!current_ib, "Unexpected index buffer %p.\n", current_ib); ok(!current_ib, "Unexpected index buffer %p.\n", current_ib);
ok(!base_vertex_index, "Unexpected base vertex index %u.\n", base_vertex_index); ok(!base_vertex_index, "Unexpected base vertex index %u.\n", base_vertex_index);
}
if (current_ib)
IDirect3DIndexBuffer8_Release(current_ib);
hr = IDirect3DDevice8_CaptureStateBlock(device, stateblock); hr = IDirect3DDevice8_CaptureStateBlock(device, stateblock);
ok(SUCCEEDED(hr), "Capture failed, hr %#x.\n", hr); ok(SUCCEEDED(hr), "Capture failed, hr %#x.\n", hr);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment