diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c index 2c9329fd019..0baa5ace8ca 100644 --- a/dlls/d3d8/device.c +++ b/dlls/d3d8/device.c @@ -698,6 +698,7 @@ static HRESULT WINAPI IDirect3DDevice8Impl_GetDepthStencilSurface(LPDIRECT3DDE hr=IWineD3DDevice_GetDepthStencilSurface(This->WineD3DDevice,&pZStencilSurface); if(hr == D3D_OK && pZStencilSurface != NULL){ IWineD3DResource_GetParent((IWineD3DResource *)pZStencilSurface,(IUnknown**)ppZStencilSurface); + IWineD3DResource_Release((IWineD3DResource *)pZStencilSurface); }else{ FIXME("Call to IWineD3DDevice_GetDepthStencilSurface failed\n"); *ppZStencilSurface = NULL; diff --git a/dlls/d3d9/device.c b/dlls/d3d9/device.c index 34a2e1c34c5..9b31289e33c 100644 --- a/dlls/d3d9/device.c +++ b/dlls/d3d9/device.c @@ -433,6 +433,7 @@ static HRESULT WINAPI IDirect3DDevice9Impl_GetDepthStencilSurface(LPDIRECT3DDE hr=IWineD3DDevice_GetDepthStencilSurface(This->WineD3DDevice,&pZStencilSurface); if(hr == D3D_OK && pZStencilSurface != NULL){ IWineD3DResource_GetParent((IWineD3DResource *)pZStencilSurface,(IUnknown**)ppZStencilSurface); + IWineD3DResource_Release((IWineD3DResource *)pZStencilSurface); }else{ FIXME("Call to IWineD3DDevice_GetRenderTarget failed\n"); *ppZStencilSurface = NULL; diff --git a/dlls/wined3d/device.c b/dlls/wined3d/device.c index 26e24c6bbd4..4ae70a5c76e 100644 --- a/dlls/wined3d/device.c +++ b/dlls/wined3d/device.c @@ -6990,6 +6990,10 @@ static HRESULT WINAPI IWineD3DDeviceImpl_GetDepthStencilSurface(IWineD3DDevice *ppZStencilSurface = This->depthStencilBuffer; TRACE("(%p) : zStencilSurface returning %p\n", This, *ppZStencilSurface); + if(*ppZStencilSurface != NULL) { + /* Note inc ref on returned surface */ + IWineD3DSurface_AddRef(*ppZStencilSurface); + } return WINED3D_OK; }