[PATCH] d3d10_1/tests: Add a IDXGISurface1 GetDC() test.
Nikolay Sivov
nsivov at codeweavers.com
Fri Apr 22 08:11:45 CDT 2016
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
---
dlls/d3d10_1/tests/d3d10_1.c | 107 ++++++++++++++++++++++++++++++++++++++++---
1 file changed, 100 insertions(+), 7 deletions(-)
diff --git a/dlls/d3d10_1/tests/d3d10_1.c b/dlls/d3d10_1/tests/d3d10_1.c
index f7d188d..572b721 100644
--- a/dlls/d3d10_1/tests/d3d10_1.c
+++ b/dlls/d3d10_1/tests/d3d10_1.c
@@ -37,17 +37,23 @@ static ULONG get_refcount(IUnknown *iface)
return IUnknown_Release(iface);
}
-static ID3D10Device1 *create_device(D3D10_FEATURE_LEVEL1 feature_level)
+struct device_desc
+{
+ D3D10_FEATURE_LEVEL1 feature_level;
+ UINT flags;
+};
+
+static ID3D10Device1 *create_device(const struct device_desc *desc)
{
ID3D10Device1 *device;
- if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, 0, feature_level, D3D10_1_SDK_VERSION,
+ if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, desc->flags, desc->feature_level, D3D10_1_SDK_VERSION,
&device)))
return device;
- if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_WARP, NULL, 0, feature_level, D3D10_1_SDK_VERSION,
+ if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_WARP, NULL, desc->flags, desc->feature_level, D3D10_1_SDK_VERSION,
&device)))
return device;
- if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_REFERENCE, NULL, 0, feature_level, D3D10_1_SDK_VERSION,
+ if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_REFERENCE, NULL, desc->flags, desc->feature_level, D3D10_1_SDK_VERSION,
&device)))
return device;
@@ -240,7 +246,12 @@ static void test_device_interfaces(void)
for (i = 0; i < sizeof(d3d10_feature_levels) / sizeof(*d3d10_feature_levels); ++i)
{
- if (!(device = create_device(d3d10_feature_levels[i])))
+ struct device_desc device_desc;
+
+ device_desc.feature_level = d3d10_feature_levels[i];
+ device_desc.flags = 0;
+
+ if (!(device = create_device(&device_desc)))
{
skip("Failed to create device for feature level %#x.\n", d3d10_feature_levels[i]);
continue;
@@ -298,6 +309,7 @@ static void test_create_shader_resource_view(void)
D3D10_TEXTURE2D_DESC texture_desc;
ULONG refcount, expected_refcount;
ID3D10ShaderResourceView1 *srview;
+ struct device_desc device_desc;
D3D10_BUFFER_DESC buffer_desc;
ID3D10Texture2D *texture;
ID3D10Device *tmp_device;
@@ -306,7 +318,9 @@ static void test_create_shader_resource_view(void)
IUnknown *iface;
HRESULT hr;
- if (!(device = create_device(D3D10_FEATURE_LEVEL_10_1)))
+ device_desc.feature_level = D3D10_FEATURE_LEVEL_10_1;
+ device_desc.flags = 0;
+ if (!(device = create_device(&device_desc)))
{
skip("Failed to create device.\n");
return;
@@ -488,13 +502,16 @@ static void test_create_blend_state(void)
ID3D10BlendState *d3d10_blend_state;
D3D10_BLEND_DESC d3d10_blend_desc;
ULONG refcount, expected_refcount;
+ struct device_desc device_desc;
ID3D10Device1 *device;
ID3D10Device *tmp;
unsigned int i, j;
IUnknown *iface;
HRESULT hr;
- if (!(device = create_device(D3D10_FEATURE_LEVEL_10_1)))
+ device_desc.feature_level = D3D10_FEATURE_LEVEL_10_1;
+ device_desc.flags = 0;
+ if (!(device = create_device(&device_desc)))
{
skip("Failed to create device.\n");
return;
@@ -624,10 +641,86 @@ static void test_create_blend_state(void)
ok(!refcount, "Device has %u references left.\n", refcount);
}
+static void test_getdc(void)
+{
+ struct device_desc device_desc;
+ D3D10_TEXTURE2D_DESC desc;
+ ID3D10Texture2D *texture;
+ IDXGISurface1 *surface1;
+ ID3D10Device1 *device;
+ ULONG refcount;
+ HRESULT hr;
+ HDC dc;
+
+ device_desc.feature_level = D3D10_FEATURE_LEVEL_10_1;
+ device_desc.flags = D3D10_CREATE_DEVICE_BGRA_SUPPORT;
+ if (!(device = create_device(&device_desc)))
+ {
+ skip("Failed to create device.\n");
+ return;
+ }
+
+ /* Without D3D10_RESOURCE_MISC_GDI_COMPATIBLE. */
+ desc.Width = 512;
+ desc.Height = 512;
+ desc.MipLevels = 1;
+ desc.ArraySize = 1;
+ desc.Format = DXGI_FORMAT_B8G8R8A8_UNORM;
+ desc.SampleDesc.Count = 1;
+ desc.SampleDesc.Quality = 0;
+ desc.Usage = D3D10_USAGE_DEFAULT;
+ desc.BindFlags = D3D10_BIND_RENDER_TARGET;
+ desc.CPUAccessFlags = 0;
+ desc.MiscFlags = 0;
+ hr = ID3D10Device1_CreateTexture2D(device, &desc, NULL, &texture);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+
+ hr = ID3D10Texture2D_QueryInterface(texture, &IID_IDXGISurface1, (void**)&surface1);
+ ok(SUCCEEDED(hr), "Failed to get IDXGISurface1 interface, hr %#x.\n", hr);
+
+ hr = IDXGISurface1_GetDC(surface1, FALSE, &dc);
+ todo_wine ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+
+ IDXGISurface1_Release(surface1);
+ ID3D10Texture2D_Release(texture);
+
+ desc.MiscFlags = D3D10_RESOURCE_MISC_GDI_COMPATIBLE;
+ hr = ID3D10Device1_CreateTexture2D(device, &desc, NULL, &texture);
+ ok(SUCCEEDED(hr), "Failed to create texture, hr %#x.\n", hr);
+
+ hr = ID3D10Texture2D_QueryInterface(texture, &IID_IDXGISurface1, (void**)&surface1);
+ ok(SUCCEEDED(hr), "Failed to get IDXGISurface1 interface, hr %#x.\n", hr);
+
+ hr = IDXGISurface1_ReleaseDC(surface1, NULL);
+ todo_wine ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+
+ hr = IDXGISurface1_GetDC(surface1, FALSE, &dc);
+ todo_wine ok(SUCCEEDED(hr), "Failed to get DC, hr %#x.\n", hr);
+
+ /* One more time. */
+ dc = (HDC)0xdeadbeef;
+ hr = IDXGISurface1_GetDC(surface1, FALSE, &dc);
+ todo_wine ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+ ok(dc == (HDC)0xdeadbeef, "Got unexpected dc %p.\n", dc);
+
+ hr = IDXGISurface1_ReleaseDC(surface1, NULL);
+ todo_wine ok(SUCCEEDED(hr), "Failed to release DC, hr %#x.\n", hr);
+
+ hr = IDXGISurface1_ReleaseDC(surface1, NULL);
+ todo_wine ok(hr == DXGI_ERROR_INVALID_CALL, "Got unexpected hr %#x.\n", hr);
+
+ IDXGISurface1_Release(surface1);
+ ID3D10Texture2D_Release(texture);
+
+ refcount = ID3D10Device1_Release(device);
+ ok(!refcount, "Device has %u references left.\n", refcount);
+}
+
START_TEST(d3d10_1)
{
test_create_device();
test_device_interfaces();
test_create_shader_resource_view();
test_create_blend_state();
+ test_getdc();
}
--
2.8.0.rc3
More information about the wine-patches
mailing list