Henri Verbeet : ddraw: The various D3D device interfaces can' t be queried from version 7 surfaces.

Alexandre Julliard julliard at winehq.org
Tue Apr 3 12:17:38 CDT 2012


Module: wine
Branch: master
Commit: 75aa0b38f7bf305a924597fe93f7681a4c19972d
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=75aa0b38f7bf305a924597fe93f7681a4c19972d

Author: Henri Verbeet <hverbeet at 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);




More information about the wine-cvs mailing list