Signed-off-by: Nikolay Sivov nsivov@codeweavers.com --- dlls/d2d1/effect.c | 46 +++++++++++++++++++++++++--------------------- 1 file changed, 25 insertions(+), 21 deletions(-)
diff --git a/dlls/d2d1/effect.c b/dlls/d2d1/effect.c index ff808475a78..79d704dd949 100644 --- a/dlls/d2d1/effect.c +++ b/dlls/d2d1/effect.c @@ -37,18 +37,35 @@ static inline struct d2d_effect_context *impl_from_ID2D1EffectContext(ID2D1Effec
static void d2d_effect_context_cleanup(struct d2d_effect_context *effect_context) { - unsigned int i; + size_t i;
for (i = 0; i < effect_context->shader_count; ++i) - { - if (effect_context->shaders[i].shader) - IUnknown_Release(effect_context->shaders[i].shader); - } + IUnknown_Release(effect_context->shaders[i].shader); heap_free(effect_context->shaders);
ID2D1DeviceContext_Release(&effect_context->device_context->ID2D1DeviceContext_iface); }
+static HRESULT d2d_effect_context_add_shader(struct d2d_effect_context *effect_context, + REFGUID shader_id, void *shader) +{ + struct d2d_shader *entry; + + if (!d2d_array_reserve((void **)&effect_context->shaders, &effect_context->shaders_size, + effect_context->shader_count + 1, sizeof(*effect_context->shaders))) + { + WARN("Failed to resize shaders array.\n"); + return E_OUTOFMEMORY; + } + + entry = &effect_context->shaders[effect_context->shader_count++]; + entry->id = *shader_id; + entry->shader = shader; + IUnknown_AddRef(entry->shader); + + return S_OK; +} + static HRESULT STDMETHODCALLTYPE d2d_effect_context_QueryInterface(ID2D1EffectContext *iface, REFIID iid, void **out) { TRACE("iface %p, iid %s, out %p.\n", iface, debugstr_guid(iid), out); @@ -189,7 +206,6 @@ static HRESULT STDMETHODCALLTYPE d2d_effect_context_LoadVertexShader(ID2D1Effect { struct d2d_effect_context *effect_context = impl_from_ID2D1EffectContext(iface); ID3D11VertexShader *vertex_shader; - struct d2d_shader *shader; HRESULT hr;
TRACE("iface %p, shader_id %s, buffer %p, buffer_size %u.\n", @@ -205,22 +221,10 @@ static HRESULT STDMETHODCALLTYPE d2d_effect_context_LoadVertexShader(ID2D1Effect return hr; }
- if (!d2d_array_reserve((void **)&effect_context->shaders, &effect_context->shaders_size, - effect_context->shader_count + 1, sizeof(*effect_context->shaders))) - { - ERR("Failed to resize shaders array.\n"); - ID3D11VertexShader_Release(vertex_shader); - return E_OUTOFMEMORY; - } - memset(effect_context->shaders + effect_context->shader_count, 0, - sizeof(*effect_context->shaders) * (effect_context->shaders_size - effect_context->shader_count)); + hr = d2d_effect_context_add_shader(effect_context, shader_id, vertex_shader); + ID3D11VertexShader_Release(vertex_shader);
- effect_context->shader_count++; - shader = &effect_context->shaders[effect_context->shader_count - 1]; - shader->id = *shader_id; - shader->shader = (IUnknown *)vertex_shader; - - return S_OK; + return hr; }
static HRESULT STDMETHODCALLTYPE d2d_effect_context_LoadComputeShader(ID2D1EffectContext *iface,