From fbc8f59629b296d9da8981a130871b3adeac80af Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Thu, 6 Aug 2015 00:21:55 +0200 Subject: [PATCH] dxgi: Introduce a helper function to convert dxgi multisample info to wined3d. --- dlls/dxgi/device.c | 4 ++-- dlls/dxgi/dxgi_private.h | 2 ++ dlls/dxgi/factory.c | 12 ++---------- dlls/dxgi/utils.c | 15 +++++++++++++++ 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/dlls/dxgi/device.c b/dlls/dxgi/device.c index 2b8a05fc684..e2887746f11 100644 --- a/dlls/dxgi/device.c +++ b/dlls/dxgi/device.c @@ -185,8 +185,8 @@ static HRESULT STDMETHODCALLTYPE dxgi_device_CreateSurface(IWineDXGIDevice *ifac FIXME("Implement DXGI<->wined3d usage conversion\n"); surface_desc.resource_type = WINED3D_RTYPE_SURFACE; surface_desc.format = wined3dformat_from_dxgi_format(desc->Format); - surface_desc.multisample_type = desc->SampleDesc.Count > 1 ? desc->SampleDesc.Count : WINED3D_MULTISAMPLE_NONE; - surface_desc.multisample_quality = desc->SampleDesc.Quality; + wined3d_sample_desc_from_dxgi(&surface_desc.multisample_type, + &surface_desc.multisample_quality, &desc->SampleDesc); surface_desc.usage = usage; surface_desc.pool = WINED3D_POOL_DEFAULT; surface_desc.width = desc->Width; diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h index 870315866ad..02e37ba5455 100644 --- a/dlls/dxgi/dxgi_private.h +++ b/dlls/dxgi/dxgi_private.h @@ -76,6 +76,8 @@ const char *debug_dxgi_format(DXGI_FORMAT format) DECLSPEC_HIDDEN; DXGI_FORMAT dxgi_format_from_wined3dformat(enum wined3d_format_id format) DECLSPEC_HIDDEN; enum wined3d_format_id wined3dformat_from_dxgi_format(DXGI_FORMAT format) 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; HRESULT dxgi_get_private_data(struct wined3d_private_store *store, REFGUID guid, UINT *data_size, void *data) DECLSPEC_HIDDEN; HRESULT dxgi_set_private_data(struct wined3d_private_store *store, diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c index a66585ef21d..a716e1bdb7d 100644 --- a/dlls/dxgi/factory.c +++ b/dlls/dxgi/factory.c @@ -211,16 +211,8 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IDXGIFactory1 *ifa wined3d_desc.backbuffer_height = desc->BufferDesc.Height; wined3d_desc.backbuffer_format = wined3dformat_from_dxgi_format(desc->BufferDesc.Format); wined3d_desc.backbuffer_count = desc->BufferCount; - if (desc->SampleDesc.Count > 1) - { - wined3d_desc.multisample_type = desc->SampleDesc.Count; - wined3d_desc.multisample_quality = desc->SampleDesc.Quality; - } - else - { - wined3d_desc.multisample_type = WINED3D_MULTISAMPLE_NONE; - wined3d_desc.multisample_quality = 0; - } + wined3d_sample_desc_from_dxgi(&wined3d_desc.multisample_type, + &wined3d_desc.multisample_quality, &desc->SampleDesc); wined3d_desc.swap_effect = WINED3D_SWAP_EFFECT_DISCARD; wined3d_desc.device_window = desc->OutputWindow; wined3d_desc.windowed = desc->Windowed; diff --git a/dlls/dxgi/utils.c b/dlls/dxgi/utils.c index be2b5f7926d..ea88567cb1a 100644 --- a/dlls/dxgi/utils.c +++ b/dlls/dxgi/utils.c @@ -325,6 +325,21 @@ enum wined3d_format_id wined3dformat_from_dxgi_format(DXGI_FORMAT format) } } +void wined3d_sample_desc_from_dxgi(enum wined3d_multisample_type *wined3d_type, + unsigned int *wined3d_quality, const DXGI_SAMPLE_DESC *dxgi_desc) +{ + if (dxgi_desc->Count > 1) + { + *wined3d_type = dxgi_desc->Count; + *wined3d_quality = dxgi_desc->Quality; + } + else + { + *wined3d_type = WINED3D_MULTISAMPLE_NONE; + *wined3d_quality = 0; + } +} + HRESULT dxgi_get_private_data(struct wined3d_private_store *store, REFGUID guid, UINT *data_size, void *data) {