d3d8: Check the device status in present calls.
This commit is contained in:
parent
85c203edad
commit
ee7eee5511
|
@ -661,6 +661,9 @@ static HRESULT WINAPI d3d8_device_Present(IDirect3DDevice8 *iface, const RECT *s
|
||||||
TRACE("iface %p, src_rect %s, dst_rect %s, dst_window_override %p, dirty_region %p.\n",
|
TRACE("iface %p, src_rect %s, dst_rect %s, dst_window_override %p, dirty_region %p.\n",
|
||||||
iface, wine_dbgstr_rect(src_rect), wine_dbgstr_rect(dst_rect), dst_window_override, dirty_region);
|
iface, wine_dbgstr_rect(src_rect), wine_dbgstr_rect(dst_rect), dst_window_override, dirty_region);
|
||||||
|
|
||||||
|
if (device->device_state != D3D8_DEVICE_STATE_OK)
|
||||||
|
return D3DERR_DEVICELOST;
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
hr = wined3d_device_present(device->wined3d_device, src_rect, dst_rect,
|
hr = wined3d_device_present(device->wined3d_device, src_rect, dst_rect,
|
||||||
dst_window_override, dirty_region, 0);
|
dst_window_override, dirty_region, 0);
|
||||||
|
|
|
@ -91,11 +91,15 @@ static HRESULT WINAPI d3d8_swapchain_Present(IDirect3DSwapChain8 *iface,
|
||||||
const RGNDATA *dirty_region)
|
const RGNDATA *dirty_region)
|
||||||
{
|
{
|
||||||
struct d3d8_swapchain *swapchain = impl_from_IDirect3DSwapChain8(iface);
|
struct d3d8_swapchain *swapchain = impl_from_IDirect3DSwapChain8(iface);
|
||||||
|
struct d3d8_device *device = impl_from_IDirect3DDevice8(swapchain->parent_device);
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
|
|
||||||
TRACE("iface %p, src_rect %s, dst_rect %s, dst_window_override %p, dirty_region %p.\n",
|
TRACE("iface %p, src_rect %s, dst_rect %s, dst_window_override %p, dirty_region %p.\n",
|
||||||
iface, wine_dbgstr_rect(src_rect), wine_dbgstr_rect(dst_rect), dst_window_override, dirty_region);
|
iface, wine_dbgstr_rect(src_rect), wine_dbgstr_rect(dst_rect), dst_window_override, dirty_region);
|
||||||
|
|
||||||
|
if (device->device_state != D3D8_DEVICE_STATE_OK)
|
||||||
|
return D3DERR_DEVICELOST;
|
||||||
|
|
||||||
wined3d_mutex_lock();
|
wined3d_mutex_lock();
|
||||||
hr = wined3d_swapchain_present(swapchain->wined3d_swapchain, src_rect,
|
hr = wined3d_swapchain_present(swapchain->wined3d_swapchain, src_rect,
|
||||||
dst_rect, dst_window_override, dirty_region, 0);
|
dst_rect, dst_window_override, dirty_region, 0);
|
||||||
|
|
|
@ -6283,7 +6283,7 @@ static void test_lost_device(void)
|
||||||
hr = IDirect3DDevice8_TestCooperativeLevel(device);
|
hr = IDirect3DDevice8_TestCooperativeLevel(device);
|
||||||
ok(hr == D3DERR_DEVICELOST, "Got unexpected hr %#x.\n", hr);
|
ok(hr == D3DERR_DEVICELOST, "Got unexpected hr %#x.\n", hr);
|
||||||
hr = IDirect3DDevice8_Present(device, NULL, NULL, NULL, NULL);
|
hr = IDirect3DDevice8_Present(device, NULL, NULL, NULL, NULL);
|
||||||
todo_wine ok(hr == D3DERR_DEVICELOST, "Got unexpected hr %#x.\n", hr);
|
ok(hr == D3DERR_DEVICELOST, "Got unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
ret = ShowWindow(window, SW_RESTORE);
|
ret = ShowWindow(window, SW_RESTORE);
|
||||||
ok(ret, "Failed to restore window.\n");
|
ok(ret, "Failed to restore window.\n");
|
||||||
|
@ -6292,7 +6292,7 @@ static void test_lost_device(void)
|
||||||
hr = IDirect3DDevice8_TestCooperativeLevel(device);
|
hr = IDirect3DDevice8_TestCooperativeLevel(device);
|
||||||
ok(hr == D3DERR_DEVICENOTRESET, "Got unexpected hr %#x.\n", hr);
|
ok(hr == D3DERR_DEVICENOTRESET, "Got unexpected hr %#x.\n", hr);
|
||||||
hr = IDirect3DDevice8_Present(device, NULL, NULL, NULL, NULL);
|
hr = IDirect3DDevice8_Present(device, NULL, NULL, NULL, NULL);
|
||||||
todo_wine ok(hr == D3DERR_DEVICELOST, "Got unexpected hr %#x.\n", hr);
|
ok(hr == D3DERR_DEVICELOST, "Got unexpected hr %#x.\n", hr);
|
||||||
|
|
||||||
hr = reset_device(device, window, FALSE);
|
hr = reset_device(device, window, FALSE);
|
||||||
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
|
ok(hr == D3D_OK, "Got unexpected hr %#x.\n", hr);
|
||||||
|
|
Loading…
Reference in New Issue