static HRESULT STDMETHODCALLTYPE dxgi_swapchain_ResizeBuffers(IDXGISwapChain *iface, UINT buffer_count, UINT width, UINT height, DXGI_FORMAT format, UINT flags) { FIXME("iface %p, buffer_count %u, width %u, height %u, format %s, flags %#x stub!\n", iface, buffer_count, width, height, debug_dxgi_format(format), flags); return E_NOTIMPL; }
static HRESULT STDMETHODCALLTYPE dxgi_swapchain_ResizeBuffers(IDXGISwapChain *iface, UINT buffer_count, UINT width, UINT height, DXGI_FORMAT format, UINT flags) { struct dxgi_swapchain *swapchain = impl_from_IDXGISwapChain(iface); struct wined3d_swapchain_desc wined3d_desc; struct wined3d_surface *surface; IUnknown *parent; unsigned int i; HRESULT hr; TRACE("iface %p, buffer_count %u, width %u, height %u, format %s, flags %#x.\n", iface, buffer_count, width, height, debug_dxgi_format(format), flags); if (flags) FIXME("Ignoring flags %#x.\n", flags); EnterCriticalSection(&dxgi_cs); wined3d_swapchain_get_desc(swapchain->wined3d_swapchain, &wined3d_desc); for (i = 0; i < wined3d_desc.backbuffer_count; ++i) { surface = wined3d_swapchain_get_back_buffer(swapchain->wined3d_swapchain, i, WINED3D_BACKBUFFER_TYPE_MONO); parent = wined3d_surface_get_parent(surface); IUnknown_AddRef(parent); if (IUnknown_Release(parent)) { LeaveCriticalSection(&dxgi_cs); return DXGI_ERROR_INVALID_CALL; } } if (format != DXGI_FORMAT_UNKNOWN) wined3d_desc.backbuffer_format = wined3dformat_from_dxgi_format(format); hr = wined3d_swapchain_resize_buffers(swapchain->wined3d_swapchain, buffer_count, width, height, wined3d_desc.backbuffer_format, wined3d_desc.multisample_type, wined3d_desc.multisample_quality); LeaveCriticalSection(&dxgi_cs); 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; }