[PATCH 5/7] wined3d: Add swapchain parameter to wined3d_swapchain_set_fullscreen.
Rémi Bernon
rbernon at codeweavers.com
Sat Mar 7 04:29:24 CST 2020
We need that in the next patch to have access to swapchain_ops.
This parameter may be NULL if the swapchain is not actually a wined3d
swapchain (in the case of d3d12 swapchain).
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
dlls/dxgi/swapchain.c | 11 ++++++-----
dlls/wined3d/device.c | 4 ++--
dlls/wined3d/swapchain.c | 17 +++++++++--------
dlls/wined3d/wined3d.spec | 4 ++--
dlls/wined3d/wined3d_main.c | 2 +-
dlls/wined3d/wined3d_private.h | 4 ++--
include/wine/wined3d.h | 2 +-
7 files changed, 23 insertions(+), 21 deletions(-)
diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c
index b86a79a94cf..b4497eb257f 100644
--- a/dlls/dxgi/swapchain.c
+++ b/dlls/dxgi/swapchain.c
@@ -153,7 +153,8 @@ static HRESULT dxgi_get_output_from_window(IDXGIAdapter *adapter, HWND window, I
}
static HRESULT dxgi_swapchain_set_fullscreen_state(struct wined3d_swapchain_state *state,
- const struct wined3d_swapchain_desc *swapchain_desc, IDXGIOutput *output)
+ const struct wined3d_swapchain_desc *swapchain_desc, IDXGIOutput *output,
+ struct wined3d_swapchain *swapchain)
{
struct dxgi_output *dxgi_output;
HRESULT hr;
@@ -162,7 +163,7 @@ static HRESULT dxgi_swapchain_set_fullscreen_state(struct wined3d_swapchain_stat
wined3d_mutex_lock();
hr = wined3d_swapchain_state_set_fullscreen(state, swapchain_desc,
- dxgi_output->wined3d_output, NULL);
+ dxgi_output->wined3d_output, NULL, swapchain);
wined3d_mutex_unlock();
return hr;
@@ -431,7 +432,7 @@ static HRESULT STDMETHODCALLTYPE DECLSPEC_HOTPATCH d3d11_swapchain_SetFullscreen
state = wined3d_swapchain_get_state(swapchain->wined3d_swapchain);
wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &swapchain_desc);
swapchain_desc.windowed = !fullscreen;
- hr = dxgi_swapchain_set_fullscreen_state(state, &swapchain_desc, target);
+ hr = dxgi_swapchain_set_fullscreen_state(state, &swapchain_desc, target, swapchain->wined3d_swapchain);
wined3d_mutex_unlock();
if (FAILED(hr))
{
@@ -899,7 +900,7 @@ HRESULT d3d11_swapchain_init(struct d3d11_swapchain *swapchain, struct dxgi_devi
goto cleanup;
}
- if (FAILED(hr = dxgi_swapchain_set_fullscreen_state(state, desc, swapchain->target)))
+ if (FAILED(hr = dxgi_swapchain_set_fullscreen_state(state, desc, swapchain->target, swapchain->wined3d_swapchain)))
{
WARN("Failed to set fullscreen state, hr %#x.\n", hr);
IDXGIOutput_Release(swapchain->target);
@@ -2237,7 +2238,7 @@ static HRESULT STDMETHODCALLTYPE DECLSPEC_HOTPATCH d3d12_swapchain_SetFullscreen
goto fail;
wined3d_mutex_lock();
wined3d_desc.windowed = !fullscreen;
- hr = dxgi_swapchain_set_fullscreen_state(swapchain->state, &wined3d_desc, target);
+ hr = dxgi_swapchain_set_fullscreen_state(swapchain->state, &wined3d_desc, target, NULL);
wined3d_mutex_unlock();
if (FAILED(hr))
goto fail;
diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c
index 407dd20469e..4bd34938117 100644
--- a/dlls/wined3d/device.c
+++ b/dlls/wined3d/device.c
@@ -5156,7 +5156,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
return E_FAIL;
}
if (FAILED(hr = wined3d_swapchain_state_set_fullscreen(&swapchain->state,
- swapchain_desc, output, mode)))
+ swapchain_desc, output, mode, swapchain)))
return hr;
/* Switch from fullscreen to windowed. */
@@ -5174,7 +5174,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device,
swapchain_state->style = 0;
swapchain_state->exstyle = 0;
wined3d_swapchain_state_setup_fullscreen(swapchain_state, swapchain_state->device_window,
- swapchain_desc->backbuffer_width, swapchain_desc->backbuffer_height);
+ swapchain_desc->backbuffer_width, swapchain_desc->backbuffer_height, swapchain);
swapchain_state->style = style;
swapchain_state->exstyle = exstyle;
}
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index c0eb25ffb66..65c5d34def7 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -80,13 +80,14 @@ void wined3d_swapchain_cleanup(struct wined3d_swapchain *swapchain)
if (swapchain->state.desc.flags & WINED3D_SWAPCHAIN_RESTORE_WINDOW_RECT)
{
wined3d_swapchain_state_restore_from_fullscreen(&swapchain->state,
- swapchain->state.device_window, &swapchain->state.original_window_rect);
+ swapchain->state.device_window, &swapchain->state.original_window_rect, swapchain);
wined3d_device_release_focus_window(swapchain->device);
}
}
else
{
- wined3d_swapchain_state_restore_from_fullscreen(&swapchain->state, swapchain->state.device_window, NULL);
+ wined3d_swapchain_state_restore_from_fullscreen(&swapchain->state, swapchain->state.device_window, NULL,
+ swapchain);
}
}
}
@@ -923,7 +924,7 @@ static HRESULT wined3d_swapchain_init(struct wined3d_swapchain *swapchain, struc
else
{
wined3d_swapchain_state_setup_fullscreen(&swapchain->state,
- window, desc->backbuffer_width, desc->backbuffer_height);
+ window, desc->backbuffer_width, desc->backbuffer_height, swapchain);
}
swapchain->state.desc = *desc;
wined3d_swapchain_apply_sample_count_override(swapchain, swapchain->state.desc.backbuffer_format,
@@ -1534,7 +1535,7 @@ static LONG fullscreen_exstyle(LONG exstyle)
}
HRESULT wined3d_swapchain_state_setup_fullscreen(struct wined3d_swapchain_state *state,
- HWND window, unsigned int w, unsigned int h)
+ HWND window, unsigned int w, unsigned int h, struct wined3d_swapchain *swapchain)
{
LONG style, exstyle;
BOOL filter;
@@ -1574,7 +1575,7 @@ HRESULT wined3d_swapchain_state_setup_fullscreen(struct wined3d_swapchain_state
}
void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_state *state,
- HWND window, const RECT *window_rect)
+ HWND window, const RECT *window_rect, struct wined3d_swapchain *swapchain)
{
unsigned int window_pos_flags = SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE;
LONG style, exstyle;
@@ -1627,7 +1628,7 @@ void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_st
HRESULT CDECL wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_state *state,
const struct wined3d_swapchain_desc *swapchain_desc, struct wined3d_output *output,
- const struct wined3d_display_mode *mode)
+ const struct wined3d_display_mode *mode, struct wined3d_swapchain *swapchain)
{
struct wined3d_display_mode actual_mode;
HRESULT hr;
@@ -1681,7 +1682,7 @@ HRESULT CDECL wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_st
if (state->desc.windowed)
{
/* Switch from windowed to fullscreen */
- if (FAILED(hr = wined3d_swapchain_state_setup_fullscreen(state, state->device_window, width, height)))
+ if (FAILED(hr = wined3d_swapchain_state_setup_fullscreen(state, state->device_window, width, height, swapchain)))
return hr;
}
else
@@ -1703,7 +1704,7 @@ HRESULT CDECL wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_st
RECT *window_rect = NULL;
if (state->desc.flags & WINED3D_SWAPCHAIN_RESTORE_WINDOW_RECT)
window_rect = &state->original_window_rect;
- wined3d_swapchain_state_restore_from_fullscreen(state, state->device_window, window_rect);
+ wined3d_swapchain_state_restore_from_fullscreen(state, state->device_window, window_rect, swapchain);
}
state->desc.windowed = swapchain_desc->windowed;
diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec
index 51745e24183..3960d702d34 100644
--- a/dlls/wined3d/wined3d.spec
+++ b/dlls/wined3d/wined3d.spec
@@ -282,8 +282,8 @@
@ cdecl wined3d_swapchain_state_create(ptr ptr ptr ptr)
@ cdecl wined3d_swapchain_state_destroy(ptr)
-@ cdecl wined3d_swapchain_state_resize_target(ptr ptr ptr)
-@ cdecl wined3d_swapchain_state_set_fullscreen(ptr ptr ptr ptr)
+@ cdecl wined3d_swapchain_state_resize_target(ptr ptr ptr ptr)
+@ cdecl wined3d_swapchain_state_set_fullscreen(ptr ptr ptr ptr ptr)
@ cdecl wined3d_texture_add_dirty_region(ptr long ptr)
@ cdecl wined3d_texture_blt(ptr long ptr ptr long ptr long ptr long)
diff --git a/dlls/wined3d/wined3d_main.c b/dlls/wined3d/wined3d_main.c
index e681ac1b61b..942c030ae69 100644
--- a/dlls/wined3d/wined3d_main.c
+++ b/dlls/wined3d/wined3d_main.c
@@ -571,7 +571,7 @@ static LRESULT CALLBACK wined3d_hook_proc(int code, WPARAM wparam, LPARAM lparam
break;
}
wined3d_swapchain_state_set_fullscreen(&swapchain->state, &swapchain_desc, output,
- NULL);
+ NULL, swapchain);
wined3d_wndproc_mutex_unlock();
diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h
index 5c00883d413..25c4c2dcb26 100644
--- a/dlls/wined3d/wined3d_private.h
+++ b/dlls/wined3d/wined3d_private.h
@@ -4449,9 +4449,9 @@ struct wined3d_swapchain_state
};
void wined3d_swapchain_state_restore_from_fullscreen(struct wined3d_swapchain_state *state,
- HWND window, const RECT *window_rect) DECLSPEC_HIDDEN;
+ HWND window, const RECT *window_rect, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
HRESULT wined3d_swapchain_state_setup_fullscreen(struct wined3d_swapchain_state *state,
- HWND window, unsigned int w, unsigned int h) DECLSPEC_HIDDEN;
+ HWND window, unsigned int w, unsigned int h, struct wined3d_swapchain *swapchain) DECLSPEC_HIDDEN;
struct wined3d_swapchain_ops
{
diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h
index 6fc3a1aaa85..c04d865ca8b 100644
--- a/include/wine/wined3d.h
+++ b/include/wine/wined3d.h
@@ -2765,7 +2765,7 @@ HRESULT __cdecl wined3d_swapchain_state_resize_target(struct wined3d_swapchain_s
struct wined3d_output *output, const struct wined3d_display_mode *mode);
HRESULT __cdecl wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_state *state,
const struct wined3d_swapchain_desc *desc, struct wined3d_output *output,
- const struct wined3d_display_mode *mode);
+ const struct wined3d_display_mode *mode, struct wined3d_swapchain *swapchain);
HRESULT __cdecl wined3d_texture_add_dirty_region(struct wined3d_texture *texture,
UINT layer, const struct wined3d_box *dirty_region);
--
2.25.0
More information about the wine-devel
mailing list