[PATCH 3/6] d2d1: Remove pointer indirections in d2d_gradient_create.

Rémi Bernon rbernon at codeweavers.com
Thu Jun 24 02:35:33 CDT 2021


Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=49395
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
---
 dlls/d2d1/brush.c | 25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/dlls/d2d1/brush.c b/dlls/d2d1/brush.c
index 1fe9b5e8f70..67c7d701b82 100644
--- a/dlls/d2d1/brush.c
+++ b/dlls/d2d1/brush.c
@@ -128,17 +128,19 @@ static const struct ID2D1GradientStopCollectionVtbl d2d_gradient_vtbl =
 };
 
 HRESULT d2d_gradient_create(ID2D1Factory *factory, ID3D10Device *device, const D2D1_GRADIENT_STOP *stops,
-        UINT32 stop_count, D2D1_GAMMA gamma, D2D1_EXTEND_MODE extend_mode, struct d2d_gradient **gradient)
+        UINT32 stop_count, D2D1_GAMMA gamma, D2D1_EXTEND_MODE extend_mode, struct d2d_gradient **out)
 {
     D3D10_SHADER_RESOURCE_VIEW_DESC srv_desc;
     D3D10_SUBRESOURCE_DATA buffer_data;
     ID3D10ShaderResourceView *view;
+    struct d2d_gradient *gradient;
     D3D10_BUFFER_DESC buffer_desc;
     struct d2d_vec4 *data;
     ID3D10Buffer *buffer;
     unsigned int i;
     HRESULT hr;
 
+    *out = NULL;
     if (!(data = heap_calloc(stop_count, 2 * sizeof(*data))))
     {
         ERR("Failed to allocate data.\n");
@@ -185,7 +187,7 @@ HRESULT d2d_gradient_create(ID2D1Factory *factory, ID3D10Device *device, const D
         return hr;
     }
 
-    if (!(*gradient = heap_alloc_zero(sizeof(**gradient))))
+    if (!(gradient = heap_alloc_zero(sizeof(*gradient))))
     {
         ID3D10ShaderResourceView_Release(view);
         return E_OUTOFMEMORY;
@@ -196,21 +198,22 @@ HRESULT d2d_gradient_create(ID2D1Factory *factory, ID3D10Device *device, const D
     if (extend_mode != D2D1_EXTEND_MODE_CLAMP)
         FIXME("Ignoring extend mode %#x.\n", extend_mode);
 
-    (*gradient)->ID2D1GradientStopCollection_iface.lpVtbl = &d2d_gradient_vtbl;
-    (*gradient)->refcount = 1;
-    ID2D1Factory_AddRef((*gradient)->factory = factory);
-    (*gradient)->view = view;
+    gradient->ID2D1GradientStopCollection_iface.lpVtbl = &d2d_gradient_vtbl;
+    gradient->refcount = 1;
+    ID2D1Factory_AddRef(gradient->factory = factory);
+    gradient->view = view;
 
-    (*gradient)->stop_count = stop_count;
-    if (!((*gradient)->stops = heap_calloc(stop_count, sizeof(*stops))))
+    gradient->stop_count = stop_count;
+    if (!(gradient->stops = heap_calloc(stop_count, sizeof(*stops))))
     {
         ID3D10ShaderResourceView_Release(view);
-        heap_free(*gradient);
+        heap_free(gradient);
         return E_OUTOFMEMORY;
     }
-    memcpy((*gradient)->stops, stops, stop_count * sizeof(*stops));
+    memcpy(gradient->stops, stops, stop_count * sizeof(*stops));
 
-    TRACE("Created gradient %p.\n", *gradient);
+    TRACE("Created gradient %p.\n", gradient);
+    *out = gradient;
     return S_OK;
 }
 
-- 
2.32.0




More information about the wine-devel mailing list