From: Stefan Dösinger stefan@codeweavers.com
---
Note that this code never runs in d3d10+ for a 0 pixelformat. Dxgi/tests/dxgi.c:2032 has a test that shows it results in an error. --- dlls/wined3d/swapchain.c | 53 ++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 26 deletions(-)
diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index f8179e2a70d..cc740e657e1 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -1400,7 +1400,31 @@ static HRESULT wined3d_swapchain_state_init(struct wined3d_swapchain_state *stat return hr; }
- if (!desc->windowed) + if (state->desc.windowed) + { + RECT client_rect; + + GetClientRect(window, &client_rect); + TRACE("Client rect %s.\n", wine_dbgstr_rect(&client_rect)); + + if (!state->desc.backbuffer_width) + { + state->desc.backbuffer_width = client_rect.right ? client_rect.right : 8; + TRACE("Updating width to %u.\n", state->desc.backbuffer_width); + } + if (!state->desc.backbuffer_height) + { + state->desc.backbuffer_height = client_rect.bottom ? client_rect.bottom : 8; + TRACE("Updating height to %u.\n", state->desc.backbuffer_height); + } + + if (state->desc.backbuffer_format == WINED3DFMT_UNKNOWN) + { + state->desc.backbuffer_format = state->original_mode.format_id; + TRACE("Updating format to %s.\n", debug_d3dformat(state->original_mode.format_id)); + } + } + else { if (desc->flags & WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH) { @@ -1486,7 +1510,6 @@ static HRESULT wined3d_swapchain_init(struct wined3d_swapchain *swapchain, struc struct wined3d_output_desc output_desc; BOOL displaymode_set = FALSE; HRESULT hr = E_FAIL; - RECT client_rect; unsigned int i; HWND window;
@@ -1526,29 +1549,7 @@ static HRESULT wined3d_swapchain_init(struct wined3d_swapchain *swapchain, struc swapchain->swap_interval = WINED3D_SWAP_INTERVAL_DEFAULT; swapchain_set_max_frame_latency(swapchain, device);
- GetClientRect(window, &client_rect); - if (desc->windowed) - { - TRACE("Client rect %s.\n", wine_dbgstr_rect(&client_rect)); - - if (!desc->backbuffer_width) - { - desc->backbuffer_width = client_rect.right ? client_rect.right : 8; - TRACE("Updating width to %u.\n", desc->backbuffer_width); - } - if (!desc->backbuffer_height) - { - desc->backbuffer_height = client_rect.bottom ? client_rect.bottom : 8; - TRACE("Updating height to %u.\n", desc->backbuffer_height); - } - - if (desc->backbuffer_format == WINED3DFMT_UNKNOWN) - { - desc->backbuffer_format = swapchain->state.original_mode.format_id; - TRACE("Updating format to %s.\n", debug_d3dformat(swapchain->state.original_mode.format_id)); - } - } - else + if (!desc->windowed) { if (FAILED(hr = wined3d_output_get_desc(desc->output, &output_desc))) { @@ -1560,7 +1561,7 @@ static HRESULT wined3d_swapchain_init(struct wined3d_swapchain *swapchain, struc output_desc.desktop_rect.left, output_desc.desktop_rect.top, desc->backbuffer_width, desc->backbuffer_height); } - swapchain->state.desc = *desc; + wined3d_swapchain_apply_sample_count_override(swapchain, swapchain->state.desc.backbuffer_format, &swapchain->state.desc.multisample_type, &swapchain->state.desc.multisample_quality);