Andrew Nguyen : ddraw: Allow the ddraw RGB device to be enumerated in IDirect3D3::FindDevice.

Alexandre Julliard julliard at winehq.org
Tue Jun 22 10:49:32 CDT 2010


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

Author: Andrew Nguyen <anguyen at codeweavers.com>
Date:   Mon Jun 21 10:15:05 2010 -0500

ddraw: Allow the ddraw RGB device to be enumerated in IDirect3D3::FindDevice.

Partially based on a patch by David Adam.

---

 dlls/ddraw/direct3d.c  |    5 ++-
 dlls/ddraw/tests/d3d.c |   64 ++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+), 2 deletions(-)

diff --git a/dlls/ddraw/direct3d.c b/dlls/ddraw/direct3d.c
index f919860..edbcc28 100644
--- a/dlls/ddraw/direct3d.c
+++ b/dlls/ddraw/direct3d.c
@@ -684,10 +684,11 @@ IDirect3DImpl_3_FindDevice(IDirect3D3 *iface,
         TRACE(" trying to match guid %s.\n", debugstr_guid(&(D3DDFS->guid)));
         if ((IsEqualGUID(&IID_D3DDEVICE_WineD3D, &(D3DDFS->guid)) == 0) &&
             (IsEqualGUID(&IID_IDirect3DHALDevice, &(D3DDFS->guid)) == 0) &&
-            (IsEqualGUID(&IID_IDirect3DRefDevice, &(D3DDFS->guid)) == 0))
+            (IsEqualGUID(&IID_IDirect3DRefDevice, &(D3DDFS->guid)) == 0) &&
+            (IsEqualGUID(&IID_IDirect3DRGBDevice, &(D3DDFS->guid)) == 0))
         {
             TRACE(" no match for this GUID.\n");
-            return DDERR_INVALIDPARAMS;
+            return DDERR_NOTFOUND;
         }
     }
 
diff --git a/dlls/ddraw/tests/d3d.c b/dlls/ddraw/tests/d3d.c
index e74fb79..7f47d20 100644
--- a/dlls/ddraw/tests/d3d.c
+++ b/dlls/ddraw/tests/d3d.c
@@ -3393,9 +3393,20 @@ static void VertexBufferLockRest(void)
 
 static void FindDevice(void)
 {
+    static const struct
+    {
+        const GUID *guid;
+        int todo;
+    } deviceGUIDs[] =
+    {
+        {&IID_IDirect3DRampDevice, 1},
+        {&IID_IDirect3DRGBDevice},
+    };
+
     D3DFINDDEVICESEARCH search = {0};
     D3DFINDDEVICERESULT result = {0};
     HRESULT hr;
+    int i;
 
     /* Test invalid parameters. */
     hr = IDirect3D_FindDevice(Direct3D1, NULL, NULL);
@@ -3423,6 +3434,59 @@ static void FindDevice(void)
     hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
     ok(hr == DDERR_INVALIDPARAMS,
        "Expected IDirect3D1::FindDevice to return DDERR_INVALIDPARAMS, got 0x%08x\n", hr);
+
+    /* Specifying no flags is permitted. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = 0;
+    result.dwSize = sizeof(result);
+
+    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
+    ok(hr == D3D_OK,
+       "Expected IDirect3D1::FindDevice to return D3D_OK, got 0x%08x\n", hr);
+
+    /* Try an arbitrary non-device GUID. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_GUID;
+    search.guid = IID_IDirect3D;
+    result.dwSize = sizeof(result);
+
+    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
+    ok(hr == DDERR_NOTFOUND,
+       "Expected IDirect3D1::FindDevice to return DDERR_NOTFOUND, got 0x%08x\n", hr);
+
+    /* The reference device GUID can't be enumerated. */
+    search.dwSize = sizeof(search);
+    search.dwFlags = D3DFDS_GUID;
+    search.guid = IID_IDirect3DRefDevice;
+    result.dwSize = sizeof(result);
+
+    hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
+    todo_wine
+    ok(hr == DDERR_NOTFOUND,
+       "Expected IDirect3D1::FindDevice to return DDERR_NOTFOUND, got 0x%08x\n", hr);
+
+    /* These GUIDs appear to be always present. */
+    for (i = 0; i < sizeof(deviceGUIDs)/sizeof(deviceGUIDs[0]); i++)
+    {
+        search.dwSize = sizeof(search);
+        search.dwFlags = D3DFDS_GUID;
+        search.guid = *deviceGUIDs[i].guid;
+        result.dwSize = sizeof(result);
+
+        hr = IDirect3D_FindDevice(Direct3D1, &search, &result);
+
+        if (deviceGUIDs[i].todo)
+        {
+            todo_wine
+            ok(hr == D3D_OK,
+               "[%d] Expected IDirect3D1::FindDevice to return D3D_OK, got 0x%08x\n", i, hr);
+        }
+        else
+        {
+            ok(hr == D3D_OK,
+               "[%d] Expected IDirect3D1::FindDevice to return D3D_OK, got 0x%08x\n", i, hr);
+        }
+    }
 }
 
 START_TEST(d3d)




More information about the wine-cvs mailing list