[PATCH 5/5] d3drm: Implement IDirect3DRM{2-3}::CreateDeviceFromClipper.

Aaryaman Vasishta jem456.vasishta at gmail.com
Tue Aug 18 13:55:39 CDT 2015


Please ignore this patchset.
Just realized this patchset was already committed 13 hours ago. Is the bot
on IRC not working?

Cheers,
Jam

On Wed, Aug 19, 2015 at 12:17 AM, Aaryaman Vasishta <
jem456.vasishta at gmail.com> wrote:

> ---
>  dlls/d3drm/d3drm.c       | 54
> +++++++++++++++++++++++++++++++++++++++++-------
>  dlls/d3drm/tests/d3drm.c | 36 ++++++++++++++++----------------
>  2 files changed, 64 insertions(+), 26 deletions(-)
>
> diff --git a/dlls/d3drm/d3drm.c b/dlls/d3drm/d3drm.c
> index e4cc4fa..61d0a25 100644
> --- a/dlls/d3drm/d3drm.c
> +++ b/dlls/d3drm/d3drm.c
> @@ -697,18 +697,24 @@ static HRESULT WINAPI
> d3drm2_CreateDeviceFromClipper(IDirect3DRM2 *iface,
>          IDirectDrawClipper *clipper, GUID *guid, int width, int height,
>          IDirect3DRMDevice2 **device)
>  {
> -    struct d3drm_device *object;
> +    struct d3drm *d3drm = impl_from_IDirect3DRM2(iface);
> +    IDirect3DRMDevice3 *device3;
>      HRESULT hr;
> -    FIXME("iface %p, clipper %p, guid %s, width %d, height %d, device
> %p.\n",
> +
> +    TRACE("iface %p, clipper %p, guid %s, width %d, height %d, device
> %p.\n",
>              iface, clipper, debugstr_guid(guid), width, height, device);
>
> -    hr = d3drm_device_create(&object);
> +    if (!device)
> +        return D3DRMERR_BADVALUE;
> +    *device = NULL;
> +    hr = IDirect3DRM3_CreateDeviceFromClipper(&d3drm->IDirect3DRM3_iface,
> clipper, guid, width, height, &device3);
>      if (FAILED(hr))
>          return hr;
>
> -    *device = IDirect3DRMDevice2_from_impl(object);
> +    hr = IDirect3DRMDevice3_QueryInterface(device3,
> &IID_IDirect3DRMDevice2, (void**)device);
> +    IDirect3DRMDevice3_Release(device3);
>
> -    return D3DRM_OK;
> +    return hr;
>  }
>
>  static HRESULT WINAPI d3drm2_CreateTextureFromSurface(IDirect3DRM2 *iface,
> @@ -1103,18 +1109,50 @@ static HRESULT WINAPI
> d3drm3_CreateDeviceFromClipper(IDirect3DRM3 *iface,
>          IDirectDrawClipper *clipper, GUID *guid, int width, int height,
>          IDirect3DRMDevice3 **device)
>  {
> +    struct d3drm *d3drm = impl_from_IDirect3DRM3(iface);
>      struct d3drm_device *object;
> +    IDirectDraw *ddraw;
> +    IDirectDrawSurface *render_target;
>      HRESULT hr;
> -    FIXME("iface %p, clipper %p, guid %s, width %d, height %d, device
> %p.\n",
> +
> +    TRACE("iface %p, clipper %p, guid %s, width %d, height %d, device
> %p.\n",
>              iface, clipper, debugstr_guid(guid), width, height, device);
>
> +    if (!device)
> +        return D3DRMERR_BADVALUE;
> +    *device = NULL;
> +
> +    if (!clipper || !width || !height)
> +        return D3DRMERR_BADVALUE;
> +
> +    hr = DirectDrawCreate(NULL, &ddraw, NULL);
> +    if (FAILED(hr))
> +        return hr;
> +
>      hr = d3drm_device_create(&object);
>      if (FAILED(hr))
> +    {
> +        IDirectDraw_Release(ddraw);
>          return hr;
> +    }
>
> -    *device = IDirect3DRMDevice3_from_impl(object);
> +    hr = d3drm_device_create_surfaces_from_clipper(object, ddraw,
> clipper, width, height, &render_target);
> +    if (FAILED(hr))
> +    {
> +        IDirectDraw_Release(ddraw);
> +        d3drm_device_destroy(object);
> +        return hr;
> +    }
>
> -    return D3DRM_OK;
> +    hr = d3drm_device_init(object, 3, &d3drm->IDirect3DRM_iface, ddraw,
> render_target);
> +    IDirectDraw_Release(ddraw);
> +    IDirectDrawSurface_Release(render_target);
> +    if (FAILED(hr))
> +        d3drm_device_destroy(object);
> +    else
> +        *device = IDirect3DRMDevice3_from_impl(object);
> +
> +    return hr;
>  }
>
>  static HRESULT WINAPI d3drm3_CreateShadow(IDirect3DRM3 *iface, IUnknown
> *object, IDirect3DRMLight *light,
> diff --git a/dlls/d3drm/tests/d3drm.c b/dlls/d3drm/tests/d3drm.c
> index c797ccd..2d25bf3 100644
> --- a/dlls/d3drm/tests/d3drm.c
> +++ b/dlls/d3drm/tests/d3drm.c
> @@ -2134,7 +2134,7 @@ static void test_create_device_from_clipper2(void)
>      IDirect3DRM2 *d3drm2 = NULL;
>      IDirectDraw *ddraw = NULL;
>      IUnknown *unknown = NULL;
> -    IDirect3DRMDevice2 *device2 = NULL;
> +    IDirect3DRMDevice2 *device2 = (IDirect3DRMDevice2 *)0xdeadbeef;
>      IDirect3DDevice2 *d3ddevice2 = NULL;
>      IDirectDrawClipper *clipper = NULL, *d3drm_clipper = NULL;
>      IDirectDrawSurface *surface = NULL, *ds = NULL, *d3drm_primary = NULL;
> @@ -2164,24 +2164,24 @@ static void test_create_device_from_clipper2(void)
>      ref2 = get_refcount((IUnknown *)d3drm2);
>
>      hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver,
> 0, 0, &device2);
> -    todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr ==
> D3DRMERR_BADVALUE, got %x.\n", hr);
> -    if (SUCCEEDED(hr))
> -        IDirect3DRMDevice2_Release(device2);
> +    ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got
> %x.\n", hr);
> +    ok(device2 == NULL, "Expected device returned == NULL, got %p.\n",
> device2);
>
>      /* If NULL is passed for clipper, CreateDeviceFromClipper returns
> D3DRMERR_BADVALUE */
>      hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, NULL, &driver, 300,
> 200, &device2);
> -    todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr ==
> D3DRMERR_BADVALUE, got %x.\n", hr);
> -    if (SUCCEEDED(hr))
> -        IDirect3DRMDevice2_Release(device2);
> +    ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got
> %x.\n", hr);
> +
> +    hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver,
> 300, 200, NULL);
> +    ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got
> %x.\n", hr);
>
>      hr = IDirect3DRM2_CreateDeviceFromClipper(d3drm2, clipper, &driver,
> 300, 200, &device2);
>      ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice2 interface (hr =
> %x).\n", hr);
>      ref3 = get_refcount((IUnknown *)d3drm1);
> -    todo_wine ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3
> = %u.\n", ref1, ref3);
> +    ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n",
> ref1, ref3);
>      ref3 = get_refcount((IUnknown *)d3drm2);
>      ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 =
> %u.\n", ref2, ref3);
>      cref2 = get_refcount((IUnknown *)clipper);
> -    todo_wine ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u ,
> cref2 = %u.\n", cref1, cref2);
> +    ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u , cref2 =
> %u.\n", cref1, cref2);
>
>      /* Fetch immediate mode device in order to access render target */
>      hr = IDirect3DRMDevice2_GetDirect3DDevice2(device2, &d3ddevice2);
> @@ -2322,7 +2322,7 @@ static void test_create_device_from_clipper3(void)
>      IDirect3DRM3 *d3drm3 = NULL;
>      IDirectDraw *ddraw = NULL;
>      IUnknown *unknown = NULL;
> -    IDirect3DRMDevice3 *device3 = NULL;
> +    IDirect3DRMDevice3 *device3 = (IDirect3DRMDevice3 *)0xdeadbeef;
>      IDirect3DDevice2 *d3ddevice2 = NULL;
>      IDirectDrawClipper *clipper = NULL, *d3drm_clipper = NULL;
>      IDirectDrawSurface *surface = NULL, *ds = NULL, *d3drm_primary = NULL;
> @@ -2352,24 +2352,24 @@ static void test_create_device_from_clipper3(void)
>      ref2 = get_refcount((IUnknown *)d3drm3);
>
>      hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, clipper, &driver,
> 0, 0, &device3);
> -    todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr ==
> D3DRMERR_BADVALUE, got %x.\n", hr);
> -    if (SUCCEEDED(hr))
> -        IDirect3DRMDevice3_Release(device3);
> +    ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got
> %x.\n", hr);
> +    ok(device3 == NULL, "Expected device returned == NULL, got %p.\n",
> device3);
>
>      /* If NULL is passed for clipper, CreateDeviceFromClipper returns
> D3DRMERR_BADVALUE */
>      hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, NULL, &driver, 300,
> 200, &device3);
> -    todo_wine ok(hr == D3DRMERR_BADVALUE, "Expected hr ==
> D3DRMERR_BADVALUE, got %x.\n", hr);
> -    if (SUCCEEDED(hr))
> -        IDirect3DRMDevice3_Release(device3);
> +    ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got
> %x.\n", hr);
> +
> +    hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, clipper, &driver,
> 300, 200, NULL);
> +    ok(hr == D3DRMERR_BADVALUE, "Expected hr == D3DRMERR_BADVALUE, got
> %x.\n", hr);
>
>      hr = IDirect3DRM3_CreateDeviceFromClipper(d3drm3, clipper, &driver,
> 300, 200, &device3);
>      ok(hr == D3DRM_OK, "Cannot create IDirect3DRMDevice3 interface (hr =
> %x).\n", hr);
>      ref3 = get_refcount((IUnknown *)d3drm1);
> -    todo_wine ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3
> = %u.\n", ref1, ref3);
> +    ok(ref3 > ref1, "expected ref3 > ref1, got ref1 = %u , ref3 = %u.\n",
> ref1, ref3);
>      ref3 = get_refcount((IUnknown *)d3drm3);
>      ok(ref3 == ref2, "expected ref3 == ref2, got ref2 = %u , ref3 =
> %u.\n", ref2, ref3);
>      cref2 = get_refcount((IUnknown *)clipper);
> -    todo_wine ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u ,
> cref2 = %u.\n", cref1, cref2);
> +    ok(cref2 > cref1, "expected cref2 > cref1, got cref1 = %u , cref2 =
> %u.\n", cref1, cref2);
>
>      /* Fetch immediate mode device in order to access render target */
>      hr = IDirect3DRMDevice3_GetDirect3DDevice2(device3, &d3ddevice2);
> --
> 2.3.2 (Apple Git-55)
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.winehq.org/pipermail/wine-devel/attachments/20150819/c742e364/attachment.html>


More information about the wine-devel mailing list