mirror of
git://source.winehq.org/git/wine.git
synced 2024-09-06 04:00:56 +00:00
d3d9: Implement d3d9_EnumAdapterModesEx().
This commit is contained in:
parent
bb1740a42e
commit
e97dc9f33d
|
@ -174,7 +174,8 @@ static HRESULT WINAPI d3d8_EnumAdapterModes(IDirect3D8 *iface, UINT adapter, UIN
|
|||
iface, adapter, mode_idx, mode);
|
||||
|
||||
wined3d_mutex_lock();
|
||||
hr = wined3d_enum_adapter_modes(d3d8->wined3d, adapter, WINED3DFMT_UNKNOWN, mode_idx, &wined3d_mode);
|
||||
hr = wined3d_enum_adapter_modes(d3d8->wined3d, adapter, WINED3DFMT_UNKNOWN,
|
||||
WINED3D_SCANLINE_ORDERING_UNKNOWN, mode_idx, &wined3d_mode);
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
|
|
|
@ -186,7 +186,7 @@ static HRESULT WINAPI d3d9_EnumAdapterModes(IDirect3D9Ex *iface, UINT adapter,
|
|||
|
||||
wined3d_mutex_lock();
|
||||
hr = wined3d_enum_adapter_modes(d3d9->wined3d, adapter, wined3dformat_from_d3dformat(format),
|
||||
mode_idx, &wined3d_mode);
|
||||
WINED3D_SCANLINE_ORDERING_UNKNOWN, mode_idx, &wined3d_mode);
|
||||
wined3d_mutex_unlock();
|
||||
|
||||
if (SUCCEEDED(hr))
|
||||
|
@ -497,10 +497,31 @@ static UINT WINAPI d3d9_GetAdapterModeCountEx(IDirect3D9Ex *iface,
|
|||
static HRESULT WINAPI d3d9_EnumAdapterModesEx(IDirect3D9Ex *iface,
|
||||
UINT adapter, const D3DDISPLAYMODEFILTER *filter, UINT mode_idx, D3DDISPLAYMODEEX *mode)
|
||||
{
|
||||
FIXME("iface %p, adapter %u, filter %p, mode_idx %u, mode %p stub!\n",
|
||||
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);
|
||||
|
||||
return E_NOTIMPL;
|
||||
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_GetAdapterDisplayModeEx(IDirect3D9Ex *iface,
|
||||
|
|
|
@ -2221,8 +2221,8 @@ static HRESULT WINAPI ddraw7_EnumDisplayModes(IDirectDraw7 *iface, DWORD Flags,
|
|||
for(fmt = 0; fmt < (sizeof(checkFormatList) / sizeof(checkFormatList[0])); fmt++)
|
||||
{
|
||||
modenum = 0;
|
||||
while (wined3d_enum_adapter_modes(ddraw->wined3d, WINED3DADAPTER_DEFAULT,
|
||||
checkFormatList[fmt], modenum++, &mode) == WINED3D_OK)
|
||||
while (wined3d_enum_adapter_modes(ddraw->wined3d, WINED3DADAPTER_DEFAULT, checkFormatList[fmt],
|
||||
WINED3D_SCANLINE_ORDERING_UNKNOWN, modenum++, &mode) == WINED3D_OK)
|
||||
{
|
||||
PixelFormat_WineD3DtoDD(&pixelformat, mode.format_id);
|
||||
if (DDSD)
|
||||
|
|
|
@ -164,7 +164,8 @@ static HRESULT STDMETHODCALLTYPE dxgi_output_GetDisplayModeList(IDXGIOutput *ifa
|
|||
struct wined3d_display_mode mode;
|
||||
HRESULT hr;
|
||||
|
||||
hr = wined3d_enum_adapter_modes(wined3d, This->adapter->ordinal, wined3d_format, i, &mode);
|
||||
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);
|
||||
|
|
|
@ -2945,7 +2945,8 @@ UINT CDECL wined3d_get_adapter_mode_count(const struct wined3d *wined3d, UINT ad
|
|||
|
||||
/* Note: dx9 supplies a format. Calls from d3d8 supply WINED3DFMT_UNKNOWN */
|
||||
HRESULT CDECL wined3d_enum_adapter_modes(const struct wined3d *wined3d, UINT adapter_idx,
|
||||
enum wined3d_format_id format_id, UINT mode_idx, struct wined3d_display_mode *mode)
|
||||
enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering,
|
||||
UINT mode_idx, struct wined3d_display_mode *mode)
|
||||
{
|
||||
const struct wined3d_adapter *adapter;
|
||||
const struct wined3d_format *format;
|
||||
|
@ -2954,8 +2955,8 @@ HRESULT CDECL wined3d_enum_adapter_modes(const struct wined3d *wined3d, UINT ada
|
|||
UINT i = 0;
|
||||
int j = 0;
|
||||
|
||||
TRACE("wined3d %p, adapter_idx %u, format %s, mode_idx %u, mode %p.\n",
|
||||
wined3d, adapter_idx, debug_d3dformat(format_id), mode_idx, mode);
|
||||
TRACE("wined3d %p, adapter_idx %u, format %s, scanline_ordering %#x, mode_idx %u, mode %p.\n",
|
||||
wined3d, adapter_idx, debug_d3dformat(format_id), scanline_ordering, mode_idx, mode);
|
||||
|
||||
if (!mode || adapter_idx >= wined3d->adapter_count)
|
||||
return WINED3DERR_INVALIDCALL;
|
||||
|
@ -2975,6 +2976,17 @@ HRESULT CDECL wined3d_enum_adapter_modes(const struct wined3d *wined3d, UINT ada
|
|||
return WINED3DERR_INVALIDCALL;
|
||||
}
|
||||
|
||||
if (m.dmFields & DM_DISPLAYFLAGS)
|
||||
{
|
||||
if (scanline_ordering == WINED3D_SCANLINE_ORDERING_PROGRESSIVE
|
||||
&& (m.u2.dmDisplayFlags & DM_INTERLACED))
|
||||
continue;
|
||||
|
||||
if (scanline_ordering == WINED3D_SCANLINE_ORDERING_INTERLACED
|
||||
&& !(m.u2.dmDisplayFlags & DM_INTERLACED))
|
||||
continue;
|
||||
}
|
||||
|
||||
if (format_id == WINED3DFMT_UNKNOWN)
|
||||
{
|
||||
/* This is for d3d8, do not enumerate P8 here. */
|
||||
|
|
|
@ -2037,7 +2037,8 @@ HRESULT __cdecl wined3d_check_device_type(const struct wined3d *wined3d, UINT ad
|
|||
struct wined3d * __cdecl wined3d_create(UINT version, DWORD flags);
|
||||
ULONG __cdecl wined3d_decref(struct wined3d *wined3d);
|
||||
HRESULT __cdecl wined3d_enum_adapter_modes(const struct wined3d *wined3d, UINT adapter_idx,
|
||||
enum wined3d_format_id format_id, UINT mode_idx, struct wined3d_display_mode *mode);
|
||||
enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering,
|
||||
UINT mode_idx, struct wined3d_display_mode *mode);
|
||||
UINT __cdecl wined3d_get_adapter_count(const struct wined3d *wined3d);
|
||||
HRESULT __cdecl wined3d_get_adapter_display_mode(const struct wined3d *wined3d, UINT adapter_idx,
|
||||
struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation);
|
||||
|
|
Loading…
Reference in a new issue