[PATCH 03/10] d3dx9: Skip AddRef + Release if SetValue is called with the old texture.
Matteo Bruni
mbruni at codeweavers.com
Wed Mar 14 13:53:18 CDT 2018
Signed-off-by: Matteo Bruni <mbruni at codeweavers.com>
---
dlls/d3dx9_36/effect.c | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/dlls/d3dx9_36/effect.c b/dlls/d3dx9_36/effect.c
index a98495e5554..7f54e251a65 100644
--- a/dlls/d3dx9_36/effect.c
+++ b/dlls/d3dx9_36/effect.c
@@ -1555,13 +1555,16 @@ static HRESULT d3dx9_base_effect_set_value(struct d3dx9_base_effect *base,
case D3DXPT_TEXTURECUBE:
for (i = 0; i < (param->element_count ? param->element_count : 1); ++i)
{
- IUnknown *unk = ((IUnknown **)data)[i];
- if (unk)
- IUnknown_AddRef(unk);
+ IUnknown *old_texture = ((IUnknown **)param->data)[i];
+ IUnknown *new_texture = ((IUnknown **)data)[i];
- unk = ((IUnknown **)param->data)[i];
- if (unk)
- IUnknown_Release(unk);
+ if (new_texture == old_texture)
+ continue;
+
+ if (new_texture)
+ IUnknown_AddRef(new_texture);
+ if (old_texture)
+ IUnknown_Release(old_texture);
}
/* fallthrough */
case D3DXPT_VOID:
--
2.13.6
More information about the wine-devel
mailing list