wined3d: Refactor wined3d_get_adapter_display_mode() to wined3d_output_get_display_mode().

Signed-off-by: Zhiyi Zhang <zzhang@codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard@winehq.org>
feature/deterministic
Zhiyi Zhang 2020-03-06 21:16:29 +08:00 committed by Alexandre Julliard
parent 7161e01ad8
commit aa177f6afc
11 changed files with 63 additions and 50 deletions

View File

@ -184,13 +184,18 @@ static HRESULT WINAPI d3d8_GetAdapterDisplayMode(IDirect3D8 *iface, UINT adapter
{
struct d3d8 *d3d8 = impl_from_IDirect3D8(iface);
struct wined3d_display_mode wined3d_mode;
unsigned int output_idx;
HRESULT hr;
TRACE("iface %p, adapter %u, mode %p.\n",
iface, adapter, mode);
output_idx = adapter;
if (output_idx >= d3d8->wined3d_output_count)
return D3DERR_INVALIDCALL;
wined3d_mutex_lock();
hr = wined3d_get_adapter_display_mode(d3d8->wined3d, adapter, &wined3d_mode, NULL);
hr = wined3d_output_get_display_mode(d3d8->wined3d_outputs[output_idx], &wined3d_mode, NULL);
wined3d_mutex_unlock();
if (SUCCEEDED(hr))

View File

@ -208,12 +208,17 @@ static HRESULT WINAPI d3d9_GetAdapterDisplayMode(IDirect3D9Ex *iface, UINT adapt
{
struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
struct wined3d_display_mode wined3d_mode;
unsigned int output_idx;
HRESULT hr;
TRACE("iface %p, adapter %u, mode %p.\n", iface, adapter, mode);
output_idx = adapter;
if (output_idx >= d3d9->wined3d_output_count)
return D3DERR_INVALIDCALL;
wined3d_mutex_lock();
hr = wined3d_get_adapter_display_mode(d3d9->wined3d, adapter, &wined3d_mode, NULL);
hr = wined3d_output_get_display_mode(d3d9->wined3d_outputs[output_idx], &wined3d_mode, NULL);
wined3d_mutex_unlock();
if (SUCCEEDED(hr))
@ -504,16 +509,21 @@ static HRESULT WINAPI d3d9_GetAdapterDisplayModeEx(IDirect3D9Ex *iface,
{
struct d3d9 *d3d9 = impl_from_IDirect3D9Ex(iface);
struct wined3d_display_mode wined3d_mode;
unsigned int output_idx;
HRESULT hr;
TRACE("iface %p, adapter %u, mode %p, rotation %p.\n",
iface, adapter, mode, rotation);
output_idx = adapter;
if (output_idx >= d3d9->wined3d_output_count)
return D3DERR_INVALIDCALL;
if (mode->Size != sizeof(*mode))
return D3DERR_INVALIDCALL;
wined3d_mutex_lock();
hr = wined3d_get_adapter_display_mode(d3d9->wined3d, adapter, &wined3d_mode,
hr = wined3d_output_get_display_mode(d3d9->wined3d_outputs[output_idx], &wined3d_mode,
(enum wined3d_display_rotation *)rotation);
wined3d_mutex_unlock();

View File

@ -556,7 +556,7 @@ static HRESULT ddraw_attach_d3d_device(struct ddraw *ddraw, HWND window,
TRACE("ddraw %p.\n", ddraw);
if (FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL)))
{
ERR("Failed to get display mode.\n");
return hr;
@ -1617,7 +1617,7 @@ static HRESULT WINAPI ddraw7_GetDisplayMode(IDirectDraw7 *iface, DDSURFACEDESC2
wined3d_mutex_lock();
if (FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL)))
{
ERR("Failed to get display mode, hr %#x.\n", hr);
wined3d_mutex_unlock();
@ -1710,7 +1710,7 @@ static HRESULT WINAPI ddraw7_GetFourCCCodes(IDirectDraw7 *iface, DWORD *NumCodes
TRACE("iface %p, codes_count %p, codes %p.\n", iface, NumCodes, Codes);
if (FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL)))
{
ERR("Failed to get display mode, hr %#x.\n", hr);
return hr;
@ -1772,7 +1772,7 @@ static HRESULT WINAPI ddraw7_GetMonitorFrequency(IDirectDraw7 *iface, DWORD *fre
TRACE("iface %p, frequency %p.\n", iface, frequency);
wined3d_mutex_lock();
hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL);
hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL);
wined3d_mutex_unlock();
if (FAILED(hr))
{
@ -1907,7 +1907,7 @@ static HRESULT WINAPI ddraw7_GetAvailableVidMem(IDirectDraw7 *iface, DDSCAPS2 *c
/* Some applications (e.g. 3DMark 2000) assume that the reported amount of
* video memory doesn't include the memory used by the default framebuffer.
*/
if (FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL)))
{
WARN("Failed to get display mode, hr %#x.\n", hr);
wined3d_mutex_unlock();
@ -4432,7 +4432,7 @@ static HRESULT WINAPI d3d7_EnumZBufferFormats(IDirect3D7 *iface, REFCLSID device
* not like that we'll have to find some workaround, like iterating over
* all imaginable formats and collecting all the depth stencil formats we
* can get. */
if (FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL)))
{
ERR("Failed to get display mode, hr %#x.\n", hr);
wined3d_mutex_unlock();

View File

@ -1086,10 +1086,10 @@ static HRESULT d3d_device7_EnumTextureFormats(IDirect3DDevice7 *iface,
wined3d_mutex_lock();
memset(&mode, 0, sizeof(mode));
if (FAILED(hr = wined3d_get_adapter_display_mode(device->ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(device->ddraw->wined3d_output, &mode, NULL)))
{
wined3d_mutex_unlock();
WARN("Cannot get the current adapter format\n");
WARN("Failed to get output display mode, hr %#x.\n", hr);
return hr;
}
@ -1214,10 +1214,10 @@ static HRESULT WINAPI d3d_device2_EnumTextureFormats(IDirect3DDevice2 *iface,
wined3d_mutex_lock();
memset(&mode, 0, sizeof(mode));
if (FAILED(hr = wined3d_get_adapter_display_mode(device->ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(device->ddraw->wined3d_output, &mode, NULL)))
{
wined3d_mutex_unlock();
WARN("Cannot get the current adapter format\n");
WARN("Failed to get output display mode, hr %#x.\n", hr);
return hr;
}

View File

@ -6008,7 +6008,7 @@ HRESULT ddraw_surface_create(struct ddraw *ddraw, const DDSURFACEDESC2 *surface_
return DDERR_INVALIDCAPS;
}
if (FAILED(hr = wined3d_get_adapter_display_mode(ddraw->wined3d, WINED3DADAPTER_DEFAULT, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(ddraw->wined3d_output, &mode, NULL)))
{
ERR("Failed to get display mode, hr %#x.\n", hr);
heap_free(texture);

View File

@ -2903,7 +2903,7 @@ static HRESULT d3d12_swapchain_init(struct d3d12_swapchain *swapchain, IWineDXGI
if (FAILED(hr = wined3d_swapchain_desc_from_dxgi(&wined3d_desc, window, swapchain_desc, fullscreen_desc)))
return hr;
if (FAILED(hr = wined3d_swapchain_state_create(&wined3d_desc, window,
dxgi_adapter->factory->wined3d, dxgi_adapter->ordinal, &swapchain->state)))
dxgi_adapter->factory->wined3d, &swapchain->state)))
return hr;
if (swapchain_desc->BufferUsage && swapchain_desc->BufferUsage != DXGI_USAGE_RENDER_TARGET_OUTPUT)

View File

@ -4858,7 +4858,7 @@ HRESULT CDECL wined3d_device_set_cursor_properties(struct wined3d_device *device
return WINED3DERR_INVALIDCALL;
}
if (FAILED(hr = wined3d_get_adapter_display_mode(device->wined3d, device->adapter->ordinal, &mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(&device->adapter->outputs[0], &mode, NULL)))
{
ERR("Failed to get display mode, hr %#x.\n", hr);
return WINED3DERR_INVALIDCALL;

View File

@ -933,7 +933,7 @@ HRESULT CDECL wined3d_get_output_desc(const struct wined3d *wined3d, unsigned in
if (!(monitor = MonitorFromPoint(adapter->monitor_position, MONITOR_DEFAULTTOPRIMARY)))
return WINED3DERR_INVALIDCALL;
if (FAILED(hr = wined3d_get_adapter_display_mode(wined3d, adapter_idx, &mode, &rotation)))
if (FAILED(hr = wined3d_output_get_display_mode(&adapter->outputs[0], &mode, &rotation)))
return hr;
memcpy(desc->device_name, adapter->device_name, sizeof(desc->device_name));
@ -1144,7 +1144,7 @@ HRESULT CDECL wined3d_find_closest_matching_adapter_mode(const struct wined3d *w
if (!mode->width || !mode->height)
{
struct wined3d_display_mode current_mode;
if (FAILED(hr = wined3d_get_adapter_display_mode(wined3d, adapter_idx,
if (FAILED(hr = wined3d_output_get_display_mode(&wined3d->adapters[adapter_idx]->outputs[0],
&current_mode, NULL)))
{
heap_free(matching_modes);
@ -1180,24 +1180,20 @@ HRESULT CDECL wined3d_find_closest_matching_adapter_mode(const struct wined3d *w
return WINED3D_OK;
}
HRESULT CDECL wined3d_get_adapter_display_mode(const struct wined3d *wined3d, UINT adapter_idx,
HRESULT CDECL wined3d_output_get_display_mode(const struct wined3d_output *output,
struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
{
const struct wined3d_adapter *adapter;
DEVMODEW m;
TRACE("wined3d %p, adapter_idx %u, display_mode %p, rotation %p.\n",
wined3d, adapter_idx, mode, rotation);
TRACE("output %p, display_mode %p, rotation %p.\n", output, mode, rotation);
if (!mode || adapter_idx >= wined3d->adapter_count)
if (!mode)
return WINED3DERR_INVALIDCALL;
adapter = wined3d->adapters[adapter_idx];
memset(&m, 0, sizeof(m));
m.dmSize = sizeof(m);
EnumDisplaySettingsExW(adapter->device_name, ENUM_CURRENT_SETTINGS, &m, 0);
EnumDisplaySettingsExW(output->device_name, ENUM_CURRENT_SETTINGS, &m, 0);
mode->width = m.dmPelsWidth;
mode->height = m.dmPelsHeight;
mode->refresh_rate = DEFAULT_REFRESH_RATE;
@ -1209,12 +1205,12 @@ HRESULT CDECL wined3d_get_adapter_display_mode(const struct wined3d *wined3d, UI
* are pretty angry if they SetDisplayMode from 24 to 16 bpp and find out
* that GetDisplayMode still returns 24 bpp. This should probably be
* handled in winex11 instead. */
if (adapter->outputs[0].screen_format && adapter->outputs[0].screen_format != mode->format_id)
if (output->screen_format && output->screen_format != mode->format_id)
{
WARN("Overriding format %s with stored format %s.\n",
debug_d3dformat(mode->format_id),
debug_d3dformat(adapter->outputs[0].screen_format));
mode->format_id = adapter->outputs[0].screen_format;
debug_d3dformat(output->screen_format));
mode->format_id = output->screen_format;
}
if (!(m.dmFields & DM_DISPLAYFLAGS))
@ -1421,7 +1417,8 @@ HRESULT CDECL wined3d_get_adapter_raster_status(const struct wined3d *wined3d, U
if (!QueryPerformanceCounter(&counter) || !QueryPerformanceFrequency(&freq_per_sec))
return WINED3DERR_INVALIDCALL;
if (FAILED(wined3d_get_adapter_display_mode(wined3d, adapter_idx, &mode, NULL)))
if (FAILED(wined3d_output_get_display_mode(&wined3d->adapters[adapter_idx]->outputs[0], &mode,
NULL)))
return WINED3DERR_INVALIDCALL;
if (mode.refresh_rate == DEFAULT_REFRESH_RATE)
mode.refresh_rate = 60;

View File

@ -321,12 +321,18 @@ struct wined3d_swapchain_state * CDECL wined3d_swapchain_get_state(struct wined3
HRESULT CDECL wined3d_swapchain_get_display_mode(const struct wined3d_swapchain *swapchain,
struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation)
{
struct wined3d_output *output;
HRESULT hr;
TRACE("swapchain %p, mode %p, rotation %p.\n", swapchain, mode, rotation);
hr = wined3d_get_adapter_display_mode(swapchain->device->wined3d,
swapchain->device->adapter->ordinal, mode, rotation);
if (!(output = wined3d_swapchain_get_output(swapchain)))
{
ERR("Failed to get output from swapchain %p.\n", swapchain);
return E_FAIL;
}
hr = wined3d_output_get_display_mode(output, mode, rotation);
TRACE("Returning w %u, h %u, refresh rate %u, format %s.\n",
mode->width, mode->height, mode->refresh_rate, debug_d3dformat(mode->format_id));
@ -811,8 +817,7 @@ static enum wined3d_format_id adapter_format_from_backbuffer_format(const struct
}
static HRESULT wined3d_swapchain_state_init(struct wined3d_swapchain_state *state,
const struct wined3d_swapchain_desc *desc, HWND window,
struct wined3d *wined3d, unsigned int adapter_idx)
const struct wined3d_swapchain_desc *desc, HWND window, struct wined3d *wined3d)
{
struct wined3d_output *output;
HRESULT hr;
@ -825,7 +830,7 @@ static HRESULT wined3d_swapchain_state_init(struct wined3d_swapchain_state *stat
return E_FAIL;
}
if (FAILED(hr = wined3d_get_adapter_display_mode(wined3d, adapter_idx, &state->original_mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(output, &state->original_mode, NULL)))
{
ERR("Failed to get current display mode, hr %#x.\n", hr);
return hr;
@ -858,7 +863,6 @@ static HRESULT wined3d_swapchain_init(struct wined3d_swapchain *swapchain, struc
struct wined3d_swapchain_desc *desc, void *parent, const struct wined3d_parent_ops *parent_ops,
const struct wined3d_swapchain_ops *swapchain_ops)
{
const struct wined3d_adapter *adapter = device->adapter;
struct wined3d_resource_desc texture_desc;
struct wined3d_output *output;
BOOL displaymode_set = FALSE;
@ -882,7 +886,7 @@ static HRESULT wined3d_swapchain_init(struct wined3d_swapchain *swapchain, struc
FIXME("Unimplemented swap effect %#x.\n", desc->swap_effect);
window = desc->device_window ? desc->device_window : device->create_parms.focus_window;
if (FAILED(hr = wined3d_swapchain_state_init(&swapchain->state, desc, window, device->wined3d, adapter->ordinal)))
if (FAILED(hr = wined3d_swapchain_state_init(&swapchain->state, desc, window, device->wined3d)))
return hr;
swapchain->swapchain_ops = swapchain_ops;
@ -1496,7 +1500,7 @@ HRESULT CDECL wined3d_swapchain_state_resize_target(struct wined3d_swapchain_sta
}
else
{
if (FAILED(hr = wined3d_get_adapter_display_mode(wined3d, 0, &actual_mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(output, &actual_mode, NULL)))
{
ERR("Failed to get display mode, hr %#x.\n", hr);
wined3d_mutex_unlock();
@ -1665,7 +1669,7 @@ HRESULT CDECL wined3d_swapchain_state_set_fullscreen(struct wined3d_swapchain_st
if (mode)
WARN("WINED3D_SWAPCHAIN_ALLOW_MODE_SWITCH is not set, ignoring mode.\n");
if (FAILED(hr = wined3d_get_adapter_display_mode(wined3d, 0, &actual_mode, NULL)))
if (FAILED(hr = wined3d_output_get_display_mode(output, &actual_mode, NULL)))
{
ERR("Failed to get display mode, hr %#x.\n", hr);
return WINED3DERR_INVALIDCALL;
@ -1716,20 +1720,17 @@ void CDECL wined3d_swapchain_state_destroy(struct wined3d_swapchain_state *state
}
HRESULT CDECL wined3d_swapchain_state_create(const struct wined3d_swapchain_desc *desc,
HWND window, struct wined3d *wined3d, unsigned int adapter_idx, struct wined3d_swapchain_state **state)
HWND window, struct wined3d *wined3d, struct wined3d_swapchain_state **state)
{
struct wined3d_swapchain_state *s;
HRESULT hr;
TRACE("desc %p, window %p, wined3d %p, adapter_idx %u, state %p.\n",
desc, window, wined3d, adapter_idx, state);
TRACE("desc %p, window %p, state %p.\n", desc, window, state);
TRACE("desc %p, window %p, wined3d %p, state %p.\n", desc, window, wined3d, state);
if (!(s = heap_alloc_zero(sizeof(*s))))
return E_OUTOFMEMORY;
if (FAILED(hr = wined3d_swapchain_state_init(s, desc, window, wined3d, adapter_idx)))
if (FAILED(hr = wined3d_swapchain_state_init(s, desc, window, wined3d)))
{
heap_free(s);
return hr;

View File

@ -12,7 +12,6 @@
@ cdecl wined3d_find_closest_matching_adapter_mode(ptr long ptr)
@ cdecl wined3d_get_adapter(ptr long)
@ cdecl wined3d_get_adapter_count(ptr)
@ cdecl wined3d_get_adapter_display_mode(ptr long ptr ptr)
@ cdecl wined3d_get_adapter_identifier(ptr long long ptr)
@ cdecl wined3d_get_adapter_raster_status(ptr long ptr)
@ cdecl wined3d_get_device_caps(ptr long long ptr)
@ -159,6 +158,7 @@
@ cdecl wined3d_device_update_texture(ptr ptr ptr)
@ cdecl wined3d_device_validate_device(ptr ptr)
@ cdecl wined3d_output_get_display_mode(ptr ptr ptr)
@ cdecl wined3d_output_get_mode(ptr long long long ptr)
@ cdecl wined3d_output_get_mode_count(ptr long long)
@ cdecl wined3d_output_set_display_mode(ptr ptr)
@ -280,7 +280,7 @@
@ cdecl wined3d_swapchain_set_palette(ptr ptr)
@ cdecl wined3d_swapchain_set_window(ptr ptr)
@ cdecl wined3d_swapchain_state_create(ptr ptr ptr long ptr)
@ cdecl wined3d_swapchain_state_create(ptr ptr ptr ptr)
@ cdecl wined3d_swapchain_state_destroy(ptr)
@ cdecl wined3d_swapchain_state_resize_target(ptr ptr ptr ptr)
@ cdecl wined3d_swapchain_state_set_fullscreen(ptr ptr ptr ptr ptr)

View File

@ -2266,8 +2266,6 @@ HRESULT __cdecl wined3d_find_closest_matching_adapter_mode(const struct wined3d
struct wined3d_adapter * __cdecl wined3d_get_adapter(const struct wined3d *wined3d,
unsigned int idx);
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);
HRESULT __cdecl wined3d_get_adapter_identifier(const struct wined3d *wined3d, UINT adapter_idx,
DWORD flags, struct wined3d_adapter_identifier *identifier);
HRESULT __cdecl wined3d_get_adapter_raster_status(const struct wined3d *wined3d, UINT adapter_idx,
@ -2497,6 +2495,8 @@ HRESULT __cdecl wined3d_device_update_texture(struct wined3d_device *device,
struct wined3d_texture *src_texture, struct wined3d_texture *dst_texture);
HRESULT __cdecl wined3d_device_validate_device(const struct wined3d_device *device, DWORD *num_passes);
HRESULT __cdecl wined3d_output_get_display_mode(const struct wined3d_output *output,
struct wined3d_display_mode *mode, enum wined3d_display_rotation *rotation);
HRESULT __cdecl wined3d_output_get_mode(const struct wined3d_output *output,
enum wined3d_format_id format_id, enum wined3d_scanline_ordering scanline_ordering,
unsigned int mode_idx, struct wined3d_display_mode *mode);
@ -2759,7 +2759,7 @@ void __cdecl wined3d_swapchain_set_palette(struct wined3d_swapchain *swapchain,
void __cdecl wined3d_swapchain_set_window(struct wined3d_swapchain *swapchain, HWND window);
HRESULT __cdecl wined3d_swapchain_state_create(const struct wined3d_swapchain_desc *desc,
HWND window, struct wined3d *wined3d, unsigned int adapter_idx, struct wined3d_swapchain_state **state);
HWND window, struct wined3d *wined3d, struct wined3d_swapchain_state **state);
void __cdecl wined3d_swapchain_state_destroy(struct wined3d_swapchain_state *state);
HRESULT __cdecl wined3d_swapchain_state_resize_target(struct wined3d_swapchain_state *state,
struct wined3d *wined3d, struct wined3d_output *output,