Module: wine Branch: master Commit: 7c969b0589902ab3362cc50ecbf1db61be01727e URL: https://gitlab.winehq.org/wine/wine/-/commit/7c969b0589902ab3362cc50ecbf1db6...
Author: Nikolay Sivov nsivov@codeweavers.com Date: Tue Apr 2 13:56:54 2024 +0200
d2d1/effect: Implement SetSingleTransformNode().
Signed-off-by: Nikolay Sivov nsivov@codeweavers.com
---
dlls/d2d1/effect.c | 28 +++++++++++++++++++++++++--- dlls/d2d1/tests/d2d1.c | 18 ++++++++++++------ 2 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/dlls/d2d1/effect.c b/dlls/d2d1/effect.c index 3eb1dba7ea1..cf715332fde 100644 --- a/dlls/d2d1/effect.c +++ b/dlls/d2d1/effect.c @@ -364,11 +364,33 @@ static UINT32 STDMETHODCALLTYPE d2d_transform_graph_GetInputCount(ID2D1Transform }
static HRESULT STDMETHODCALLTYPE d2d_transform_graph_SetSingleTransformNode(ID2D1TransformGraph *iface, - ID2D1TransformNode *node) + ID2D1TransformNode *object) { - FIXME("iface %p, node %p stub!\n", iface, node); + struct d2d_transform_graph *graph = impl_from_ID2D1TransformGraph(iface); + struct d2d_transform_node *node; + unsigned int i, input_count; + HRESULT hr;
- return E_NOTIMPL; + TRACE("iface %p, object %p.\n", iface, object); + + d2d_transform_graph_clear(graph); + if (FAILED(hr = d2d_transform_graph_add_node(graph, object))) + return hr; + + node = d2d_transform_graph_get_node(graph, object); + graph->output = node; + + input_count = ID2D1TransformNode_GetInputCount(object); + if (graph->input_count != input_count) + return E_INVALIDARG; + + for (i = 0; i < graph->input_count; ++i) + { + graph->inputs[i].node = node; + graph->inputs[i].index = i; + } + + return S_OK; }
static HRESULT STDMETHODCALLTYPE d2d_transform_graph_AddNode(ID2D1TransformGraph *iface, diff --git a/dlls/d2d1/tests/d2d1.c b/dlls/d2d1/tests/d2d1.c index cb779104552..723cc1f8384 100644 --- a/dlls/d2d1/tests/d2d1.c +++ b/dlls/d2d1/tests/d2d1.c @@ -12731,6 +12731,18 @@ static void test_transform_graph(BOOL d3d11) ok(hr == HRESULT_FROM_WIN32(ERROR_NOT_FOUND), "Got unexpected hr %#lx.\n", hr); hr = ID2D1TransformGraph_SetOutputNode(graph, (ID2D1TransformNode *)offset_transform); ok(hr == HRESULT_FROM_WIN32(ERROR_NOT_FOUND), "Got unexpected hr %#lx.\n", hr); + + /* Single input effect, single input node. */ + hr = ID2D1TransformGraph_SetSingleTransformNode(graph, (ID2D1TransformNode *)offset_transform); + ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); + + /* Single input effect, two-input node. */ + hr = ID2D1TransformGraph_SetSingleTransformNode(graph, (ID2D1TransformNode *)blend_transform); + ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr); + hr = ID2D1TransformGraph_AddNode(graph, (ID2D1TransformNode *)blend_transform); + ok(hr == E_INVALIDARG, "Got unexpected hr %#lx.\n", hr); + ID2D1TransformGraph_Clear(graph); + hr = ID2D1TransformGraph_AddNode(graph, (ID2D1TransformNode *)offset_transform); ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); hr = ID2D1TransformGraph_AddNode(graph, (ID2D1TransformNode *)offset_transform); @@ -14507,13 +14519,7 @@ static void test_effect_custom_pixel_shader(BOOL d3d11) ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr);
hr = ID2D1DeviceContext_CreateEffect(context, &CLSID_TestEffect, &effect); - todo_wine ok(hr == S_OK, "Got unexpected hr %#lx.\n", hr); - if (FAILED(hr)) - { - release_test_context(&ctx); - return; - }
set_size_u(&input_size, 1, 1); pixel = 0xabcd00ff;