Module: wine Branch: master Commit: 9e4388f6ec1ededee1ee0048ce06f34c5e50a898 URL: http://source.winehq.org/git/wine.git/?a=commit;h=9e4388f6ec1ededee1ee0048ce...
Author: Józef Kucia jkucia@codeweavers.com Date: Tue Apr 5 10:22:09 2016 +0200
d3d11/tests: Add test for ID3D11Device_CreateQuery().
Signed-off-by: Józef Kucia jkucia@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
dlls/d3d11/tests/d3d11.c | 96 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 70 insertions(+), 26 deletions(-)
diff --git a/dlls/d3d11/tests/d3d11.c b/dlls/d3d11/tests/d3d11.c index 548636a..a38afc9 100644 --- a/dlls/d3d11/tests/d3d11.c +++ b/dlls/d3d11/tests/d3d11.c @@ -2887,46 +2887,96 @@ static void test_create_rasterizer_state(void) ok(!refcount, "Device has %u references left.\n", refcount); }
-static void test_create_predicate(void) +static void test_create_query(void) { - static const D3D11_QUERY other_queries[] = - { - D3D11_QUERY_EVENT, - D3D11_QUERY_OCCLUSION, - D3D11_QUERY_TIMESTAMP, - D3D11_QUERY_TIMESTAMP_DISJOINT, - D3D11_QUERY_PIPELINE_STATISTICS, - D3D11_QUERY_SO_STATISTICS, - D3D11_QUERY_SO_STATISTICS_STREAM0, - D3D11_QUERY_SO_STATISTICS_STREAM1, - D3D11_QUERY_SO_STATISTICS_STREAM2, - D3D11_QUERY_SO_STATISTICS_STREAM3, + static const struct + { + D3D11_QUERY query; + D3D_FEATURE_LEVEL required_feature_level; + BOOL is_predicate; + BOOL can_use_create_predicate; + BOOL todo; + } + tests[] = + { + {D3D11_QUERY_EVENT, D3D_FEATURE_LEVEL_10_0, FALSE, FALSE, FALSE}, + {D3D11_QUERY_OCCLUSION, D3D_FEATURE_LEVEL_10_0, FALSE, FALSE, FALSE}, + {D3D11_QUERY_TIMESTAMP, D3D_FEATURE_LEVEL_10_0, FALSE, FALSE, FALSE}, + {D3D11_QUERY_TIMESTAMP_DISJOINT, D3D_FEATURE_LEVEL_10_0, FALSE, FALSE, FALSE}, + {D3D11_QUERY_PIPELINE_STATISTICS, D3D_FEATURE_LEVEL_10_0, FALSE, FALSE, TRUE}, + {D3D11_QUERY_OCCLUSION_PREDICATE, D3D_FEATURE_LEVEL_10_0, TRUE, TRUE, FALSE}, + {D3D11_QUERY_SO_STATISTICS, D3D_FEATURE_LEVEL_10_0, FALSE, FALSE, TRUE}, + {D3D11_QUERY_SO_OVERFLOW_PREDICATE, D3D_FEATURE_LEVEL_10_0, TRUE, TRUE, TRUE}, + {D3D11_QUERY_SO_STATISTICS_STREAM0, D3D_FEATURE_LEVEL_11_0, FALSE, FALSE, TRUE}, + {D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM0, D3D_FEATURE_LEVEL_11_0, TRUE, FALSE, TRUE}, + {D3D11_QUERY_SO_STATISTICS_STREAM1, D3D_FEATURE_LEVEL_11_0, FALSE, FALSE, TRUE}, + {D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM1, D3D_FEATURE_LEVEL_11_0, TRUE, FALSE, TRUE}, + {D3D11_QUERY_SO_STATISTICS_STREAM2, D3D_FEATURE_LEVEL_11_0, FALSE, FALSE, TRUE}, + {D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM2, D3D_FEATURE_LEVEL_11_0, TRUE, FALSE, TRUE}, + {D3D11_QUERY_SO_STATISTICS_STREAM3, D3D_FEATURE_LEVEL_11_0, FALSE, FALSE, TRUE}, + {D3D11_QUERY_SO_OVERFLOW_PREDICATE_STREAM3, D3D_FEATURE_LEVEL_11_0, TRUE, FALSE, TRUE}, };
ULONG refcount, expected_refcount; + D3D_FEATURE_LEVEL feature_level; D3D11_QUERY_DESC query_desc; ID3D11Predicate *predicate; ID3D11Device *device, *tmp; + HRESULT hr, expected_hr; + ID3D11Query *query; IUnknown *iface; unsigned int i; - HRESULT hr;
if (!(device = create_device(NULL))) { skip("Failed to create device.\n"); return; } + feature_level = ID3D11Device_GetFeatureLevel(device);
+ hr = ID3D11Device_CreateQuery(device, NULL, &query); + ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr); hr = ID3D11Device_CreatePredicate(device, NULL, &predicate); ok(hr == E_INVALIDARG, "Got unexpected hr %#x.\n", hr);
- query_desc.MiscFlags = 0; - - for (i = 0; i < sizeof(other_queries) / sizeof(*other_queries); ++i) + for (i = 0; i < sizeof(tests) / sizeof(*tests); ++i) { - query_desc.Query = other_queries[i]; + if (tests[i].required_feature_level > feature_level) + { + skip("Query type %u requires feature level %#x.\n", tests[i].query, tests[i].required_feature_level); + continue; + } + + query_desc.Query = tests[i].query; + query_desc.MiscFlags = 0; + + hr = ID3D11Device_CreateQuery(device, &query_desc, NULL); + todo_wine_if(tests[i].todo) + ok(hr == S_FALSE, "Got unexpected hr %#x for query type %u.\n", hr, query_desc.Query); + + query_desc.Query = tests[i].query; + hr = ID3D11Device_CreateQuery(device, &query_desc, &query); + todo_wine_if(tests[i].todo) + ok(hr == S_OK, "Got unexpected hr %#x for query type %u.\n", hr, query_desc.Query); + if (FAILED(hr)) + continue; + + expected_hr = tests[i].is_predicate ? S_OK : E_NOINTERFACE; + hr = ID3D11Query_QueryInterface(query, &IID_ID3D11Predicate, (void **)&predicate); + ID3D11Query_Release(query); + ok(hr == expected_hr, "Got unexpected hr %#x for query type %u.\n", hr, query_desc.Query); + if (SUCCEEDED(hr)) + ID3D11Predicate_Release(predicate); + + expected_hr = tests[i].can_use_create_predicate ? S_FALSE : E_INVALIDARG; + hr = ID3D11Device_CreatePredicate(device, &query_desc, NULL); + ok(hr == expected_hr, "Got unexpected hr %#x for query type %u.\n", hr, query_desc.Query); + + expected_hr = tests[i].can_use_create_predicate ? S_OK : E_INVALIDARG; hr = ID3D11Device_CreatePredicate(device, &query_desc, &predicate); - ok(hr == E_INVALIDARG, "Got unexpected hr %#x for query type %u.\n", hr, other_queries[i]); + ok(hr == expected_hr, "Got unexpected hr %#x for query type %u.\n", hr, query_desc.Query); + if (SUCCEEDED(hr)) + ID3D11Predicate_Release(predicate); }
query_desc.Query = D3D11_QUERY_OCCLUSION_PREDICATE; @@ -2948,12 +2998,6 @@ static void test_create_predicate(void) if (SUCCEEDED(hr)) IUnknown_Release(iface); ID3D11Predicate_Release(predicate);
- query_desc.Query = D3D11_QUERY_SO_OVERFLOW_PREDICATE; - hr = ID3D11Device_CreatePredicate(device, &query_desc, &predicate); - todo_wine ok(SUCCEEDED(hr), "Failed to create predicate, hr %#x.\n", hr); - if (SUCCEEDED(hr)) - ID3D11Predicate_Release(predicate); - refcount = ID3D11Device_Release(device); ok(!refcount, "Device has %u references left.\n", refcount); } @@ -5878,7 +5922,7 @@ START_TEST(d3d11) test_create_blend_state(); test_create_depthstencil_state(); test_create_rasterizer_state(); - test_create_predicate(); + test_create_query(); test_device_removed_reason(); test_private_data(); test_blend();