Ziqing Hui : d2d1/tests: Add tests for effect context.

Alexandre Julliard julliard at winehq.org
Wed May 25 16:51:46 CDT 2022


Module: wine
Branch: master
Commit: 7f98e1417a224dc3ebc6562a623bbafe140df650
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=7f98e1417a224dc3ebc6562a623bbafe140df650

Author: Ziqing Hui <zhui at codeweavers.com>
Date:   Wed May 25 10:29:10 2022 +0300

d2d1/tests: Add tests for effect context.

Signed-off-by: Ziqing Hui <zhui at codeweavers.com>
Signed-off-by: Nikolay Sivov <nsivov at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 dlls/d2d1/tests/d2d1.c | 114 +++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 114 insertions(+)

diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c
index 9c2bc1cdb99..d5adb0c749c 100644
--- a/dlls/d2d1/tests/d2d1.c
+++ b/dlls/d2d1/tests/d2d1.c
@@ -31,6 +31,8 @@
 #include "wine/heap.h"
 
 DEFINE_GUID(CLSID_TestEffect, 0xb9ee12e9,0x32d9,0xe659,0xac,0x61,0x2d,0x7c,0xea,0x69,0x28,0x78);
+DEFINE_GUID(GUID_TestVertexShader, 0x5bcdcfae,0x1e92,0x4dc1,0x94,0xfa,0x3b,0x01,0xca,0x54,0x59,0x20);
+DEFINE_GUID(GUID_TestPixelShader,  0x53015748,0xfc13,0x4168,0xbd,0x13,0x0f,0xcf,0x15,0x29,0x7f,0x01);
 
 static const WCHAR *effect_xml_a =
 L"<?xml version='1.0'?>                                                       \
@@ -86,6 +88,39 @@ L"<?xml version='1.0'?>                                                       \
     </Effect>                                                                 \
 ";
 
+static const DWORD test_vs[] =
+{
+#if 0
+    void main(float4 pos : Position, out float4 output : SV_Position)
+    {
+        output = pos;
+    }
+#endif
+    0x43425844, 0xa84b398b, 0xc4047d32, 0xc19c67bb, 0x4644285e, 0x00000001, 0x000000d8, 0x00000003,
+    0x0000002c, 0x00000060, 0x00000094, 0x4e475349, 0x0000002c, 0x00000001, 0x00000008, 0x00000020,
+    0x00000000, 0x00000000, 0x00000003, 0x00000000, 0x00000f0f, 0x69736f50, 0x6e6f6974, 0xababab00,
+    0x4e47534f, 0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000001, 0x00000003,
+    0x00000000, 0x0000000f, 0x505f5653, 0x7469736f, 0x006e6f69, 0x52444853, 0x0000003c, 0x00010040,
+    0x0000000f, 0x0300005f, 0x001010f2, 0x00000000, 0x04000067, 0x001020f2, 0x00000000, 0x00000001,
+    0x05000036, 0x001020f2, 0x00000000, 0x00101e46, 0x00000000, 0x0100003e,
+};
+
+static const DWORD test_ps[] =
+{
+#if 0
+    float4 main() : SV_Target
+    {
+        return float4(0.1, 0.2, 0.3, 0.4);
+    }
+#endif
+    0x43425844, 0xf34300ae, 0x22fc6d56, 0x5cca66fa, 0x86ae3266, 0x00000001, 0x000000b0, 0x00000003,
+    0x0000002c, 0x0000003c, 0x00000070, 0x4e475349, 0x00000008, 0x00000000, 0x00000008, 0x4e47534f,
+    0x0000002c, 0x00000001, 0x00000008, 0x00000020, 0x00000000, 0x00000000, 0x00000003, 0x00000000,
+    0x0000000f, 0x545f5653, 0x65677261, 0xabab0074, 0x52444853, 0x00000038, 0x00000040, 0x0000000e,
+    0x03000065, 0x001020f2, 0x00000000, 0x08000036, 0x001020f2, 0x00000000, 0x00004002, 0x3dcccccd,
+    0x3e4ccccd, 0x3e99999a, 0x3ecccccd, 0x0100003e,
+};
+
 static HRESULT (WINAPI *pD2D1CreateDevice)(IDXGIDevice *dxgi_device,
         const D2D1_CREATION_PROPERTIES *properties, ID2D1Device **device);
 static void (WINAPI *pD2D1SinCos)(float angle, float *s, float *c);
@@ -10559,6 +10594,84 @@ static void test_effect_register(BOOL d3d11)
     release_test_context(&ctx);
 }
 
+static void test_effect_context(BOOL d3d11)
+{
+    ID2D1EffectContext *effect_context;
+    D2D1_PROPERTY_BINDING binding;
+    struct d2d1_test_context ctx;
+    ID2D1Effect *effect = NULL;
+    ID2D1Factory1 *factory;
+    BOOL loaded;
+    HRESULT hr;
+
+    if (!init_test_context(&ctx, d3d11))
+        return;
+
+    factory = ctx.factory1;
+    if (!factory)
+    {
+        win_skip("ID2D1Factory1 is not supported.\n");
+        release_test_context(&ctx);
+        return;
+    }
+
+    binding.propertyName = L"Context";
+    binding.setFunction = NULL;
+    binding.getFunction = effect_impl_get_context;
+    hr = ID2D1Factory1_RegisterEffectFromString(factory, &CLSID_TestEffect,
+            effect_xml_b, &binding, 1, effect_impl_create);
+    ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+
+    hr = ID2D1DeviceContext_CreateEffect(ctx.context, &CLSID_TestEffect, &effect);
+    todo_wine ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+    if (hr != S_OK)
+        goto done;
+    hr = ID2D1Effect_GetValueByName(effect, L"Context",
+            D2D1_PROPERTY_TYPE_IUNKNOWN, (BYTE *)&effect_context, sizeof(effect_context));
+    ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+    if (hr != S_OK)
+        goto done;
+
+    /* Test shader loading */
+    loaded = ID2D1EffectContext_IsShaderLoaded(effect_context, &GUID_TestVertexShader);
+    ok(!loaded, "Shader is loaded.\n");
+    loaded = ID2D1EffectContext_IsShaderLoaded(effect_context, &GUID_TestPixelShader);
+    ok(!loaded, "Shader is loaded.\n");
+
+    hr = ID2D1EffectContext_LoadVertexShader(effect_context,
+            &GUID_TestVertexShader, (const BYTE *)test_ps, sizeof(test_ps));
+    ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
+    hr = ID2D1EffectContext_LoadVertexShader(effect_context,
+            &GUID_TestVertexShader, (const BYTE *)test_vs, sizeof(test_vs));
+    ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+    loaded = ID2D1EffectContext_IsShaderLoaded(effect_context, &GUID_TestVertexShader);
+    ok(loaded, "Shader is not loaded.\n");
+
+    hr = ID2D1EffectContext_LoadVertexShader(effect_context,
+            &GUID_TestVertexShader, (const BYTE *)test_ps, sizeof(test_ps));
+    ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+    hr = ID2D1EffectContext_LoadVertexShader(effect_context,
+            &GUID_TestVertexShader, (const BYTE *)test_vs, sizeof(test_vs));
+    ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+
+    hr = ID2D1EffectContext_LoadPixelShader(effect_context,
+            &GUID_TestPixelShader, (const BYTE *)test_vs, sizeof(test_vs));
+    ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr);
+    hr = ID2D1EffectContext_LoadPixelShader(effect_context,
+            &GUID_TestPixelShader, (const BYTE *)test_ps, sizeof(test_ps));
+    ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+    loaded = ID2D1EffectContext_IsShaderLoaded(effect_context, &GUID_TestPixelShader);
+    ok(loaded, "Shader is not loaded.\n");
+
+done:
+    if (effect)
+        ID2D1Effect_Release(effect);
+    hr = ID2D1Factory1_UnregisterEffect(factory, &CLSID_TestEffect);
+    todo_wine
+    ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
+    release_test_context(&ctx);
+}
+
 static void test_effect_2d_affine(BOOL d3d11)
 {
     D2D1_MATRIX_3X2_F rotate, scale, skew;
@@ -11344,6 +11457,7 @@ START_TEST(d2d1)
     queue_test(test_geometry_group);
     queue_test(test_mt_factory);
     queue_test(test_effect_register);
+    queue_test(test_effect_context);
     queue_test(test_effect);
     queue_test(test_effect_2d_affine);
     queue_test(test_effect_crop);




More information about the wine-cvs mailing list