From: Aaryaman Vasishta Subject: [PATCH 4/4] d3drm/tests: Add vtable comparison tests in test_frame_qi Message-Id: <1427992610-73204-4-git-send-email-jem456.vasishta@gmail.com> Date: Thu, 2 Apr 2015 22:06:50 +0530 --- 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)