d3drm: Implement GetDirect3DDevice2.

Aaryaman Vasishta jem456.vasishta at gmail.com
Tue Aug 18 08:53:53 CDT 2015


---
 dlls/d3drm/device.c      | 16 ++++++++++++----
 dlls/d3drm/tests/d3drm.c |  8 ++++----
 2 files changed, 16 insertions(+), 8 deletions(-)

diff --git a/dlls/d3drm/device.c b/dlls/d3drm/device.c
index b096798..b703077 100644
--- a/dlls/d3drm/device.c
+++ b/dlls/d3drm/device.c
@@ -814,9 +814,13 @@ static DWORD WINAPI d3drm_device2_GetRenderMode(IDirect3DRMDevice2 *iface)
 
 static HRESULT WINAPI d3drm_device2_GetDirect3DDevice2(IDirect3DRMDevice2 *iface, IDirect3DDevice2 **d3d_device)
 {
-    FIXME("iface %p, d3d_device %p stub!\n", iface, d3d_device);
+    TRACE("iface %p, d3d_device %p.\n", iface, d3d_device);
+    struct d3drm_device *device = impl_from_IDirect3DRMDevice2(iface);
 
-    return E_NOTIMPL;
+    if (device->device)
+        return IDirect3DDevice_QueryInterface(device->device, &IID_IDirect3DDevice2, (void**)d3d_device);
+    else
+        return E_NOTIMPL;
 }
 
 static const struct IDirect3DRMDevice2Vtbl d3drm_device2_vtbl =
@@ -1179,9 +1183,13 @@ static DWORD WINAPI d3drm_device3_GetRenderMode(IDirect3DRMDevice3 *iface)
 
 static HRESULT WINAPI d3drm_device3_GetDirect3DDevice2(IDirect3DRMDevice3 *iface, IDirect3DDevice2 **d3d_device)
 {
-    FIXME("iface %p, d3d_device %p stub!\n", iface, d3d_device);
+    TRACE("iface %p, d3d_device %p.\n", iface, d3d_device);
+    struct d3drm_device *device = impl_from_IDirect3DRMDevice3(iface);
 
-    return E_NOTIMPL;
+    if (device->device)
+        return IDirect3DDevice_QueryInterface(device->device, &IID_IDirect3DDevice2, (void**)d3d_device);
+    else
+        return E_NOTIMPL;
 }
 
 static HRESULT WINAPI d3drm_device3_FindPreferredTextureFormat(IDirect3DRMDevice3 *iface,
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
index ea1e08f..959dbc3 100644
--- a/dlls/d3drm/tests/d3drm.c
+++ b/dlls/d3drm/tests/d3drm.c
@@ -2191,7 +2191,7 @@ static void test_create_device_from_clipper2(void)
 
     /* Fetch immediate mode device in order to access render target */
     hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2);
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
     if (FAILED(hr))
         goto cleanup;
 
@@ -2288,7 +2288,7 @@ static void test_create_device_from_clipper2(void)
     ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice2 interface (hr = %x).\n", hr);
 
     hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2);
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
     if (FAILED(hr))
         goto cleanup;
 
@@ -2378,7 +2378,7 @@ static void test_create_device_from_clipper3(void)
 
     /* Fetch immediate mode device in order to access render target */
     hr = IDirect3DRMDevice3_GetDirect3DDevice2(device3, &d3ddevice2);
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
     if (FAILED(hr))
         goto cleanup;
 
@@ -2475,7 +2475,7 @@ static void test_create_device_from_clipper3(void)
     ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice3 interface (hr = %x).\n", hr);
 
     hr = IDirect3DRMDevice3_GetDirect3DDevice2(device3, &d3ddevice2);
-    todo_wine ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
+    ok(hr == D3DRM_OK, "Cannot get IDirect3DDevice2 interface (hr = %x).\n", hr);
     if (FAILED(hr))
         goto cleanup;
 
-- 
2.3.2 (Apple Git-55)




More information about the wine-patches mailing list