<div dir="ltr">This patch supersedes patch 113488.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Aug 7, 2015 at 3:50 AM, Aaryaman Vasishta <span dir="ltr"><<a href="mailto:jem456.vasishta@gmail.com" target="_blank">jem456.vasishta@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
 dlls/d3drm/device.c      |  7 ++++-<br>
 dlls/d3drm/tests/d3drm.c | 68 ++++++++++++++----------------------------------<br>
 2 files changed, 26 insertions(+), 49 deletions(-)<br>
<br>
diff --git a/dlls/d3drm/device.c b/dlls/d3drm/device.c<br>
index 1de6f91..26240c1 100644<br>
--- a/dlls/d3drm/device.c<br>
+++ b/dlls/d3drm/device.c<br>
@@ -1325,7 +1325,12 @@ static DWORD WINAPI d3drm_device3_GetRenderMode(IDirect3DRMDevice3 *iface)<br>
<br>
 static HRESULT WINAPI d3drm_device3_GetDirect3DDevice2(IDirect3DRMDevice3 *iface, IDirect3DDevice2 **d3d_device)<br>
 {<br>
-    FIXME("iface %p, d3d_device %p stub!\n", iface, d3d_device);<br>
+    struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface);<br>
+<br>
+    TRACE("iface %p, d3d_device %p.\n", iface, d3d_device);<br>
+<br>
+    if (device->device)<br>
+        return IDirect3DDevice_QueryInterface(device->device, &IID_IDirect3DDevice2, (void**)d3d_device);<br>
<br>
     return E_NOTIMPL;<br>
 }<br>
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c<br>
index 2d25bf3..52b0d9a 100644<br>
--- a/dlls/d3drm/tests/d3drm.c<br>
+++ b/dlls/d3drm/tests/d3drm.c<br>
@@ -2185,9 +2185,7 @@ static void test_create_device_from_clipper2(void)<br>
<br>
     /* Fetch immediate mode device in order to access render target */<br>
     hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2);<br>
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
-    if (FAILED(hr))<br>
-        goto cleanup;<br>
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
<br>
     hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &surface);<br>
     ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr);<br>
@@ -2263,7 +2261,7 @@ static void test_create_device_from_clipper2(void)<br>
     ref3 = get_refcount((IUnknown *)d3drm2);<br>
     ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3);<br>
     cref2 = get_refcount((IUnknown *)clipper);<br>
-    todo_wine ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %u, cref2 = %u.\n", cref1, cref2);<br>
+    ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %u, cref2 = %u.\n", cref1, cref2);<br>
<br>
     /* Test if render target format follows the screen format */<br>
     hr = IDirectDraw_GetDisplayMode(ddraw, &desc);<br>
@@ -2279,9 +2277,7 @@ static void test_create_device_from_clipper2(void)<br>
     ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice2 interface (hr = %x).\n", hr);<br>
<br>
     hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2);<br>
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
-    if (FAILED(hr))<br>
-        goto cleanup;<br>
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
<br>
     hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &surface);<br>
     ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr);<br>
@@ -2295,23 +2291,13 @@ static void test_create_device_from_clipper2(void)<br>
     hr = IDirectDraw2_RestoreDisplayMode(ddraw);<br>
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);<br>
<br>
-cleanup:<br>
-    if (ds)<br>
-        IDirectDrawSurface_Release(ds);<br>
-    if (surface)<br>
-        IDirectDrawSurface_Release(surface);<br>
-    if (d3ddevice2)<br>
-        IDirect3DDevice2_Release(d3ddevice2);<br>
-    if (device2)<br>
-        IDirect3DRMDevice2_Release(device2);<br>
-    if (d3drm2)<br>
-        IDirect3DRM2_Release(d3drm2);<br>
-    if (d3drm1)<br>
-        IDirect3DRM_Release(d3drm1);<br>
-    if (clipper)<br>
-        IDirectDrawClipper_Release(clipper);<br>
-    if (ddraw)<br>
-        IDirectDraw_Release(ddraw);<br>
+    IDirectDrawSurface_Release(surface);<br>
+    IDirect3DDevice2_Release(d3ddevice2);<br>
+    IDirect3DRMDevice2_Release(device2);<br>
+    IDirect3DRM2_Release(d3drm2);<br>
+    IDirect3DRM_Release(d3drm1);<br>
+    IDirectDrawClipper_Release(clipper);<br>
+    IDirectDraw_Release(ddraw);<br>
     DestroyWindow(window);<br>
 }<br>
<br>
@@ -2373,9 +2359,7 @@ static void test_create_device_from_clipper3(void)<br>
<br>
     /* Fetch immediate mode device in order to access render target */<br>
     hr = IDirect3DRMDevice3_GetDirect3DDevice2(device3, &d3ddevice2);<br>
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
-    if (FAILED(hr))<br>
-        goto cleanup;<br>
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
<br>
     hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &surface);<br>
     ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr);<br>
@@ -2451,7 +2435,7 @@ static void test_create_device_from_clipper3(void)<br>
     ref3 = get_refcount((IUnknown *)d3drm3);<br>
     ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3);<br>
     cref2 = get_refcount((IUnknown *)clipper);<br>
-    todo_wine ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %u, cref2 = %u.\n", cref1, cref2);<br>
+    ok(cref1 == cref2, "expected cref1 == cref2, got cref1 = %u, cref2 = %u.\n", cref1, cref2);<br>
<br>
     /* Test if render target format follows the screen format */<br>
     hr = IDirectDraw_GetDisplayMode(ddraw, &desc);<br>
@@ -2467,9 +2451,7 @@ static void test_create_device_from_clipper3(void)<br>
     ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice3 interface (hr = %x).\n", hr);<br>
<br>
     hr = IDirect3DRMDevice3_GetDirect3DDevice2(device3, &d3ddevice2);<br>
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
-    if (FAILED(hr))<br>
-        goto cleanup;<br>
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);<br>
<br>
     hr = IDirect3DDevice2_GetRenderTarget(d3ddevice2, &surface);<br>
     ok(hr == DD_OK, "Cannot get surface to the render target (hr = %x).\n", hr);<br>
@@ -2483,23 +2465,13 @@ static void test_create_device_from_clipper3(void)<br>
     hr = IDirectDraw2_RestoreDisplayMode(ddraw);<br>
     ok(SUCCEEDED(hr), "RestoreDisplayMode failed, hr %#x.\n", hr);<br>
<br>
-cleanup:<br>
-    if (ds)<br>
-        IDirectDrawSurface_Release(ds);<br>
-    if (surface)<br>
-        IDirectDrawSurface_Release(surface);<br>
-    if (d3ddevice2)<br>
-        IDirect3DDevice2_Release(d3ddevice2);<br>
-    if (device3)<br>
-        IDirect3DRMDevice3_Release(device3);<br>
-    if (d3drm3)<br>
-        IDirect3DRM3_Release(d3drm3);<br>
-    if (d3drm1)<br>
-        IDirect3DRM_Release(d3drm1);<br>
-    if (clipper)<br>
-        IDirectDrawClipper_Release(clipper);<br>
-    if (ddraw)<br>
-        IDirectDraw_Release(ddraw);<br>
+    IDirectDrawSurface_Release(surface);<br>
+    IDirect3DDevice2_Release(d3ddevice2);<br>
+    IDirect3DRMDevice3_Release(device3);<br>
+    IDirect3DRM3_Release(d3drm3);<br>
+    IDirect3DRM_Release(d3drm1);<br>
+    IDirectDrawClipper_Release(clipper);<br>
+    IDirectDraw_Release(ddraw);<br>
     DestroyWindow(window);<br>
 }<br>
<span class="HOEnZb"><font color="#888888"><br>
--<br>
2.3.2 (Apple Git-55)<br>
<br>
</font></span></blockquote></div><br></div>