[PATCH 1/5] ddraw: The various D3D device interfaces can't be queried from version 7 surfaces.
Henri Verbeet
hverbeet at codeweavers.com
Mon Apr 2 15:42:19 CDT 2012
---
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);
--
1.7.3.4
More information about the wine-patches
mailing list