=?UTF-8?Q?J=C3=B3zef=20Kucia=20?=: wined3d: Avoid superfluous wglSwapIntervalEXT() calls.
Alexandre Julliard
julliard at winehq.org
Fri Mar 23 19:17:05 CDT 2018
Module: wine
Branch: master
Commit: 82ffc5b78d9085143477c6de2d9666daafcd7d0d
URL: https://source.winehq.org/git/wine.git/?a=commit;h=82ffc5b78d9085143477c6de2d9666daafcd7d0d
Author: Józef Kucia <jkucia at codeweavers.com>
Date: Fri Mar 23 13:44:35 2018 +0100
wined3d: Avoid superfluous wglSwapIntervalEXT() calls.
Signed-off-by: Józef Kucia <jkucia at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/wined3d/cs.c | 4 +---
dlls/wined3d/swapchain.c | 14 ++++++++------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/dlls/wined3d/cs.c b/dlls/wined3d/cs.c
index 24fd72c..8edb74f 100644
--- a/dlls/wined3d/cs.c
+++ b/dlls/wined3d/cs.c
@@ -453,9 +453,7 @@ static void wined3d_cs_exec_present(struct wined3d_cs *cs, const void *data)
swapchain = op->swapchain;
wined3d_swapchain_set_window(swapchain, op->dst_window_override);
-
- if (swapchain->swap_interval != op->swap_interval)
- wined3d_swapchain_set_swap_interval(swapchain, op->swap_interval);
+ wined3d_swapchain_set_swap_interval(swapchain, op->swap_interval);
swapchain->swapchain_ops->swapchain_present(swapchain, &op->src_rect, &op->dst_rect, op->flags);
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c
index 464a6c0..2aec612 100644
--- a/dlls/wined3d/swapchain.c
+++ b/dlls/wined3d/swapchain.c
@@ -679,12 +679,15 @@ void wined3d_swapchain_set_swap_interval(struct wined3d_swapchain *swapchain,
const struct wined3d_gl_info *gl_info;
struct wined3d_context *context;
- context = context_acquire(swapchain->device, swapchain->front_buffer, 0);
- gl_info = context->gl_info;
-
swap_interval = swap_interval <= 4 ? swap_interval : 1;
+ if (swapchain->swap_interval == swap_interval)
+ return;
+
swapchain->swap_interval = swap_interval;
+ context = context_acquire(swapchain->device, swapchain->front_buffer, 0);
+ gl_info = context->gl_info;
+
if (gl_info->supported[WGL_EXT_SWAP_CONTROL])
{
if (!GL_EXTCALL(wglSwapIntervalEXT(swap_interval)))
@@ -735,8 +738,6 @@ static void wined3d_swapchain_cs_init(void *object)
FIXME("Add OpenGL context recreation support.\n");
context_release(swapchain->context[0]);
-
- wined3d_swapchain_set_swap_interval(swapchain, WINED3D_SWAP_INTERVAL_DEFAULT);
}
static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3d_device *device,
@@ -747,9 +748,9 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
BOOL displaymode_set = FALSE;
DWORD texture_flags = 0;
RECT client_rect;
+ unsigned int i;
HWND window;
HRESULT hr;
- UINT i;
if (desc->backbuffer_count > 1)
{
@@ -775,6 +776,7 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, struct wined3
swapchain->ref = 1;
swapchain->win_handle = window;
swapchain->device_window = window;
+ swapchain->swap_interval = WINED3D_SWAP_INTERVAL_DEFAULT;
if (FAILED(hr = wined3d_get_adapter_display_mode(device->wined3d,
adapter->ordinal, &swapchain->original_mode, NULL)))
More information about the wine-cvs
mailing list