From: Nikolay Sivov nsivov@codeweavers.com
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d2d1/tests/d2d1.c | 88 +++++++++++++++++++++++++++++++++++++++++ include/d2d1effects.idl | 16 ++++++++ 2 files changed, 104 insertions(+)
diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index 7333f24eab9..a59ff5e2087 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -60,6 +60,30 @@ static void check_interface_(unsigned int line, void *iface_ptr, REFIID iid, BOO IUnknown_Release(unk); }
+#define effect_get_float_prop(a,b) _effect_get_float_prop(a,b,__LINE__) +static float _effect_get_float_prop(ID2D1Effect *effect, UINT32 prop, int line) +{ + float v = 123321.0f; + HRESULT hr; + + hr = ID2D1Effect_GetValue(effect, prop, D2D1_PROPERTY_TYPE_FLOAT, (BYTE *)&v, sizeof(v)); + ok_(__FILE__, line)(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + return v; +} + +#define effect_get_enum_prop(a,b) _effect_get_enum_prop(a,b,__LINE__) +static UINT32 _effect_get_enum_prop(ID2D1Effect *effect, UINT32 prop, int line) +{ + UINT32 v = 123321; + HRESULT hr; + + hr = ID2D1Effect_GetValue(effect, prop, D2D1_PROPERTY_TYPE_ENUM, (BYTE *)&v, sizeof(v)); + ok_(__FILE__, line)(hr == S_OK, "Unexpected hr %#lx.\n", hr); + + return v; +} + static const WCHAR *effect_xml_a = L"<?xml version='1.0'?> \ <Effect> \ @@ -13256,6 +13280,69 @@ static void test_effect_grayscale(BOOL d3d11) release_test_context(&ctx); }
+struct effect_property +{ + const WCHAR *name; + UINT32 index; + D2D1_PROPERTY_TYPE type; +}; + +static void test_effect_gaussian_blur(BOOL d3d11) +{ + static const struct effect_property properties[] = + { + { L"StandardDeviation", D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION, D2D1_PROPERTY_TYPE_FLOAT }, + { L"Optimization", D2D1_GAUSSIANBLUR_PROP_OPTIMIZATION, D2D1_PROPERTY_TYPE_ENUM }, + { L"BorderMode", D2D1_GAUSSIANBLUR_PROP_BORDER_MODE, D2D1_PROPERTY_TYPE_ENUM }, + }; + struct d2d1_test_context ctx; + ID2D1DeviceContext *context; + unsigned int count, i; + ID2D1Effect *effect; + WCHAR name[64]; + HRESULT hr; + UINT32 v; + float f; + + if (!init_test_context(&ctx, d3d11)) + return; + + context = ctx.context; + + hr = ID2D1DeviceContext_CreateEffect(context, &CLSID_D2D1GaussianBlur, &effect); + todo_wine + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + if (hr != S_OK) + { + release_test_context(&ctx); + return; + } + + check_system_properties(effect); + + count = ID2D1Effect_GetPropertyCount(effect); + ok(count == 3, "Got unexpected property count %u.\n", count); + + for (i = 0; i < ARRAY_SIZE(properties); ++i) + { + hr = ID2D1Effect_GetPropertyName(effect, properties[i].index, name, 64); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + ok(!wcscmp(name, properties[i].name), "Unexpected name %s.\n", wine_dbgstr_w(name)); + } + + f = effect_get_float_prop(effect, D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION); + ok(f == 3.0f, "Unexpected value %.8e.\n", f); + + v = effect_get_enum_prop(effect, D2D1_GAUSSIANBLUR_PROP_OPTIMIZATION); + ok(v == D2D1_GAUSSIANBLUR_OPTIMIZATION_BALANCED, "Unexpected value %u.\n", v); + + v = effect_get_enum_prop(effect, D2D1_GAUSSIANBLUR_PROP_BORDER_MODE); + ok(v == D2D1_BORDER_MODE_SOFT, "Unexpected border mode %u.\n", v); + + ID2D1Effect_Release(effect); + release_test_context(&ctx); +} + static void test_registered_effects(BOOL d3d11) { UINT32 ret, count, count2, count3; @@ -16629,6 +16716,7 @@ START_TEST(d2d1) queue_test(test_effect_crop); queue_test(test_effect_grayscale); queue_test(test_registered_effects); + queue_d3d10_test(test_effect_gaussian_blur); queue_test(test_transform_graph); queue_test(test_offset_transform); queue_test(test_blend_transform); diff --git a/include/d2d1effects.idl b/include/d2d1effects.idl index 32277027f88..f75603a4fd3 100644 --- a/include/d2d1effects.idl +++ b/include/d2d1effects.idl @@ -151,3 +151,19 @@ typedef enum D2D1_BLEND_MODE D2D1_BLEND_MODE_DIVISION = 0x19, D2D1_BLEND_MODE_FORCE_DWORD = 0xffffffff } D2D1_BLEND_MODE; + +typedef enum D2D1_GAUSSIANBLUR_PROP +{ + D2D1_GAUSSIANBLUR_PROP_STANDARD_DEVIATION = 0, + D2D1_GAUSSIANBLUR_PROP_OPTIMIZATION = 1, + D2D1_GAUSSIANBLUR_PROP_BORDER_MODE = 2, + D2D1_GAUSSIANBLUR_PROP_FORCE_DWORD = 0xffffffff +} D2D1_GAUSSIANBLUR_PROP; + +typedef enum D2D1_GAUSSIANBLUR_OPTIMIZATION +{ + D2D1_GAUSSIANBLUR_OPTIMIZATION_SPEED = 0, + D2D1_GAUSSIANBLUR_OPTIMIZATION_BALANCED = 1, + D2D1_GAUSSIANBLUR_OPTIMIZATION_QUALITY = 2, + D2D1_GAUSSIANBLUR_OPTIMIZATION_FORCE_DWORD = 0xffffffff +} D2D1_GAUSSIANBLUR_OPTIMIZATION;