Commit 3ba9a7f7 authored by Zebediah Figura's avatar Zebediah Figura Committed by Alexandre Julliard

d3d8: Hold a reference to the wined3d swapchain from d3d8 swapchain surfaces.

parent f97163f4
...@@ -199,6 +199,7 @@ struct d3d8_surface ...@@ -199,6 +199,7 @@ struct d3d8_surface
IDirect3DDevice8 *parent_device; IDirect3DDevice8 *parent_device;
IUnknown *container; IUnknown *container;
struct d3d8_texture *texture; struct d3d8_texture *texture;
struct wined3d_swapchain *swapchain;
}; };
struct wined3d_rendertarget_view *d3d8_surface_acquire_rendertarget_view(struct d3d8_surface *surface) DECLSPEC_HIDDEN; struct wined3d_rendertarget_view *d3d8_surface_acquire_rendertarget_view(struct d3d8_surface *surface) DECLSPEC_HIDDEN;
......
...@@ -69,6 +69,8 @@ static ULONG WINAPI d3d8_surface_AddRef(IDirect3DSurface8 *iface) ...@@ -69,6 +69,8 @@ static ULONG WINAPI d3d8_surface_AddRef(IDirect3DSurface8 *iface)
if (surface->wined3d_rtv) if (surface->wined3d_rtv)
wined3d_rendertarget_view_incref(surface->wined3d_rtv); wined3d_rendertarget_view_incref(surface->wined3d_rtv);
wined3d_texture_incref(surface->wined3d_texture); wined3d_texture_incref(surface->wined3d_texture);
if (surface->swapchain)
wined3d_swapchain_incref(surface->swapchain);
} }
return refcount; return refcount;
...@@ -102,6 +104,10 @@ static ULONG WINAPI d3d8_surface_Release(IDirect3DSurface8 *iface) ...@@ -102,6 +104,10 @@ static ULONG WINAPI d3d8_surface_Release(IDirect3DSurface8 *iface)
if (surface->wined3d_rtv) if (surface->wined3d_rtv)
wined3d_rendertarget_view_decref(surface->wined3d_rtv); wined3d_rendertarget_view_decref(surface->wined3d_rtv);
if (surface->swapchain)
wined3d_swapchain_decref(surface->swapchain);
/* Releasing the texture may free the d3d8 object, so do not access it
* after releasing the texture. */
wined3d_texture_decref(surface->wined3d_texture); wined3d_texture_decref(surface->wined3d_texture);
if (parent_device) if (parent_device)
...@@ -325,6 +331,7 @@ struct d3d8_surface *d3d8_surface_create(struct wined3d_texture *wined3d_texture ...@@ -325,6 +331,7 @@ struct d3d8_surface *d3d8_surface_create(struct wined3d_texture *wined3d_texture
surface->container = container; surface->container = container;
surface->wined3d_texture = wined3d_texture; surface->wined3d_texture = wined3d_texture;
surface->sub_resource_idx = sub_resource_idx; surface->sub_resource_idx = sub_resource_idx;
surface->swapchain = wined3d_texture_get_swapchain(wined3d_texture);
if (surface->container && SUCCEEDED(IUnknown_QueryInterface(surface->container, if (surface->container && SUCCEEDED(IUnknown_QueryInterface(surface->container,
&IID_IDirect3DBaseTexture8, (void **)&texture))) &IID_IDirect3DBaseTexture8, (void **)&texture)))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment