Module: wine Branch: master Commit: 75aa0b38f7bf305a924597fe93f7681a4c19972d URL: http://source.winehq.org/git/wine.git/?a=commit;h=75aa0b38f7bf305a924597fe93...
Author: Henri Verbeet hverbeet@codeweavers.com Date: Mon Apr 2 22:42:19 2012 +0200
ddraw: The various D3D device interfaces can't be queried from version 7 surfaces.
---
dlls/ddraw/surface.c | 36 +++++++++++++++++------------------- 1 files changed, 17 insertions(+), 19 deletions(-)
diff --git a/dlls/ddraw/surface.c b/dlls/ddraw/surface.c index 860a80d..f2c707a 100644 --- a/dlls/ddraw/surface.c +++ b/dlls/ddraw/surface.c @@ -198,32 +198,30 @@ static HRESULT WINAPI ddraw_surface7_QueryInterface(IDirectDrawSurface7 *iface, return E_NOINTERFACE; }
- if (IsEqualGUID(riid, &IID_D3DDEVICE_WineD3D) - || IsEqualGUID(riid, &IID_IDirect3DHALDevice) - || IsEqualGUID(riid, &IID_IDirect3DRGBDevice)) + if (This->version != 7) { - IDirect3DDevice7 *d3d; - IDirect3DDeviceImpl *device_impl; + if (IsEqualGUID(riid, &IID_D3DDEVICE_WineD3D) + || IsEqualGUID(riid, &IID_IDirect3DHALDevice) + || IsEqualGUID(riid, &IID_IDirect3DRGBDevice)) + { + IDirect3DDeviceImpl *device_impl; + IDirect3DDevice7 *device; + HRESULT hr;
- /* Call into IDirect3D7 for creation */ - IDirect3D7_CreateDevice(&This->ddraw->IDirect3D7_iface, riid, &This->IDirectDrawSurface7_iface, - &d3d); + hr = IDirect3D7_CreateDevice(&This->ddraw->IDirect3D7_iface, riid, + &This->IDirectDrawSurface7_iface, &device); + if (FAILED(hr)) + { + WARN("Failed to create device, hr %#x.\n", hr); + return hr; + }
- if (d3d) - { - device_impl = impl_from_IDirect3DDevice7(d3d); + device_impl = impl_from_IDirect3DDevice7(device); device_impl->from_surface = TRUE; *obj = &device_impl->IDirect3DDevice_iface; - TRACE("(%p) Returning IDirect3DDevice interface at %p\n", This, *obj); return S_OK; }
- WARN("Unable to create a IDirect3DDevice instance, returning E_NOINTERFACE\n"); - return E_NOINTERFACE; - } - - if (This->version != 7) - { if (IsEqualGUID(&IID_IDirect3DTexture2, riid)) { IDirect3DTexture2_AddRef(&This->IDirect3DTexture2_iface);