[PATCH 1/6] mfplat: Implement MFCreateDXGIDeviceManager().
Nikolay Sivov
nsivov at codeweavers.com
Wed Aug 28 08:55:37 CDT 2019
On 8/28/19 4:37 PM, Jactry Zeng wrote:
> +struct mfdxgi_dev_mgr
> +{
> + IMFDXGIDeviceManager IMFDXGIDeviceManager_iface;
> + LONG ref;
> + UINT token;
> +};
To be consistent with the rest of mf* modules, please use
'dxgi_device_manager' and 'refcount' for names.
> +static HRESULT WINAPI mfdxgi_dev_mgr_CloseDeviceHandle(IMFDXGIDeviceManager *iface, HANDLE device)
> +{
> + struct mfdxgi_dev_mgr *This = impl_from_IMFDXGIDeviceManager(iface);
> +
> + FIXME("(%p)->(%p): stub.\n", This, device);
> +
> + return E_NOTIMPL;
> +}
'This' -> 'manager', iface pointer in traces instead of This.
> + dev_mgr->token = MFGetSystemTime();
This truncates result which is not pretty. Maybe it's enough to have
global counter for this?
> + struct mfdxgi_dev_mgr *dev_mgr;
'dev_mgr' -> 'object'.
> + Sleep(50);
> + token2 = 0;
> + hr = pMFCreateDXGIDeviceManager(&token2, &manager2);
> + ok(hr == S_OK, "MFCreateDXGIDeviceManager failed: %#x.\n", hr);
> + EXPECT_REF(manager2, 1);
> + ok(token2 && token2 != token, "got wrong token: %u, %u.\n", token2, token);
> + ok(manager != manager2, "got wrong pointer: %p.\n", manager2);
> + EXPECT_REF(manager, 1);
> +
> + IMFDXGIDeviceManager_Release(manager);
> + IMFDXGIDeviceManager_Release(manager2);
> +
> + memset(&ret1, 0, sizeof(ret1));
> + thread1 = CreateThread(NULL, 0, create_dxgi_dev_mgr, &ret1, 0, NULL);
> + ok(WaitForSingleObject(thread1, 1000) == WAIT_OBJECT_0, "wait failed.\n");
> + Sleep(50);
> + memset(&ret2, 0, sizeof(ret2));
> + thread2 = CreateThread(NULL, 0, create_dxgi_dev_mgr, &ret2, 0, NULL);
> + ok(WaitForSingleObject(thread2, 1000) == WAIT_OBJECT_0, "wait failed.\n");
> + ok(ret1.dev_mgr != ret2.dev_mgr, "got wrong pointer: %p, %p.\n", ret1.dev_mgr, ret2.dev_mgr);
> + ok(ret1.token != ret2.token, "got wrong token: %u, %u.\n", ret1.token, ret2.token);
> +
> + IMFDXGIDeviceManager_Release(ret1.dev_mgr);
> + IMFDXGIDeviceManager_Release(ret2.dev_mgr);
Do we need this? It only shows that token is different for newly created
manager instance which is also true for same thread case.
> + test_create_dxgi_device_manager();
'test_dxgi_device_manager' would be better, because we're going to test
more than just creating it.
More information about the wine-devel
mailing list