Aaryaman Vasishta : d3drm: Store reference to render target in IDirect3DRM*::CreateDeviceFromD3D.

Alexandre Julliard julliard at winehq.org
Fri Aug 12 10:00:58 CDT 2016


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

Author: Aaryaman Vasishta <jem456.vasishta at gmail.com>
Date:   Wed Aug 10 21:25:02 2016 +0530

d3drm: Store reference to render target in IDirect3DRM*::CreateDeviceFromD3D.

Signed-off-by: Aaryaman Vasishta <jem456.vasishta at gmail.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d3drm/device.c | 17 ++++++++++++-----
 1 file changed, 12 insertions(+), 5 deletions(-)

diff --git a/dlls/d3drm/device.c b/dlls/d3drm/device.c
index a8d646b..57fd7c0 100644
--- a/dlls/d3drm/device.c
+++ b/dlls/d3drm/device.c
@@ -213,7 +213,7 @@ static HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, ID
 {
     IDirectDraw *ddraw;
     IDirectDrawSurface *surface;
-    IDirect3DDevice2 *d3d_device2;
+    IDirect3DDevice2 *d3d_device2 = NULL;
     DDSURFACEDESC desc;
     HRESULT hr;
 
@@ -223,9 +223,6 @@ static HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, ID
     IDirect3DRM_AddRef(device->d3drm);
     IDirect3DDevice_AddRef(d3d_device);
 
-    if (device->ddraw)
-        return D3DRMERR_BADOBJECT;
-
     /* Fetch render target and get width/height from there */
     if (FAILED(hr = IDirect3DDevice_QueryInterface(d3d_device, &IID_IDirectDrawSurface, (void **)&surface)))
     {
@@ -237,16 +234,26 @@ static HRESULT d3drm_device_set_ddraw_device_d3d(struct d3drm_device *device, ID
             return hr;
     }
 
+    if (device->ddraw)
+    {
+        if (d3d_device2)
+            IDirectDrawSurface_Release(surface);
+        return D3DRMERR_BADOBJECT;
+    }
+
     desc.dwSize = sizeof(desc);
     hr = IDirectDrawSurface_GetSurfaceDesc(surface, &desc);
-    IDirectDrawSurface_Release(surface);
     if (FAILED(hr))
+    {
+        IDirectDrawSurface_Release(surface);
         return hr;
+    }
 
     device->ddraw = ddraw;
     device->width = desc.dwWidth;
     device->height = desc.dwHeight;
     device->device = d3d_device;
+    device->render_target = surface;
 
     return hr;
 }




More information about the wine-cvs mailing list