static HRESULT WINAPI d3d9_EnumAdapterModesEx(IDirect3D9Ex *iface, UINT adapter, const D3DDISPLAYMODEFILTER *filter, UINT mode_idx, D3DDISPLAYMODEEX *mode) { struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface); struct wined3d_display_mode wined3d_mode; HRESULT hr; TRACE("iface %p, adapter %u, filter %p, mode_idx %u, mode %p.\n", iface, adapter, filter, mode_idx, mode); if (filter->Format != D3DFMT_X8R8G8B8 && filter->Format != D3DFMT_R5G6B5) return D3DERR_INVALIDCALL; wined3d_mutex_lock(); hr = wined3d_enum_adapter_modes(d3d9->wined3d, adapter, wined3dformat_from_d3dformat(filter->Format), filter->ScanLineOrdering, mode_idx, &wined3d_mode); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) { mode->Width = wined3d_mode.width; mode->Height = wined3d_mode.height; mode->RefreshRate = wined3d_mode.refresh_rate; mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id); mode->ScanLineOrdering = wined3d_mode.scanline_ordering; } return hr; }
static HRESULT WINAPI d3d9_EnumAdapterModes(IDirect3D9Ex *iface, UINT adapter, D3DFORMAT format, UINT mode_idx, D3DDISPLAYMODE *mode) { struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface); struct wined3d_display_mode wined3d_mode; HRESULT hr; TRACE("iface %p, adapter %u, format %#x, mode_idx %u, mode %p.\n", iface, adapter, format, mode_idx, mode); if (format != D3DFMT_X8R8G8B8 && format != D3DFMT_R5G6B5) return D3DERR_INVALIDCALL; wined3d_mutex_lock(); hr = wined3d_enum_adapter_modes(d3d9->wined3d, adapter, wined3dformat_from_d3dformat(format), WINED3D_SCANLINE_ORDERING_UNKNOWN, mode_idx, &wined3d_mode); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) { mode->Width = wined3d_mode.width; mode->Height = wined3d_mode.height; mode->RefreshRate = wined3d_mode.refresh_rate; mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id); } return hr; }
static HRESULT WINAPI IDirect3D8Impl_EnumAdapterModes(LPDIRECT3D8 iface, UINT Adapter, UINT Mode, D3DDISPLAYMODE* pMode) { IDirect3D8Impl *This = impl_from_IDirect3D8(iface); HRESULT hr; TRACE("iface %p, adapter %u, mode_idx %u, mode %p.\n", iface, Adapter, Mode, pMode); wined3d_mutex_lock(); hr = wined3d_enum_adapter_modes(This->WineD3D, Adapter, WINED3DFMT_UNKNOWN, Mode, (WINED3DDISPLAYMODE *)pMode); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) pMode->Format = d3dformat_from_wined3dformat(pMode->Format); return hr; }
static HRESULT WINAPI IDirect3D9Impl_EnumAdapterModes(IDirect3D9Ex *iface, UINT Adapter, D3DFORMAT Format, UINT Mode, D3DDISPLAYMODE *pMode) { IDirect3D9Impl *This = impl_from_IDirect3D9Ex(iface); HRESULT hr; TRACE("iface %p, adapter %u, format %#x, mode_idx %u, mode %p.\n", iface, Adapter, Format, Mode, pMode); /* We can't pass this to WineD3D, otherwise it'll think it came from D3D8 or DDraw. It's supposed to fail anyway, so no harm returning failure. */ if(Format != D3DFMT_X8R8G8B8 && Format != D3DFMT_R5G6B5) return D3DERR_INVALIDCALL; wined3d_mutex_lock(); hr = wined3d_enum_adapter_modes(This->WineD3D, Adapter, wined3dformat_from_d3dformat(Format), Mode, (struct wined3d_display_mode *)pMode); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) pMode->Format = d3dformat_from_wined3dformat(pMode->Format); return hr; }
static HRESULT WINAPI d3d8_EnumAdapterModes(IDirect3D8 *iface, UINT adapter, UINT mode_idx, D3DDISPLAYMODE *mode) { struct d3d8 *d3d8 = impl_from_IDirect3D8(iface); struct wined3d_display_mode wined3d_mode; HRESULT hr; TRACE("iface %p, adapter %u, mode_idx %u, mode %p.\n", iface, adapter, mode_idx, mode); wined3d_mutex_lock(); hr = wined3d_enum_adapter_modes(d3d8->wined3d, adapter, WINED3DFMT_UNKNOWN, WINED3D_SCANLINE_ORDERING_UNKNOWN, mode_idx, &wined3d_mode); wined3d_mutex_unlock(); if (SUCCEEDED(hr)) { mode->Width = wined3d_mode.width; mode->Height = wined3d_mode.height; mode->RefreshRate = wined3d_mode.refresh_rate; mode->Format = d3dformat_from_wined3dformat(wined3d_mode.format_id); } return hr; }
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput4 *iface, DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC *desc) { struct dxgi_output *output = impl_from_IDXGIOutput4(iface); enum wined3d_format_id wined3d_format; unsigned int i, max_count; struct wined3d *wined3d; FIXME("iface %p, format %s, flags %#x, mode_count %p, desc %p partial stub!\n", iface, debug_dxgi_format(format), flags, mode_count, desc); if (!mode_count) return DXGI_ERROR_INVALID_CALL; if (format == DXGI_FORMAT_UNKNOWN) { *mode_count = 0; return S_OK; } wined3d = output->adapter->factory->wined3d; wined3d_format = wined3dformat_from_dxgi_format(format); wined3d_mutex_lock(); max_count = wined3d_get_adapter_mode_count(wined3d, output->adapter->ordinal, wined3d_format, WINED3D_SCANLINE_ORDERING_UNKNOWN); if (!desc) { wined3d_mutex_unlock(); *mode_count = max_count; return S_OK; } if (max_count > *mode_count) { wined3d_mutex_unlock(); return DXGI_ERROR_MORE_DATA; } *mode_count = max_count; for (i = 0; i < *mode_count; ++i) { struct wined3d_display_mode mode; HRESULT hr; hr = wined3d_enum_adapter_modes(wined3d, output->adapter->ordinal, wined3d_format, WINED3D_SCANLINE_ORDERING_UNKNOWN, i, &mode); if (FAILED(hr)) { WARN("EnumAdapterModes failed, hr %#x.\n", hr); wined3d_mutex_unlock(); return hr; } dxgi_mode_from_wined3d(&desc[i], &mode); } wined3d_mutex_unlock(); return S_OK; }
static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput *iface, DXGI_FORMAT format, UINT flags, UINT *mode_count, DXGI_MODE_DESC *desc) { struct dxgi_output *This = impl_from_IDXGIOutput(iface); enum wined3d_format_id wined3d_format; struct wined3d *wined3d; UINT i; UINT max_count; FIXME("iface %p, format %s, flags %#x, mode_count %p, desc %p partial stub!\n", iface, debug_dxgi_format(format), flags, mode_count, desc); if (!mode_count) { return S_OK; } if (format == DXGI_FORMAT_UNKNOWN) { *mode_count = 0; return S_OK; } wined3d = IWineDXGIFactory_get_wined3d(This->adapter->parent); wined3d_format = wined3dformat_from_dxgi_format(format); EnterCriticalSection(&dxgi_cs); max_count = wined3d_get_adapter_mode_count(wined3d, This->adapter->ordinal, wined3d_format, WINED3D_SCANLINE_ORDERING_UNKNOWN); if (!desc) { wined3d_decref(wined3d); LeaveCriticalSection(&dxgi_cs); *mode_count = max_count; return S_OK; } *mode_count = min(*mode_count,max_count); for (i = 0; i < *mode_count; ++i) { struct wined3d_display_mode mode; HRESULT hr; hr = wined3d_enum_adapter_modes(wined3d, This->adapter->ordinal, wined3d_format, WINED3D_SCANLINE_ORDERING_UNKNOWN, i, &mode); if (FAILED(hr)) { WARN("EnumAdapterModes failed, hr %#x.\n", hr); wined3d_decref(wined3d); LeaveCriticalSection(&dxgi_cs); return hr; } desc[i].Width = mode.width; desc[i].Height = mode.height; desc[i].RefreshRate.Numerator = mode.refresh_rate; desc[i].RefreshRate.Denominator = 1; desc[i].Format = format; desc[i].ScanlineOrdering = mode.scanline_ordering; desc[i].Scaling = DXGI_MODE_SCALING_UNSPECIFIED; /* FIXME */ } wined3d_decref(wined3d); LeaveCriticalSection(&dxgi_cs); return S_OK; }