From 9381ad89fbe376dce1a318b11e2c8f0d0eae3505 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Thu, 25 Aug 2016 12:22:50 +0200 Subject: [PATCH] dxgi: Introduce helper functions for converting wined3d_display_mode. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Józef Kucia Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/dxgi/dxgi_private.h | 2 ++ dlls/dxgi/output.c | 30 +++++++++++++++++------------- dlls/dxgi/swapchain.c | 6 +----- dlls/dxgi/utils.c | 10 ++++++++++ 4 files changed, 30 insertions(+), 18 deletions(-) diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h index 987370f1d03..b417470c77e 100644 --- a/dlls/dxgi/dxgi_private.h +++ b/dlls/dxgi/dxgi_private.h @@ -91,6 +91,8 @@ void dxgi_sample_desc_from_wined3d(DXGI_SAMPLE_DESC *desc, enum wined3d_multisample_type wined3d_type, unsigned int wined3d_quality) DECLSPEC_HIDDEN; void wined3d_sample_desc_from_dxgi(enum wined3d_multisample_type *wined3d_type, unsigned int *wined3d_quality, const DXGI_SAMPLE_DESC *dxgi_desc) DECLSPEC_HIDDEN; +void wined3d_display_mode_from_dxgi(struct wined3d_display_mode *wined3d_mode, + const DXGI_MODE_DESC *mode) DECLSPEC_HIDDEN; unsigned int dxgi_swapchain_flags_from_wined3d(unsigned int wined3d_flags) DECLSPEC_HIDDEN; unsigned int wined3d_swapchain_flags_from_dxgi(unsigned int flags) DECLSPEC_HIDDEN; HRESULT dxgi_get_private_data(struct wined3d_private_store *store, diff --git a/dlls/dxgi/output.c b/dlls/dxgi/output.c index cfd08fe2ba5..6d7ca20dc55 100644 --- a/dlls/dxgi/output.c +++ b/dlls/dxgi/output.c @@ -23,6 +23,17 @@ WINE_DEFAULT_DEBUG_CHANNEL(dxgi); +static void dxgi_mode_from_wined3d(DXGI_MODE_DESC *mode, const struct wined3d_display_mode *wined3d_mode) +{ + mode->Width = wined3d_mode->width; + mode->Height = wined3d_mode->height; + mode->RefreshRate.Numerator = wined3d_mode->refresh_rate; + mode->RefreshRate.Denominator = 1; + mode->Format = dxgi_format_from_wined3dformat(wined3d_mode->format_id); + mode->ScanlineOrdering = wined3d_mode->scanline_ordering; + mode->Scaling = DXGI_MODE_SCALING_UNSPECIFIED; /* FIXME */ +} + static inline struct dxgi_output *impl_from_IDXGIOutput(IDXGIOutput *iface) { return CONTAINING_RECORD(iface, struct dxgi_output, IDXGIOutput_iface); @@ -154,11 +165,10 @@ static HRESULT STDMETHODCALLTYPE dxgi_output_GetDesc(IDXGIOutput *iface, DXGI_OU static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput *iface, DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC *desc) { - struct dxgi_output *This = impl_from_IDXGIOutput(iface); + struct dxgi_output *output = impl_from_IDXGIOutput(iface); enum wined3d_format_id wined3d_format; + unsigned int i, max_count; struct wined3d *wined3d; - UINT i; - UINT max_count; FIXME("iface %p, format %s, flags %#x, mode_count %p, desc %p partial stub!\n", iface, debug_dxgi_format(format), flags, mode_count, desc); @@ -172,11 +182,11 @@ static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput *ifa return S_OK; } - wined3d = This->adapter->factory->wined3d; + wined3d = output->adapter->factory->wined3d; wined3d_format = wined3dformat_from_dxgi_format(format); wined3d_mutex_lock(); - max_count = wined3d_get_adapter_mode_count(wined3d, This->adapter->ordinal, + max_count = wined3d_get_adapter_mode_count(wined3d, output->adapter->ordinal, wined3d_format, WINED3D_SCANLINE_ORDERING_UNKNOWN); if (!desc) @@ -199,7 +209,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput *ifa struct wined3d_display_mode mode; HRESULT hr; - hr = wined3d_enum_adapter_modes(wined3d, This->adapter->ordinal, wined3d_format, + hr = wined3d_enum_adapter_modes(wined3d, output->adapter->ordinal, wined3d_format, WINED3D_SCANLINE_ORDERING_UNKNOWN, i, &mode); if (FAILED(hr)) { @@ -208,13 +218,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput *ifa return hr; } - desc[i].Width = mode.width; - desc[i].Height = mode.height; - desc[i].RefreshRate.Numerator = mode.refresh_rate; - desc[i].RefreshRate.Denominator = 1; - desc[i].Format = format; - desc[i].ScanlineOrdering = mode.scanline_ordering; - desc[i].Scaling = DXGI_MODE_SCALING_UNSPECIFIED; /* FIXME */ + dxgi_mode_from_wined3d(&desc[i], &mode); } wined3d_mutex_unlock(); diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c index 0057aa2d540..e0185ddb3ce 100644 --- a/dlls/dxgi/swapchain.c +++ b/dlls/dxgi/swapchain.c @@ -351,11 +351,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_swapchain_ResizeTarget(IDXGISwapChain *ifa if (target_mode_desc->Scaling) FIXME("Ignoring scaling %#x.\n", target_mode_desc->Scaling); - mode.width = target_mode_desc->Width; - mode.height = target_mode_desc->Height; - mode.refresh_rate = dxgi_rational_to_uint(&target_mode_desc->RefreshRate); - mode.format_id = wined3dformat_from_dxgi_format(target_mode_desc->Format); - mode.scanline_ordering = wined3d_scanline_ordering_from_dxgi(target_mode_desc->ScanlineOrdering); + wined3d_display_mode_from_dxgi(&mode, target_mode_desc); wined3d_mutex_lock(); hr = wined3d_swapchain_resize_target(swapchain->wined3d_swapchain, &mode); diff --git a/dlls/dxgi/utils.c b/dlls/dxgi/utils.c index b9be4a5cf6f..eda279fb34b 100644 --- a/dlls/dxgi/utils.c +++ b/dlls/dxgi/utils.c @@ -443,6 +443,16 @@ void wined3d_sample_desc_from_dxgi(enum wined3d_multisample_type *wined3d_type, } } +void wined3d_display_mode_from_dxgi(struct wined3d_display_mode *wined3d_mode, + const DXGI_MODE_DESC *mode) +{ + wined3d_mode->width = mode->Width; + wined3d_mode->height = mode->Height; + wined3d_mode->refresh_rate = dxgi_rational_to_uint(&mode->RefreshRate); + wined3d_mode->format_id = wined3dformat_from_dxgi_format(mode->Format); + wined3d_mode->scanline_ordering = wined3d_scanline_ordering_from_dxgi(mode->ScanlineOrdering); +} + unsigned int dxgi_swapchain_flags_from_wined3d(unsigned int wined3d_flags) { unsigned int flags = 0;