static HRESULT WINAPI DECLSPEC_HOTPATCH d3d9_swapchain_Present(IDirect3DSwapChain9Ex *iface, const RECT *src_rect, const RECT *dst_rect, HWND dst_window_override, const RGNDATA *dirty_region, DWORD flags) { struct d3d9_swapchain *swapchain = impl_from_IDirect3DSwapChain9Ex(iface); struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(swapchain->parent_device); HRESULT hr; TRACE("iface %p, src_rect %s, dst_rect %s, dst_window_override %p, dirty_region %p, flags %#x.\n", iface, wine_dbgstr_rect(src_rect), wine_dbgstr_rect(dst_rect), dst_window_override, dirty_region, flags); if (device->device_state != D3D9_DEVICE_STATE_OK) return device->d3d_parent->extended ? S_PRESENT_OCCLUDED : D3DERR_DEVICELOST; if (dirty_region) FIXME("Ignoring dirty_region %p.\n", dirty_region); wined3d_mutex_lock(); hr = wined3d_swapchain_present(swapchain->wined3d_swapchain, src_rect, dst_rect, dst_window_override, flags); wined3d_mutex_unlock(); return hr; }
static HRESULT WINAPI d3d9_swapchain_QueryInterface(IDirect3DSwapChain9Ex *iface, REFIID riid, void **out) { TRACE("iface %p, riid %s, out %p.\n", iface, debugstr_guid(riid), out); if (IsEqualGUID(riid, &IID_IDirect3DSwapChain9) || IsEqualGUID(riid, &IID_IUnknown)) { IDirect3DSwapChain9Ex_AddRef(iface); *out = iface; return S_OK; } if (IsEqualGUID(riid, &IID_IDirect3DSwapChain9Ex)) { struct d3d9_swapchain *swapchain = impl_from_IDirect3DSwapChain9Ex(iface); struct d3d9_device *device = impl_from_IDirect3DDevice9Ex(swapchain->parent_device); /* Find out if the creating d3d9 interface was created with Direct3DCreate9Ex. * It doesn't matter with which function the device was created. */ if (!device->d3d_parent->extended) { WARN("IDirect3D9 instance wasn't created with CreateDirect3D9Ex, returning E_NOINTERFACE.\n"); *out = NULL; return E_NOINTERFACE; } IDirect3DSwapChain9Ex_AddRef(iface); *out = iface; return S_OK; } WARN("%s not implemented, returning E_NOINTERFACE.\n", debugstr_guid(riid)); *out = NULL; return E_NOINTERFACE; }