d2d1: Implement D2D1CreateDevice().
Signed-off-by: Nikolay Sivov <nsivov@codeweavers.com> Signed-off-by: Henri Verbeet <hverbeet@codeweavers.com> Signed-off-by: Alexandre Julliard <julliard@winehq.org>
This commit is contained in:
parent
7d92b1abbd
commit
f7f8006064
|
@ -4,7 +4,7 @@
|
||||||
@ stdcall D2D1IsMatrixInvertible(ptr)
|
@ stdcall D2D1IsMatrixInvertible(ptr)
|
||||||
@ stdcall D2D1InvertMatrix(ptr)
|
@ stdcall D2D1InvertMatrix(ptr)
|
||||||
@ stub D2D1ConvertColorSpace
|
@ stub D2D1ConvertColorSpace
|
||||||
@ stub D2D1CreateDevice
|
@ stdcall D2D1CreateDevice(ptr ptr ptr)
|
||||||
@ stub D2D1CreateDeviceContext
|
@ stub D2D1CreateDeviceContext
|
||||||
@ stub D2D1SinCos
|
@ stub D2D1SinCos
|
||||||
@ stub D2D1Tan
|
@ stub D2D1Tan
|
||||||
|
|
|
@ -27,6 +27,7 @@
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
#define COBJMACROS
|
#define COBJMACROS
|
||||||
#include "d2d1_2.h"
|
#include "d2d1_2.h"
|
||||||
|
#include "d3d11.h"
|
||||||
#ifdef D2D1_INIT_GUID
|
#ifdef D2D1_INIT_GUID
|
||||||
#include "initguid.h"
|
#include "initguid.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -681,6 +681,38 @@ BOOL WINAPI D2D1InvertMatrix(D2D1_MATRIX_3X2_F *matrix)
|
||||||
return d2d_matrix_invert(matrix, &m);
|
return d2d_matrix_invert(matrix, &m);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HRESULT WINAPI D2D1CreateDevice(IDXGIDevice *dxgi_device,
|
||||||
|
const D2D1_CREATION_PROPERTIES *properties, ID2D1Device **device)
|
||||||
|
{
|
||||||
|
D2D1_CREATION_PROPERTIES default_properties = {0};
|
||||||
|
D2D1_FACTORY_OPTIONS factory_options;
|
||||||
|
ID3D11Device *d3d_device;
|
||||||
|
ID2D1Factory1 *factory;
|
||||||
|
HRESULT hr;
|
||||||
|
|
||||||
|
TRACE("dxgi_device %p, properties %p, device %p.\n", dxgi_device, properties, device);
|
||||||
|
|
||||||
|
if (!properties)
|
||||||
|
{
|
||||||
|
if (SUCCEEDED(IDXGIDevice_QueryInterface(dxgi_device, &IID_ID3D11Device, (void **)&d3d_device)))
|
||||||
|
{
|
||||||
|
if (!(ID3D11Device_GetCreationFlags(d3d_device) & D3D11_CREATE_DEVICE_SINGLETHREADED))
|
||||||
|
default_properties.threadingMode = D2D1_THREADING_MODE_MULTI_THREADED;
|
||||||
|
ID3D11Device_Release(d3d_device);
|
||||||
|
}
|
||||||
|
properties = &default_properties;
|
||||||
|
}
|
||||||
|
|
||||||
|
factory_options.debugLevel = properties->debugLevel;
|
||||||
|
if (FAILED(hr = D2D1CreateFactory(properties->threadingMode,
|
||||||
|
&IID_ID2D1Factory1, &factory_options, (void **)&factory)))
|
||||||
|
return hr;
|
||||||
|
|
||||||
|
hr = ID2D1Factory1_CreateDevice(factory, dxgi_device, device);
|
||||||
|
ID2D1Factory1_Release(factory);
|
||||||
|
return hr;
|
||||||
|
}
|
||||||
|
|
||||||
static BOOL get_config_key_dword(HKEY default_key, HKEY application_key, const char *name, DWORD *value)
|
static BOOL get_config_key_dword(HKEY default_key, HKEY application_key, const char *name, DWORD *value)
|
||||||
{
|
{
|
||||||
DWORD type, data, size;
|
DWORD type, data, size;
|
||||||
|
|
|
@ -28,6 +28,9 @@
|
||||||
#include "wincodec.h"
|
#include "wincodec.h"
|
||||||
#include "wine/heap.h"
|
#include "wine/heap.h"
|
||||||
|
|
||||||
|
static HRESULT (WINAPI *pD2D1CreateDevice)(IDXGIDevice *dxgi_device,
|
||||||
|
const D2D1_CREATION_PROPERTIES *properties, ID2D1Device **device);
|
||||||
|
|
||||||
static BOOL use_mt = TRUE;
|
static BOOL use_mt = TRUE;
|
||||||
|
|
||||||
static struct test_entry
|
static struct test_entry
|
||||||
|
@ -7911,6 +7914,7 @@ static void test_bezier_intersect(void)
|
||||||
|
|
||||||
static void test_create_device(void)
|
static void test_create_device(void)
|
||||||
{
|
{
|
||||||
|
D2D1_CREATION_PROPERTIES properties = {0};
|
||||||
ID3D10Device1 *d3d_device;
|
ID3D10Device1 *d3d_device;
|
||||||
IDXGIDevice *dxgi_device;
|
IDXGIDevice *dxgi_device;
|
||||||
ID2D1Factory1 *factory;
|
ID2D1Factory1 *factory;
|
||||||
|
@ -7943,6 +7947,19 @@ static void test_create_device(void)
|
||||||
ID2D1Factory_Release(factory2);
|
ID2D1Factory_Release(factory2);
|
||||||
ID2D1Device_Release(device);
|
ID2D1Device_Release(device);
|
||||||
|
|
||||||
|
if (pD2D1CreateDevice)
|
||||||
|
{
|
||||||
|
hr = pD2D1CreateDevice(dxgi_device, NULL, &device);
|
||||||
|
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||||
|
ID2D1Device_Release(device);
|
||||||
|
|
||||||
|
hr = pD2D1CreateDevice(dxgi_device, &properties, &device);
|
||||||
|
ok(hr == S_OK, "Got unexpected hr %#x.\n", hr);
|
||||||
|
ID2D1Device_Release(device);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
win_skip("D2D1CreateDevice() is unavailable.\n");
|
||||||
|
|
||||||
IDXGIDevice_Release(dxgi_device);
|
IDXGIDevice_Release(dxgi_device);
|
||||||
ID3D10Device1_Release(d3d_device);
|
ID3D10Device1_Release(d3d_device);
|
||||||
|
|
||||||
|
@ -9416,6 +9433,8 @@ START_TEST(d2d1)
|
||||||
unsigned int argc, i;
|
unsigned int argc, i;
|
||||||
char **argv;
|
char **argv;
|
||||||
|
|
||||||
|
pD2D1CreateDevice = (void *)GetProcAddress(GetModuleHandleA("d2d1.dll"), "D2D1CreateDevice");
|
||||||
|
|
||||||
use_mt = !getenv("WINETEST_NO_MT_D3D");
|
use_mt = !getenv("WINETEST_NO_MT_D3D");
|
||||||
|
|
||||||
argc = winetest_get_mainargs(&argv);
|
argc = winetest_get_mainargs(&argv);
|
||||||
|
|
|
@ -187,6 +187,20 @@ typedef enum D2D1_PROPERTY_TYPE
|
||||||
D2D1_PROPERTY_TYPE_FORCE_DWORD = 0xffffffff,
|
D2D1_PROPERTY_TYPE_FORCE_DWORD = 0xffffffff,
|
||||||
} D2D1_PROPERTY_TYPE;
|
} D2D1_PROPERTY_TYPE;
|
||||||
|
|
||||||
|
typedef enum D2D1_THREADING_MODE
|
||||||
|
{
|
||||||
|
D2D1_THREADING_MODE_SINGLE_THREADED = D2D1_FACTORY_TYPE_SINGLE_THREADED,
|
||||||
|
D2D1_THREADING_MODE_MULTI_THREADED = D2D1_FACTORY_TYPE_MULTI_THREADED,
|
||||||
|
D2D1_THREADING_MODE_FORCE_DWORD = 0xffffffff,
|
||||||
|
} D2D1_THREADING_MODE;
|
||||||
|
|
||||||
|
typedef struct D2D1_CREATION_PROPERTIES
|
||||||
|
{
|
||||||
|
D2D1_THREADING_MODE threadingMode;
|
||||||
|
D2D1_DEBUG_LEVEL debugLevel;
|
||||||
|
D2D1_DEVICE_CONTEXT_OPTIONS options;
|
||||||
|
} D2D1_CREATION_PROPERTIES;
|
||||||
|
|
||||||
typedef struct D2D1_STROKE_STYLE_PROPERTIES1
|
typedef struct D2D1_STROKE_STYLE_PROPERTIES1
|
||||||
{
|
{
|
||||||
D2D1_CAP_STYLE startCap;
|
D2D1_CAP_STYLE startCap;
|
||||||
|
@ -777,3 +791,6 @@ interface ID2D1Factory1 : ID2D1Factory
|
||||||
[out] ID2D1Properties **props
|
[out] ID2D1Properties **props
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[local] HRESULT __stdcall D2D1CreateDevice(IDXGIDevice *dxgi_device,
|
||||||
|
const D2D1_CREATION_PROPERTIES *creation_properties, ID2D1Device **device);
|
||||||
|
|
Loading…
Reference in New Issue