From 7b306e740b2c98c077c6199d8e36c3940858a8b8 Mon Sep 17 00:00:00 2001 From: Louis Lenders Date: Tue, 20 Jul 2010 23:18:21 +0200 Subject: d3d9: Reimplement GetAdapterDisplayMode on top of GetAdapterDisplayModeEx --- dlls/d3d9/directx.c | 86 +++++++++++++++++++++++++++----------------------- 1 files changed, 46 insertions(+), 40 deletions(-) diff --git a/dlls/d3d9/directx.c b/dlls/d3d9/directx.c index ff5101d..612f28e 100644 --- a/dlls/d3d9/directx.c +++ b/dlls/d3d9/directx.c @@ -178,22 +178,63 @@ static HRESULT WINAPI IDirect3D9Impl_EnumAdapterModes(LPDIRECT3D9EX iface, UINT return hr; } -static HRESULT WINAPI IDirect3D9Impl_GetAdapterDisplayMode(LPDIRECT3D9EX iface, UINT Adapter, D3DDISPLAYMODE* pMode) +static HRESULT WINAPI IDirect3D9ExImpl_GetAdapterDisplayModeEx(IDirect3D9Ex *iface, + UINT adapter, D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation) { - IDirect3D9Impl *This = (IDirect3D9Impl *)iface; HRESULT hr; + WINED3DDISPLAYMODE m; + struct wined3d_adapter_info_ex *adapterinfo; + IDirect3D9Impl *This = (IDirect3D9Impl *)iface; - TRACE("iface %p, adapter %u, mode %p.\n", iface, Adapter, pMode); + TRACE("iface %p, adapter %u, mode %p.\n", iface, adapter, mode); + TRACE("iface %p, adapter %u, mode %p, rotation %p\n", iface, adapter, mode, rotation); + + if(mode->Size != sizeof(D3DDISPLAYMODEEX)) + return D3DERR_INVALIDCALL; + + adapterinfo = HeapAlloc(GetProcessHeap(), 0, sizeof(*adapterinfo)); wined3d_mutex_lock(); - hr = IWineD3D_GetAdapterDisplayMode(This->WineD3D, Adapter, (WINED3DDISPLAYMODE *) pMode, NULL); + hr = IWineD3D_GetAdapterDisplayMode(This->WineD3D, adapter, &m, adapterinfo); wined3d_mutex_unlock(); - if (SUCCEEDED(hr)) pMode->Format = d3dformat_from_wined3dformat(pMode->Format); + if (SUCCEEDED(hr)) + { + mode->Width = m.Width; + mode->Height = m.Height; + mode->RefreshRate = m.RefreshRate; + mode->Format = d3dformat_from_wined3dformat(m.Format); + mode->ScanLineOrdering = adapterinfo->ScanLineOrdering; + + if (rotation) + *rotation = adapterinfo->Rotation; + } return hr; } +static HRESULT WINAPI IDirect3D9Impl_GetAdapterDisplayMode(LPDIRECT3D9EX iface, UINT Adapter, D3DDISPLAYMODE* pMode) +{ + HRESULT hr; + D3DDISPLAYMODEEX mode_ex; + + TRACE("iface %p, adapter %u, mode %p.\n", iface, Adapter, pMode); + + mode_ex.Size = sizeof(D3DDISPLAYMODEEX); + + hr = IDirect3D9ExImpl_GetAdapterDisplayModeEx(iface, Adapter, &mode_ex, NULL); + + if (SUCCEEDED(hr)) + { + pMode->Width = mode_ex.Width; + pMode->Height = mode_ex.Height ; + pMode->RefreshRate = mode_ex.RefreshRate; + pMode->Format = mode_ex.Format; + } + + return hr; +} + static HRESULT WINAPI IDirect3D9Impl_CheckDeviceType(IDirect3D9Ex *iface, UINT Adapter, D3DDEVTYPE CheckType, D3DFORMAT DisplayFormat, D3DFORMAT BackBufferFormat, BOOL Windowed) { @@ -457,41 +498,6 @@ static HRESULT WINAPI IDirect3D9ExImpl_EnumAdapterModesEx(IDirect3D9Ex *iface, return D3DERR_DRIVERINTERNALERROR; } -static HRESULT WINAPI IDirect3D9ExImpl_GetAdapterDisplayModeEx(IDirect3D9Ex *iface, - UINT adapter, D3DDISPLAYMODEEX *mode, D3DDISPLAYROTATION *rotation) -{ - HRESULT hr; - WINED3DDISPLAYMODE m; - struct wined3d_adapter_info_ex *adapterinfo; - IDirect3D9Impl *This = (IDirect3D9Impl *)iface; - - TRACE("iface %p, adapter %u, mode %p.\n", iface, adapter, mode); - TRACE("iface %p, adapter %u, mode %p, rotation %p\n", iface, adapter, mode, rotation); - - if(mode->Size != sizeof(D3DDISPLAYMODEEX)) - return D3DERR_INVALIDCALL; - - adapterinfo = HeapAlloc(GetProcessHeap(), 0, sizeof(*adapterinfo)); - - wined3d_mutex_lock(); - hr = IWineD3D_GetAdapterDisplayMode(This->WineD3D, adapter, &m, adapterinfo); - wined3d_mutex_unlock(); - - if (SUCCEEDED(hr)) - { - mode->Width = m.Width; - mode->Height = m.Height; - mode->RefreshRate = m.RefreshRate; - mode->Format = d3dformat_from_wined3dformat(m.Format); - mode->ScanLineOrdering = adapterinfo->ScanLineOrdering; - - if (rotation) - *rotation = adapterinfo->Rotation; - } - - return hr; -} - static HRESULT WINAPI DECLSPEC_HOTPATCH IDirect3D9ExImpl_CreateDeviceEx(IDirect3D9Ex *iface, UINT adapter, D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters, D3DDISPLAYMODEEX *mode, IDirect3DDevice9Ex **device) -- 1.7.0.4