From: Stefan Dösinger Subject: [PATCH 1/2] d3d8: Accept D3DSWAPEFFECT_COPY_VSYNC. Message-Id: <1443466931-25704-1-git-send-email-stefan@codeweavers.com> Date: Mon, 28 Sep 2015 21:02:10 +0200 This fixes bug 39281. In my quick testing there seems to be no difference between COPY_VSYNC and COPY, at least on my r500 GPU on Windows 7. In both cases the presentation interval determines vsync. (D3d8 doesn't allow windowed vsync, unlike d3d9. This is something for a different patch...) Signed-off-by: Stefan Dösinger --- dlls/d3d8/device.c | 5 +++-- dlls/d3d8/tests/device.c | 48 ++++++++++++++++++++++++++++-------------------- 2 files changed, 31 insertions(+), 22 deletions(-) diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index e899b34..c6e34ef 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -191,13 +191,14 @@ static void present_parameters_from_wined3d_swapchain_desc(D3DPRESENT_PARAMETERS static BOOL wined3d_swapchain_desc_from_present_parameters(struct wined3d_swapchain_desc *swapchain_desc, const D3DPRESENT_PARAMETERS *present_parameters) { - if (!present_parameters->SwapEffect || present_parameters->SwapEffect > D3DSWAPEFFECT_COPY) + if (!present_parameters->SwapEffect || present_parameters->SwapEffect > D3DSWAPEFFECT_COPY_VSYNC) { WARN("Invalid swap effect %u passed.\n", present_parameters->SwapEffect); return FALSE; } if (present_parameters->BackBufferCount > 3 - || (present_parameters->SwapEffect == D3DSWAPEFFECT_COPY + || ((present_parameters->SwapEffect == D3DSWAPEFFECT_COPY + || present_parameters->SwapEffect == D3DSWAPEFFECT_COPY_VSYNC) && present_parameters->BackBufferCount > 1)) { WARN("Invalid backbuffer count %u.\n", present_parameters->BackBufferCount); diff --git a/dlls/d3d8/tests/device.c b/dlls/d3d8/tests/device.c index cb7f5e1..ccc16c6 100644 --- a/dlls/d3d8/tests/device.c +++ b/dlls/d3d8/tests/device.c @@ -7309,36 +7309,44 @@ static void test_swapchain_parameters(void) tests[] = { /* Swap effect 0 is not allowed. */ - {TRUE, 1, 0, D3DERR_INVALIDCALL}, - {FALSE, 1, 0, D3DERR_INVALIDCALL}, + {TRUE, 1, 0, D3DERR_INVALIDCALL}, + {FALSE, 1, 0, D3DERR_INVALIDCALL}, /* All (non-ex) swap effects are allowed in * windowed and fullscreen mode. */ - {TRUE, 1, D3DSWAPEFFECT_DISCARD, D3D_OK}, - {TRUE, 1, D3DSWAPEFFECT_FLIP, D3D_OK}, - {FALSE, 1, D3DSWAPEFFECT_DISCARD, D3D_OK}, - {FALSE, 1, D3DSWAPEFFECT_FLIP, D3D_OK}, - {FALSE, 1, D3DSWAPEFFECT_COPY, D3D_OK}, + {TRUE, 1, D3DSWAPEFFECT_DISCARD, D3D_OK}, + {TRUE, 1, D3DSWAPEFFECT_FLIP, D3D_OK}, + {FALSE, 1, D3DSWAPEFFECT_DISCARD, D3D_OK}, + {FALSE, 1, D3DSWAPEFFECT_FLIP, D3D_OK}, + {FALSE, 1, D3DSWAPEFFECT_COPY, D3D_OK}, /* Only one backbuffer in copy mode. Reset allows it for * some reason. */ - {TRUE, 0, D3DSWAPEFFECT_COPY, D3D_OK}, - {TRUE, 1, D3DSWAPEFFECT_COPY, D3D_OK}, - {TRUE, 2, D3DSWAPEFFECT_COPY, D3DERR_INVALIDCALL}, - {FALSE, 2, D3DSWAPEFFECT_COPY, D3DERR_INVALIDCALL}, + {TRUE, 0, D3DSWAPEFFECT_COPY, D3D_OK}, + {TRUE, 1, D3DSWAPEFFECT_COPY, D3D_OK}, + {TRUE, 2, D3DSWAPEFFECT_COPY, D3DERR_INVALIDCALL}, + {FALSE, 2, D3DSWAPEFFECT_COPY, D3DERR_INVALIDCALL}, + {TRUE, 0, D3DSWAPEFFECT_COPY_VSYNC, D3D_OK}, + {TRUE, 1, D3DSWAPEFFECT_COPY_VSYNC, D3D_OK}, + {TRUE, 2, D3DSWAPEFFECT_COPY_VSYNC, D3DERR_INVALIDCALL}, + {FALSE, 2, D3DSWAPEFFECT_COPY_VSYNC, D3DERR_INVALIDCALL}, /* Ok with the others, in fullscreen and windowed mode. */ - {TRUE, 2, D3DSWAPEFFECT_DISCARD, D3D_OK}, - {TRUE, 2, D3DSWAPEFFECT_FLIP, D3D_OK}, - {FALSE, 2, D3DSWAPEFFECT_DISCARD, D3D_OK}, - {FALSE, 2, D3DSWAPEFFECT_FLIP, D3D_OK}, + {TRUE, 2, D3DSWAPEFFECT_DISCARD, D3D_OK}, + {TRUE, 2, D3DSWAPEFFECT_FLIP, D3D_OK}, + {FALSE, 2, D3DSWAPEFFECT_DISCARD, D3D_OK}, + {FALSE, 2, D3DSWAPEFFECT_FLIP, D3D_OK}, + + /* Invalid swapeffects. */ + {TRUE, 1, D3DSWAPEFFECT_COPY_VSYNC + 1, D3DERR_INVALIDCALL}, + {FALSE, 1, D3DSWAPEFFECT_COPY_VSYNC + 1, D3DERR_INVALIDCALL}, /* 3 is the highest allowed backbuffer count. */ - {TRUE, 3, D3DSWAPEFFECT_DISCARD, D3D_OK}, - {TRUE, 4, D3DSWAPEFFECT_DISCARD, D3DERR_INVALIDCALL}, - {TRUE, 4, D3DSWAPEFFECT_FLIP, D3DERR_INVALIDCALL}, - {FALSE, 4, D3DSWAPEFFECT_DISCARD, D3DERR_INVALIDCALL}, - {FALSE, 4, D3DSWAPEFFECT_FLIP, D3DERR_INVALIDCALL}, + {TRUE, 3, D3DSWAPEFFECT_DISCARD, D3D_OK}, + {TRUE, 4, D3DSWAPEFFECT_DISCARD, D3DERR_INVALIDCALL}, + {TRUE, 4, D3DSWAPEFFECT_FLIP, D3DERR_INVALIDCALL}, + {FALSE, 4, D3DSWAPEFFECT_DISCARD, D3DERR_INVALIDCALL}, + {FALSE, 4, D3DSWAPEFFECT_FLIP, D3DERR_INVALIDCALL}, }; window = CreateWindowA("static", "d3d8_test", WS_OVERLAPPEDWINDOW, -- 2.4.9