[PATCH 4/4] d3drm/tests: Add vtable comparison tests in test_frame_qi

Aaryaman Vasishta jem456.vasishta at gmail.com
Thu Apr 2 11:36:50 CDT 2015


---
 dlls/d3drm/tests/d3drm1.c | 243 +++++++++++++++++++++++++++++++++-------------
 dlls/d3drm/tests/d3drm2.c | 243 +++++++++++++++++++++++++++++++++-------------
 dlls/d3drm/tests/d3drm3.c | 243 +++++++++++++++++++++++++++++++++-------------
 3 files changed, 525 insertions(+), 204 deletions(-)

diff --git a/dlls/d3drm/tests/d3drm1.c b/dlls/d3drm/tests/d3drm1.c
index 2d607f8..34aa649 100644
--- a/dlls/d3drm/tests/d3drm1.c
+++ b/dlls/d3drm/tests/d3drm1.c
@@ -32,6 +32,30 @@
     ok(count == rc_new, "Invalid refcount. Expected %d got %d\n", rc_new, count); \
     }
 
+static const char* get_IID_string(const GUID* guid)
+{
+    if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
+        return "IID_IDirect3DRMFrame";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
+        return "IID_IDirect3DRMFrame2";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
+        return "IID_IDirect3DRMFrame3";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
+        return "IID_IDirect3DRMMeshBuilder";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
+        return "IID_IDirect3DRMMeshBuilder2";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
+        return "IID_IDirect3DRMMeshBuilder3";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMObject))
+        return "IID_IDirect3DRMObject";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMVisual))
+        return "IID_IDirect3DRMVisual";
+    else if (IsEqualGUID(guid, &IID_IUnknown))
+        return "IID_IUnknown";
+
+    return "?";
+}
+
 static int get_refcount(IUnknown *object)
 {
     IUnknown_AddRef(object);
@@ -42,20 +66,36 @@ struct qi_test
 {
     REFIID iid;
     REFIID refcount_iid;
+    REFIID vtable_iid;
     HRESULT hr;
     BOOL refcount_todo;
+    BOOL vtable_equal;
+    BOOL vtable_todo;
 };
 
 static void test_qi(const char *test_name, IUnknown *base_iface,
     REFIID refcount_iid, const struct qi_test *tests, UINT entry_count)
 {
     ULONG refcount, expected_refcount;
-    IUnknown *iface1, *iface2;
+    IUnknown *iface1, *iface2, *vtable_iface;
     HRESULT hr;
     UINT i, j;
 
     for (i = 0; i < entry_count; ++i)
     {
+        if (tests[i].vtable_iid)
+        {
+            hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&vtable_iface);
+            ok(hr == S_OK, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
+            if (tests[i].vtable_todo)
+                todo_wine ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+                        (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+            else
+                ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+                        (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+            IUnknown_Release(vtable_iface);
+        }
+
         hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&iface1);
         ok(hr == tests[i].hr, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
         if (SUCCEEDED(hr))
@@ -99,73 +139,140 @@ static void test_frame_qi(void)
 {
     static const struct qi_test tests[] =
     {
-        { &IID_IDirect3DRMFrame3,          &IID_IDirect3DRMFrame,  S_OK,                                  FALSE },
-        { &IID_IDirect3DRMFrame2,          &IID_IDirect3DRMFrame,  S_OK,                                  FALSE },
-        { &IID_IDirect3DRMFrame,           &IID_IDirect3DRMFrame,  S_OK,                                  FALSE },
-        { &IID_IDirect3DRM,                NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDevice,          NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMObject,          &IID_IDirect3DRMFrame,  S_OK,                                  FALSE },
-        { &IID_IDirect3DRMDevice2,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDevice3,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewport,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewport2,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRM3,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRM2,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMVisual,          &IID_IDirect3DRMFrame,  S_OK,                                  FALSE },
-        { &IID_IDirect3DRMMesh,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder2,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder3,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFace,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFace2,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMLight,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture2,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture3,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMWrap,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMaterial,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMaterial2,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimation,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimation2,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationSet,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationSet2,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMObjectArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDeviceArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewportArray,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFrameArray,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMVisualArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMLightArray,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMPickedArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFaceArray,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationArray,  NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMUserVisual,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMShadow,          NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMShadow2,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMInterpolator,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMProgressiveMesh, NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMPicked2Array,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMClippedVisual,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawClipper,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface7,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface4,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface3,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface2,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice7,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice3,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice2,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D7,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D3,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D2,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D,                  NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw7,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw4,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw3,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw2,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw,                NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DLight,             NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IUnknown,                   &IID_IDirect3DRMFrame,  S_OK,                                  FALSE },
+        { &IID_IDirect3DRMFrame3,          &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,                     
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFrame2,          &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,                     
+             FALSE, FALSE, TRUE  },
+        { &IID_IDirect3DRMFrame,           &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,                     
+             FALSE, TRUE,  FALSE },
+        { &IID_IDirect3DRM,                NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDevice,          NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMObject,          &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,                     
+             FALSE, TRUE,  FALSE },   
+        { &IID_IDirect3DRMDevice2,         NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDevice3,         NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewport,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewport2,       NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRM3,               NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRM2,               NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMVisual,          &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,                     
+             FALSE, TRUE,  FALSE },
+        { &IID_IDirect3DRMMesh,            NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder,     NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder2,    NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder3,    NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFace,            NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFace2,           NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMLight,           NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture,         NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture2,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture3,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMWrap,            NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMaterial,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMaterial2,       NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimation,       NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimation2,      NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationSet,    NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationSet2,   NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMObjectArray,     NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDeviceArray,     NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewportArray,   NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFrameArray,      NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMVisualArray,     NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMLightArray,      NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMPickedArray,     NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFaceArray,       NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationArray,  NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMUserVisual,      NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMShadow,          NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMShadow2,         NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMInterpolator,    NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMProgressiveMesh, NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMPicked2Array,    NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMClippedVisual,   NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawClipper,         NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface7,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface4,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface3,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface2,        NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface,         NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice7,           NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice3,           NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice2,           NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice,            NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D7,                 NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D3,                 NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D2,                 NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D,                  NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw7,               NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw4,               NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw3,               NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw2,               NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw,                NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DLight,             NULL,                  NULL,                  CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IUnknown,                   &IID_IDirect3DRMFrame, &IID_IDirect3DRMFrame, S_OK,                     
+             FALSE, FALSE, TRUE  },
     };
     HRESULT hr;
     IDirect3DRM *d3drm;
diff --git a/dlls/d3drm/tests/d3drm2.c b/dlls/d3drm/tests/d3drm2.c
index e501627..5730392 100644
--- a/dlls/d3drm/tests/d3drm2.c
+++ b/dlls/d3drm/tests/d3drm2.c
@@ -32,6 +32,30 @@
     ok(count == rc_new, "Invalid refcount. Expected %d got %d\n", rc_new, count); \
     }
 
+static const char* get_IID_string(const GUID* guid)
+{
+    if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
+        return "IID_IDirect3DRMFrame";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
+        return "IID_IDirect3DRMFrame2";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
+        return "IID_IDirect3DRMFrame3";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
+        return "IID_IDirect3DRMMeshBuilder";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
+        return "IID_IDirect3DRMMeshBuilder2";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
+        return "IID_IDirect3DRMMeshBuilder3";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMObject))
+        return "IID_IDirect3DRMObject";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMVisual))
+        return "IID_IDirect3DRMVisual";
+    else if (IsEqualGUID(guid, &IID_IUnknown))
+        return "IID_IUnknown";
+
+    return "?";
+}
+
 static int get_refcount(IUnknown *object)
 {
     IUnknown_AddRef(object);
@@ -42,20 +66,36 @@ struct qi_test
 {
     REFIID iid;
     REFIID refcount_iid;
+    REFIID vtable_iid;
     HRESULT hr;
     BOOL refcount_todo;
+    BOOL vtable_equal;
+    BOOL vtable_todo;
 };
 
 static void test_qi(const char *test_name, IUnknown *base_iface,
     REFIID refcount_iid, const struct qi_test *tests, UINT entry_count)
 {
     ULONG refcount, expected_refcount;
-    IUnknown *iface1, *iface2;
+    IUnknown *iface1, *iface2, *vtable_iface;
     HRESULT hr;
     UINT i, j;
 
     for (i = 0; i < entry_count; ++i)
     {
+        if (tests[i].vtable_iid)
+        {
+            hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&vtable_iface);
+            ok(hr == S_OK, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
+            if (tests[i].vtable_todo)
+                todo_wine ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+                        (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+            else
+                ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+                        (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+            IUnknown_Release(vtable_iface);
+        }
+
         hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&iface1);
         ok(hr == tests[i].hr, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
         if (SUCCEEDED(hr))
@@ -99,73 +139,140 @@ static void test_frame_qi(void)
 {
     static const struct qi_test tests[] =
     {
-        { &IID_IDirect3DRMFrame3,          &IID_IDirect3DRMFrame2, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMFrame2,          &IID_IDirect3DRMFrame2, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMFrame,           &IID_IDirect3DRMFrame2, S_OK,                                  FALSE },
-        { &IID_IDirect3DRM,                NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDevice,          NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMObject,          &IID_IDirect3DRMFrame2, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMDevice2,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDevice3,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewport,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewport2,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRM3,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRM2,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMVisual,          &IID_IDirect3DRMFrame2, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMMesh,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder2,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder3,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFace,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFace2,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMLight,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture2,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture3,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMWrap,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMaterial,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMaterial2,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimation,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimation2,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationSet,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationSet2,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMObjectArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDeviceArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewportArray,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFrameArray,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMVisualArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMLightArray,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMPickedArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFaceArray,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationArray,  NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMUserVisual,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMShadow,          NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMShadow2,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMInterpolator,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMProgressiveMesh, NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMPicked2Array,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMClippedVisual,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawClipper,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface7,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface4,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface3,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface2,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice7,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice3,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice2,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D7,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D3,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D2,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D,                  NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw7,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw4,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw3,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw2,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw,                NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DLight,             NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IUnknown,                   &IID_IDirect3DRMFrame2, S_OK,                                  FALSE },
+        { &IID_IDirect3DRMFrame3,          &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2,  S_OK,                     
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFrame2,          &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2,  S_OK,                     
+             FALSE, TRUE,  FALSE },
+        { &IID_IDirect3DRMFrame,           &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2,  S_OK,                     
+             FALSE, FALSE, TRUE  },
+        { &IID_IDirect3DRM,                NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDevice,          NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMObject,          &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2,  S_OK,                     
+             FALSE, FALSE, TRUE  },   
+        { &IID_IDirect3DRMDevice2,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDevice3,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewport,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewport2,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRM3,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRM2,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMVisual,          &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2,  S_OK,                     
+             FALSE, FALSE, TRUE  },
+        { &IID_IDirect3DRMMesh,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder2,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder3,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFace,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFace2,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMLight,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture2,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture3,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMWrap,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMaterial,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMaterial2,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimation,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimation2,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationSet,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationSet2,   NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMObjectArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDeviceArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewportArray,   NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFrameArray,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMVisualArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMLightArray,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMPickedArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFaceArray,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationArray,  NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMUserVisual,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMShadow,          NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMShadow2,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMInterpolator,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMProgressiveMesh, NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMPicked2Array,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMClippedVisual,   NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawClipper,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface7,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface4,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface3,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface2,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice7,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice3,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice2,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D7,                 NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D3,                 NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D2,                 NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D,                  NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw7,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw4,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw3,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw2,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw,                NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DLight,             NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IUnknown,                   &IID_IDirect3DRMFrame2, &IID_IDirect3DRMFrame2,  S_OK,                     
+             FALSE, FALSE, TRUE  },
     };
     HRESULT hr;
     IDirect3DRM *d3drm;
diff --git a/dlls/d3drm/tests/d3drm3.c b/dlls/d3drm/tests/d3drm3.c
index d60ddde..354a560 100644
--- a/dlls/d3drm/tests/d3drm3.c
+++ b/dlls/d3drm/tests/d3drm3.c
@@ -32,6 +32,30 @@
     ok(count == rc_new, "Invalid refcount. Expected %d got %d\n", rc_new, count); \
     }
 
+static const char* get_IID_string(const GUID* guid)
+{
+    if (IsEqualGUID(guid, &IID_IDirect3DRMFrame))
+        return "IID_IDirect3DRMFrame";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame2))
+        return "IID_IDirect3DRMFrame2";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMFrame3))
+        return "IID_IDirect3DRMFrame3";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder))
+        return "IID_IDirect3DRMMeshBuilder";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder2))
+        return "IID_IDirect3DRMMeshBuilder2";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMMeshBuilder3))
+        return "IID_IDirect3DRMMeshBuilder3";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMObject))
+        return "IID_IDirect3DRMObject";
+    else if (IsEqualGUID(guid, &IID_IDirect3DRMVisual))
+        return "IID_IDirect3DRMVisual";
+    else if (IsEqualGUID(guid, &IID_IUnknown))
+        return "IID_IUnknown";
+
+    return "?";
+}
+
 static int get_refcount(IUnknown *object)
 {
     IUnknown_AddRef(object);
@@ -42,20 +66,36 @@ struct qi_test
 {
     REFIID iid;
     REFIID refcount_iid;
+    REFIID vtable_iid;
     HRESULT hr;
     BOOL refcount_todo;
+    BOOL vtable_equal;
+    BOOL vtable_todo;
 };
 
 static void test_qi(const char *test_name, IUnknown *base_iface,
     REFIID refcount_iid, const struct qi_test *tests, UINT entry_count)
 {
     ULONG refcount, expected_refcount;
-    IUnknown *iface1, *iface2;
+    IUnknown *iface1, *iface2, *vtable_iface;
     HRESULT hr;
     UINT i, j;
 
     for (i = 0; i < entry_count; ++i)
     {
+        if (tests[i].vtable_iid)
+        {
+            hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&vtable_iface);
+            ok(hr == S_OK, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
+            if (tests[i].vtable_todo)
+                todo_wine ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+                        (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+            else
+                ok((vtable_iface == base_iface) == tests[i].vtable_equal, "%s %s %s for test \"%s\".\n", get_IID_string(refcount_iid),
+                        (vtable_iface == base_iface?"==":"!="), get_IID_string(tests[i].iid), test_name);
+            IUnknown_Release(vtable_iface);
+        }
+
         hr = IUnknown_QueryInterface(base_iface, tests[i].iid, (void **)&iface1);
         ok(hr == tests[i].hr, "Got hr %#x for test \"%s\" %u.\n", hr, test_name, i);
         if (SUCCEEDED(hr))
@@ -99,73 +139,140 @@ static void test_frame_qi(void)
 {
     static const struct qi_test tests[] =
     {
-        { &IID_IDirect3DRMFrame3,          &IID_IDirect3DRMFrame3, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMFrame2,          &IID_IDirect3DRMFrame3, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMFrame,           &IID_IDirect3DRMFrame3, S_OK,                                  FALSE },
-        { &IID_IDirect3DRM,                NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDevice,          NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMObject,          &IID_IDirect3DRMFrame3, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMDevice2,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDevice3,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewport,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewport2,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRM3,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRM2,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMVisual,          &IID_IDirect3DRMFrame3, S_OK,                                  FALSE },
-        { &IID_IDirect3DRMMesh,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder2,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMeshBuilder3,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFace,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFace2,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMLight,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture2,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMTexture3,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMWrap,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMaterial,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMMaterial2,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimation,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimation2,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationSet,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationSet2,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMObjectArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMDeviceArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMViewportArray,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFrameArray,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMVisualArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMLightArray,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMPickedArray,     NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMFaceArray,       NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMAnimationArray,  NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMUserVisual,      NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMShadow,          NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMShadow2,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMInterpolator,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMProgressiveMesh, NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMPicked2Array,    NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DRMClippedVisual,   NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawClipper,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface7,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface4,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface3,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface2,        NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDrawSurface,         NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice7,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice3,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice2,           NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DDevice,            NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D7,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D3,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D2,                 NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3D,                  NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw7,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw4,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw3,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw2,               NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirectDraw,                NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IDirect3DLight,             NULL,                   CLASS_E_CLASSNOTAVAILABLE,             FALSE },
-        { &IID_IUnknown,                   &IID_IDirect3DRMFrame3, S_OK,                                  FALSE },
+        { &IID_IDirect3DRMFrame3,          &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3,  S_OK,                     
+             FALSE, TRUE,  FALSE },
+        { &IID_IDirect3DRMFrame2,          &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3,  S_OK,                     
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFrame,           &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3,  S_OK,                     
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRM,                NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDevice,          NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMObject,          &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3,  S_OK,                     
+             FALSE, FALSE, FALSE },   
+        { &IID_IDirect3DRMDevice2,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDevice3,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewport,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewport2,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRM3,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRM2,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMVisual,          &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3,  S_OK,                     
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMesh,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder2,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMeshBuilder3,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFace,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFace2,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMLight,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture2,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMTexture3,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMWrap,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMaterial,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMMaterial2,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimation,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimation2,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationSet,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationSet2,   NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMObjectArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMDeviceArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMViewportArray,   NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFrameArray,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMVisualArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMLightArray,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMPickedArray,     NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMFaceArray,       NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMAnimationArray,  NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMUserVisual,      NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMShadow,          NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMShadow2,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMInterpolator,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMProgressiveMesh, NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMPicked2Array,    NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DRMClippedVisual,   NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawClipper,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface7,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface4,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface3,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface2,        NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDrawSurface,         NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice7,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice3,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice2,           NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DDevice,            NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D7,                 NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D3,                 NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D2,                 NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3D,                  NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw7,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw4,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw3,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw2,               NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirectDraw,                NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IDirect3DLight,             NULL,                   NULL,                    CLASS_E_CLASSNOTAVAILABLE,
+             FALSE, FALSE, FALSE },
+        { &IID_IUnknown,                   &IID_IDirect3DRMFrame3, &IID_IDirect3DRMFrame3,  S_OK,                     
+             FALSE, FALSE, FALSE },
     };
     HRESULT hr;
     IDirect3DRM *d3drm;
-- 
1.9.3 (Apple Git-50)




More information about the wine-patches mailing list