<div dir="ltr"><div><div>Please ignore this patchset.<br>Just realized this patchset was already committed 13 hours ago. Is the bot on IRC not working?<br><br></div>Cheers,<br></div>Jam<br><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Aug 19, 2015 at 12:17 AM, Aaryaman Vasishta <span dir="ltr"><<a href="mailto:jem456.vasishta@gmail.com" target="_blank">jem456.vasishta@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">---<br>
dlls/d3drm/d3drm.c | 54 +++++++++++++++++++++++++++++++++++++++++-------<br>
dlls/d3drm/tests/d3drm.c | 36 ++++++++++++++++----------------<br>
2 files changed, 64 insertions(+), 26 deletions(-)<br>
<br>
diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c<br>
index e4cc4fa..61d0a25 100644<br>
--- a/dlls/d3drm/d3drm.c<br>
+++ b/dlls/d3drm/d3drm.c<br>
@@ -697,18 +697,24 @@ static HRESULT WINAPI d3drm2_CreateDeviceFromClipper(IDirect3DRM2 *iface,<br>
IDirectDrawClipper *clipper, GUID *guid, int width, int height,<br>
IDirect3DRMDevice2 **device)<br>
{<br>
- struct d3drm_device *object;<br>
+ struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);<br>
+ IDirect3DRMDevice3 *device3;<br>
HRESULT hr;<br>
- FIXME("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",<br>
+<br>
+ TRACE("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",<br>
iface, clipper, debugstr_guid(guid), width, height, device);<br>
<br>
- hr = d3drm_device_create(&object);<br>
+ if (!device)<br>
+ return D3DRMERR_BADVALUE;<br>
+ *device = NULL;<br>
+ hr = IDirect3DRM3_CreateDeviceFromClipper(&d3drm->IDirect3DRM3_iface, clipper, guid, width, height, &device3);<br>
if (FAILED(hr))<br>
return hr;<br>
<br>
- *device = IDirect3DRMDevice2_from_impl(object);<br>
+ hr = IDirect3DRMDevice3_QueryInterface(device3, &IID_IDirect3DRMDevice2, (void**)device);<br>
+ IDirect3DRMDevice3_Release(device3);<br>
<br>
- return D3DRM_OK;<br>
+ return hr;<br>
}<br>
<br>
static HRESULT WINAPI d3drm2_CreateTextureFromSurface(IDirect3DRM2 *iface,<br>
@@ -1103,18 +1109,50 @@ static HRESULT WINAPI d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface,<br>
IDirectDrawClipper *clipper, GUID *guid, int width, int height,<br>
IDirect3DRMDevice3 **device)<br>
{<br>
+ struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);<br>
struct d3drm_device *object;<br>
+ IDirectDraw *ddraw;<br>
+ IDirectDrawSurface *render_target;<br>
HRESULT hr;<br>
- FIXME("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",<br>
+<br>
+ TRACE("iface %p, clipper %p, guid %s, width %d, height %d, device %p.\n",<br>
iface, clipper, debugstr_guid(guid), width, height, device);<br>
<br>
+ if (!device)<br>
+ return D3DRMERR_BADVALUE;<br>
+ *device = NULL;<br>
+<br>
+ if (!clipper || !width || !height)<br>
+ return D3DRMERR_BADVALUE;<br>
+<br>
+ hr = DirectDrawCreate(NULL, &ddraw, NULL);<br>
+ if (FAILED(hr))<br>
+ return hr;<br>
+<br>
hr = d3drm_device_create(&object);<br>
if (FAILED(hr))<br>
+ {<br>
+ IDirectDraw_Release(ddraw);<br>
return hr;<br>
+ }<br>
<br>
- *device = IDirect3DRMDevice3_from_impl(object);<br>
+ hr = d3drm_device_create_surfaces_from_clipper(object, ddraw, clipper, width, height, &render_target);<br>
+ if (FAILED(hr))<br>
+ {<br>
+ IDirectDraw_Release(ddraw);<br>
+ d3drm_device_destroy(object);<br>
+ return hr;<br>
+ }<br>
<br>
- return D3DRM_OK;<br>
+ hr = d3drm_device_init(object, 3, &d3drm->IDirect3DRM_iface, ddraw, render_target);<br>
+ IDirectDraw_Release(ddraw);<br>
+ IDirectDrawSurface_Release(render_target);<br>
+ if (FAILED(hr))<br>
+ d3drm_device_destroy(object);<br>
+ else<br>
+ *device = IDirect3DRMDevice3_from_impl(object);<br>
+<br>
+ return hr;<br>
}<br>
<br>
static HRESULT WINAPI d3drm3_CreateShadow(IDirect3DRM3 *iface, IUnknown *object, IDirect3DRMLight *light,<br>
diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c<br>
index c797ccd..2d25bf3 100644<br>
--- a/dlls/d3drm/tests/d3drm.c<br>
+++ b/dlls/d3drm/tests/d3drm.c<br>
@@ -2134,7 +2134,7 @@ static void test_create_device_from_clipper2(void)<br>
IDirect3DRM2 *d3drm2 = NULL;<br>
IDirectDraw *ddraw = NULL;<br>
IUnknown *unknown = NULL;<br>
- IDirect3DRMDevice2 *device2 = NULL;<br>
+ IDirect3DRMDevice2 *device2 = (IDirect3DRMDevice2 *)0xdeadbeef;<br>
IDirect3DDevice2 *d3ddevice2 = NULL;<br>
IDirectDrawClipper *clipper = NULL, *d3drm_clipper = NULL;<br>
IDirectDrawSurface *surface = NULL, *ds = NULL, *d3drm_primary = NULL;<br>
@@ -2164,24 +2164,24 @@ static void test_create_device_from_clipper2(void)<br>
ref2 = get_refcount((IUnknown *)d3drm2);<br>
<br>
hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver, 0, 0, &device2);<br>
- todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
- if (SUCCEEDED(hr))<br>
- IDirect3DRMDevice2_Release(device2);<br>
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
+ ok(device2 == NULL, "Expected device returned == NULL, got %p.\n", device2);<br>
<br>
/* If NULL is passed for clipper, CreateDeviceFromClipper returns D3DRMERR_BADVALUE */<br>
hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, NULL, &driver, 300, 200, &device2);<br>
- todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
- if (SUCCEEDED(hr))<br>
- IDirect3DRMDevice2_Release(device2);<br>
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
+<br>
+ hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver, 300, 200, NULL);<br>
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
<br>
hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver, 300, 200, &device2);<br>
ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice2 interface (hr = %x).\n", hr);<br>
ref3 = get_refcount((IUnknown *)d3drm1);<br>
- todo_wine ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);<br>
+ ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);<br>
ref3 = get_refcount((IUnknown *)d3drm2);<br>
ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3);<br>
cref2 = get_refcount((IUnknown *)clipper);<br>
- todo_wine ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u , cref2 = %u.\n", cref1, cref2);<br>
+ ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u , cref2 = %u.\n", cref1, cref2);<br>
<br>
/* Fetch immediate mode device in order to access render target */<br>
hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2);<br>
@@ -2322,7 +2322,7 @@ static void test_create_device_from_clipper3(void)<br>
IDirect3DRM3 *d3drm3 = NULL;<br>
IDirectDraw *ddraw = NULL;<br>
IUnknown *unknown = NULL;<br>
- IDirect3DRMDevice3 *device3 = NULL;<br>
+ IDirect3DRMDevice3 *device3 = (IDirect3DRMDevice3 *)0xdeadbeef;<br>
IDirect3DDevice2 *d3ddevice2 = NULL;<br>
IDirectDrawClipper *clipper = NULL, *d3drm_clipper = NULL;<br>
IDirectDrawSurface *surface = NULL, *ds = NULL, *d3drm_primary = NULL;<br>
@@ -2352,24 +2352,24 @@ static void test_create_device_from_clipper3(void)<br>
ref2 = get_refcount((IUnknown *)d3drm3);<br>
<br>
hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, clipper, &driver, 0, 0, &device3);<br>
- todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
- if (SUCCEEDED(hr))<br>
- IDirect3DRMDevice3_Release(device3);<br>
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
+ ok(device3 == NULL, "Expected device returned == NULL, got %p.\n", device3);<br>
<br>
/* If NULL is passed for clipper, CreateDeviceFromClipper returns D3DRMERR_BADVALUE */<br>
hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, NULL, &driver, 300, 200, &device3);<br>
- todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
- if (SUCCEEDED(hr))<br>
- IDirect3DRMDevice3_Release(device3);<br>
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
+<br>
+ hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, clipper, &driver, 300, 200, NULL);<br>
+ ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got %x.\n", hr);<br>
<br>
hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, clipper, &driver, 300, 200, &device3);<br>
ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice3 interface (hr = %x).\n", hr);<br>
ref3 = get_refcount((IUnknown *)d3drm1);<br>
- todo_wine ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);<br>
+ ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n", ref1, ref3);<br>
ref3 = get_refcount((IUnknown *)d3drm3);<br>
ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 = %u.\n", ref2, ref3);<br>
cref2 = get_refcount((IUnknown *)clipper);<br>
- todo_wine ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u , cref2 = %u.\n", cref1, cref2);<br>
+ ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u , cref2 = %u.\n", cref1, cref2);<br>
<br>
/* Fetch immediate mode device in order to access render target */<br>
hr = IDirect3DRMDevice3_GetDirect3DDevice2(device3, &d3ddevice2);<br>
<span><font color="#888888">--<br>
2.3.2 (Apple Git-55)<br>
<br>
</font></span></blockquote></div><br></div></div>