mirror of
git://source.winehq.org/git/wine.git
synced 2024-10-06 09:35:52 +00:00
d3d8: Hold a reference to the wined3d swapchain from d3d8 swapchain surfaces.
This commit is contained in:
parent
f97163f4ea
commit
3ba9a7f7b4
|
@ -199,6 +199,7 @@ struct d3d8_surface
|
|||
IDirect3DDevice8 *parent_device;
|
||||
IUnknown *container;
|
||||
struct d3d8_texture *texture;
|
||||
struct wined3d_swapchain *swapchain;
|
||||
};
|
||||
|
||||
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)
|
|||
if (surface->wined3d_rtv)
|
||||
wined3d_rendertarget_view_incref(surface->wined3d_rtv);
|
||||
wined3d_texture_incref(surface->wined3d_texture);
|
||||
if (surface->swapchain)
|
||||
wined3d_swapchain_incref(surface->swapchain);
|
||||
}
|
||||
|
||||
return refcount;
|
||||
|
@ -102,6 +104,10 @@ static ULONG WINAPI d3d8_surface_Release(IDirect3DSurface8 *iface)
|
|||
|
||||
if (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);
|
||||
|
||||
if (parent_device)
|
||||
|
@ -325,6 +331,7 @@ struct d3d8_surface *d3d8_surface_create(struct wined3d_texture *wined3d_texture
|
|||
surface->container = container;
|
||||
surface->wined3d_texture = wined3d_texture;
|
||||
surface->sub_resource_idx = sub_resource_idx;
|
||||
surface->swapchain = wined3d_texture_get_swapchain(wined3d_texture);
|
||||
|
||||
if (surface->container && SUCCEEDED(IUnknown_QueryInterface(surface->container,
|
||||
&IID_IDirect3DBaseTexture8, (void **)&texture)))
|
||||
|
|
Loading…
Reference in a new issue