From 51d58f9962c92bb2268143383499b1e9b68d12fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B3zef=20Kucia?= Date: Wed, 26 Apr 2017 13:19:57 +0200 Subject: [PATCH] d3d11: Fix refcounting for shaders. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Józef Kucia Signed-off-by: Henri Verbeet Signed-off-by: Alexandre Julliard --- dlls/d3d11/shader.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/dlls/d3d11/shader.c b/dlls/d3d11/shader.c index 6266a34d198..b8c50d9e96c 100644 --- a/dlls/d3d11/shader.c +++ b/dlls/d3d11/shader.c @@ -635,6 +635,14 @@ static ULONG STDMETHODCALLTYPE d3d11_hull_shader_AddRef(ID3D11HullShader *iface) TRACE("%p increasing refcount to %u.\n", shader, refcount); + if (refcount == 1) + { + ID3D11Device_AddRef(shader->device); + wined3d_mutex_lock(); + wined3d_shader_incref(shader->wined3d_shader); + wined3d_mutex_unlock(); + } + return refcount; } @@ -831,6 +839,14 @@ static ULONG STDMETHODCALLTYPE d3d11_domain_shader_AddRef(ID3D11DomainShader *if TRACE("%p increasing refcount to %u.\n", shader, refcount); + if (refcount == 1) + { + ID3D11Device_AddRef(shader->device); + wined3d_mutex_lock(); + wined3d_shader_incref(shader->wined3d_shader); + wined3d_mutex_unlock(); + } + return refcount; } @@ -1037,6 +1053,14 @@ static ULONG STDMETHODCALLTYPE d3d11_geometry_shader_AddRef(ID3D11GeometryShader TRACE("%p increasing refcount to %u.\n", shader, refcount); + if (refcount == 1) + { + ID3D11Device_AddRef(shader->device); + wined3d_mutex_lock(); + wined3d_shader_incref(shader->wined3d_shader); + wined3d_mutex_unlock(); + } + return refcount; } @@ -1890,6 +1914,14 @@ static ULONG STDMETHODCALLTYPE d3d11_compute_shader_AddRef(ID3D11ComputeShader * TRACE("%p increasing refcount to %u.\n", shader, refcount); + if (refcount == 1) + { + ID3D11Device_AddRef(shader->device); + wined3d_mutex_lock(); + wined3d_shader_incref(shader->wined3d_shader); + wined3d_mutex_unlock(); + } + return refcount; }