On 5/24/22 05:40, Ziqing Hui wrote:
+ if (!init_test_context(&ctx, d3d11)) + return; + + if (!(factory = (ID2D1Factory1 *)get_factory(ctx.rt, &IID_ID2D1Factory1, NULL))) + { + win_skip("ID2D1Factory1 is not supported.\n"); + release_test_context(&ctx); + return; + } It's easier to extend context with additional fields for Factory1-3, try to set them all and then check for nulls when you want to skip.
+ hr = ID2D1RenderTarget_QueryInterface(ctx.rt, &IID_ID2D1DeviceContext, (void **)&device_context); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); Same here, we might as well keep device context pointer in the context.
+ hr = ID2D1DeviceContext_CreateEffect(device_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)); + todo_wine 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); + todo_wine ok(!loaded, "Shader is loaded.\n"); + loaded = ID2D1EffectContext_IsShaderLoaded(effect_context, &GUID_TestPixelShader); + todo_wine ok(!loaded, "Shader is loaded.\n"); Here only first todo_wine is ever triggered, so I'd remove the following ones.
+ hr = ID2D1EffectContext_LoadVertexShader(effect_context, + &GUID_TestVertexShader, (const BYTE *)test_ps, sizeof(test_ps)); + todo_wine 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); + todo_wine 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);
That makes sense - it checks for guid first, before attempting to create a d3d object.