From: Jacek Caban jacek@codeweavers.com
--- dlls/d2d1/factory.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/dlls/d2d1/factory.c b/dlls/d2d1/factory.c index fff9895e930..3b2b1f5e4ec 100644 --- a/dlls/d2d1/factory.c +++ b/dlls/d2d1/factory.c @@ -1308,6 +1308,7 @@ HRESULT WINAPI D2D1CreateDevice(IDXGIDevice *dxgi_device, { D2D1_CREATION_PROPERTIES default_properties = {0}; D2D1_FACTORY_OPTIONS factory_options; + D2D1_FACTORY_TYPE factory_type; ID3D11Device *d3d_device; ID2D1Factory1 *factory; HRESULT hr; @@ -1325,9 +1326,20 @@ HRESULT WINAPI D2D1CreateDevice(IDXGIDevice *dxgi_device, properties = &default_properties; }
+ switch (properties->threadingMode) + { + case D2D1_THREADING_MODE_SINGLE_THREADED: + factory_type = D2D1_FACTORY_TYPE_SINGLE_THREADED; + break; + case D2D1_THREADING_MODE_MULTI_THREADED: + factory_type = D2D1_FACTORY_TYPE_MULTI_THREADED; + break; + default: + return E_INVALIDARG; + } + factory_options.debugLevel = properties->debugLevel; - if (FAILED(hr = D2D1CreateFactory(properties->threadingMode, - &IID_ID2D1Factory1, &factory_options, (void **)&factory))) + if (FAILED(hr = D2D1CreateFactory(factory_type, &IID_ID2D1Factory1, &factory_options, (void **)&factory))) return hr;
hr = ID2D1Factory1_CreateDevice(factory, dxgi_device, device);