Nikolay Sivov : d3d10_1/tests: Add a IDXGISurface1 GetDC() test.
Alexandre Julliard
julliard at wine.codeweavers.com
Mon Apr 25 09:47:13 CDT 2016
Module: wine
Branch: master
Commit: a566f6742a95186099accbc3833aa3a2253ca8c5
URL: http://source.winehq.org/git/wine.git/?a=commit;h=a566f6742a95186099accbc3833aa3a2253ca8c5
Author: Nikolay Sivov <nsivov at codeweavers.com>
Date: Mon Apr 25 11:44:01 2016 +0200
d3d10_1/tests: Add a IDXGISurface1 GetDC() test.
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Henri Verbeet <hverbeet at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>
---
dlls/d3d10_1/tests/d3d10_1.c | 115 +++++++++++++++++++++++++++++++++++++++----
1 file changed, 105 insertions(+), 10 deletions(-)
diff --git a/dlls/d3d10_1/tests/d3d10_1.c b/dlls/d3d10_1/tests/d3d10_1.c
index f7d188d..f5b1454 100644
--- a/dlls/d3d10_1/tests/d3d10_1.c
+++ b/dlls/d3d10_1/tests/d3d10_1.c
@@ -37,18 +37,32 @@ 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)
+{
+ D3D10_FEATURE_LEVEL1 feature_level = D3D10_FEATURE_LEVEL_10_1;
ID3D10Device1 *device;
+ UINT flags = 0;
- if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_HARDWARE, NULL, 0, feature_level, D3D10_1_SDK_VERSION,
- &device)))
+ if (desc)
+ {
+ feature_level = desc->feature_level;
+ flags = desc->flags;
+ }
+
+ if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_HARDWARE,
+ NULL, flags, 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,
- &device)))
+ if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_WARP,
+ NULL, flags, 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,
- &device)))
+ if (SUCCEEDED(D3D10CreateDevice1(NULL, D3D10_DRIVER_TYPE_REFERENCE,
+ NULL, flags, feature_level, D3D10_1_SDK_VERSION, &device)))
return device;
return NULL;
@@ -240,7 +254,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;
@@ -306,7 +325,7 @@ static void test_create_shader_resource_view(void)
IUnknown *iface;
HRESULT hr;
- if (!(device = create_device(D3D10_FEATURE_LEVEL_10_1)))
+ if (!(device = create_device(NULL)))
{
skip("Failed to create device.\n");
return;
@@ -494,7 +513,7 @@ static void test_create_blend_state(void)
IUnknown *iface;
HRESULT hr;
- if (!(device = create_device(D3D10_FEATURE_LEVEL_10_1)))
+ if (!(device = create_device(NULL)))
{
skip("Failed to create device.\n");
return;
@@ -624,10 +643,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();
}
More information about the wine-cvs
mailing list