From 94c9b0b4fcad2399289642709aef5f0facee190f Mon Sep 17 00:00:00 2001 From: Henri Verbeet Date: Fri, 2 Dec 2011 08:15:52 +0100 Subject: [PATCH] wined3d: Get rid of the WINED3DPRESENT_PARAMETERS typedef. --- dlls/d3d10core/device.c | 6 +- dlls/d3d8/device.c | 154 +++++++++++++++--------------- dlls/d3d8/swapchain.c | 60 ++++++------ dlls/d3d9/device.c | 171 +++++++++++++++++----------------- dlls/d3d9/swapchain.c | 98 +++++++++---------- dlls/ddraw/ddraw.c | 46 ++++----- dlls/dxgi/device.c | 8 +- dlls/dxgi/dxgi_private.h | 2 +- dlls/dxgi/factory.c | 41 ++++---- dlls/dxgi/swapchain.c | 4 +- dlls/wined3d/context.c | 4 +- dlls/wined3d/device.c | 207 +++++++++++++++++++++-------------------- dlls/wined3d/stateblock.c | 4 +- dlls/wined3d/surface.c | 10 +- dlls/wined3d/swapchain.c | 144 ++++++++++++++-------------- dlls/wined3d/wined3d.spec | 2 +- dlls/wined3d/wined3d_private.h | 2 +- include/wine/wined3d.h | 50 +++++----- include/wine/winedxgi.idl | 2 +- 19 files changed, 511 insertions(+), 504 deletions(-) diff --git a/dlls/d3d10core/device.c b/dlls/d3d10core/device.c index 2a84c98b241..750ee97fcd2 100644 --- a/dlls/d3d10core/device.c +++ b/dlls/d3d10core/device.c @@ -1513,13 +1513,13 @@ static HRESULT CDECL device_parent_create_volume(struct wined3d_device_parent *d } static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent *device_parent, - WINED3DPRESENT_PARAMETERS *present_parameters, struct wined3d_swapchain **swapchain) + struct wined3d_swapchain_desc *desc, struct wined3d_swapchain **swapchain) { struct d3d10_device *device = device_from_wined3d_device_parent(device_parent); IWineDXGIDevice *wine_device; HRESULT hr; - TRACE("device_parent %p, present_parameters %p, swapchain %p\n", device_parent, present_parameters, swapchain); + TRACE("device_parent %p, desc %p, swapchain %p\n", device_parent, desc, swapchain); hr = d3d10_device_QueryInterface(&device->ID3D10Device_iface, &IID_IWineDXGIDevice, (void **)&wine_device); @@ -1529,7 +1529,7 @@ static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent return E_FAIL; } - hr = IWineDXGIDevice_create_swapchain(wine_device, present_parameters, swapchain); + hr = IWineDXGIDevice_create_swapchain(wine_device, desc, swapchain); IWineDXGIDevice_Release(wine_device); if (FAILED(hr)) { diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index bbc69b4f96b..88a5c4b667a 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -561,30 +561,30 @@ static HRESULT WINAPI IDirect3DDevice8Impl_Reset(IDirect3DDevice8 *iface, D3DPRESENT_PARAMETERS *pPresentationParameters) { IDirect3DDevice8Impl *This = impl_from_IDirect3DDevice8(iface); - WINED3DPRESENT_PARAMETERS localParameters; + struct wined3d_swapchain_desc swapchain_desc; HRESULT hr; TRACE("iface %p, present_parameters %p.\n", iface, pPresentationParameters); wined3d_mutex_lock(); - localParameters.BackBufferWidth = pPresentationParameters->BackBufferWidth; - localParameters.BackBufferHeight = pPresentationParameters->BackBufferHeight; - localParameters.BackBufferFormat = wined3dformat_from_d3dformat(pPresentationParameters->BackBufferFormat); - localParameters.BackBufferCount = pPresentationParameters->BackBufferCount; - localParameters.MultiSampleType = pPresentationParameters->MultiSampleType; - localParameters.MultiSampleQuality = 0; /* d3d9 only */ - localParameters.SwapEffect = pPresentationParameters->SwapEffect; - localParameters.hDeviceWindow = pPresentationParameters->hDeviceWindow; - localParameters.Windowed = pPresentationParameters->Windowed; - localParameters.EnableAutoDepthStencil = pPresentationParameters->EnableAutoDepthStencil; - localParameters.AutoDepthStencilFormat = wined3dformat_from_d3dformat(pPresentationParameters->AutoDepthStencilFormat); - localParameters.Flags = pPresentationParameters->Flags; - localParameters.FullScreen_RefreshRateInHz = pPresentationParameters->FullScreen_RefreshRateInHz; - localParameters.PresentationInterval = pPresentationParameters->FullScreen_PresentationInterval; - localParameters.AutoRestoreDisplayMode = TRUE; - - hr = wined3d_device_reset(This->wined3d_device, &localParameters, reset_enum_callback); + swapchain_desc.backbuffer_width = pPresentationParameters->BackBufferWidth; + swapchain_desc.backbuffer_height = pPresentationParameters->BackBufferHeight; + swapchain_desc.backbuffer_format = wined3dformat_from_d3dformat(pPresentationParameters->BackBufferFormat); + swapchain_desc.backbuffer_count = pPresentationParameters->BackBufferCount; + swapchain_desc.multisample_type = pPresentationParameters->MultiSampleType; + swapchain_desc.multisample_quality = 0; /* d3d9 only */ + swapchain_desc.swap_effect = pPresentationParameters->SwapEffect; + swapchain_desc.device_window = pPresentationParameters->hDeviceWindow; + swapchain_desc.windowed = pPresentationParameters->Windowed; + swapchain_desc.enable_auto_depth_stencil = pPresentationParameters->EnableAutoDepthStencil; + swapchain_desc.auto_depth_stencil_format = wined3dformat_from_d3dformat(pPresentationParameters->AutoDepthStencilFormat); + swapchain_desc.flags = pPresentationParameters->Flags; + swapchain_desc.refresh_rate = pPresentationParameters->FullScreen_RefreshRateInHz; + swapchain_desc.swap_interval = pPresentationParameters->FullScreen_PresentationInterval; + swapchain_desc.auto_restore_display_mode = TRUE; + + hr = wined3d_device_reset(This->wined3d_device, &swapchain_desc, reset_enum_callback); if (SUCCEEDED(hr)) { hr = wined3d_device_set_render_state(This->wined3d_device, WINED3DRS_POINTSIZE_MIN, 0); @@ -2946,29 +2946,29 @@ static HRESULT CDECL device_parent_create_volume(struct wined3d_device_parent *d } static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent *device_parent, - WINED3DPRESENT_PARAMETERS *present_parameters, struct wined3d_swapchain **swapchain) + struct wined3d_swapchain_desc *desc, struct wined3d_swapchain **swapchain) { IDirect3DDevice8Impl *device = device_from_device_parent(device_parent); D3DPRESENT_PARAMETERS local_parameters; IDirect3DSwapChain8 *d3d_swapchain; HRESULT hr; - TRACE("device_parent %p, present_parameters %p, swapchain %p.\n", device_parent, present_parameters, swapchain); + TRACE("device_parent %p, desc %p, swapchain %p.\n", device_parent, desc, swapchain); /* Copy the presentation parameters */ - local_parameters.BackBufferWidth = present_parameters->BackBufferWidth; - local_parameters.BackBufferHeight = present_parameters->BackBufferHeight; - local_parameters.BackBufferFormat = d3dformat_from_wined3dformat(present_parameters->BackBufferFormat); - local_parameters.BackBufferCount = present_parameters->BackBufferCount; - local_parameters.MultiSampleType = present_parameters->MultiSampleType; - local_parameters.SwapEffect = present_parameters->SwapEffect; - local_parameters.hDeviceWindow = present_parameters->hDeviceWindow; - local_parameters.Windowed = present_parameters->Windowed; - local_parameters.EnableAutoDepthStencil = present_parameters->EnableAutoDepthStencil; - local_parameters.AutoDepthStencilFormat = d3dformat_from_wined3dformat(present_parameters->AutoDepthStencilFormat); - local_parameters.Flags = present_parameters->Flags; - local_parameters.FullScreen_RefreshRateInHz = present_parameters->FullScreen_RefreshRateInHz; - local_parameters.FullScreen_PresentationInterval = present_parameters->PresentationInterval; + local_parameters.BackBufferWidth = desc->backbuffer_width; + local_parameters.BackBufferHeight = desc->backbuffer_height; + local_parameters.BackBufferFormat = d3dformat_from_wined3dformat(desc->backbuffer_format); + local_parameters.BackBufferCount = desc->backbuffer_count; + local_parameters.MultiSampleType = desc->multisample_type; + local_parameters.SwapEffect = desc->swap_effect; + local_parameters.hDeviceWindow = desc->device_window; + local_parameters.Windowed = desc->windowed; + local_parameters.EnableAutoDepthStencil = desc->enable_auto_depth_stencil; + local_parameters.AutoDepthStencilFormat = d3dformat_from_wined3dformat(desc->auto_depth_stencil_format); + local_parameters.Flags = desc->flags; + local_parameters.FullScreen_RefreshRateInHz = desc->refresh_rate; + local_parameters.FullScreen_PresentationInterval = desc->swap_interval; hr = IDirect3DDevice8_CreateAdditionalSwapChain(&device->IDirect3DDevice8_iface, &local_parameters, &d3d_swapchain); @@ -2984,19 +2984,19 @@ static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent IDirect3DSwapChain8_Release(d3d_swapchain); /* Copy back the presentation parameters */ - present_parameters->BackBufferWidth = local_parameters.BackBufferWidth; - present_parameters->BackBufferHeight = local_parameters.BackBufferHeight; - present_parameters->BackBufferFormat = wined3dformat_from_d3dformat(local_parameters.BackBufferFormat); - present_parameters->BackBufferCount = local_parameters.BackBufferCount; - present_parameters->MultiSampleType = local_parameters.MultiSampleType; - present_parameters->SwapEffect = local_parameters.SwapEffect; - present_parameters->hDeviceWindow = local_parameters.hDeviceWindow; - present_parameters->Windowed = local_parameters.Windowed; - present_parameters->EnableAutoDepthStencil = local_parameters.EnableAutoDepthStencil; - present_parameters->AutoDepthStencilFormat = wined3dformat_from_d3dformat(local_parameters.AutoDepthStencilFormat); - present_parameters->Flags = local_parameters.Flags; - present_parameters->FullScreen_RefreshRateInHz = local_parameters.FullScreen_RefreshRateInHz; - present_parameters->PresentationInterval = local_parameters.FullScreen_PresentationInterval; + desc->backbuffer_width = local_parameters.BackBufferWidth; + desc->backbuffer_height = local_parameters.BackBufferHeight; + desc->backbuffer_format = wined3dformat_from_d3dformat(local_parameters.BackBufferFormat); + desc->backbuffer_count = local_parameters.BackBufferCount; + desc->multisample_type = local_parameters.MultiSampleType; + desc->swap_effect = local_parameters.SwapEffect; + desc->device_window = local_parameters.hDeviceWindow; + desc->windowed = local_parameters.Windowed; + desc->enable_auto_depth_stencil = local_parameters.EnableAutoDepthStencil; + desc->auto_depth_stencil_format = wined3dformat_from_d3dformat(local_parameters.AutoDepthStencilFormat); + desc->flags = local_parameters.Flags; + desc->refresh_rate = local_parameters.FullScreen_RefreshRateInHz; + desc->swap_interval = local_parameters.FullScreen_PresentationInterval; return hr; } @@ -3032,7 +3032,7 @@ static void setup_fpu(void) HRESULT device_init(IDirect3DDevice8Impl *device, IDirect3D8Impl *parent, struct wined3d *wined3d, UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters) { - WINED3DPRESENT_PARAMETERS wined3d_parameters; + struct wined3d_swapchain_desc swapchain_desc; HRESULT hr; device->IDirect3DDevice8_iface.lpVtbl = &Direct3DDevice8_Vtbl; @@ -3085,23 +3085,23 @@ HRESULT device_init(IDirect3DDevice8Impl *device, IDirect3D8Impl *parent, struct if (flags & D3DCREATE_MULTITHREADED) wined3d_device_set_multithreaded(device->wined3d_device); - wined3d_parameters.BackBufferWidth = parameters->BackBufferWidth; - wined3d_parameters.BackBufferHeight = parameters->BackBufferHeight; - wined3d_parameters.BackBufferFormat = wined3dformat_from_d3dformat(parameters->BackBufferFormat); - wined3d_parameters.BackBufferCount = parameters->BackBufferCount; - wined3d_parameters.MultiSampleType = parameters->MultiSampleType; - wined3d_parameters.MultiSampleQuality = 0; /* d3d9 only */ - wined3d_parameters.SwapEffect = parameters->SwapEffect; - wined3d_parameters.hDeviceWindow = parameters->hDeviceWindow; - wined3d_parameters.Windowed = parameters->Windowed; - wined3d_parameters.EnableAutoDepthStencil = parameters->EnableAutoDepthStencil; - wined3d_parameters.AutoDepthStencilFormat = wined3dformat_from_d3dformat(parameters->AutoDepthStencilFormat); - wined3d_parameters.Flags = parameters->Flags; - wined3d_parameters.FullScreen_RefreshRateInHz = parameters->FullScreen_RefreshRateInHz; - wined3d_parameters.PresentationInterval = parameters->FullScreen_PresentationInterval; - wined3d_parameters.AutoRestoreDisplayMode = TRUE; - - hr = wined3d_device_init_3d(device->wined3d_device, &wined3d_parameters); + swapchain_desc.backbuffer_width = parameters->BackBufferWidth; + swapchain_desc.backbuffer_height = parameters->BackBufferHeight; + swapchain_desc.backbuffer_format = wined3dformat_from_d3dformat(parameters->BackBufferFormat); + swapchain_desc.backbuffer_count = parameters->BackBufferCount; + swapchain_desc.multisample_type = parameters->MultiSampleType; + swapchain_desc.multisample_quality = 0; /* d3d9 only */ + swapchain_desc.swap_effect = parameters->SwapEffect; + swapchain_desc.device_window = parameters->hDeviceWindow; + swapchain_desc.windowed = parameters->Windowed; + swapchain_desc.enable_auto_depth_stencil = parameters->EnableAutoDepthStencil; + swapchain_desc.auto_depth_stencil_format = wined3dformat_from_d3dformat(parameters->AutoDepthStencilFormat); + swapchain_desc.flags = parameters->Flags; + swapchain_desc.refresh_rate = parameters->FullScreen_RefreshRateInHz; + swapchain_desc.swap_interval = parameters->FullScreen_PresentationInterval; + swapchain_desc.auto_restore_display_mode = TRUE; + + hr = wined3d_device_init_3d(device->wined3d_device, &swapchain_desc); if (FAILED(hr)) { WARN("Failed to initialize 3D, hr %#x.\n", hr); @@ -3120,19 +3120,19 @@ HRESULT device_init(IDirect3DDevice8Impl *device, IDirect3D8Impl *parent, struct goto err; } - parameters->BackBufferWidth = wined3d_parameters.BackBufferWidth; - parameters->BackBufferHeight = wined3d_parameters.BackBufferHeight; - parameters->BackBufferFormat = d3dformat_from_wined3dformat(wined3d_parameters.BackBufferFormat); - parameters->BackBufferCount = wined3d_parameters.BackBufferCount; - parameters->MultiSampleType = wined3d_parameters.MultiSampleType; - parameters->SwapEffect = wined3d_parameters.SwapEffect; - parameters->hDeviceWindow = wined3d_parameters.hDeviceWindow; - parameters->Windowed = wined3d_parameters.Windowed; - parameters->EnableAutoDepthStencil = wined3d_parameters.EnableAutoDepthStencil; - parameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(wined3d_parameters.AutoDepthStencilFormat); - parameters->Flags = wined3d_parameters.Flags; - parameters->FullScreen_RefreshRateInHz = wined3d_parameters.FullScreen_RefreshRateInHz; - parameters->FullScreen_PresentationInterval = wined3d_parameters.PresentationInterval; + parameters->BackBufferWidth = swapchain_desc.backbuffer_width; + parameters->BackBufferHeight = swapchain_desc.backbuffer_height; + parameters->BackBufferFormat = d3dformat_from_wined3dformat(swapchain_desc.backbuffer_format); + parameters->BackBufferCount = swapchain_desc.backbuffer_count; + parameters->MultiSampleType = swapchain_desc.multisample_type; + parameters->SwapEffect = swapchain_desc.swap_effect; + parameters->hDeviceWindow = swapchain_desc.device_window; + parameters->Windowed = swapchain_desc.windowed; + parameters->EnableAutoDepthStencil = swapchain_desc.enable_auto_depth_stencil; + parameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(swapchain_desc.auto_depth_stencil_format); + parameters->Flags = swapchain_desc.flags; + parameters->FullScreen_RefreshRateInHz = swapchain_desc.refresh_rate; + parameters->FullScreen_PresentationInterval = swapchain_desc.swap_interval; device->declArraySize = 16; device->decls = HeapAlloc(GetProcessHeap(), 0, device->declArraySize * sizeof(*device->decls)); diff --git a/dlls/d3d8/swapchain.c b/dlls/d3d8/swapchain.c index 866335fcdc8..02b39f1aab6 100644 --- a/dlls/d3d8/swapchain.c +++ b/dlls/d3d8/swapchain.c @@ -151,47 +151,47 @@ static const struct wined3d_parent_ops d3d8_swapchain_wined3d_parent_ops = HRESULT swapchain_init(IDirect3DSwapChain8Impl *swapchain, IDirect3DDevice8Impl *device, D3DPRESENT_PARAMETERS *present_parameters) { - WINED3DPRESENT_PARAMETERS wined3d_parameters; + struct wined3d_swapchain_desc desc; HRESULT hr; swapchain->ref = 1; swapchain->IDirect3DSwapChain8_iface.lpVtbl = &Direct3DSwapChain8_Vtbl; - wined3d_parameters.BackBufferWidth = present_parameters->BackBufferWidth; - wined3d_parameters.BackBufferHeight = present_parameters->BackBufferHeight; - wined3d_parameters.BackBufferFormat = wined3dformat_from_d3dformat(present_parameters->BackBufferFormat); - wined3d_parameters.BackBufferCount = max(1, present_parameters->BackBufferCount); - wined3d_parameters.MultiSampleType = present_parameters->MultiSampleType; - wined3d_parameters.MultiSampleQuality = 0; /* d3d9 only */ - wined3d_parameters.SwapEffect = present_parameters->SwapEffect; - wined3d_parameters.hDeviceWindow = present_parameters->hDeviceWindow; - wined3d_parameters.Windowed = present_parameters->Windowed; - wined3d_parameters.EnableAutoDepthStencil = present_parameters->EnableAutoDepthStencil; - wined3d_parameters.AutoDepthStencilFormat = wined3dformat_from_d3dformat(present_parameters->AutoDepthStencilFormat); - wined3d_parameters.Flags = present_parameters->Flags; - wined3d_parameters.FullScreen_RefreshRateInHz = present_parameters->FullScreen_RefreshRateInHz; - wined3d_parameters.PresentationInterval = present_parameters->FullScreen_PresentationInterval; - wined3d_parameters.AutoRestoreDisplayMode = TRUE; + desc.backbuffer_width = present_parameters->BackBufferWidth; + desc.backbuffer_height = present_parameters->BackBufferHeight; + desc.backbuffer_format = wined3dformat_from_d3dformat(present_parameters->BackBufferFormat); + desc.backbuffer_count = max(1, present_parameters->BackBufferCount); + desc.multisample_type = present_parameters->MultiSampleType; + desc.multisample_quality = 0; /* d3d9 only */ + desc.swap_effect = present_parameters->SwapEffect; + desc.device_window = present_parameters->hDeviceWindow; + desc.windowed = present_parameters->Windowed; + desc.enable_auto_depth_stencil = present_parameters->EnableAutoDepthStencil; + desc.auto_depth_stencil_format = wined3dformat_from_d3dformat(present_parameters->AutoDepthStencilFormat); + desc.flags = present_parameters->Flags; + desc.refresh_rate = present_parameters->FullScreen_RefreshRateInHz; + desc.swap_interval = present_parameters->FullScreen_PresentationInterval; + desc.auto_restore_display_mode = TRUE; wined3d_mutex_lock(); - hr = wined3d_swapchain_create(device->wined3d_device, &wined3d_parameters, + hr = wined3d_swapchain_create(device->wined3d_device, &desc, SURFACE_OPENGL, swapchain, &d3d8_swapchain_wined3d_parent_ops, &swapchain->wined3d_swapchain); wined3d_mutex_unlock(); - present_parameters->BackBufferWidth = wined3d_parameters.BackBufferWidth; - present_parameters->BackBufferHeight = wined3d_parameters.BackBufferHeight; - present_parameters->BackBufferFormat = d3dformat_from_wined3dformat(wined3d_parameters.BackBufferFormat); - present_parameters->BackBufferCount = wined3d_parameters.BackBufferCount; - present_parameters->MultiSampleType = wined3d_parameters.MultiSampleType; - present_parameters->SwapEffect = wined3d_parameters.SwapEffect; - present_parameters->hDeviceWindow = wined3d_parameters.hDeviceWindow; - present_parameters->Windowed = wined3d_parameters.Windowed; - present_parameters->EnableAutoDepthStencil = wined3d_parameters.EnableAutoDepthStencil; - present_parameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(wined3d_parameters.AutoDepthStencilFormat); - present_parameters->Flags = wined3d_parameters.Flags; - present_parameters->FullScreen_RefreshRateInHz = wined3d_parameters.FullScreen_RefreshRateInHz; - present_parameters->FullScreen_PresentationInterval = wined3d_parameters.PresentationInterval; + present_parameters->BackBufferWidth = desc.backbuffer_width; + present_parameters->BackBufferHeight = desc.backbuffer_height; + present_parameters->BackBufferFormat = d3dformat_from_wined3dformat(desc.backbuffer_format); + present_parameters->BackBufferCount = desc.backbuffer_count; + present_parameters->MultiSampleType = desc.multisample_type; + present_parameters->SwapEffect = desc.swap_effect; + present_parameters->hDeviceWindow = desc.device_window; + present_parameters->Windowed = desc.windowed; + present_parameters->EnableAutoDepthStencil = desc.enable_auto_depth_stencil; + present_parameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(desc.auto_depth_stencil_format); + present_parameters->Flags = desc.flags; + present_parameters->FullScreen_RefreshRateInHz = desc.refresh_rate; + present_parameters->FullScreen_PresentationInterval = desc.swap_interval; if (FAILED(hr)) { diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index cdaac6db886..f4686e35548 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -549,7 +549,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_Reset(IDirect3DDevi D3DPRESENT_PARAMETERS *pPresentationParameters) { IDirect3DDevice9Impl *This = impl_from_IDirect3DDevice9Ex(iface); - WINED3DPRESENT_PARAMETERS localParameters; + struct wined3d_swapchain_desc swapchain_desc; HRESULT hr; TRACE("iface %p, present_parameters %p.\n", iface, pPresentationParameters); @@ -564,23 +564,23 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3DDevice9Impl_Reset(IDirect3DDevi */ wined3d_mutex_lock(); - localParameters.BackBufferWidth = pPresentationParameters->BackBufferWidth; - localParameters.BackBufferHeight = pPresentationParameters->BackBufferHeight; - localParameters.BackBufferFormat = wined3dformat_from_d3dformat(pPresentationParameters->BackBufferFormat); - localParameters.BackBufferCount = pPresentationParameters->BackBufferCount; - localParameters.MultiSampleType = pPresentationParameters->MultiSampleType; - localParameters.MultiSampleQuality = pPresentationParameters->MultiSampleQuality; - localParameters.SwapEffect = pPresentationParameters->SwapEffect; - localParameters.hDeviceWindow = pPresentationParameters->hDeviceWindow; - localParameters.Windowed = pPresentationParameters->Windowed; - localParameters.EnableAutoDepthStencil = pPresentationParameters->EnableAutoDepthStencil; - localParameters.AutoDepthStencilFormat = wined3dformat_from_d3dformat(pPresentationParameters->AutoDepthStencilFormat); - localParameters.Flags = pPresentationParameters->Flags; - localParameters.FullScreen_RefreshRateInHz = pPresentationParameters->FullScreen_RefreshRateInHz; - localParameters.PresentationInterval = pPresentationParameters->PresentationInterval; - localParameters.AutoRestoreDisplayMode = TRUE; - - hr = wined3d_device_reset(This->wined3d_device, &localParameters, reset_enum_callback); + swapchain_desc.backbuffer_width = pPresentationParameters->BackBufferWidth; + swapchain_desc.backbuffer_height = pPresentationParameters->BackBufferHeight; + swapchain_desc.backbuffer_format = wined3dformat_from_d3dformat(pPresentationParameters->BackBufferFormat); + swapchain_desc.backbuffer_count = pPresentationParameters->BackBufferCount; + swapchain_desc.multisample_type = pPresentationParameters->MultiSampleType; + swapchain_desc.multisample_quality = pPresentationParameters->MultiSampleQuality; + swapchain_desc.swap_effect = pPresentationParameters->SwapEffect; + swapchain_desc.device_window = pPresentationParameters->hDeviceWindow; + swapchain_desc.windowed = pPresentationParameters->Windowed; + swapchain_desc.enable_auto_depth_stencil = pPresentationParameters->EnableAutoDepthStencil; + swapchain_desc.auto_depth_stencil_format = wined3dformat_from_d3dformat(pPresentationParameters->AutoDepthStencilFormat); + swapchain_desc.flags = pPresentationParameters->Flags; + swapchain_desc.refresh_rate = pPresentationParameters->FullScreen_RefreshRateInHz; + swapchain_desc.swap_interval = pPresentationParameters->PresentationInterval; + swapchain_desc.auto_restore_display_mode = TRUE; + + hr = wined3d_device_reset(This->wined3d_device, &swapchain_desc, reset_enum_callback); if (FAILED(hr)) This->notreset = TRUE; else @@ -3243,30 +3243,30 @@ static HRESULT CDECL device_parent_create_volume(struct wined3d_device_parent *d } static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent *device_parent, - WINED3DPRESENT_PARAMETERS *present_parameters, struct wined3d_swapchain **swapchain) + struct wined3d_swapchain_desc *desc, struct wined3d_swapchain **swapchain) { struct IDirect3DDevice9Impl *device = device_from_device_parent(device_parent); D3DPRESENT_PARAMETERS local_parameters; IDirect3DSwapChain9 *d3d_swapchain; HRESULT hr; - TRACE("device_parent %p, present_parameters %p, swapchain %p\n", device_parent, present_parameters, swapchain); + TRACE("device_parent %p, desc %p, swapchain %p\n", device_parent, desc, swapchain); /* Copy the presentation parameters */ - local_parameters.BackBufferWidth = present_parameters->BackBufferWidth; - local_parameters.BackBufferHeight = present_parameters->BackBufferHeight; - local_parameters.BackBufferFormat = d3dformat_from_wined3dformat(present_parameters->BackBufferFormat); - local_parameters.BackBufferCount = present_parameters->BackBufferCount; - local_parameters.MultiSampleType = present_parameters->MultiSampleType; - local_parameters.MultiSampleQuality = present_parameters->MultiSampleQuality; - local_parameters.SwapEffect = present_parameters->SwapEffect; - local_parameters.hDeviceWindow = present_parameters->hDeviceWindow; - local_parameters.Windowed = present_parameters->Windowed; - local_parameters.EnableAutoDepthStencil = present_parameters->EnableAutoDepthStencil; - local_parameters.AutoDepthStencilFormat = d3dformat_from_wined3dformat(present_parameters->AutoDepthStencilFormat); - local_parameters.Flags = present_parameters->Flags; - local_parameters.FullScreen_RefreshRateInHz = present_parameters->FullScreen_RefreshRateInHz; - local_parameters.PresentationInterval = present_parameters->PresentationInterval; + local_parameters.BackBufferWidth = desc->backbuffer_width; + local_parameters.BackBufferHeight = desc->backbuffer_height; + local_parameters.BackBufferFormat = d3dformat_from_wined3dformat(desc->backbuffer_format); + local_parameters.BackBufferCount = desc->backbuffer_count; + local_parameters.MultiSampleType = desc->multisample_type; + local_parameters.MultiSampleQuality = desc->multisample_quality; + local_parameters.SwapEffect = desc->swap_effect; + local_parameters.hDeviceWindow = desc->device_window; + local_parameters.Windowed = desc->windowed; + local_parameters.EnableAutoDepthStencil = desc->enable_auto_depth_stencil; + local_parameters.AutoDepthStencilFormat = d3dformat_from_wined3dformat(desc->auto_depth_stencil_format); + local_parameters.Flags = desc->flags; + local_parameters.FullScreen_RefreshRateInHz = desc->refresh_rate; + local_parameters.PresentationInterval = desc->swap_interval; hr = IDirect3DDevice9Impl_CreateAdditionalSwapChain(&device->IDirect3DDevice9Ex_iface, &local_parameters, &d3d_swapchain); @@ -3282,20 +3282,20 @@ static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent IDirect3DSwapChain9_Release((IDirect3DSwapChain9 *)d3d_swapchain); /* Copy back the presentation parameters */ - present_parameters->BackBufferWidth = local_parameters.BackBufferWidth; - present_parameters->BackBufferHeight = local_parameters.BackBufferHeight; - present_parameters->BackBufferFormat = wined3dformat_from_d3dformat(local_parameters.BackBufferFormat); - present_parameters->BackBufferCount = local_parameters.BackBufferCount; - present_parameters->MultiSampleType = local_parameters.MultiSampleType; - present_parameters->MultiSampleQuality = local_parameters.MultiSampleQuality; - present_parameters->SwapEffect = local_parameters.SwapEffect; - present_parameters->hDeviceWindow = local_parameters.hDeviceWindow; - present_parameters->Windowed = local_parameters.Windowed; - present_parameters->EnableAutoDepthStencil = local_parameters.EnableAutoDepthStencil; - present_parameters->AutoDepthStencilFormat = wined3dformat_from_d3dformat(local_parameters.AutoDepthStencilFormat); - present_parameters->Flags = local_parameters.Flags; - present_parameters->FullScreen_RefreshRateInHz = local_parameters.FullScreen_RefreshRateInHz; - present_parameters->PresentationInterval = local_parameters.PresentationInterval; + desc->backbuffer_width = local_parameters.BackBufferWidth; + desc->backbuffer_height = local_parameters.BackBufferHeight; + desc->backbuffer_format = wined3dformat_from_d3dformat(local_parameters.BackBufferFormat); + desc->backbuffer_count = local_parameters.BackBufferCount; + desc->multisample_type = local_parameters.MultiSampleType; + desc->multisample_quality = local_parameters.MultiSampleQuality; + desc->swap_effect = local_parameters.SwapEffect; + desc->device_window = local_parameters.hDeviceWindow; + desc->windowed = local_parameters.Windowed; + desc->enable_auto_depth_stencil = local_parameters.EnableAutoDepthStencil; + desc->auto_depth_stencil_format = wined3dformat_from_d3dformat(local_parameters.AutoDepthStencilFormat); + desc->flags = local_parameters.Flags; + desc->refresh_rate = local_parameters.FullScreen_RefreshRateInHz; + desc->swap_interval = local_parameters.PresentationInterval; return hr; } @@ -3328,10 +3328,11 @@ static void setup_fpu(void) #endif } -HRESULT device_init(IDirect3DDevice9Impl *device, IDirect3D9Impl *parent, struct wined3d *wined3d, UINT adapter, D3DDEVTYPE device_type, - HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode) +HRESULT device_init(IDirect3DDevice9Impl *device, IDirect3D9Impl *parent, struct wined3d *wined3d, + UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, + D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode) { - WINED3DPRESENT_PARAMETERS *wined3d_parameters; + struct wined3d_swapchain_desc *swapchain_desc; UINT i, count = 1; HRESULT hr; @@ -3388,8 +3389,8 @@ HRESULT device_init(IDirect3DDevice9Impl *device, IDirect3D9Impl *parent, struct } } - wined3d_parameters = HeapAlloc(GetProcessHeap(), 0, sizeof(*wined3d_parameters) * count); - if (!wined3d_parameters) + swapchain_desc = HeapAlloc(GetProcessHeap(), 0, sizeof(*swapchain_desc) * count); + if (!swapchain_desc) { ERR("Failed to allocate wined3d parameters.\n"); wined3d_device_decref(device->wined3d_device); @@ -3399,30 +3400,30 @@ HRESULT device_init(IDirect3DDevice9Impl *device, IDirect3D9Impl *parent, struct for (i = 0; i < count; ++i) { - wined3d_parameters[i].BackBufferWidth = parameters[i].BackBufferWidth; - wined3d_parameters[i].BackBufferHeight = parameters[i].BackBufferHeight; - wined3d_parameters[i].BackBufferFormat = wined3dformat_from_d3dformat(parameters[i].BackBufferFormat); - wined3d_parameters[i].BackBufferCount = parameters[i].BackBufferCount; - wined3d_parameters[i].MultiSampleType = parameters[i].MultiSampleType; - wined3d_parameters[i].MultiSampleQuality = parameters[i].MultiSampleQuality; - wined3d_parameters[i].SwapEffect = parameters[i].SwapEffect; - wined3d_parameters[i].hDeviceWindow = parameters[i].hDeviceWindow; - wined3d_parameters[i].Windowed = parameters[i].Windowed; - wined3d_parameters[i].EnableAutoDepthStencil = parameters[i].EnableAutoDepthStencil; - wined3d_parameters[i].AutoDepthStencilFormat = + swapchain_desc[i].backbuffer_width = parameters[i].BackBufferWidth; + swapchain_desc[i].backbuffer_height = parameters[i].BackBufferHeight; + swapchain_desc[i].backbuffer_format = wined3dformat_from_d3dformat(parameters[i].BackBufferFormat); + swapchain_desc[i].backbuffer_count = parameters[i].BackBufferCount; + swapchain_desc[i].multisample_type = parameters[i].MultiSampleType; + swapchain_desc[i].multisample_quality = parameters[i].MultiSampleQuality; + swapchain_desc[i].swap_effect = parameters[i].SwapEffect; + swapchain_desc[i].device_window = parameters[i].hDeviceWindow; + swapchain_desc[i].windowed = parameters[i].Windowed; + swapchain_desc[i].enable_auto_depth_stencil = parameters[i].EnableAutoDepthStencil; + swapchain_desc[i].auto_depth_stencil_format = wined3dformat_from_d3dformat(parameters[i].AutoDepthStencilFormat); - wined3d_parameters[i].Flags = parameters[i].Flags; - wined3d_parameters[i].FullScreen_RefreshRateInHz = parameters[i].FullScreen_RefreshRateInHz; - wined3d_parameters[i].PresentationInterval = parameters[i].PresentationInterval; - wined3d_parameters[i].AutoRestoreDisplayMode = TRUE; + swapchain_desc[i].flags = parameters[i].Flags; + swapchain_desc[i].refresh_rate = parameters[i].FullScreen_RefreshRateInHz; + swapchain_desc[i].swap_interval = parameters[i].PresentationInterval; + swapchain_desc[i].auto_restore_display_mode = TRUE; } - hr = wined3d_device_init_3d(device->wined3d_device, wined3d_parameters); + hr = wined3d_device_init_3d(device->wined3d_device, swapchain_desc); if (FAILED(hr)) { WARN("Failed to initialize 3D, hr %#x.\n", hr); wined3d_device_release_focus_window(device->wined3d_device); - HeapFree(GetProcessHeap(), 0, wined3d_parameters); + HeapFree(GetProcessHeap(), 0, swapchain_desc); wined3d_device_decref(device->wined3d_device); wined3d_mutex_unlock(); return hr; @@ -3432,23 +3433,23 @@ HRESULT device_init(IDirect3DDevice9Impl *device, IDirect3D9Impl *parent, struct for (i = 0; i < count; ++i) { - parameters[i].BackBufferWidth = wined3d_parameters[i].BackBufferWidth; - parameters[i].BackBufferHeight = wined3d_parameters[i].BackBufferHeight; - parameters[i].BackBufferFormat = d3dformat_from_wined3dformat(wined3d_parameters[i].BackBufferFormat); - parameters[i].BackBufferCount = wined3d_parameters[i].BackBufferCount; - parameters[i].MultiSampleType = wined3d_parameters[i].MultiSampleType; - parameters[i].MultiSampleQuality = wined3d_parameters[i].MultiSampleQuality; - parameters[i].SwapEffect = wined3d_parameters[i].SwapEffect; - parameters[i].hDeviceWindow = wined3d_parameters[i].hDeviceWindow; - parameters[i].Windowed = wined3d_parameters[i].Windowed; - parameters[i].EnableAutoDepthStencil = wined3d_parameters[i].EnableAutoDepthStencil; + parameters[i].BackBufferWidth = swapchain_desc[i].backbuffer_width; + parameters[i].BackBufferHeight = swapchain_desc[i].backbuffer_height; + parameters[i].BackBufferFormat = d3dformat_from_wined3dformat(swapchain_desc[i].backbuffer_format); + parameters[i].BackBufferCount = swapchain_desc[i].backbuffer_count; + parameters[i].MultiSampleType = swapchain_desc[i].multisample_type; + parameters[i].MultiSampleQuality = swapchain_desc[i].multisample_quality; + parameters[i].SwapEffect = swapchain_desc[i].swap_effect; + parameters[i].hDeviceWindow = swapchain_desc[i].device_window; + parameters[i].Windowed = swapchain_desc[i].windowed; + parameters[i].EnableAutoDepthStencil = swapchain_desc[i].enable_auto_depth_stencil; parameters[i].AutoDepthStencilFormat = - d3dformat_from_wined3dformat(wined3d_parameters[i].AutoDepthStencilFormat); - parameters[i].Flags = wined3d_parameters[i].Flags; - parameters[i].FullScreen_RefreshRateInHz = wined3d_parameters[i].FullScreen_RefreshRateInHz; - parameters[i].PresentationInterval = wined3d_parameters[i].PresentationInterval; + d3dformat_from_wined3dformat(swapchain_desc[i].auto_depth_stencil_format); + parameters[i].Flags = swapchain_desc[i].flags; + parameters[i].FullScreen_RefreshRateInHz = swapchain_desc[i].refresh_rate; + parameters[i].PresentationInterval = swapchain_desc[i].swap_interval; } - HeapFree(GetProcessHeap(), 0, wined3d_parameters); + HeapFree(GetProcessHeap(), 0, swapchain_desc); /* Initialize the converted declaration array. This creates a valid pointer * and when adding decls HeapReAlloc() can be used without further checking. */ diff --git a/dlls/d3d9/swapchain.c b/dlls/d3d9/swapchain.c index c946723714e..be0c244a622 100644 --- a/dlls/d3d9/swapchain.c +++ b/dlls/d3d9/swapchain.c @@ -181,31 +181,33 @@ static HRESULT WINAPI IDirect3DSwapChain9Impl_GetDevice(IDirect3DSwapChain9 *ifa return D3D_OK; } -static HRESULT WINAPI IDirect3DSwapChain9Impl_GetPresentParameters(LPDIRECT3DSWAPCHAIN9 iface, D3DPRESENT_PARAMETERS* pPresentationParameters) { +static HRESULT WINAPI IDirect3DSwapChain9Impl_GetPresentParameters(IDirect3DSwapChain9 *iface, + D3DPRESENT_PARAMETERS *pPresentationParameters) +{ IDirect3DSwapChain9Impl *This = (IDirect3DSwapChain9Impl *)iface; - WINED3DPRESENT_PARAMETERS winePresentParameters; + struct wined3d_swapchain_desc desc; HRESULT hr; TRACE("iface %p, parameters %p.\n", iface, pPresentationParameters); wined3d_mutex_lock(); - hr = wined3d_swapchain_get_present_parameters(This->wined3d_swapchain, &winePresentParameters); + hr = wined3d_swapchain_get_desc(This->wined3d_swapchain, &desc); wined3d_mutex_unlock(); - pPresentationParameters->BackBufferWidth = winePresentParameters.BackBufferWidth; - pPresentationParameters->BackBufferHeight = winePresentParameters.BackBufferHeight; - pPresentationParameters->BackBufferFormat = d3dformat_from_wined3dformat(winePresentParameters.BackBufferFormat); - pPresentationParameters->BackBufferCount = winePresentParameters.BackBufferCount; - pPresentationParameters->MultiSampleType = winePresentParameters.MultiSampleType; - pPresentationParameters->MultiSampleQuality = winePresentParameters.MultiSampleQuality; - pPresentationParameters->SwapEffect = winePresentParameters.SwapEffect; - pPresentationParameters->hDeviceWindow = winePresentParameters.hDeviceWindow; - pPresentationParameters->Windowed = winePresentParameters.Windowed; - pPresentationParameters->EnableAutoDepthStencil = winePresentParameters.EnableAutoDepthStencil; - pPresentationParameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(winePresentParameters.AutoDepthStencilFormat); - pPresentationParameters->Flags = winePresentParameters.Flags; - pPresentationParameters->FullScreen_RefreshRateInHz = winePresentParameters.FullScreen_RefreshRateInHz; - pPresentationParameters->PresentationInterval = winePresentParameters.PresentationInterval; + pPresentationParameters->BackBufferWidth = desc.backbuffer_width; + pPresentationParameters->BackBufferHeight = desc.backbuffer_height; + pPresentationParameters->BackBufferFormat = d3dformat_from_wined3dformat(desc.backbuffer_format); + pPresentationParameters->BackBufferCount = desc.backbuffer_count; + pPresentationParameters->MultiSampleType = desc.multisample_type; + pPresentationParameters->MultiSampleQuality = desc.multisample_quality; + pPresentationParameters->SwapEffect = desc.swap_effect; + pPresentationParameters->hDeviceWindow = desc.device_window; + pPresentationParameters->Windowed = desc.windowed; + pPresentationParameters->EnableAutoDepthStencil = desc.enable_auto_depth_stencil; + pPresentationParameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(desc.auto_depth_stencil_format); + pPresentationParameters->Flags = desc.flags; + pPresentationParameters->FullScreen_RefreshRateInHz = desc.refresh_rate; + pPresentationParameters->PresentationInterval = desc.swap_interval; return hr; } @@ -238,48 +240,48 @@ static const struct wined3d_parent_ops d3d9_swapchain_wined3d_parent_ops = HRESULT swapchain_init(IDirect3DSwapChain9Impl *swapchain, IDirect3DDevice9Impl *device, D3DPRESENT_PARAMETERS *present_parameters) { - WINED3DPRESENT_PARAMETERS wined3d_parameters; + struct wined3d_swapchain_desc desc; HRESULT hr; swapchain->ref = 1; swapchain->lpVtbl = &Direct3DSwapChain9_Vtbl; - wined3d_parameters.BackBufferWidth = present_parameters->BackBufferWidth; - wined3d_parameters.BackBufferHeight = present_parameters->BackBufferHeight; - wined3d_parameters.BackBufferFormat = wined3dformat_from_d3dformat(present_parameters->BackBufferFormat); - wined3d_parameters.BackBufferCount = max(1, present_parameters->BackBufferCount); - wined3d_parameters.MultiSampleType = present_parameters->MultiSampleType; - wined3d_parameters.MultiSampleQuality = present_parameters->MultiSampleQuality; - wined3d_parameters.SwapEffect = present_parameters->SwapEffect; - wined3d_parameters.hDeviceWindow = present_parameters->hDeviceWindow; - wined3d_parameters.Windowed = present_parameters->Windowed; - wined3d_parameters.EnableAutoDepthStencil = present_parameters->EnableAutoDepthStencil; - wined3d_parameters.AutoDepthStencilFormat = wined3dformat_from_d3dformat(present_parameters->AutoDepthStencilFormat); - wined3d_parameters.Flags = present_parameters->Flags; - wined3d_parameters.FullScreen_RefreshRateInHz = present_parameters->FullScreen_RefreshRateInHz; - wined3d_parameters.PresentationInterval = present_parameters->PresentationInterval; - wined3d_parameters.AutoRestoreDisplayMode = TRUE; + desc.backbuffer_width = present_parameters->BackBufferWidth; + desc.backbuffer_height = present_parameters->BackBufferHeight; + desc.backbuffer_format = wined3dformat_from_d3dformat(present_parameters->BackBufferFormat); + desc.backbuffer_count = max(1, present_parameters->BackBufferCount); + desc.multisample_type = present_parameters->MultiSampleType; + desc.multisample_quality = present_parameters->MultiSampleQuality; + desc.swap_effect = present_parameters->SwapEffect; + desc.device_window = present_parameters->hDeviceWindow; + desc.windowed = present_parameters->Windowed; + desc.enable_auto_depth_stencil = present_parameters->EnableAutoDepthStencil; + desc.auto_depth_stencil_format = wined3dformat_from_d3dformat(present_parameters->AutoDepthStencilFormat); + desc.flags = present_parameters->Flags; + desc.refresh_rate = present_parameters->FullScreen_RefreshRateInHz; + desc.swap_interval = present_parameters->PresentationInterval; + desc.auto_restore_display_mode = TRUE; wined3d_mutex_lock(); - hr = wined3d_swapchain_create(device->wined3d_device, &wined3d_parameters, + hr = wined3d_swapchain_create(device->wined3d_device, &desc, SURFACE_OPENGL, swapchain, &d3d9_swapchain_wined3d_parent_ops, &swapchain->wined3d_swapchain); wined3d_mutex_unlock(); - present_parameters->BackBufferWidth = wined3d_parameters.BackBufferWidth; - present_parameters->BackBufferHeight = wined3d_parameters.BackBufferHeight; - present_parameters->BackBufferFormat = d3dformat_from_wined3dformat(wined3d_parameters.BackBufferFormat); - present_parameters->BackBufferCount = wined3d_parameters.BackBufferCount; - present_parameters->MultiSampleType = wined3d_parameters.MultiSampleType; - present_parameters->MultiSampleQuality = wined3d_parameters.MultiSampleQuality; - present_parameters->SwapEffect = wined3d_parameters.SwapEffect; - present_parameters->hDeviceWindow = wined3d_parameters.hDeviceWindow; - present_parameters->Windowed = wined3d_parameters.Windowed; - present_parameters->EnableAutoDepthStencil = wined3d_parameters.EnableAutoDepthStencil; - present_parameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(wined3d_parameters.AutoDepthStencilFormat); - present_parameters->Flags = wined3d_parameters.Flags; - present_parameters->FullScreen_RefreshRateInHz = wined3d_parameters.FullScreen_RefreshRateInHz; - present_parameters->PresentationInterval = wined3d_parameters.PresentationInterval; + present_parameters->BackBufferWidth = desc.backbuffer_width; + present_parameters->BackBufferHeight = desc.backbuffer_height; + present_parameters->BackBufferFormat = d3dformat_from_wined3dformat(desc.backbuffer_format); + present_parameters->BackBufferCount = desc.backbuffer_count; + present_parameters->MultiSampleType = desc.multisample_type; + present_parameters->MultiSampleQuality = desc.multisample_quality; + present_parameters->SwapEffect = desc.swap_effect; + present_parameters->hDeviceWindow = desc.device_window; + present_parameters->Windowed = desc.windowed; + present_parameters->EnableAutoDepthStencil = desc.enable_auto_depth_stencil; + present_parameters->AutoDepthStencilFormat = d3dformat_from_wined3dformat(desc.auto_depth_stencil_format); + present_parameters->Flags = desc.flags; + present_parameters->FullScreen_RefreshRateInHz = desc.refresh_rate; + present_parameters->PresentationInterval = desc.swap_interval; if (FAILED(hr)) { diff --git a/dlls/ddraw/ddraw.c b/dlls/ddraw/ddraw.c index 2d1e59b0856..03d8b1c675b 100644 --- a/dlls/ddraw/ddraw.c +++ b/dlls/ddraw/ddraw.c @@ -617,9 +617,9 @@ static HRESULT ddraw_set_focus_window(IDirectDrawImpl *ddraw, HWND window) } static HRESULT ddraw_attach_d3d_device(IDirectDrawImpl *ddraw, - WINED3DPRESENT_PARAMETERS *presentation_parameters) + struct wined3d_swapchain_desc *swapchain_desc) { - HWND window = presentation_parameters->hDeviceWindow; + HWND window = swapchain_desc->device_window; HRESULT hr; TRACE("ddraw %p.\n", ddraw); @@ -638,7 +638,7 @@ static HRESULT ddraw_attach_d3d_device(IDirectDrawImpl *ddraw, ShowWindow(window, SW_HIDE); /* Just to be sure */ WARN("No window for the Direct3DDevice, created hidden window %p.\n", window); - presentation_parameters->hDeviceWindow = window; + swapchain_desc->device_window = window; } else { @@ -649,7 +649,7 @@ static HRESULT ddraw_attach_d3d_device(IDirectDrawImpl *ddraw, /* Set this NOW, otherwise creating the depth stencil surface will cause a * recursive loop until ram or emulated video memory is full. */ ddraw->d3d_initialized = TRUE; - hr = wined3d_device_init_3d(ddraw->wined3d_device, presentation_parameters); + hr = wined3d_device_init_3d(ddraw->wined3d_device, swapchain_desc); if (FAILED(hr)) { ddraw->d3d_initialized = FALSE; @@ -673,7 +673,7 @@ static HRESULT ddraw_attach_d3d_device(IDirectDrawImpl *ddraw, static HRESULT ddraw_create_swapchain(IDirectDrawImpl *ddraw, HWND window, BOOL windowed) { - WINED3DPRESENT_PARAMETERS presentation_parameters; + struct wined3d_swapchain_desc swapchain_desc; struct wined3d_display_mode mode; HRESULT hr = WINED3D_OK; @@ -688,18 +688,18 @@ static HRESULT ddraw_create_swapchain(IDirectDrawImpl *ddraw, HWND window, BOOL return hr; } - memset(&presentation_parameters, 0, sizeof(presentation_parameters)); - presentation_parameters.BackBufferWidth = mode.width; - presentation_parameters.BackBufferHeight = mode.height; - presentation_parameters.BackBufferFormat = mode.format_id; - presentation_parameters.SwapEffect = WINED3DSWAPEFFECT_COPY; - presentation_parameters.hDeviceWindow = window; - presentation_parameters.Windowed = windowed; + memset(&swapchain_desc, 0, sizeof(swapchain_desc)); + swapchain_desc.backbuffer_width = mode.width; + swapchain_desc.backbuffer_height = mode.height; + swapchain_desc.backbuffer_format = mode.format_id; + swapchain_desc.swap_effect = WINED3DSWAPEFFECT_COPY; + swapchain_desc.device_window = window; + swapchain_desc.windowed = windowed; if (DefaultSurfaceType == SURFACE_OPENGL) - hr = ddraw_attach_d3d_device(ddraw, &presentation_parameters); + hr = ddraw_attach_d3d_device(ddraw, &swapchain_desc); else - hr = wined3d_device_init_gdi(ddraw->wined3d_device, &presentation_parameters); + hr = wined3d_device_init_gdi(ddraw->wined3d_device, &swapchain_desc); if (FAILED(hr)) { @@ -2919,21 +2919,21 @@ static HRESULT CreateSurface(IDirectDrawImpl *ddraw, DDSURFACEDESC2 *DDSD, if ((desc2.ddsCaps.dwCaps & DDSCAPS_PRIMARYSURFACE) && (ddraw->cooperative_level & DDSCL_EXCLUSIVE)) { - WINED3DPRESENT_PARAMETERS presentation_parameters; + struct wined3d_swapchain_desc swapchain_desc; - hr = wined3d_swapchain_get_present_parameters(ddraw->wined3d_swapchain, &presentation_parameters); + hr = wined3d_swapchain_get_desc(ddraw->wined3d_swapchain, &swapchain_desc); if (FAILED(hr)) { ERR("Failed to get present parameters.\n"); return hr; } - presentation_parameters.BackBufferWidth = mode.width; - presentation_parameters.BackBufferHeight = mode.height; - presentation_parameters.BackBufferFormat = mode.format_id; + swapchain_desc.backbuffer_width = mode.width; + swapchain_desc.backbuffer_height = mode.height; + swapchain_desc.backbuffer_format = mode.format_id; hr = wined3d_device_reset(ddraw->wined3d_device, - &presentation_parameters, ddraw_reset_enum_callback); + &swapchain_desc, ddraw_reset_enum_callback); if (FAILED(hr)) { ERR("Failed to reset device.\n"); @@ -5433,12 +5433,12 @@ static HRESULT CDECL device_parent_create_volume(struct wined3d_device_parent *d } static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent *device_parent, - WINED3DPRESENT_PARAMETERS *present_parameters, struct wined3d_swapchain **swapchain) + struct wined3d_swapchain_desc *desc, struct wined3d_swapchain **swapchain) { struct IDirectDrawImpl *ddraw = ddraw_from_device_parent(device_parent); HRESULT hr; - TRACE("device_parent %p, present_parameters %p, swapchain %p.\n", device_parent, present_parameters, swapchain); + TRACE("device_parent %p, desc %p, swapchain %p.\n", device_parent, desc, swapchain); if (ddraw->wined3d_swapchain) { @@ -5446,7 +5446,7 @@ static HRESULT CDECL device_parent_create_swapchain(struct wined3d_device_parent return E_FAIL; } - hr = wined3d_swapchain_create(ddraw->wined3d_device, present_parameters, + hr = wined3d_swapchain_create(ddraw->wined3d_device, desc, DefaultSurfaceType, NULL, &ddraw_null_wined3d_parent_ops, swapchain); if (FAILED(hr)) WARN("Failed to create swapchain, hr %#x.\n", hr); diff --git a/dlls/dxgi/device.c b/dlls/dxgi/device.c index 9cd45f93303..77a99d44f74 100644 --- a/dlls/dxgi/device.c +++ b/dlls/dxgi/device.c @@ -290,14 +290,14 @@ static HRESULT STDMETHODCALLTYPE dxgi_device_create_surface(IWineDXGIDevice *ifa } static HRESULT STDMETHODCALLTYPE dxgi_device_create_swapchain(IWineDXGIDevice *iface, - WINED3DPRESENT_PARAMETERS *present_parameters, struct wined3d_swapchain **wined3d_swapchain) + struct wined3d_swapchain_desc *desc, struct wined3d_swapchain **wined3d_swapchain) { struct dxgi_device *This = impl_from_IWineDXGIDevice(iface); struct dxgi_swapchain *object; HRESULT hr; - TRACE("iface %p, present_parameters %p, wined3d_swapchain %p.\n", - iface, present_parameters, wined3d_swapchain); + TRACE("iface %p, desc %p, wined3d_swapchain %p.\n", + iface, desc, wined3d_swapchain); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) @@ -306,7 +306,7 @@ static HRESULT STDMETHODCALLTYPE dxgi_device_create_swapchain(IWineDXGIDevice *i return E_OUTOFMEMORY; } - hr = dxgi_swapchain_init(object, This, present_parameters); + hr = dxgi_swapchain_init(object, This, desc); if (FAILED(hr)) { WARN("Failed to initialize swapchain, hr %#x.\n", hr); diff --git a/dlls/dxgi/dxgi_private.h b/dlls/dxgi/dxgi_private.h index 047e08308ec..533f1faf43a 100644 --- a/dlls/dxgi/dxgi_private.h +++ b/dlls/dxgi/dxgi_private.h @@ -130,7 +130,7 @@ struct dxgi_swapchain }; HRESULT dxgi_swapchain_init(struct dxgi_swapchain *swapchain, struct dxgi_device *device, - WINED3DPRESENT_PARAMETERS *present_parameters) DECLSPEC_HIDDEN; + struct wined3d_swapchain_desc *desc) DECLSPEC_HIDDEN; /* IDXGISurface */ struct dxgi_surface diff --git a/dlls/dxgi/factory.c b/dlls/dxgi/factory.c index c7a11cf1cb6..44ddce3773f 100644 --- a/dlls/dxgi/factory.c +++ b/dlls/dxgi/factory.c @@ -161,13 +161,11 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_GetWindowAssociation(IWineDXGIFact return E_NOTIMPL; } -/* TODO: The DXGI swapchain desc is a bit nicer than WINED3DPRESENT_PARAMETERS, - * change wined3d to use a structure more similar to DXGI. */ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IWineDXGIFactory *iface, IUnknown *device, DXGI_SWAP_CHAIN_DESC *desc, IDXGISwapChain **swapchain) { - WINED3DPRESENT_PARAMETERS present_parameters; struct wined3d_swapchain *wined3d_swapchain; + struct wined3d_swapchain_desc wined3d_desc; struct wined3d_device *wined3d_device; IWineDXGIDevice *dxgi_device; UINT count; @@ -200,31 +198,30 @@ static HRESULT STDMETHODCALLTYPE dxgi_factory_CreateSwapChain(IWineDXGIFactory * FIXME("Ignoring SwapEffect and Flags\n"); - present_parameters.BackBufferWidth = desc->BufferDesc.Width; - present_parameters.BackBufferHeight = desc->BufferDesc.Height; - present_parameters.BackBufferFormat = wined3dformat_from_dxgi_format(desc->BufferDesc.Format); - present_parameters.BackBufferCount = desc->BufferCount; + wined3d_desc.backbuffer_width = desc->BufferDesc.Width; + 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) { - present_parameters.MultiSampleType = desc->SampleDesc.Count; - present_parameters.MultiSampleQuality = desc->SampleDesc.Quality; + wined3d_desc.multisample_type = desc->SampleDesc.Count; + wined3d_desc.multisample_quality = desc->SampleDesc.Quality; } else { - present_parameters.MultiSampleType = WINED3DMULTISAMPLE_NONE; - present_parameters.MultiSampleQuality = 0; + wined3d_desc.multisample_type = WINED3DMULTISAMPLE_NONE; + wined3d_desc.multisample_quality = 0; } - present_parameters.SwapEffect = WINED3DSWAPEFFECT_DISCARD; - present_parameters.hDeviceWindow = desc->OutputWindow; - present_parameters.Windowed = desc->Windowed; - present_parameters.EnableAutoDepthStencil = FALSE; - present_parameters.AutoDepthStencilFormat = 0; - present_parameters.Flags = 0; /* WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL? */ - present_parameters.FullScreen_RefreshRateInHz = - desc->BufferDesc.RefreshRate.Numerator / desc->BufferDesc.RefreshRate.Denominator; - present_parameters.PresentationInterval = WINED3DPRESENT_INTERVAL_DEFAULT; - - hr = wined3d_device_init_3d(wined3d_device, &present_parameters); + wined3d_desc.swap_effect = WINED3DSWAPEFFECT_DISCARD; + wined3d_desc.device_window = desc->OutputWindow; + wined3d_desc.windowed = desc->Windowed; + wined3d_desc.enable_auto_depth_stencil = FALSE; + wined3d_desc.auto_depth_stencil_format = 0; + wined3d_desc.flags = 0; /* WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL? */ + wined3d_desc.refresh_rate = desc->BufferDesc.RefreshRate.Numerator / desc->BufferDesc.RefreshRate.Denominator; + wined3d_desc.swap_interval = WINED3DPRESENT_INTERVAL_DEFAULT; + + hr = wined3d_device_init_3d(wined3d_device, &wined3d_desc); if (FAILED(hr)) { WARN("Failed to initialize 3D, returning %#x\n", hr); diff --git a/dlls/dxgi/swapchain.c b/dlls/dxgi/swapchain.c index 373403c5b1a..f0ccf32023e 100644 --- a/dlls/dxgi/swapchain.c +++ b/dlls/dxgi/swapchain.c @@ -272,14 +272,14 @@ static const struct wined3d_parent_ops dxgi_swapchain_wined3d_parent_ops = }; HRESULT dxgi_swapchain_init(struct dxgi_swapchain *swapchain, struct dxgi_device *device, - WINED3DPRESENT_PARAMETERS *present_parameters) + struct wined3d_swapchain_desc *desc) { HRESULT hr; swapchain->IDXGISwapChain_iface.lpVtbl = &dxgi_swapchain_vtbl; swapchain->refcount = 1; - hr = wined3d_swapchain_create(device->wined3d_device, present_parameters, + hr = wined3d_swapchain_create(device->wined3d_device, desc, SURFACE_OPENGL, swapchain, &dxgi_swapchain_wined3d_parent_ops, &swapchain->wined3d_swapchain); if (FAILED(hr)) diff --git a/dlls/wined3d/context.c b/dlls/wined3d/context.c index 9b0ae057e43..c567e01ff40 100644 --- a/dlls/wined3d/context.c +++ b/dlls/wined3d/context.c @@ -1441,7 +1441,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, goto out; } - switch (swapchain->presentParms.PresentationInterval) + switch (swapchain->desc.swap_interval) { case WINED3DPRESENT_INTERVAL_IMMEDIATE: swap_interval = 0; @@ -1460,7 +1460,7 @@ struct wined3d_context *context_create(struct wined3d_swapchain *swapchain, swap_interval = 4; break; default: - FIXME("Unknown presentation interval %08x\n", swapchain->presentParms.PresentationInterval); + FIXME("Unknown swap interval %#x.\n", swapchain->desc.swap_interval); swap_interval = 1; } diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index aca9306cc61..36b1208f8ac 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -1197,7 +1197,7 @@ void CDECL wined3d_device_release_focus_window(struct wined3d_device *device) } HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, - WINED3DPRESENT_PARAMETERS *present_parameters) + struct wined3d_swapchain_desc *swapchain_desc) { static const struct wined3d_color black = {0.0f, 0.0f, 0.0f, 0.0f}; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; @@ -1207,7 +1207,7 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, DWORD state; unsigned int i; - TRACE("device %p, present_parameters %p.\n", device, present_parameters); + TRACE("device %p, swapchain_desc %p.\n", device, swapchain_desc); if (device->d3d_initialized) return WINED3DERR_INVALIDCALL; @@ -1250,7 +1250,7 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, /* Setup the implicit swapchain. This also initializes a context. */ TRACE("Creating implicit swapchain\n"); hr = device->device_parent->ops->create_swapchain(device->device_parent, - present_parameters, &swapchain); + swapchain_desc, &swapchain); if (FAILED(hr)) { WARN("Failed to create implicit swapchain\n"); @@ -1345,7 +1345,7 @@ HRESULT CDECL wined3d_device_init_3d(struct wined3d_device *device, /* Clear the screen */ wined3d_device_clear(device, 0, NULL, WINED3DCLEAR_TARGET - | (present_parameters->EnableAutoDepthStencil ? WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL : 0), + | (swapchain_desc->enable_auto_depth_stencil ? WINED3DCLEAR_ZBUFFER | WINED3DCLEAR_STENCIL : 0), &black, 1.0f, 0); device->d3d_initialized = TRUE; @@ -1376,17 +1376,17 @@ err_out: } HRESULT CDECL wined3d_device_init_gdi(struct wined3d_device *device, - WINED3DPRESENT_PARAMETERS *present_parameters) + struct wined3d_swapchain_desc *swapchain_desc) { struct wined3d_swapchain *swapchain = NULL; HRESULT hr; - TRACE("device %p, present_parameters %p.\n", device, present_parameters); + TRACE("device %p, swapchain_desc %p.\n", device, swapchain_desc); /* Setup the implicit swapchain */ TRACE("Creating implicit swapchain\n"); hr = device->device_parent->ops->create_swapchain(device->device_parent, - present_parameters, &swapchain); + swapchain_desc, &swapchain); if (FAILED(hr)) { WARN("Failed to create implicit swapchain\n"); @@ -4950,7 +4950,7 @@ HRESULT CDECL wined3d_device_set_depth_stencil(struct wined3d_device *device, st if (prev) { - if (device->swapchains[0]->presentParms.Flags & WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL + if (device->swapchains[0]->desc.flags & WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL || prev->flags & SFLAG_DISCARD) { surface_modify_ds_location(prev, SFLAG_DS_DISCARDED, @@ -5217,7 +5217,7 @@ void CDECL wined3d_device_evict_managed_resources(struct wined3d_device *device) } static HRESULT updateSurfaceDesc(struct wined3d_surface *surface, - const WINED3DPRESENT_PARAMETERS *pPresentationParameters) + const struct wined3d_swapchain_desc *swapchain_desc) { struct wined3d_device *device = surface->resource.device; const struct wined3d_gl_info *gl_info = &device->adapter->gl_info; @@ -5231,28 +5231,32 @@ static HRESULT updateSurfaceDesc(struct wined3d_surface *surface, surface->resource.allocatedMemory = NULL; surface->flags &= ~SFLAG_DIBSECTION; } - surface->resource.width = pPresentationParameters->BackBufferWidth; - surface->resource.height = pPresentationParameters->BackBufferHeight; + surface->resource.width = swapchain_desc->backbuffer_width; + surface->resource.height = swapchain_desc->backbuffer_height; if (gl_info->supported[ARB_TEXTURE_NON_POWER_OF_TWO] || gl_info->supported[ARB_TEXTURE_RECTANGLE] || gl_info->supported[WINED3D_GL_NORMALIZED_TEXRECT]) { - surface->pow2Width = pPresentationParameters->BackBufferWidth; - surface->pow2Height = pPresentationParameters->BackBufferHeight; - } else { + surface->pow2Width = swapchain_desc->backbuffer_width; + surface->pow2Height = swapchain_desc->backbuffer_height; + } + else + { surface->pow2Width = surface->pow2Height = 1; - while (surface->pow2Width < pPresentationParameters->BackBufferWidth) surface->pow2Width <<= 1; - while (surface->pow2Height < pPresentationParameters->BackBufferHeight) surface->pow2Height <<= 1; + while (surface->pow2Width < swapchain_desc->backbuffer_width) + surface->pow2Width <<= 1; + while (surface->pow2Height < swapchain_desc->backbuffer_height) + surface->pow2Height <<= 1; } if (!(surface->resource.usage & WINED3DUSAGE_DEPTHSTENCIL)) - surface->resource.format = wined3d_get_format(gl_info, pPresentationParameters->BackBufferFormat); - surface->resource.multisample_type = pPresentationParameters->MultiSampleType; - surface->resource.multisample_quality = pPresentationParameters->MultiSampleQuality; + surface->resource.format = wined3d_get_format(gl_info, swapchain_desc->backbuffer_format); + surface->resource.multisample_type = swapchain_desc->multisample_type; + surface->resource.multisample_quality = swapchain_desc->multisample_quality; surface->resource.resource_ops->resource_unload(&surface->resource); - if (surface->pow2Width != pPresentationParameters->BackBufferWidth - || surface->pow2Height != pPresentationParameters->BackBufferHeight) + if (surface->pow2Width != swapchain_desc->backbuffer_width + || surface->pow2Height != swapchain_desc->backbuffer_height) { surface->flags |= SFLAG_NONPOW2; } @@ -5274,16 +5278,20 @@ static HRESULT updateSurfaceDesc(struct wined3d_surface *surface, return WINED3D_OK; } -static BOOL is_display_mode_supported(const struct wined3d_device *device, const WINED3DPRESENT_PARAMETERS *pp) +static BOOL is_display_mode_supported(const struct wined3d_device *device, + const struct wined3d_swapchain_desc *swapchain_desc) { struct wined3d_display_mode m; UINT i, count; HRESULT hr; /* All Windowed modes are supported, as is leaving the current mode */ - if(pp->Windowed) return TRUE; - if(!pp->BackBufferWidth) return TRUE; - if(!pp->BackBufferHeight) return TRUE; + if (swapchain_desc->windowed) + return TRUE; + if (!swapchain_desc->backbuffer_width) + return TRUE; + if (!swapchain_desc->backbuffer_height) + return TRUE; count = wined3d_get_adapter_mode_count(device->wined3d, device->adapter->ordinal, WINED3DFMT_UNKNOWN); for (i = 0; i < count; ++i) @@ -5292,7 +5300,7 @@ static BOOL is_display_mode_supported(const struct wined3d_device *device, const hr = wined3d_enum_adapter_modes(device->wined3d, device->adapter->ordinal, WINED3DFMT_UNKNOWN, i, &m); if (FAILED(hr)) ERR("Failed to enumerate adapter mode.\n"); - if (m.width == pp->BackBufferWidth && m.height == pp->BackBufferHeight) + if (m.width == swapchain_desc->backbuffer_width && m.height == swapchain_desc->backbuffer_height) /* Mode found, it is supported. */ return TRUE; } @@ -5418,7 +5426,7 @@ err: /* Do not call while under the GL lock. */ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, - const WINED3DPRESENT_PARAMETERS *present_parameters, + const struct wined3d_swapchain_desc *swapchain_desc, wined3d_device_reset_cb callback) { struct wined3d_resource *resource, *cursor; @@ -5429,7 +5437,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, unsigned int i; HRESULT hr; - TRACE("device %p, present_parameters %p.\n", device, present_parameters); + TRACE("device %p, swapchain_desc %p.\n", device, swapchain_desc); wined3d_device_set_index_buffer(device, NULL, WINED3DFMT_UNKNOWN); for (i = 0; i < MAX_STREAMS; ++i) @@ -5460,12 +5468,12 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, return hr; } - if (!is_display_mode_supported(device, present_parameters)) + if (!is_display_mode_supported(device, swapchain_desc)) { - WARN("Rejecting Reset() call because the requested display mode is not supported\n"); - WARN("Requested mode: %d, %d.\n", - present_parameters->BackBufferWidth, - present_parameters->BackBufferHeight); + WARN("Rejecting reset() call because the requested display mode is not supported.\n"); + WARN("Requested mode: %ux%u.\n", + swapchain_desc->backbuffer_width, + swapchain_desc->backbuffer_height); wined3d_swapchain_decref(swapchain); return WINED3DERR_INVALIDCALL; } @@ -5478,47 +5486,47 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, * TODO: Figure out what happens to explicit swapchains, or if we have more than one implicit swapchain */ TRACE("New params:\n"); - TRACE("BackBufferWidth = %d\n", present_parameters->BackBufferWidth); - TRACE("BackBufferHeight = %d\n", present_parameters->BackBufferHeight); - TRACE("BackBufferFormat = %s\n", debug_d3dformat(present_parameters->BackBufferFormat)); - TRACE("BackBufferCount = %d\n", present_parameters->BackBufferCount); - TRACE("MultiSampleType = %d\n", present_parameters->MultiSampleType); - TRACE("MultiSampleQuality = %d\n", present_parameters->MultiSampleQuality); - TRACE("SwapEffect = %d\n", present_parameters->SwapEffect); - TRACE("hDeviceWindow = %p\n", present_parameters->hDeviceWindow); - TRACE("Windowed = %s\n", present_parameters->Windowed ? "true" : "false"); - TRACE("EnableAutoDepthStencil = %s\n", present_parameters->EnableAutoDepthStencil ? "true" : "false"); - TRACE("Flags = %08x\n", present_parameters->Flags); - TRACE("FullScreen_RefreshRateInHz = %d\n", present_parameters->FullScreen_RefreshRateInHz); - TRACE("PresentationInterval = %d\n", present_parameters->PresentationInterval); + TRACE("backbuffer_width %u\n", swapchain_desc->backbuffer_width); + TRACE("backbuffer_height %u\n", swapchain_desc->backbuffer_height); + TRACE("backbuffer_format %s\n", debug_d3dformat(swapchain_desc->backbuffer_format)); + TRACE("backbuffer_count %u\n", swapchain_desc->backbuffer_count); + TRACE("multisample_type %#x\n", swapchain_desc->multisample_type); + TRACE("multisample_quality %u\n", swapchain_desc->multisample_quality); + TRACE("swap_effect %#x\n", swapchain_desc->swap_effect); + TRACE("device_window %p\n", swapchain_desc->device_window); + TRACE("windowed %#x\n", swapchain_desc->windowed); + TRACE("enable_auto_depth_stencil %#x\n", swapchain_desc->enable_auto_depth_stencil); + TRACE("flags %#x\n", swapchain_desc->flags); + TRACE("refresh_rate %u\n", swapchain_desc->refresh_rate); + TRACE("swap_interval %u\n", swapchain_desc->swap_interval); /* No special treatment of these parameters. Just store them */ - swapchain->presentParms.SwapEffect = present_parameters->SwapEffect; - swapchain->presentParms.Flags = present_parameters->Flags; - swapchain->presentParms.PresentationInterval = present_parameters->PresentationInterval; - swapchain->presentParms.FullScreen_RefreshRateInHz = present_parameters->FullScreen_RefreshRateInHz; + swapchain->desc.swap_effect = swapchain_desc->swap_effect; + swapchain->desc.flags = swapchain_desc->flags; + swapchain->desc.swap_interval = swapchain_desc->swap_interval; + swapchain->desc.refresh_rate = swapchain_desc->refresh_rate; /* What to do about these? */ - if (present_parameters->BackBufferCount - && present_parameters->BackBufferCount != swapchain->presentParms.BackBufferCount) + if (swapchain_desc->backbuffer_count + && swapchain_desc->backbuffer_count != swapchain->desc.backbuffer_count) FIXME("Cannot change the back buffer count yet.\n"); - if (present_parameters->hDeviceWindow - && present_parameters->hDeviceWindow != swapchain->presentParms.hDeviceWindow) + if (swapchain_desc->device_window + && swapchain_desc->device_window != swapchain->desc.device_window) FIXME("Cannot change the device window yet.\n"); - if (present_parameters->EnableAutoDepthStencil && !device->auto_depth_stencil) + if (swapchain_desc->enable_auto_depth_stencil && !device->auto_depth_stencil) { HRESULT hrc; TRACE("Creating the depth stencil buffer\n"); hrc = device->device_parent->ops->create_depth_stencil(device->device_parent, - present_parameters->BackBufferWidth, - present_parameters->BackBufferHeight, - present_parameters->AutoDepthStencilFormat, - present_parameters->MultiSampleType, - present_parameters->MultiSampleQuality, + swapchain_desc->backbuffer_width, + swapchain_desc->backbuffer_height, + swapchain_desc->auto_depth_stencil_format, + swapchain_desc->multisample_type, + swapchain_desc->multisample_quality, FALSE, &device->auto_depth_stencil); if (FAILED(hrc)) @@ -5536,7 +5544,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, } /* Reset the depth stencil */ - if (present_parameters->EnableAutoDepthStencil) + if (swapchain_desc->enable_auto_depth_stencil) wined3d_device_set_depth_stencil(device, device->auto_depth_stencil); else wined3d_device_set_depth_stencil(device, NULL); @@ -5545,46 +5553,46 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, wined3d_stateblock_decref(device->updateStateBlock); wined3d_stateblock_decref(device->stateBlock); - if (present_parameters->Windowed) + if (swapchain_desc->windowed) { mode.width = swapchain->orig_width; mode.height = swapchain->orig_height; mode.refresh_rate = 0; - mode.format_id = swapchain->presentParms.BackBufferFormat; + mode.format_id = swapchain->desc.backbuffer_format; } else { - mode.width = present_parameters->BackBufferWidth; - mode.height = present_parameters->BackBufferHeight; - mode.refresh_rate = present_parameters->FullScreen_RefreshRateInHz; - mode.format_id = present_parameters->BackBufferFormat; + mode.width = swapchain_desc->backbuffer_width; + mode.height = swapchain_desc->backbuffer_height; + mode.refresh_rate = swapchain_desc->refresh_rate; + mode.format_id = swapchain_desc->backbuffer_format; } /* Should Width == 800 && Height == 0 set 800x600? */ - if (present_parameters->BackBufferWidth && present_parameters->BackBufferHeight - && (present_parameters->BackBufferWidth != swapchain->presentParms.BackBufferWidth - || present_parameters->BackBufferHeight != swapchain->presentParms.BackBufferHeight)) + if (swapchain_desc->backbuffer_width && swapchain_desc->backbuffer_height + && (swapchain_desc->backbuffer_width != swapchain->desc.backbuffer_width + || swapchain_desc->backbuffer_height != swapchain->desc.backbuffer_height)) { - if (!present_parameters->Windowed) + if (!swapchain_desc->windowed) DisplayModeChanged = TRUE; - swapchain->presentParms.BackBufferWidth = present_parameters->BackBufferWidth; - swapchain->presentParms.BackBufferHeight = present_parameters->BackBufferHeight; + swapchain->desc.backbuffer_width = swapchain_desc->backbuffer_width; + swapchain->desc.backbuffer_height = swapchain_desc->backbuffer_height; update_desc = TRUE; } - if (present_parameters->BackBufferFormat != WINED3DFMT_UNKNOWN - && present_parameters->BackBufferFormat != swapchain->presentParms.BackBufferFormat) + if (swapchain_desc->backbuffer_format != WINED3DFMT_UNKNOWN + && swapchain_desc->backbuffer_format != swapchain->desc.backbuffer_format) { - swapchain->presentParms.BackBufferFormat = present_parameters->BackBufferFormat; + swapchain->desc.backbuffer_format = swapchain_desc->backbuffer_format; update_desc = TRUE; } - if (present_parameters->MultiSampleType != swapchain->presentParms.MultiSampleType - || present_parameters->MultiSampleQuality != swapchain->presentParms.MultiSampleQuality) + if (swapchain_desc->multisample_type != swapchain->desc.multisample_type + || swapchain_desc->multisample_quality != swapchain->desc.multisample_quality) { - swapchain->presentParms.MultiSampleType = present_parameters->MultiSampleType; - swapchain->presentParms.MultiSampleQuality = present_parameters->MultiSampleQuality; + swapchain->desc.multisample_type = swapchain_desc->multisample_type; + swapchain->desc.multisample_quality = swapchain_desc->multisample_quality; update_desc = TRUE; } @@ -5592,16 +5600,16 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, { UINT i; - hr = updateSurfaceDesc(swapchain->front_buffer, &swapchain->presentParms); + hr = updateSurfaceDesc(swapchain->front_buffer, &swapchain->desc); if (FAILED(hr)) { wined3d_swapchain_decref(swapchain); return hr; } - for (i = 0; i < swapchain->presentParms.BackBufferCount; ++i) + for (i = 0; i < swapchain->desc.backbuffer_count; ++i) { - hr = updateSurfaceDesc(swapchain->back_buffers[i], &swapchain->presentParms); + hr = updateSurfaceDesc(swapchain->back_buffers[i], &swapchain->desc); if (FAILED(hr)) { wined3d_swapchain_decref(swapchain); @@ -5610,7 +5618,7 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, } if (device->auto_depth_stencil) { - hr = updateSurfaceDesc(device->auto_depth_stencil, &swapchain->presentParms); + hr = updateSurfaceDesc(device->auto_depth_stencil, &swapchain->desc); if (FAILED(hr)) { wined3d_swapchain_decref(swapchain); @@ -5621,18 +5629,18 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, delete_opengl_contexts(device, swapchain); - if (!present_parameters->Windowed != !swapchain->presentParms.Windowed + if (!swapchain_desc->windowed != !swapchain->desc.windowed || DisplayModeChanged) { wined3d_device_set_display_mode(device, 0, &mode); - if (!present_parameters->Windowed) + if (!swapchain_desc->windowed) { - if (swapchain->presentParms.Windowed) + if (swapchain->desc.windowed) { HWND focus_window = device->create_parms.focus_window; if (!focus_window) - focus_window = present_parameters->hDeviceWindow; + focus_window = swapchain_desc->device_window; if (FAILED(hr = wined3d_device_acquire_focus_window(device, focus_window))) { ERR("Failed to acquire focus window, hr %#x.\n", hr); @@ -5642,26 +5650,27 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, /* switch from windowed to fs */ wined3d_device_setup_fullscreen_window(device, swapchain->device_window, - present_parameters->BackBufferWidth, - present_parameters->BackBufferHeight); + swapchain_desc->backbuffer_width, + swapchain_desc->backbuffer_height); } else { /* Fullscreen -> fullscreen mode change */ MoveWindow(swapchain->device_window, 0, 0, - present_parameters->BackBufferWidth, present_parameters->BackBufferHeight, - TRUE); + swapchain_desc->backbuffer_width, + swapchain_desc->backbuffer_height, + TRUE); } } - else if (!swapchain->presentParms.Windowed) + else if (!swapchain->desc.windowed) { /* Fullscreen -> windowed switch */ wined3d_device_restore_fullscreen_window(device, swapchain->device_window); wined3d_device_release_focus_window(device); } - swapchain->presentParms.Windowed = present_parameters->Windowed; + swapchain->desc.windowed = swapchain_desc->windowed; } - else if (!present_parameters->Windowed) + else if (!swapchain_desc->windowed) { DWORD style = device->style; DWORD exStyle = device->exStyle; @@ -5672,8 +5681,8 @@ HRESULT CDECL wined3d_device_reset(struct wined3d_device *device, device->style = 0; device->exStyle = 0; wined3d_device_setup_fullscreen_window(device, swapchain->device_window, - present_parameters->BackBufferWidth, - present_parameters->BackBufferHeight); + swapchain_desc->backbuffer_width, + swapchain_desc->backbuffer_height); device->style = style; device->exStyle = exStyle; } @@ -6008,8 +6017,8 @@ void get_drawable_size_backbuffer(const struct wined3d_context *context, UINT *w /* The drawable size of a backbuffer / aux buffer offscreen target is the size of the * current context's drawable, which is the size of the back buffer of the swapchain * the active context belongs to. */ - *width = swapchain->presentParms.BackBufferWidth; - *height = swapchain->presentParms.BackBufferHeight; + *width = swapchain->desc.backbuffer_width; + *height = swapchain->desc.backbuffer_height; } LRESULT device_process_message(struct wined3d_device *device, HWND window, BOOL unicode, diff --git a/dlls/wined3d/stateblock.c b/dlls/wined3d/stateblock.c index 6084a250c5a..cf83e949cf9 100644 --- a/dlls/wined3d/stateblock.c +++ b/dlls/wined3d/stateblock.c @@ -1307,8 +1307,8 @@ void stateblock_init_default_state(struct wined3d_stateblock *stateblock) /* Set the default viewport */ state->viewport.x = 0; state->viewport.y = 0; - state->viewport.width = swapchain->presentParms.BackBufferWidth; - state->viewport.height = swapchain->presentParms.BackBufferHeight; + state->viewport.width = swapchain->desc.backbuffer_width; + state->viewport.height = swapchain->desc.backbuffer_height; state->viewport.min_z = 0.0f; state->viewport.max_z = 1.0f; diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index d5b73e3879c..959f1e2a7d4 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1694,15 +1694,15 @@ HRESULT CDECL wined3d_surface_blt(struct wined3d_surface *dst_surface, const REC && dst_surface == dst_swapchain->front_buffer && src_surface == dst_swapchain->back_buffers[0]) { - WINED3DSWAPEFFECT swap_effect = dst_swapchain->presentParms.SwapEffect; + WINED3DSWAPEFFECT swap_effect = dst_swapchain->desc.swap_effect; TRACE("Using present for backbuffer -> frontbuffer blit.\n"); /* Set the swap effect to COPY, we don't want the backbuffer * to become undefined. */ - dst_swapchain->presentParms.SwapEffect = WINED3DSWAPEFFECT_COPY; + dst_swapchain->desc.swap_effect = WINED3DSWAPEFFECT_COPY; wined3d_swapchain_present(dst_swapchain, NULL, NULL, dst_swapchain->win_handle, NULL, 0); - dst_swapchain->presentParms.SwapEffect = swap_effect; + dst_swapchain->desc.swap_effect = swap_effect; return WINED3D_OK; } @@ -5639,8 +5639,8 @@ void surface_load_ds_location(struct wined3d_surface *surface, struct wined3d_co * buffer, so the onscreen depth/stencil buffer is potentially smaller * than the offscreen surface. Don't overwrite the offscreen surface * with undefined data. */ - w = min(w, context->swapchain->presentParms.BackBufferWidth); - h = min(h, context->swapchain->presentParms.BackBufferHeight); + w = min(w, context->swapchain->desc.backbuffer_width); + h = min(h, context->swapchain->desc.backbuffer_height); TRACE("Copying onscreen depth buffer to depth texture.\n"); diff --git a/dlls/wined3d/swapchain.c b/dlls/wined3d/swapchain.c index ae62b7200e7..1ea785837a8 100644 --- a/dlls/wined3d/swapchain.c +++ b/dlls/wined3d/swapchain.c @@ -48,7 +48,7 @@ static void swapchain_cleanup(struct wined3d_swapchain *swapchain) if (swapchain->back_buffers) { - i = swapchain->presentParms.BackBufferCount; + i = swapchain->desc.backbuffer_count; while (i--) { @@ -72,7 +72,7 @@ static void swapchain_cleanup(struct wined3d_swapchain *swapchain) * desktop resolution. In case of d3d7 this will be a NOP because ddraw * sets the resolution before starting up Direct3D, thus orig_width and * orig_height will be equal to the modes in the presentation params. */ - if (!swapchain->presentParms.Windowed && swapchain->presentParms.AutoRestoreDisplayMode) + if (!swapchain->desc.windowed && swapchain->desc.auto_restore_display_mode) { mode.width = swapchain->orig_width; mode.height = swapchain->orig_height; @@ -163,7 +163,7 @@ HRESULT CDECL wined3d_swapchain_get_front_buffer_data(const struct wined3d_swapc SetRect(&src_rect, 0, 0, src_surface->resource.width, src_surface->resource.height); dst_rect = src_rect; - if (swapchain->presentParms.Windowed) + if (swapchain->desc.windowed) { MapWindowPoints(swapchain->win_handle, NULL, (POINT *)&dst_rect, 2); FIXME("Using destination rect %s in windowed mode, this is likely wrong.\n", @@ -184,7 +184,7 @@ HRESULT CDECL wined3d_swapchain_get_back_buffer(const struct wined3d_swapchain * * NULL). We need this because this function is called from * stateblock_init_default_state() to get the default scissorrect * dimensions. */ - if (!swapchain->back_buffers || back_buffer_idx >= swapchain->presentParms.BackBufferCount) + if (!swapchain->back_buffers || back_buffer_idx >= swapchain->desc.backbuffer_count) { WARN("Invalid back buffer index.\n"); /* Native d3d9 doesn't set NULL here, just as wine's d3d9. But set it @@ -243,12 +243,12 @@ struct wined3d_device * CDECL wined3d_swapchain_get_device(const struct wined3d_ return swapchain->device; } -HRESULT CDECL wined3d_swapchain_get_present_parameters(const struct wined3d_swapchain *swapchain, - WINED3DPRESENT_PARAMETERS *present_parameters) +HRESULT CDECL wined3d_swapchain_get_desc(const struct wined3d_swapchain *swapchain, + struct wined3d_swapchain_desc *desc) { - TRACE("swapchain %p, present_parameters %p.\n", swapchain, present_parameters); + TRACE("swapchain %p, desc %p.\n", swapchain, desc); - *present_parameters = swapchain->presentParms; + *desc = swapchain->desc; return WINED3D_OK; } @@ -475,7 +475,7 @@ static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const R /* DDBLT_KEYSRC will cause BltOverride to enable the alpha test with GL_NOTEQUAL, 0.0, * which is exactly what we want :-) */ - if (swapchain->presentParms.Windowed) + if (swapchain->desc.windowed) MapWindowPoints(NULL, swapchain->win_handle, (LPPOINT)&destRect, 2); wined3d_surface_blt(swapchain->back_buffers[0], &destRect, &cursor, NULL, WINEDDBLT_KEYSRC, NULL, WINED3DTEXF_POINT); @@ -499,8 +499,8 @@ static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const R { src_rect = *src_rect_in; if (!render_to_fbo && (src_rect.left || src_rect.top - || src_rect.right != swapchain->presentParms.BackBufferWidth - || src_rect.bottom != swapchain->presentParms.BackBufferHeight)) + || src_rect.right != swapchain->desc.backbuffer_width + || src_rect.bottom != swapchain->desc.backbuffer_height)) { render_to_fbo = TRUE; } @@ -509,8 +509,8 @@ static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const R { src_rect.left = 0; src_rect.top = 0; - src_rect.right = swapchain->presentParms.BackBufferWidth; - src_rect.bottom = swapchain->presentParms.BackBufferHeight; + src_rect.right = swapchain->desc.backbuffer_width; + src_rect.bottom = swapchain->desc.backbuffer_height; } if (dst_rect_in) @@ -519,11 +519,9 @@ static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const R GetClientRect(swapchain->win_handle, &dst_rect); if (!render_to_fbo && (dst_rect.left || dst_rect.top - || dst_rect.right != swapchain->presentParms.BackBufferWidth - || dst_rect.bottom != swapchain->presentParms.BackBufferHeight)) - { + || dst_rect.right != swapchain->desc.backbuffer_width + || dst_rect.bottom != swapchain->desc.backbuffer_height)) render_to_fbo = TRUE; - } /* Rendering to a window of different size, presenting partial rectangles, * or rendering to a different window needs help from FBO_blit or a textured @@ -548,7 +546,7 @@ static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const R * * The DISCARD swap effect is ok as well since any backbuffer content is allowed after * the swap. */ - if (swapchain->presentParms.SwapEffect == WINED3DSWAPEFFECT_FLIP) + if (swapchain->desc.swap_effect == WINED3DSWAPEFFECT_FLIP) FIXME("Render-to-fbo with WINED3DSWAPEFFECT_FLIP\n"); swapchain_blit(swapchain, context, &src_rect, &dst_rect); @@ -590,7 +588,7 @@ static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const R * bug shows up much more than it does on Windows, and the players see single pixels * with wrong colors. * (The Max Payne bug has been confirmed on Windows with the debug runtime) */ - if (FALSE && swapchain->presentParms.SwapEffect == WINED3DSWAPEFFECT_DISCARD) + if (FALSE && swapchain->desc.swap_effect == WINED3DSWAPEFFECT_DISCARD) { static const struct wined3d_color cyan = {0.0f, 1.0f, 1.0f, 1.0f}; @@ -634,13 +632,13 @@ static HRESULT swapchain_gl_present(struct wined3d_swapchain *swapchain, const R * If the swapeffect is COPY, the content remains the same. If it is FLIP however, * the texture / sysmem copy needs to be reloaded from the drawable */ - if (swapchain->presentParms.SwapEffect == WINED3DSWAPEFFECT_FLIP) + if (swapchain->desc.swap_effect == WINED3DSWAPEFFECT_FLIP) surface_modify_location(swapchain->back_buffers[0], swapchain->back_buffers[0]->draw_binding, TRUE); } if (fb->depth_stencil) { - if (swapchain->presentParms.Flags & WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL + if (swapchain->desc.flags & WINED3DPRESENTFLAG_DISCARD_DEPTHSTENCIL || fb->depth_stencil->flags & SFLAG_DISCARD) { surface_modify_ds_location(fb->depth_stencil, SFLAG_DS_DISCARDED, @@ -691,7 +689,7 @@ void x11_copy_to_screen(const struct wined3d_swapchain *swapchain, const RECT *r /* Front buffer coordinates are screen coordinates. Map them to the * destination window if not fullscreened. */ - if (swapchain->presentParms.Windowed) + if (swapchain->desc.windowed) ClientToScreen(window, &offset); TRACE("offset %s.\n", wine_dbgstr_point(&offset)); @@ -792,7 +790,7 @@ void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain) if (wined3d_settings.offscreen_rendering_mode != ORM_FBO) return; - if (!swapchain->presentParms.BackBufferCount) + if (!swapchain->desc.backbuffer_count) { TRACE("Single buffered rendering.\n"); swapchain->render_to_fbo = FALSE; @@ -802,16 +800,16 @@ void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain) GetClientRect(swapchain->win_handle, &client_rect); TRACE("Backbuffer %ux%u, window %ux%u.\n", - swapchain->presentParms.BackBufferWidth, - swapchain->presentParms.BackBufferHeight, + swapchain->desc.backbuffer_width, + swapchain->desc.backbuffer_height, client_rect.right, client_rect.bottom); TRACE("Multisample type %#x, quality %#x.\n", - swapchain->presentParms.MultiSampleType, - swapchain->presentParms.MultiSampleQuality); + swapchain->desc.multisample_type, + swapchain->desc.multisample_quality); - if (!wined3d_settings.always_offscreen && !swapchain->presentParms.MultiSampleType - && swapchain->presentParms.BackBufferWidth == client_rect.right - && swapchain->presentParms.BackBufferHeight == client_rect.bottom) + if (!wined3d_settings.always_offscreen && !swapchain->desc.multisample_type + && swapchain->desc.backbuffer_width == client_rect.right + && swapchain->desc.backbuffer_height == client_rect.bottom) { TRACE("Backbuffer dimensions match window dimensions, rendering onscreen.\n"); swapchain->render_to_fbo = FALSE; @@ -824,7 +822,7 @@ void swapchain_update_render_to_fbo(struct wined3d_swapchain *swapchain) /* Do not call while under the GL lock. */ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTYPE surface_type, - struct wined3d_device *device, WINED3DPRESENT_PARAMETERS *present_parameters, + struct wined3d_device *device, struct wined3d_swapchain_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops) { const struct wined3d_adapter *adapter = device->adapter; @@ -836,14 +834,14 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY HRESULT hr; UINT i; - if (present_parameters->BackBufferCount > WINED3DPRESENT_BACK_BUFFER_MAX) + if (desc->backbuffer_count > WINED3DPRESENT_BACK_BUFFER_MAX) { FIXME("The application requested %u back buffers, this is not supported.\n", - present_parameters->BackBufferCount); + desc->backbuffer_count); return WINED3DERR_INVALIDCALL; } - if (present_parameters->BackBufferCount > 1) + if (desc->backbuffer_count > 1) { FIXME("The application requested more than one back buffer, this is not properly supported.\n" "Please configure the application to use double buffering (1 back buffer) if possible.\n"); @@ -864,7 +862,7 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY return WINED3DERR_INVALIDCALL; } - window = present_parameters->hDeviceWindow ? present_parameters->hDeviceWindow : device->create_parms.focus_window; + window = desc->device_window ? desc->device_window : device->create_parms.focus_window; swapchain->device = device; swapchain->parent = parent; @@ -880,37 +878,37 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY format = wined3d_get_format(&adapter->gl_info, mode.format_id); GetClientRect(window, &client_rect); - if (present_parameters->Windowed - && (!present_parameters->BackBufferWidth || !present_parameters->BackBufferHeight - || present_parameters->BackBufferFormat == WINED3DFMT_UNKNOWN)) + if (desc->windowed + && (!desc->backbuffer_width || !desc->backbuffer_height + || desc->backbuffer_format == WINED3DFMT_UNKNOWN)) { - if (!present_parameters->BackBufferWidth) + if (!desc->backbuffer_width) { - present_parameters->BackBufferWidth = client_rect.right; - TRACE("Updating width to %u.\n", present_parameters->BackBufferWidth); + desc->backbuffer_width = client_rect.right; + TRACE("Updating width to %u.\n", desc->backbuffer_width); } - if (!present_parameters->BackBufferHeight) + if (!desc->backbuffer_height) { - present_parameters->BackBufferHeight = client_rect.bottom; - TRACE("Updating height to %u.\n", present_parameters->BackBufferHeight); + desc->backbuffer_height = client_rect.bottom; + TRACE("Updating height to %u.\n", desc->backbuffer_height); } - if (present_parameters->BackBufferFormat == WINED3DFMT_UNKNOWN) + if (desc->backbuffer_format == WINED3DFMT_UNKNOWN) { - present_parameters->BackBufferFormat = swapchain->orig_fmt; + desc->backbuffer_format = swapchain->orig_fmt; TRACE("Updating format to %s.\n", debug_d3dformat(swapchain->orig_fmt)); } } - swapchain->presentParms = *present_parameters; + swapchain->desc = *desc; swapchain_update_render_to_fbo(swapchain); TRACE("Creating front buffer.\n"); hr = device->device_parent->ops->create_rendertarget(device->device_parent, parent, - swapchain->presentParms.BackBufferWidth, swapchain->presentParms.BackBufferHeight, - swapchain->presentParms.BackBufferFormat, swapchain->presentParms.MultiSampleType, - swapchain->presentParms.MultiSampleQuality, TRUE /* Lockable */, + swapchain->desc.backbuffer_width, swapchain->desc.backbuffer_height, + swapchain->desc.backbuffer_format, swapchain->desc.multisample_type, + swapchain->desc.multisample_quality, TRUE /* Lockable */, &swapchain->front_buffer); if (FAILED(hr)) { @@ -928,15 +926,15 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY * so we should really check to see if there is a fullscreen swapchain * already. Does a single head count as full screen? */ - if (!present_parameters->Windowed) + if (!desc->windowed) { struct wined3d_display_mode mode; /* Change the display settings */ - mode.width = present_parameters->BackBufferWidth; - mode.height = present_parameters->BackBufferHeight; - mode.format_id = present_parameters->BackBufferFormat; - mode.refresh_rate = present_parameters->FullScreen_RefreshRateInHz; + mode.width = desc->backbuffer_width; + mode.height = desc->backbuffer_height; + mode.format_id = desc->backbuffer_format; + mode.refresh_rate = desc->refresh_rate; hr = wined3d_device_set_display_mode(device, 0, &mode); if (FAILED(hr)) @@ -997,18 +995,18 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY } if (wined3d_settings.offscreen_rendering_mode != ORM_FBO - && (!present_parameters->EnableAutoDepthStencil - || swapchain->presentParms.AutoDepthStencilFormat != swapchain->ds_format->id)) + && (!desc->enable_auto_depth_stencil + || swapchain->desc.auto_depth_stencil_format != swapchain->ds_format->id)) { FIXME("Add OpenGL context recreation support to context_validate_onscreen_formats\n"); } context_release(swapchain->context[0]); } - if (swapchain->presentParms.BackBufferCount > 0) + if (swapchain->desc.backbuffer_count > 0) { swapchain->back_buffers = HeapAlloc(GetProcessHeap(), 0, - sizeof(*swapchain->back_buffers) * swapchain->presentParms.BackBufferCount); + sizeof(*swapchain->back_buffers) * swapchain->desc.backbuffer_count); if (!swapchain->back_buffers) { ERR("Failed to allocate backbuffer array memory.\n"); @@ -1016,13 +1014,13 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY goto err; } - for (i = 0; i < swapchain->presentParms.BackBufferCount; ++i) + for (i = 0; i < swapchain->desc.backbuffer_count; ++i) { TRACE("Creating back buffer %u.\n", i); hr = device->device_parent->ops->create_rendertarget(device->device_parent, parent, - swapchain->presentParms.BackBufferWidth, swapchain->presentParms.BackBufferHeight, - swapchain->presentParms.BackBufferFormat, swapchain->presentParms.MultiSampleType, - swapchain->presentParms.MultiSampleQuality, TRUE /* Lockable */, + swapchain->desc.backbuffer_width, swapchain->desc.backbuffer_height, + swapchain->desc.backbuffer_format, swapchain->desc.multisample_type, + swapchain->desc.multisample_quality, TRUE /* Lockable */, &swapchain->back_buffers[i]); if (FAILED(hr)) { @@ -1035,15 +1033,15 @@ static HRESULT swapchain_init(struct wined3d_swapchain *swapchain, WINED3DSURFTY } /* Swapchains share the depth/stencil buffer, so only create a single depthstencil surface. */ - if (present_parameters->EnableAutoDepthStencil && surface_type == SURFACE_OPENGL) + if (desc->enable_auto_depth_stencil && surface_type == SURFACE_OPENGL) { TRACE("Creating depth/stencil buffer.\n"); if (!device->auto_depth_stencil) { hr = device->device_parent->ops->create_depth_stencil(device->device_parent, - swapchain->presentParms.BackBufferWidth, swapchain->presentParms.BackBufferHeight, - swapchain->presentParms.AutoDepthStencilFormat, swapchain->presentParms.MultiSampleType, - swapchain->presentParms.MultiSampleQuality, FALSE /* FIXME: Discard */, + swapchain->desc.backbuffer_width, swapchain->desc.backbuffer_height, + swapchain->desc.auto_depth_stencil_format, swapchain->desc.multisample_type, + swapchain->desc.multisample_quality, FALSE /* FIXME: Discard */, &device->auto_depth_stencil); if (FAILED(hr)) { @@ -1078,7 +1076,7 @@ err: if (swapchain->back_buffers) { - for (i = 0; i < swapchain->presentParms.BackBufferCount; ++i) + for (i = 0; i < swapchain->desc.backbuffer_count; ++i) { if (swapchain->back_buffers[i]) { @@ -1111,15 +1109,15 @@ err: /* Do not call while under the GL lock. */ HRESULT CDECL wined3d_swapchain_create(struct wined3d_device *device, - WINED3DPRESENT_PARAMETERS *present_parameters, WINED3DSURFTYPE surface_type, + struct wined3d_swapchain_desc *desc, WINED3DSURFTYPE surface_type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain) { struct wined3d_swapchain *object; HRESULT hr; - TRACE("device %p, present_parameters %p, swapchain %p, parent %p, surface_type %#x.\n", - device, present_parameters, swapchain, parent, surface_type); + TRACE("device %p, desc %p, swapchain %p, parent %p, surface_type %#x.\n", + device, desc, swapchain, parent, surface_type); object = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*object)); if (!object) @@ -1128,7 +1126,7 @@ HRESULT CDECL wined3d_swapchain_create(struct wined3d_device *device, return E_OUTOFMEMORY; } - hr = swapchain_init(object, surface_type, device, present_parameters, parent, parent_ops); + hr = swapchain_init(object, surface_type, device, desc, parent, parent_ops); if (FAILED(hr)) { WARN("Failed to initialize swapchain, hr %#x.\n", hr); @@ -1238,7 +1236,7 @@ void swapchain_update_draw_bindings(struct wined3d_swapchain *swapchain) surface_update_draw_binding(swapchain->front_buffer); - for (i = 0; i < swapchain->presentParms.BackBufferCount; ++i) + for (i = 0; i < swapchain->desc.backbuffer_count; ++i) { surface_update_draw_binding(swapchain->back_buffers[i]); } diff --git a/dlls/wined3d/wined3d.spec b/dlls/wined3d/wined3d.spec index 1befb12873b..d3fb59e71ae 100644 --- a/dlls/wined3d/wined3d.spec +++ b/dlls/wined3d/wined3d.spec @@ -239,7 +239,7 @@ @ cdecl wined3d_swapchain_get_front_buffer_data(ptr ptr) @ cdecl wined3d_swapchain_get_gamma_ramp(ptr ptr) @ cdecl wined3d_swapchain_get_parent(ptr) -@ cdecl wined3d_swapchain_get_present_parameters(ptr ptr) +@ cdecl wined3d_swapchain_get_desc(ptr ptr) @ cdecl wined3d_swapchain_get_raster_status(ptr ptr) @ cdecl wined3d_swapchain_incref(ptr) @ cdecl wined3d_swapchain_present(ptr ptr ptr ptr ptr long) diff --git a/dlls/wined3d/wined3d_private.h b/dlls/wined3d/wined3d_private.h index 41e13889aad..31ea597eb34 100644 --- a/dlls/wined3d/wined3d_private.h +++ b/dlls/wined3d/wined3d_private.h @@ -2442,7 +2442,7 @@ struct wined3d_swapchain struct wined3d_surface **back_buffers; struct wined3d_surface *front_buffer; - WINED3DPRESENT_PARAMETERS presentParms; + struct wined3d_swapchain_desc desc; DWORD orig_width, orig_height; enum wined3d_format_id orig_fmt; struct wined3d_gamma_ramp orig_gamma; diff --git a/include/wine/wined3d.h b/include/wine/wined3d.h index 89acd0f4897..34abce9f910 100644 --- a/include/wine/wined3d.h +++ b/include/wine/wined3d.h @@ -1638,24 +1638,24 @@ struct wined3d_adapter_identifier SIZE_T video_memory; }; -typedef struct _WINED3DPRESENT_PARAMETERS -{ - UINT BackBufferWidth; - UINT BackBufferHeight; - enum wined3d_format_id BackBufferFormat; - UINT BackBufferCount; - WINED3DMULTISAMPLE_TYPE MultiSampleType; - DWORD MultiSampleQuality; - WINED3DSWAPEFFECT SwapEffect; - HWND hDeviceWindow; - BOOL Windowed; - BOOL EnableAutoDepthStencil; - enum wined3d_format_id AutoDepthStencilFormat; - DWORD Flags; - UINT FullScreen_RefreshRateInHz; - UINT PresentationInterval; - BOOL AutoRestoreDisplayMode; -} WINED3DPRESENT_PARAMETERS; +struct wined3d_swapchain_desc +{ + UINT backbuffer_width; + UINT backbuffer_height; + enum wined3d_format_id backbuffer_format; + UINT backbuffer_count; + WINED3DMULTISAMPLE_TYPE multisample_type; + DWORD multisample_quality; + WINED3DSWAPEFFECT swap_effect; + HWND device_window; + BOOL windowed; + BOOL enable_auto_depth_stencil; + enum wined3d_format_id auto_depth_stencil_format; + DWORD flags; + UINT refresh_rate; + UINT swap_interval; + BOOL auto_restore_display_mode; +}; struct wined3d_resource_desc { @@ -2041,7 +2041,7 @@ struct wined3d_device_parent_ops UINT width, UINT height, UINT depth, enum wined3d_format_id format_id, WINED3DPOOL pool, DWORD usage, struct wined3d_volume **volume); HRESULT (__cdecl *create_swapchain)(struct wined3d_device_parent *device_parent, - WINED3DPRESENT_PARAMETERS *present_parameters, struct wined3d_swapchain **swapchain); + struct wined3d_swapchain_desc *desc, struct wined3d_swapchain **swapchain); }; typedef HRESULT (CDECL *wined3d_device_reset_cb)(struct wined3d_resource *resource); @@ -2213,8 +2213,8 @@ HRESULT __cdecl wined3d_device_get_vs_consts_i(const struct wined3d_device *devi UINT start_register, int *constants, UINT vector4i_count); HRESULT __cdecl wined3d_device_get_wined3d(const struct wined3d_device *device, struct wined3d **wined3d); ULONG __cdecl wined3d_device_incref(struct wined3d_device *device); -HRESULT __cdecl wined3d_device_init_3d(struct wined3d_device *device, WINED3DPRESENT_PARAMETERS *present_parameters); -HRESULT __cdecl wined3d_device_init_gdi(struct wined3d_device *device, WINED3DPRESENT_PARAMETERS *present_parameters); +HRESULT __cdecl wined3d_device_init_3d(struct wined3d_device *device, struct wined3d_swapchain_desc *swapchain_desc); +HRESULT __cdecl wined3d_device_init_gdi(struct wined3d_device *device, struct wined3d_swapchain_desc *swapchain_desc); HRESULT __cdecl wined3d_device_multiply_transform(struct wined3d_device *device, WINED3DTRANSFORMSTATETYPE state, const struct wined3d_matrix *matrix); HRESULT __cdecl wined3d_device_present(const struct wined3d_device *device, const RECT *src_rect, @@ -2224,7 +2224,7 @@ HRESULT __cdecl wined3d_device_process_vertices(struct wined3d_device *device, const struct wined3d_vertex_declaration *declaration, DWORD flags, DWORD dst_fvf); void __cdecl wined3d_device_release_focus_window(struct wined3d_device *device); HRESULT __cdecl wined3d_device_reset(struct wined3d_device *device, - const WINED3DPRESENT_PARAMETERS *present_parameters, wined3d_device_reset_cb callback); + const struct wined3d_swapchain_desc *swapchain_desc, wined3d_device_reset_cb callback); void __cdecl wined3d_device_restore_fullscreen_window(struct wined3d_device *device, HWND window); HRESULT __cdecl wined3d_device_set_base_vertex_index(struct wined3d_device *device, INT base_index); HRESULT __cdecl wined3d_device_set_clip_plane(struct wined3d_device *device, UINT plane_idx, const float *plane); @@ -2395,7 +2395,7 @@ HRESULT __cdecl wined3d_surface_update_overlay_z_order(struct wined3d_surface *s DWORD flags, struct wined3d_surface *ref); HRESULT __cdecl wined3d_swapchain_create(struct wined3d_device *device, - WINED3DPRESENT_PARAMETERS *present_parameters, WINED3DSURFTYPE surface_type, void *parent, + struct wined3d_swapchain_desc *desc, WINED3DSURFTYPE surface_type, void *parent, const struct wined3d_parent_ops *parent_ops, struct wined3d_swapchain **swapchain); ULONG __cdecl wined3d_swapchain_decref(struct wined3d_swapchain *swapchain); HRESULT __cdecl wined3d_swapchain_get_back_buffer(const struct wined3d_swapchain *swapchain, @@ -2408,8 +2408,8 @@ HRESULT __cdecl wined3d_swapchain_get_front_buffer_data(const struct wined3d_swa HRESULT __cdecl wined3d_swapchain_get_gamma_ramp(const struct wined3d_swapchain *swapchain, struct wined3d_gamma_ramp *ramp); void * __cdecl wined3d_swapchain_get_parent(const struct wined3d_swapchain *swapchain); -HRESULT __cdecl wined3d_swapchain_get_present_parameters(const struct wined3d_swapchain *swapchain, - WINED3DPRESENT_PARAMETERS *present_parameters); +HRESULT __cdecl wined3d_swapchain_get_desc(const struct wined3d_swapchain *swapchain, + struct wined3d_swapchain_desc *desc); HRESULT __cdecl wined3d_swapchain_get_raster_status(const struct wined3d_swapchain *swapchain, WINED3DRASTER_STATUS *raster_status); ULONG __cdecl wined3d_swapchain_incref(struct wined3d_swapchain *swapchain); diff --git a/include/wine/winedxgi.idl b/include/wine/winedxgi.idl index 3ff0b1307ae..363030a0018 100644 --- a/include/wine/winedxgi.idl +++ b/include/wine/winedxgi.idl @@ -54,7 +54,7 @@ interface IWineDXGIDevice : IDXGIDevice [out] void **surface ); HRESULT create_swapchain( - [in] struct _WINED3DPRESENT_PARAMETERS *present_parameters, + [in] struct wined3d_swapchain_desc *desc, [out] struct wined3d_swapchain **wined3d_swapchain ); } -- 2.11.4.GIT