[D3DRM_WINETEST] Sync with Wine Staging 1.9.11. CORE-11368

svn path=/trunk/; revision=71758
This commit is contained in:
Amine Khaldi 2016-07-02 15:34:17 +00:00
parent a8ea8a5e22
commit b30f3bad0f

View file

@ -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();