mirror of
https://github.com/reactos/reactos.git
synced 2025-07-31 11:11:44 +00:00
[D3DRM_WINETEST] Sync with Wine Staging 1.9.11. CORE-11368
svn path=/trunk/; revision=71758
This commit is contained in:
parent
a8ea8a5e22
commit
b30f3bad0f
1 changed files with 678 additions and 28 deletions
|
@ -994,6 +994,8 @@ static void test_Frame(void)
|
|||
ok(hr == D3DRM_OK, "Cannot get parent frame (hr = %x)\n", hr);
|
||||
ok(pFrameTmp == pFrameP1, "pFrameTmp = %p\n", pFrameTmp);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
IDirect3DRMFrame_Release(pFrameTmp);
|
||||
CHECK_REFCOUNT(pFrameP1, 1);
|
||||
|
||||
/* Add child to second parent */
|
||||
hr = IDirect3DRM_CreateFrame(d3drm, NULL, &pFrameP2);
|
||||
|
@ -1037,6 +1039,8 @@ static void test_Frame(void)
|
|||
ok(pFrameTmp == pFrameP2, "pFrameTmp = %p\n", pFrameTmp);
|
||||
CHECK_REFCOUNT(pFrameP2, 2);
|
||||
CHECK_REFCOUNT(pFrameC, 2);
|
||||
IDirect3DRMFrame_Release(pFrameTmp);
|
||||
CHECK_REFCOUNT(pFrameP2, 1);
|
||||
|
||||
/* Add child again */
|
||||
hr = IDirect3DRMFrame_AddChild(pFrameP2, pFrameC);
|
||||
|
@ -1088,7 +1092,7 @@ static void test_Frame(void)
|
|||
|
||||
hr = IDirect3DRMFrame_AddChild(pFrameP2, pFrameP1);
|
||||
ok(hr == D3DRM_OK, "Cannot add child frame (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
|
||||
frame_array = NULL;
|
||||
hr = IDirect3DRMFrame_GetChildren(pFrameP2, &frame_array);
|
||||
|
@ -1111,11 +1115,11 @@ static void test_Frame(void)
|
|||
/* [Add/Delete]Visual with NULL pointer */
|
||||
hr = IDirect3DRMFrame_AddVisual(pFrameP1, NULL);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
|
||||
hr = IDirect3DRMFrame_DeleteVisual(pFrameP1, NULL);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
|
||||
/* Create Visual */
|
||||
hr = IDirect3DRM_CreateMeshBuilder(d3drm, &mesh_builder);
|
||||
|
@ -1125,7 +1129,7 @@ static void test_Frame(void)
|
|||
/* Add Visual to first parent */
|
||||
hr = IDirect3DRMFrame_AddVisual(pFrameP1, visual1);
|
||||
ok(hr == D3DRM_OK, "Cannot add visual (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
CHECK_REFCOUNT(visual1, 2);
|
||||
|
||||
visual_array = NULL;
|
||||
|
@ -1145,17 +1149,17 @@ static void test_Frame(void)
|
|||
/* Delete Visual */
|
||||
hr = IDirect3DRMFrame_DeleteVisual(pFrameP1, visual1);
|
||||
ok(hr == D3DRM_OK, "Cannot delete visual (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
IDirect3DRMMeshBuilder_Release(mesh_builder);
|
||||
|
||||
/* [Add/Delete]Light with NULL pointer */
|
||||
hr = IDirect3DRMFrame_AddLight(pFrameP1, NULL);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
|
||||
hr = IDirect3DRMFrame_DeleteLight(pFrameP1, NULL);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Should have returned D3DRMERR_BADOBJECT (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
|
||||
/* Create Light */
|
||||
hr = IDirect3DRM_CreateLightRGB(d3drm, D3DRMLIGHT_SPOT, 0.1, 0.2, 0.3, &light1);
|
||||
|
@ -1164,7 +1168,7 @@ static void test_Frame(void)
|
|||
/* Add Light to first parent */
|
||||
hr = IDirect3DRMFrame_AddLight(pFrameP1, light1);
|
||||
ok(hr == D3DRM_OK, "Cannot add light (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
CHECK_REFCOUNT(light1, 2);
|
||||
|
||||
light_array = NULL;
|
||||
|
@ -1184,7 +1188,7 @@ static void test_Frame(void)
|
|||
/* Delete Light */
|
||||
hr = IDirect3DRMFrame_DeleteLight(pFrameP1, light1);
|
||||
ok(hr == D3DRM_OK, "Cannot delete light (hr = %x)\n", hr);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameP1, 2);
|
||||
IDirect3DRMLight_Release(light1);
|
||||
|
||||
/* Test SceneBackground on first parent */
|
||||
|
@ -1203,8 +1207,8 @@ static void test_Frame(void)
|
|||
|
||||
/* Cleanup */
|
||||
IDirect3DRMFrame_Release(pFrameP2);
|
||||
CHECK_REFCOUNT(pFrameC, 2);
|
||||
CHECK_REFCOUNT(pFrameP1, 3);
|
||||
CHECK_REFCOUNT(pFrameC, 1);
|
||||
CHECK_REFCOUNT(pFrameP1, 1);
|
||||
|
||||
IDirect3DRMFrame_Release(pFrameC);
|
||||
IDirect3DRMFrame_Release(pFrameP1);
|
||||
|
@ -1212,6 +1216,251 @@ static void test_Frame(void)
|
|||
IDirect3DRM_Release(d3drm);
|
||||
}
|
||||
|
||||
struct destroy_context
|
||||
{
|
||||
IDirect3DRMObject *obj;
|
||||
unsigned int test_idx;
|
||||
int called;
|
||||
};
|
||||
|
||||
struct callback_order
|
||||
{
|
||||
void *callback;
|
||||
void *context;
|
||||
} corder[3], d3drm_corder[3];
|
||||
|
||||
static void CDECL destroy_callback(IDirect3DRMObject *obj, void *arg)
|
||||
{
|
||||
struct destroy_context *ctxt = arg;
|
||||
ok(ctxt->called == 1 || ctxt->called == 2, "got called counter %d\n", ctxt->called);
|
||||
ok(obj == ctxt->obj, "called with %p, expected %p\n", obj, ctxt->obj);
|
||||
d3drm_corder[ctxt->called].callback = &destroy_callback;
|
||||
d3drm_corder[ctxt->called++].context = ctxt;
|
||||
}
|
||||
|
||||
static void CDECL destroy_callback1(IDirect3DRMObject *obj, void *arg)
|
||||
{
|
||||
struct destroy_context *ctxt = (struct destroy_context*)arg;
|
||||
ok(ctxt->called == 0, "got called counter %d\n", ctxt->called);
|
||||
ok(obj == ctxt->obj, "called with %p, expected %p\n", obj, ctxt->obj);
|
||||
d3drm_corder[ctxt->called].callback = &destroy_callback1;
|
||||
d3drm_corder[ctxt->called++].context = ctxt;
|
||||
}
|
||||
|
||||
static void test_destroy_callback(unsigned int test_idx, REFCLSID clsid, REFIID iid)
|
||||
{
|
||||
struct destroy_context context;
|
||||
IDirect3DRMObject *obj;
|
||||
IUnknown *unknown;
|
||||
IDirect3DRM *d3drm;
|
||||
HRESULT hr;
|
||||
int i;
|
||||
|
||||
hr = Direct3DRMCreate(&d3drm);
|
||||
ok(SUCCEEDED(hr), "Test %u: Cannot get IDirect3DRM interface (hr = %x).\n", test_idx, hr);
|
||||
|
||||
hr = IDirect3DRM_CreateObject(d3drm, clsid, NULL, iid, (void **)&unknown);
|
||||
ok(hr == D3DRM_OK, "Test %u: Cannot get IDirect3DRMObject interface (hr = %x).\n", test_idx, hr);
|
||||
hr = IUnknown_QueryInterface(unknown, &IID_IDirect3DRMObject, (void**)&obj);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
IUnknown_Release(unknown);
|
||||
|
||||
context.called = 0;
|
||||
context.test_idx = test_idx;
|
||||
context.obj = obj;
|
||||
|
||||
hr = IDirect3DRMObject_AddDestroyCallback(obj, NULL, &context);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Test %u: expected D3DRMERR_BADVALUE (hr = %x).\n", test_idx, hr);
|
||||
|
||||
hr = IDirect3DRMObject_AddDestroyCallback(obj, destroy_callback, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
corder[2].callback = &destroy_callback;
|
||||
corder[2].context = &context;
|
||||
|
||||
/* same callback added twice */
|
||||
hr = IDirect3DRMObject_AddDestroyCallback(obj, destroy_callback, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
corder[1].callback = &destroy_callback;
|
||||
corder[1].context = &context;
|
||||
|
||||
hr = IDirect3DRMObject_DeleteDestroyCallback(obj, destroy_callback1, NULL);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
|
||||
hr = IDirect3DRMObject_DeleteDestroyCallback(obj, destroy_callback1, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
|
||||
/* add one more */
|
||||
hr = IDirect3DRMObject_AddDestroyCallback(obj, destroy_callback1, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
corder[0].callback = &destroy_callback1;
|
||||
corder[0].context = &context;
|
||||
|
||||
hr = IDirect3DRMObject_DeleteDestroyCallback(obj, NULL, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Test %u: expected D3DRM_BADVALUE (hr = %x).\n", test_idx, hr);
|
||||
|
||||
context.called = 0;
|
||||
IDirect3DRMObject_Release(obj);
|
||||
ok(context.called == 3, "Test %u: got %d, expected 3.\n", test_idx, context.called);
|
||||
for (i = 0; i < context.called; i++)
|
||||
{
|
||||
ok(corder[i].callback == d3drm_corder[i].callback
|
||||
&& corder[i].context == d3drm_corder[i].context,
|
||||
"Expected callback = %p, context = %p. Got callback = %p, context = %p.\n", d3drm_corder[i].callback,
|
||||
d3drm_corder[i].context, corder[i].callback, corder[i].context);
|
||||
}
|
||||
|
||||
/* test this pattern - add cb1, add cb2, add cb1, delete cb1 */
|
||||
hr = IDirect3DRM_CreateObject(d3drm, clsid, NULL, iid, (void **)&unknown);
|
||||
ok(hr == D3DRM_OK, "Test %u: Cannot get IDirect3DRMObject interface (hr = %x).\n", test_idx, hr);
|
||||
hr = IUnknown_QueryInterface(unknown, &IID_IDirect3DRMObject, (void**)&obj);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
IUnknown_Release(unknown);
|
||||
|
||||
hr = IDirect3DRMObject_AddDestroyCallback(obj, destroy_callback, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
corder[1].callback = &destroy_callback;
|
||||
corder[1].context = &context;
|
||||
|
||||
hr = IDirect3DRMObject_AddDestroyCallback(obj, destroy_callback1, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
corder[0].callback = &destroy_callback1;
|
||||
corder[0].context = &context;
|
||||
|
||||
hr = IDirect3DRMObject_AddDestroyCallback(obj, destroy_callback, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
|
||||
hr = IDirect3DRMObject_DeleteDestroyCallback(obj, destroy_callback, &context);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
|
||||
context.called = 0;
|
||||
hr = IDirect3DRMObject_QueryInterface(obj, &IID_IDirect3DRMObject, (void**)&context.obj);
|
||||
ok(hr == D3DRM_OK, "Test %u: expected D3DRM_OK (hr = %x).\n", test_idx, hr);
|
||||
IDirect3DRMObject_Release(context.obj);
|
||||
IUnknown_Release(unknown);
|
||||
ok(context.called == 2, "Test %u: got %d, expected 2.\n", test_idx, context.called);
|
||||
for (i = 0; i < context.called; i++)
|
||||
{
|
||||
ok(corder[i].callback == d3drm_corder[i].callback
|
||||
&& corder[i].context == d3drm_corder[i].context,
|
||||
"Expected callback = %p, context = %p. Got callback = %p, context = %p.\n", d3drm_corder[i].callback,
|
||||
d3drm_corder[i].context, corder[i].callback, corder[i].context);
|
||||
}
|
||||
}
|
||||
|
||||
static void test_object(void)
|
||||
{
|
||||
static const struct
|
||||
{
|
||||
REFCLSID clsid;
|
||||
REFIID iid;
|
||||
BOOL todo;
|
||||
}
|
||||
tests[] =
|
||||
{
|
||||
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMDevice, TRUE },
|
||||
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMDevice2, TRUE },
|
||||
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMDevice3, TRUE },
|
||||
{ &CLSID_CDirect3DRMDevice, &IID_IDirect3DRMWinDevice, TRUE },
|
||||
{ &CLSID_CDirect3DRMTexture, &IID_IDirect3DRMTexture, FALSE },
|
||||
{ &CLSID_CDirect3DRMTexture, &IID_IDirect3DRMTexture2, FALSE },
|
||||
{ &CLSID_CDirect3DRMTexture, &IID_IDirect3DRMTexture3, FALSE },
|
||||
{ &CLSID_CDirect3DRMViewport, &IID_IDirect3DRMViewport, TRUE },
|
||||
{ &CLSID_CDirect3DRMViewport, &IID_IDirect3DRMViewport2, TRUE },
|
||||
};
|
||||
IDirect3DRM *d3drm1;
|
||||
IDirect3DRM2 *d3drm2;
|
||||
IDirect3DRM3 *d3drm3;
|
||||
IUnknown *unknown = (IUnknown *)0xdeadbeef;
|
||||
HRESULT hr;
|
||||
ULONG ref1, ref2, ref3, ref4;
|
||||
int i;
|
||||
|
||||
hr = Direct3DRMCreate(&d3drm1);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM interface (hr = %#x).\n", hr);
|
||||
ref1 = get_refcount((IUnknown *)d3drm1);
|
||||
hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM2, (void **)&d3drm2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM2 interface (hr = %#x).\n", hr);
|
||||
hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM3, (void **)&d3drm3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM3 interface (hr = %#x).\n", hr);
|
||||
|
||||
hr = IDirect3DRM_CreateObject(d3drm1, &CLSID_DirectDraw, NULL, &IID_IDirectDraw, (void **)&unknown);
|
||||
ok(hr == CLASSFACTORY_E_FIRST, "Expected hr == CLASSFACTORY_E_FIRST, got %#x.\n", hr);
|
||||
ok(!unknown, "Expected object returned == NULL, got %p.\n", unknown);
|
||||
|
||||
for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i)
|
||||
{
|
||||
unknown = (IUnknown *)0xdeadbeef;
|
||||
hr = IDirect3DRM_CreateObject(d3drm1, NULL, NULL, tests[i].iid, (void **)&unknown);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Test %u: expected hr == D3DRMERR_BADVALUE, got %#x.\n", i, hr);
|
||||
ok(!unknown, "Expected object returned == NULL, got %p.\n", unknown);
|
||||
unknown = (IUnknown *)0xdeadbeef;
|
||||
hr = IDirect3DRM_CreateObject(d3drm1, tests[i].clsid, NULL, NULL, (void **)&unknown);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Test %u: expected hr == D3DRMERR_BADVALUE, got %#x.\n", i, hr);
|
||||
ok(!unknown, "Expected object returned == NULL, got %p.\n", unknown);
|
||||
hr = IDirect3DRM_CreateObject(d3drm1, tests[i].clsid, NULL, NULL, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Test %u: expected hr == D3DRMERR_BADVALUE, got %#x.\n", i, hr);
|
||||
|
||||
hr = IDirect3DRM_CreateObject(d3drm1, tests[i].clsid, NULL, tests[i].iid, (void **)&unknown);
|
||||
todo_wine_if(tests[i].todo)
|
||||
ok(SUCCEEDED(hr), "Test %u: expected hr == D3DRM_OK, got %#x.\n", i, hr);
|
||||
if (SUCCEEDED(hr))
|
||||
{
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
|
||||
IUnknown_Release(unknown);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
|
||||
|
||||
/* test Add/Destroy callbacks */
|
||||
test_destroy_callback(i, tests[i].clsid, tests[i].iid);
|
||||
|
||||
hr = IDirect3DRM2_CreateObject(d3drm2, tests[i].clsid, NULL, tests[i].iid, (void **)&unknown);
|
||||
ok(SUCCEEDED(hr), "Test %u: expected hr == D3DRM_OK, got %#x.\n", i, hr);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
|
||||
IUnknown_Release(unknown);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
|
||||
|
||||
hr = IDirect3DRM3_CreateObject(d3drm3, tests[i].clsid, NULL, tests[i].iid, (void **)&unknown);
|
||||
ok(SUCCEEDED(hr), "Test %u: expected hr == D3DRM_OK, got %#x.\n", i, hr);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
|
||||
IUnknown_Release(unknown);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "Test %u: expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", i, ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "Test %u: expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", i, ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "Test %u: expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", i, ref1, ref4);
|
||||
}
|
||||
}
|
||||
|
||||
IDirect3DRM_Release(d3drm1);
|
||||
IDirect3DRM2_Release(d3drm2);
|
||||
IDirect3DRM3_Release(d3drm3);
|
||||
}
|
||||
|
||||
static void test_Viewport(void)
|
||||
{
|
||||
IDirectDrawClipper *pClipper;
|
||||
|
@ -1220,10 +1469,12 @@ static void test_Viewport(void)
|
|||
IDirect3DRMDevice *device;
|
||||
IDirect3DRMFrame *frame;
|
||||
IDirect3DRMViewport *viewport;
|
||||
IDirect3DRMViewport2 *viewport2;
|
||||
IDirect3DRMObject *obj, *obj2;
|
||||
GUID driver;
|
||||
HWND window;
|
||||
RECT rc;
|
||||
DWORD size;
|
||||
DWORD size, data;
|
||||
CHAR cname[64] = {0};
|
||||
|
||||
window = CreateWindowA("static", "d3drm_test", WS_OVERLAPPEDWINDOW, 0, 0, 300, 200, 0, 0, 0, 0);
|
||||
|
@ -1248,6 +1499,22 @@ static void test_Viewport(void)
|
|||
hr = IDirect3DRM_CreateViewport(d3drm, device, frame, rc.left, rc.top, rc.right, rc.bottom, &viewport);
|
||||
ok(hr == D3DRM_OK, "Cannot get IDirect3DRMViewport interface (hr = %x)\n", hr);
|
||||
|
||||
hr = IDirect3DRMViewport_QueryInterface(viewport, &IID_IDirect3DRMObject, (void**)&obj);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
ok((IDirect3DRMObject*)viewport == obj, "got object pointer %p, expected %p\n", obj, viewport);
|
||||
|
||||
hr = IDirect3DRMViewport_QueryInterface(viewport, &IID_IDirect3DRMViewport2, (void**)&viewport2);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
|
||||
hr = IDirect3DRMViewport2_QueryInterface(viewport2, &IID_IDirect3DRMObject, (void**)&obj2);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
ok(obj == obj2, "got object pointer %p, expected %p\n", obj2, obj);
|
||||
ok((IUnknown*)viewport != (IUnknown*)viewport2, "got viewport1 %p, viewport2 %p\n", viewport, viewport2);
|
||||
|
||||
IDirect3DRMViewport2_Release(viewport2);
|
||||
IDirect3DRMObject_Release(obj);
|
||||
IDirect3DRMObject_Release(obj2);
|
||||
|
||||
hr = IDirect3DRMViewport_GetClassName(viewport, NULL, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMViewport_GetClassName(viewport, NULL, NULL);
|
||||
|
@ -1261,7 +1528,26 @@ static void test_Viewport(void)
|
|||
ok(size == sizeof("Viewport"), "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "Viewport"), "Expected cname to be \"Viewport\", but got \"%s\"\n", cname);
|
||||
|
||||
IDirect3DRMViewport_Release(viewport);
|
||||
/* AppData */
|
||||
hr = IDirect3DRMViewport_SetAppData(viewport, 0);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
|
||||
hr = IDirect3DRMViewport_SetAppData(viewport, 0);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
|
||||
hr = IDirect3DRMViewport_SetAppData(viewport, 1);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
|
||||
hr = IDirect3DRMViewport_SetAppData(viewport, 1);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
|
||||
hr = IDirect3DRMViewport_QueryInterface(viewport, &IID_IDirect3DRMViewport2, (void**)&viewport2);
|
||||
ok(hr == D3DRM_OK, "expected D3DRM_OK (hr = %x)\n", hr);
|
||||
|
||||
data = IDirect3DRMViewport2_GetAppData(viewport2);
|
||||
ok(data == 1, "got %x\n", data);
|
||||
IDirect3DRMViewport2_Release(viewport2);
|
||||
|
||||
IDirect3DRMFrame_Release(frame);
|
||||
IDirect3DRMDevice_Release(device);
|
||||
IDirectDrawClipper_Release(pClipper);
|
||||
|
@ -1408,40 +1694,403 @@ static void test_Material2(void)
|
|||
static void test_Texture(void)
|
||||
{
|
||||
HRESULT hr;
|
||||
IDirect3DRM *d3drm;
|
||||
IDirect3DRMTexture *texture;
|
||||
D3DRMIMAGE initimg = {
|
||||
IDirect3DRM *d3drm1;
|
||||
IDirect3DRM2 *d3drm2;
|
||||
IDirect3DRM3 *d3drm3;
|
||||
IDirect3DRMTexture *texture1;
|
||||
IDirect3DRMTexture2 *texture2;
|
||||
IDirect3DRMTexture3 *texture3;
|
||||
|
||||
D3DRMIMAGE initimg =
|
||||
{
|
||||
2, 2, 1, 1, 32,
|
||||
TRUE, 2 * sizeof(DWORD), NULL, NULL,
|
||||
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000, 0, NULL
|
||||
};
|
||||
},
|
||||
testimg =
|
||||
{
|
||||
0, 0, 0, 0, 0,
|
||||
TRUE, 0, (void *)0xcafebabe, NULL,
|
||||
0x000000ff, 0x0000ff00, 0x00ff0000, 0, 0, NULL
|
||||
},
|
||||
*d3drm_img = NULL;
|
||||
|
||||
DWORD pixel[4] = { 20000, 30000, 10000, 0 };
|
||||
DWORD size;
|
||||
CHAR cname[64] = {0};
|
||||
ULONG ref1, ref2, ref3, ref4;
|
||||
|
||||
hr = Direct3DRMCreate(&d3drm);
|
||||
ok(hr == D3DRM_OK, "Cannot get IDirect3DRM interface (hr = %x)\n", hr);
|
||||
hr = Direct3DRMCreate(&d3drm1);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM interface (hr = %x)\n", hr);
|
||||
ref1 = get_refcount((IUnknown *)d3drm1);
|
||||
|
||||
hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM2, (void **)&d3drm2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM2 interface (hr = %x).\n", hr);
|
||||
|
||||
hr = IDirect3DRM_QueryInterface(d3drm1, &IID_IDirect3DRM3, (void **)&d3drm3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRM3 interface (hr = %x).\n", hr);
|
||||
|
||||
/* Test NULL params */
|
||||
texture1 = (IDirect3DRMTexture *)0xdeadbeef;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, NULL, &texture1);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
ok(!texture1, "Expected texture returned == NULL, got %p.\n", texture1);
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, NULL, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
texture2 = (IDirect3DRMTexture2 *)0xdeadbeef;
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, NULL, &texture2);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
ok(!texture2, "Expected texture returned == NULL, got %p.\n", texture2);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, NULL, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
texture3 = (IDirect3DRMTexture3 *)0xdeadbeef;
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, NULL, &texture3);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
ok(!texture3, "Expected texture returned == NULL, got %p.\n", texture3);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, NULL, NULL);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
/* Tests for validation of D3DRMIMAGE struct */
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &testimg, &texture1);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture interface (hr = %#x)\n", hr);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &testimg, &texture2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture2 interface (hr = %#x)\n", hr);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &testimg, &texture3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture3 interface (hr = %#x)\n", hr);
|
||||
IDirect3DRMTexture_Release(texture1);
|
||||
IDirect3DRMTexture2_Release(texture2);
|
||||
IDirect3DRMTexture3_Release(texture3);
|
||||
|
||||
testimg.rgb = 0;
|
||||
testimg.palette = (void *)0xdeadbeef;
|
||||
testimg.palette_size = 0x39;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &testimg, &texture1);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture interface (hr = %#x)\n", hr);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &testimg, &texture2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture2 interface (hr = %#x)\n", hr);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &testimg, &texture3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture3 interface (hr = %#x)\n", hr);
|
||||
IDirect3DRMTexture_Release(texture1);
|
||||
IDirect3DRMTexture2_Release(texture2);
|
||||
IDirect3DRMTexture3_Release(texture3);
|
||||
|
||||
initimg.rgb = 0;
|
||||
texture1 = (IDirect3DRMTexture *)0xdeadbeef;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &initimg, &texture1);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
ok(!texture1, "Expected texture == NULL, got %p.\n", texture1);
|
||||
texture2 = (IDirect3DRMTexture2 *)0xdeadbeef;
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &initimg, &texture2);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
ok(!texture2, "Expected texture == NULL, got %p.\n", texture2);
|
||||
texture3 = (IDirect3DRMTexture3 *)0xdeadbeef;
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &initimg, &texture3);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
ok(!texture3, "Expected texture == NULL, got %p.\n", texture3);
|
||||
initimg.rgb = 1;
|
||||
initimg.red_mask = 0;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &initimg, &texture1);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &initimg, &texture2);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &initimg, &texture3);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
initimg.red_mask = 0x000000ff;
|
||||
initimg.green_mask = 0;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &initimg, &texture1);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &initimg, &texture2);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &initimg, &texture3);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
initimg.green_mask = 0x0000ff00;
|
||||
initimg.blue_mask = 0;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &initimg, &texture1);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &initimg, &texture2);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &initimg, &texture3);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
initimg.blue_mask = 0x00ff0000;
|
||||
initimg.buffer1 = NULL;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &initimg, &texture1);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &initimg, &texture2);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &initimg, &texture3);
|
||||
ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %#x.\n", hr);
|
||||
|
||||
initimg.buffer1 = &pixel;
|
||||
hr = IDirect3DRM_CreateTexture(d3drm, &initimg, &texture);
|
||||
ok(hr == D3DRM_OK, "Cannot get IDirect3DRMTexture interface (hr = %x)\n", hr);
|
||||
hr = IDirect3DRM_CreateTexture(d3drm1, &initimg, &texture1);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture interface (hr = %#x)\n", hr);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 > ref1, "expected ref2 > ref1, got ref1 = %u , ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u , ref4 = %u.\n", ref1, ref4);
|
||||
hr = IDirect3DRM2_CreateTexture(d3drm2, &initimg, &texture2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture2 interface (hr = %#x)\n", hr);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 > ref1 + 1, "expected ref2 > (ref1 + 1), got ref1 = %u , ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u , ref4 = %u.\n", ref1, ref4);
|
||||
hr = IDirect3DRM3_CreateTexture(d3drm3, &initimg, &texture3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture3 interface (hr = %#x)\n", hr);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 > ref1 + 2, "expected ref2 > (ref1 + 2), got ref1 = %u , ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u , ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
hr = IDirect3DRMTexture_GetClassName(texture, NULL, cname);
|
||||
/* Test all failures together */
|
||||
hr = IDirect3DRMTexture_GetClassName(texture1, NULL, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMTexture_GetClassName(texture, NULL, NULL);
|
||||
hr = IDirect3DRMTexture_GetClassName(texture1, NULL, NULL);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMTexture2_GetClassName(texture2, NULL, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMTexture2_GetClassName(texture2, NULL, NULL);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMTexture3_GetClassName(texture3, NULL, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMTexture3_GetClassName(texture3, NULL, NULL);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
size = 1;
|
||||
hr = IDirect3DRMTexture_GetClassName(texture, &size, cname);
|
||||
hr = IDirect3DRMTexture_GetClassName(texture1, &size, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMTexture2_GetClassName(texture2, &size, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
hr = IDirect3DRMTexture3_GetClassName(texture3, &size, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
size = sizeof("Texture") - 1;
|
||||
strcpy(cname, "test");
|
||||
hr = IDirect3DRMTexture_GetClassName(texture1, &size, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
ok(size == sizeof("Texture") - 1, "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "test"), "Expected cname to be \"test\", but got \"%s\"\n", cname);
|
||||
hr = IDirect3DRMTexture2_GetClassName(texture2, &size, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
ok(size == sizeof("Texture") - 1, "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "test"), "Expected cname to be \"test\", but got \"%s\"\n", cname);
|
||||
hr = IDirect3DRMTexture3_GetClassName(texture3, &size, cname);
|
||||
ok(hr == E_INVALIDARG, "GetClassName failed with %x\n", hr);
|
||||
ok(size == sizeof("Texture") - 1, "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "test"), "Expected cname to be \"test\", but got \"%s\"\n", cname);
|
||||
|
||||
d3drm_img = IDirect3DRMTexture_GetImage(texture1);
|
||||
ok(!!d3drm_img, "Failed to get image.\n");
|
||||
ok(d3drm_img == &initimg, "Expected image returned == %p, got %p.\n", &initimg, d3drm_img);
|
||||
|
||||
size = sizeof(cname);
|
||||
hr = IDirect3DRMTexture_GetClassName(texture, &size, cname);
|
||||
ok(hr == D3DRM_OK, "Cannot get classname (hr = %x)\n", hr);
|
||||
hr = IDirect3DRMTexture_GetClassName(texture1, &size, cname);
|
||||
ok(SUCCEEDED(hr), "Cannot get classname (hr = %x)\n", hr);
|
||||
ok(size == sizeof("Texture"), "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "Texture"), "Expected cname to be \"Texture\", but got \"%s\"\n", cname);
|
||||
size = sizeof("Texture");
|
||||
hr = IDirect3DRMTexture_GetClassName(texture1, &size, cname);
|
||||
ok(SUCCEEDED(hr), "Cannot get classname (hr = %x)\n", hr);
|
||||
ok(size == sizeof("Texture"), "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "Texture"), "Expected cname to be \"Texture\", but got \"%s\"\n", cname);
|
||||
|
||||
IDirect3DRMTexture_Release(texture);
|
||||
IDirect3DRMTexture_Release(texture1);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 - 2 == ref1, "expected (ref2 - 2) == ref1, got ref1 = %u, ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
IDirect3DRM_Release(d3drm);
|
||||
d3drm_img = NULL;
|
||||
d3drm_img = IDirect3DRMTexture2_GetImage(texture2);
|
||||
ok(!!d3drm_img, "Failed to get image.\n");
|
||||
ok(d3drm_img == &initimg, "Expected image returned == %p, got %p.\n", &initimg, d3drm_img);
|
||||
|
||||
size = sizeof(cname);
|
||||
hr = IDirect3DRMTexture2_GetClassName(texture2, &size, cname);
|
||||
ok(SUCCEEDED(hr), "Cannot get classname (hr = %x)\n", hr);
|
||||
ok(size == sizeof("Texture"), "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "Texture"), "Expected cname to be \"Texture\", but got \"%s\"\n", cname);
|
||||
size = sizeof("Texture");
|
||||
hr = IDirect3DRMTexture2_GetClassName(texture2, &size, cname);
|
||||
ok(SUCCEEDED(hr), "Cannot get classname (hr = %x)\n", hr);
|
||||
ok(size == sizeof("Texture"), "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "Texture"), "Expected cname to be \"Texture\", but got \"%s\"\n", cname);
|
||||
|
||||
IDirect3DRMTexture2_Release(texture2);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 - 1 == ref1, "expected (ref2 - 1) == ref1, got ref1 = %u, ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
d3drm_img = NULL;
|
||||
d3drm_img = IDirect3DRMTexture3_GetImage(texture3);
|
||||
ok(!!d3drm_img, "Failed to get image.\n");
|
||||
ok(d3drm_img == &initimg, "Expected image returned == %p, got %p.\n", &initimg, d3drm_img);
|
||||
|
||||
size = sizeof(cname);
|
||||
hr = IDirect3DRMTexture3_GetClassName(texture3, &size, cname);
|
||||
ok(SUCCEEDED(hr), "Cannot get classname (hr = %x)\n", hr);
|
||||
ok(size == sizeof("Texture"), "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "Texture"), "Expected cname to be \"Texture\", but got \"%s\"\n", cname);
|
||||
size = sizeof("Texture");
|
||||
hr = IDirect3DRMTexture3_GetClassName(texture3, &size, cname);
|
||||
ok(SUCCEEDED(hr), "Cannot get classname (hr = %x)\n", hr);
|
||||
ok(size == sizeof("Texture"), "wrong size: %u\n", size);
|
||||
ok(!strcmp(cname, "Texture"), "Expected cname to be \"Texture\", but got \"%s\"\n", cname);
|
||||
|
||||
IDirect3DRMTexture3_Release(texture3);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
/* InitFromImage tests */
|
||||
/* Tests for validation of D3DRMIMAGE struct */
|
||||
testimg.rgb = 1;
|
||||
testimg.palette = NULL;
|
||||
testimg.palette_size = 0;
|
||||
hr = IDirect3DRM2_CreateObject(d3drm2, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture2,
|
||||
(void **)&texture2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture2 interface (hr = %#x).\n", hr);
|
||||
hr = IDirect3DRM3_CreateObject(d3drm3, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture3,
|
||||
(void **)&texture3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture3 interface (hr = %#x).\n", hr);
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &testimg);
|
||||
ok(SUCCEEDED(hr), "Cannot initialize IDirect3DRMTexture2 interface (hr = %#x)\n", hr);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &testimg);
|
||||
ok(SUCCEEDED(hr), "Cannot initialize IDirect3DRMTexture3 interface (hr = %#x)\n", hr);
|
||||
IDirect3DRMTexture2_Release(texture2);
|
||||
IDirect3DRMTexture3_Release(texture3);
|
||||
|
||||
testimg.rgb = 0;
|
||||
testimg.palette = (void *)0xdeadbeef;
|
||||
testimg.palette_size = 0x39;
|
||||
hr = IDirect3DRM2_CreateObject(d3drm2, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture2,
|
||||
(void **)&texture2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture2 interface (hr = %#x).\n", hr);
|
||||
hr = IDirect3DRM3_CreateObject(d3drm3, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture3,
|
||||
(void **)&texture3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture3 interface (hr = %#x).\n", hr);
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &testimg);
|
||||
ok(SUCCEEDED(hr), "Cannot initialize IDirect3DRMTexture2 interface (hr = %#x)\n", hr);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &testimg);
|
||||
ok(SUCCEEDED(hr), "Cannot initialize IDirect3DRMTexture3 interface (hr = %#x)\n", hr);
|
||||
IDirect3DRMTexture2_Release(texture2);
|
||||
IDirect3DRMTexture3_Release(texture3);
|
||||
|
||||
hr = IDirect3DRM2_CreateObject(d3drm2, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture2,
|
||||
(void **)&texture2);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture2 interface (hr = %#x).\n", hr);
|
||||
ref2 = get_refcount((IUnknown *)texture2);
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, NULL);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
ref3 = get_refcount((IUnknown *)texture2);
|
||||
ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3);
|
||||
|
||||
hr = IDirect3DRM3_CreateObject(d3drm3, &CLSID_CDirect3DRMTexture, NULL, &IID_IDirect3DRMTexture3,
|
||||
(void **)&texture3);
|
||||
ok(SUCCEEDED(hr), "Cannot get IDirect3DRMTexture3 interface (hr = %#x).\n", hr);
|
||||
ref2 = get_refcount((IUnknown *)texture3);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, NULL);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
ref3 = get_refcount((IUnknown *)texture3);
|
||||
ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3);
|
||||
|
||||
initimg.rgb = 0;
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
initimg.rgb = 1;
|
||||
initimg.red_mask = 0;
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
initimg.red_mask = 0x000000ff;
|
||||
initimg.green_mask = 0;
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
initimg.green_mask = 0x0000ff00;
|
||||
initimg.blue_mask = 0;
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
initimg.blue_mask = 0x00ff0000;
|
||||
initimg.buffer1 = NULL;
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
initimg.buffer1 = &pixel;
|
||||
|
||||
d3drm_img = NULL;
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &initimg);
|
||||
ok(SUCCEEDED(hr), "Cannot initialize IDirect3DRMTexture2 from image (hr = %#x).\n", hr);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 > ref1, "expected ref2 > ref1, got ref1 = %u , ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u , ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
hr = IDirect3DRMTexture2_InitFromImage(texture2, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
/* Release leaked reference to d3drm1 */
|
||||
IDirect3DRM_Release(d3drm1);
|
||||
|
||||
d3drm_img = IDirect3DRMTexture2_GetImage(texture2);
|
||||
ok(!!d3drm_img, "Failed to get image.\n");
|
||||
ok(d3drm_img == &initimg, "Expected image returned == %p, got %p.\n", &initimg, d3drm_img);
|
||||
IDirect3DRMTexture2_Release(texture2);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
d3drm_img = NULL;
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &initimg);
|
||||
ok(SUCCEEDED(hr), "Cannot initialize IDirect3DRMTexture3 from image (hr = %#x).\n", hr);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 > ref1, "expected ref2 > ref1, got ref1 = %u , ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u , ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
hr = IDirect3DRMTexture3_InitFromImage(texture3, &initimg);
|
||||
ok(hr == D3DRMERR_BADOBJECT, "Expected hr == D3DRMERR_BADOBJECT, got %#x.\n", hr);
|
||||
IDirect3DRM_Release(d3drm1);
|
||||
|
||||
d3drm_img = IDirect3DRMTexture3_GetImage(texture3);
|
||||
ok(!!d3drm_img, "Failed to get image.\n");
|
||||
ok(d3drm_img == &initimg, "Expected image returned == %p, got %p.\n", &initimg, d3drm_img);
|
||||
IDirect3DRMTexture3_Release(texture3);
|
||||
ref2 = get_refcount((IUnknown *)d3drm1);
|
||||
ok(ref2 == ref1, "expected ref2 == ref1, got ref1 = %u, ref2 = %u.\n", ref1, ref2);
|
||||
ref3 = get_refcount((IUnknown *)d3drm2);
|
||||
ok(ref3 == ref1, "expected ref3 == ref1, got ref1 = %u, ref3 = %u.\n", ref1, ref3);
|
||||
ref4 = get_refcount((IUnknown *)d3drm3);
|
||||
ok(ref4 == ref1, "expected ref4 == ref1, got ref1 = %u, ref4 = %u.\n", ref1, ref4);
|
||||
|
||||
IDirect3DRM3_Release(d3drm3);
|
||||
IDirect3DRM2_Release(d3drm2);
|
||||
IDirect3DRM_Release(d3drm1);
|
||||
}
|
||||
|
||||
static void test_Device(void)
|
||||
|
@ -4100,6 +4749,7 @@ START_TEST(d3drm)
|
|||
test_Face();
|
||||
test_Frame();
|
||||
test_Device();
|
||||
test_object();
|
||||
test_Viewport();
|
||||
test_Light();
|
||||
test_Material2();
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue