From: Ziqing Hui zhui@codeweavers.com
--- dlls/d3d10/tests/effect.c | 58 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+)
diff --git a/dlls/d3d10/tests/effect.c b/dlls/d3d10/tests/effect.c index 3bd6d6d0ecc..6cbe57ac62a 100644 --- a/dlls/d3d10/tests/effect.c +++ b/dlls/d3d10/tests/effect.c @@ -8244,6 +8244,63 @@ static void test_effect_fx_4_1(void) ok(!refcount, "Device has %lu references left.\n", refcount); }
+static void test_effect_data(void) +{ + ID3D10EffectPool *pool; + ID3D10Effect *effect; + ID3D10Device *device; + DWORD buffer[1024]; + ULONG refcount; + HRESULT hr; + + if (!(device = create_device())) + { + skip("Failed to create device, skipping tests.\n"); + return; + } + + memcpy(buffer, fx_test_ecbt, sizeof(fx_test_ecbt)); + + if (strcmp(winetest_platform, "wine")) /* Crash on wine. */ + { + hr = create_effect(buffer, 0, NULL, NULL, &effect); + ok(hr == D3DERR_INVALIDCALL, "Got unexpected hr %#lx.\n", hr); + ok(!memcmp(buffer, fx_test_ecbt, sizeof(fx_test_ecbt)), "Data is not modified.\n"); + } + + hr = create_effect(buffer, 0, device, NULL, &effect); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + ok(!memcmp(buffer, fx_test_ecbt, sizeof(fx_test_ecbt)), "Data is not modified.\n"); + effect->lpVtbl->Release(effect); + + hr = create_effect(buffer, D3D10_EFFECT_COMPILE_ALLOW_SLOW_OPS, device, NULL, &effect); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + ok(!memcmp(buffer, fx_test_ecbt, sizeof(fx_test_ecbt)), "Data is not modified.\n"); + effect->lpVtbl->Release(effect); + + hr = create_effect(buffer, D3D10_EFFECT_SINGLE_THREADED, device, NULL, &effect); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + ok(!memcmp(buffer, fx_test_ecbt, sizeof(fx_test_ecbt)), "Data is not modified.\n"); + effect->lpVtbl->Release(effect); + + memcpy(buffer, fx_test_pool_child, sizeof(fx_test_pool_child)); + + hr = create_effect(buffer, D3D10_EFFECT_COMPILE_CHILD_EFFECT, device, NULL, &effect); + ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr); + ok(!memcmp(buffer, fx_test_pool_child, sizeof(fx_test_pool_child)), "Data is not modified.\n"); + + hr = create_effect_pool(fx_test_pool, device, &pool); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + hr = create_effect(buffer, D3D10_EFFECT_COMPILE_CHILD_EFFECT, device, pool, &effect); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + ok(!memcmp(buffer, fx_test_pool_child, sizeof(fx_test_pool_child)), "Data is not modified.\n"); + effect->lpVtbl->Release(effect); + pool->lpVtbl->Release(pool); + + refcount = ID3D10Device_Release(device); + ok(!refcount, "Device has %lu references left.\n", refcount); +} + START_TEST(effect) { test_effect_constant_buffer_type(); @@ -8271,4 +8328,5 @@ START_TEST(effect) test_effect_index_expression(); test_effect_value_expression(); test_effect_fx_4_1(); + test_effect_data(); }