[PATCH 2/5] wined3d: Setup/restore fullscreen window state inside wined3d.
Henri Verbeet
hverbeet at codeweavers.com
Mon Jul 29 06:30:52 CDT 2019
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
---
dlls/d3d8/device.c | 10 +---------
dlls/d3d9/device.c | 10 ----------
dlls/ddraw/ddraw.c | 15 ---------------
dlls/wined3d/device.c | 6 +++---
dlls/wined3d/swapchain.c | 27 +++++++++++++++++++--------
dlls/wined3d/wined3d.spec | 2 --
dlls/wined3d/wined3d_private.h | 4 ++++
include/wine/wined3d.h | 4 ----
8 files changed, 27 insertions(+), 51 deletions(-)
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index 36197e3b31f..b5436241a9e 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -3602,10 +3602,8 @@ HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wine
if (!parameters->Windowed)
{
- HWND device_window = parameters->hDeviceWindow;
-
if (!focus_window)
- focus_window = device_window;
+ focus_window = parameters->hDeviceWindow;
if (FAILED(hr = wined3d_device_acquire_focus_window(device->wined3d_device, focus_window)))
{
ERR("Failed to acquire focus window, hr %#x.\n", hr);
@@ -3614,12 +3612,6 @@ HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wine
heap_free(device->handle_table.entries);
return hr;
}
-
- if (!device_window)
- device_window = focus_window;
- wined3d_device_setup_fullscreen_window(device->wined3d_device, device_window,
- parameters->BackBufferWidth,
- parameters->BackBufferHeight);
}
if (flags & D3DCREATE_MULTITHREADED)
diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c
index 8f94eb0698f..dc3363bab8c 100644
--- a/dlls/d3d9/device.c
+++ b/dlls/d3d9/device.c
@@ -4503,16 +4503,6 @@ HRESULT device_init(struct d3d9_device *device, struct d3d9 *parent, struct wine
wined3d_mutex_unlock();
return hr;
}
-
- for (i = 0; i < count; ++i)
- {
- HWND device_window = parameters[i].hDeviceWindow;
-
- if (!device_window) device_window = focus_window;
- wined3d_device_setup_fullscreen_window(device->wined3d_device, device_window,
- parameters[i].BackBufferWidth,
- parameters[i].BackBufferHeight);
- }
}
if (!(swapchain_desc = heap_alloc(sizeof(*swapchain_desc) * count)))
diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c
index 076289be094..2c7619016e1 100644
--- a/dlls/ddraw/ddraw.c
+++ b/dlls/ddraw/ddraw.c
@@ -884,21 +884,6 @@ static HRESULT ddraw_set_cooperative_level(struct ddraw *ddraw, HWND window,
ddraw->focuswindow = NULL;
}
- if ((cooplevel & DDSCL_FULLSCREEN) != (ddraw->cooperative_level & DDSCL_FULLSCREEN) || window != ddraw->dest_window)
- {
- if (ddraw->cooperative_level & DDSCL_FULLSCREEN)
- wined3d_device_restore_fullscreen_window(ddraw->wined3d_device, ddraw->dest_window, NULL);
-
- if (cooplevel & DDSCL_FULLSCREEN)
- {
- struct wined3d_display_mode display_mode;
-
- wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &display_mode, NULL);
- wined3d_device_setup_fullscreen_window(ddraw->wined3d_device, window,
- display_mode.width, display_mode.height);
- }
- }
-
if ((cooplevel & DDSCL_EXCLUSIVE) && exclusive_window != window)
{
ddraw->device_state = DDRAW_DEVICE_STATE_NOT_RESTORED;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 2c768514c46..343e25b482c 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -927,7 +927,7 @@ static LONG fullscreen_exstyle(LONG exstyle)
return exstyle;
}
-HRESULT CDECL wined3d_device_setup_fullscreen_window(struct wined3d_device *device,
+HRESULT wined3d_device_setup_fullscreen_window(struct wined3d_device *device,
HWND window, unsigned int w, unsigned int h)
{
BOOL filter_messages;
@@ -968,8 +968,8 @@ HRESULT CDECL wined3d_device_setup_fullscreen_window(struct wined3d_device *devi
return WINED3D_OK;
}
-void CDECL wined3d_device_restore_fullscreen_window(struct wined3d_device *device, HWND window,
- const RECT *window_rect)
+void wined3d_device_restore_fullscreen_window(struct wined3d_device *device,
+ HWND window, const RECT *window_rect)
{
unsigned int window_pos_flags = SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE;
BOOL filter_messages;
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index bf0c308f0d3..ac2afa27431 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -75,17 +75,24 @@ static void swapchain_cleanup(struct wined3d_swapchain *swapchain)
* desktop resolution. In case of d3d7 this will be a NOP because ddraw
* sets the resolution before starting up Direct3D, thus orig_width and
* orig_height will be equal to the modes in the presentation params. */
- if (!swapchain->desc.windowed && swapchain->desc.auto_restore_display_mode)
+ if (!swapchain->desc.windowed)
{
- if (FAILED(hr = wined3d_set_adapter_display_mode(swapchain->device->wined3d,
- swapchain->device->adapter->ordinal, &swapchain->original_mode)))
- ERR("Failed to restore display mode, hr %#x.\n", hr);
+ if (swapchain->desc.auto_restore_display_mode)
+ {
+ if (FAILED(hr = wined3d_set_adapter_display_mode(swapchain->device->wined3d,
+ swapchain->device->adapter->ordinal, &swapchain->original_mode)))
+ ERR("Failed to restore display mode, hr %#x.\n", hr);
- if (swapchain->desc.flags & WINED3D_SWAPCHAIN_RESTORE_WINDOW_RECT)
+ if (swapchain->desc.flags & WINED3D_SWAPCHAIN_RESTORE_WINDOW_RECT)
+ {
+ wined3d_device_restore_fullscreen_window(swapchain->device, swapchain->device_window,
+ &swapchain->original_window_rect);
+ wined3d_device_release_focus_window(swapchain->device);
+ }
+ }
+ else
{
- wined3d_device_restore_fullscreen_window(swapchain->device, swapchain->device_window,
- &swapchain->original_window_rect);
- wined3d_device_release_focus_window(swapchain->device);
+ wined3d_device_restore_fullscreen_window(swapchain->device, swapchain->device_window, NULL);
}
}
@@ -802,6 +809,10 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
TRACE("Updating format to %s.\n", debug_d3dformat(swapchain->original_mode.format_id));
}
}
+ else
+ {
+ wined3d_device_setup_fullscreen_window(device, window, desc->backbuffer_width, desc->backbuffer_height);
+ }
swapchain->desc = *desc;
wined3d_swapchain_apply_sample_count_override(swapchain, swapchain->desc.backbuffer_format,
&swapchain->desc.multisample_type, &swapchain->desc.multisample_quality);
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 59f99c91e07..8b36753f458 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -127,7 +127,6 @@
@ cdecl wined3d_device_release_focus_window(ptr)
@ cdecl wined3d_device_reset(ptr ptr ptr ptr long)
@ cdecl wined3d_device_resolve_sub_resource(ptr ptr long ptr long long)
-@ cdecl wined3d_device_restore_fullscreen_window(ptr ptr ptr)
@ cdecl wined3d_device_set_base_vertex_index(ptr long)
@ cdecl wined3d_device_set_blend_state(ptr ptr ptr)
@ cdecl wined3d_device_set_clip_plane(ptr long ptr)
@@ -187,7 +186,6 @@
@ cdecl wined3d_device_set_vs_consts_i(ptr long long ptr)
@ cdecl wined3d_device_set_vs_resource_view(ptr long ptr)
@ cdecl wined3d_device_set_vs_sampler(ptr long ptr)
-@ cdecl wined3d_device_setup_fullscreen_window(ptr ptr long long)
@ cdecl wined3d_device_show_cursor(ptr long)
@ cdecl wined3d_device_update_sub_resource(ptr ptr long ptr ptr long long long)
@ cdecl wined3d_device_update_texture(ptr ptr ptr)
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index dda93a33453..9d429a8d893 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -3255,8 +3255,12 @@ LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL
void device_resource_add(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void device_resource_released(struct wined3d_device *device, struct wined3d_resource *resource) DECLSPEC_HIDDEN;
void device_invalidate_state(const struct wined3d_device *device, DWORD state) DECLSPEC_HIDDEN;
+void wined3d_device_restore_fullscreen_window(struct wined3d_device *device,
+ HWND window, const RECT *window_rect) DECLSPEC_HIDDEN;
HRESULT wined3d_device_set_implicit_swapchain(struct wined3d_device *device,
struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
+HRESULT wined3d_device_setup_fullscreen_window(struct wined3d_device *device,
+ HWND window, unsigned int w, unsigned int h) DECLSPEC_HIDDEN;
void wined3d_device_uninit_3d(struct wined3d_device *device) DECLSPEC_HIDDEN;
struct wined3d_device_no3d
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 9a698bc8082..c71bb9c54c7 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2378,8 +2378,6 @@ void __cdecl wined3d_device_resolve_sub_resource(struct wined3d_device *device,
struct wined3d_resource *dst_resource, unsigned int dst_sub_resource_idx,
struct wined3d_resource *src_resource, unsigned int src_sub_resource_idx,
enum wined3d_format_id format_id);
-void __cdecl wined3d_device_restore_fullscreen_window(struct wined3d_device *device, HWND window,
- const RECT *window_rect);
void __cdecl wined3d_device_set_base_vertex_index(struct wined3d_device *device, INT base_index);
void __cdecl wined3d_device_set_blend_state(struct wined3d_device *device, struct wined3d_blend_state *blend_state,
const struct wined3d_color *blend_factor);
@@ -2479,8 +2477,6 @@ HRESULT __cdecl wined3d_device_set_vs_consts_i(struct wined3d_device *device,
void __cdecl wined3d_device_set_vs_resource_view(struct wined3d_device *device,
UINT idx, struct wined3d_shader_resource_view *view);
void __cdecl wined3d_device_set_vs_sampler(struct wined3d_device *device, UINT idx, struct wined3d_sampler *sampler);
-HRESULT __cdecl wined3d_device_setup_fullscreen_window(struct wined3d_device *device,
- HWND window, unsigned int w, unsigned int h);
BOOL __cdecl wined3d_device_show_cursor(struct wined3d_device *device, BOOL show);
void __cdecl wined3d_device_update_sub_resource(struct wined3d_device *device, struct wined3d_resource *resource,
unsigned int sub_resource_idx, const struct wined3d_box *box, const void *data, unsigned int row_pitch,
--
2.11.0
More information about the wine-devel
mailing list