[PATCH 4/5] d3d8: Introduce a resource structure.
Stefan Dösinger
stefan at codeweavers.com
Thu Mar 6 03:42:51 CST 2014
---
dlls/d3d8/buffer.c | 40 ++++++++++++++++++++-----------------
dlls/d3d8/d3d8_main.c | 9 +++++++++
dlls/d3d8/d3d8_private.h | 23 ++++++++++++---------
dlls/d3d8/device.c | 10 +++++-----
dlls/d3d8/surface.c | 22 ++++++++++----------
dlls/d3d8/texture.c | 52 +++++++++++++++++++++++++-----------------------
dlls/d3d8/volume.c | 10 ++++++----
7 files changed, 95 insertions(+), 71 deletions(-)
diff --git a/dlls/d3d8/buffer.c b/dlls/d3d8/buffer.c
index 775595a..badd341 100644
--- a/dlls/d3d8/buffer.c
+++ b/dlls/d3d8/buffer.c
@@ -48,13 +48,13 @@ static HRESULT WINAPI d3d8_vertexbuffer_QueryInterface(IDirect3DVertexBuffer8 *i
static ULONG WINAPI d3d8_vertexbuffer_AddRef(IDirect3DVertexBuffer8 *iface)
{
struct d3d8_vertexbuffer *buffer = impl_from_IDirect3DVertexBuffer8(iface);
- ULONG refcount = InterlockedIncrement(&buffer->refcount);
+ ULONG refcount = InterlockedIncrement(&buffer->resource.refcount);
TRACE("%p increasing refcount to %u.\n", iface, refcount);
if (refcount == 1)
{
- IDirect3DDevice8_AddRef(buffer->parent_device);
+ IDirect3DDevice8_AddRef(buffer->resource.parent_device);
wined3d_mutex_lock();
wined3d_buffer_incref(buffer->wined3d_buffer);
wined3d_mutex_unlock();
@@ -66,13 +66,13 @@ static ULONG WINAPI d3d8_vertexbuffer_AddRef(IDirect3DVertexBuffer8 *iface)
static ULONG WINAPI d3d8_vertexbuffer_Release(IDirect3DVertexBuffer8 *iface)
{
struct d3d8_vertexbuffer *buffer = impl_from_IDirect3DVertexBuffer8(iface);
- ULONG refcount = InterlockedDecrement(&buffer->refcount);
+ ULONG refcount = InterlockedDecrement(&buffer->resource.refcount);
TRACE("%p decreasing refcount to %u.\n", iface, refcount);
if (!refcount)
{
- IDirect3DDevice8 *device = buffer->parent_device;
+ IDirect3DDevice8 *device = buffer->resource.parent_device;
wined3d_mutex_lock();
wined3d_buffer_decref(buffer->wined3d_buffer);
@@ -92,7 +92,7 @@ static HRESULT WINAPI d3d8_vertexbuffer_GetDevice(IDirect3DVertexBuffer8 *iface,
TRACE("iface %p, device %p.\n", iface, device);
- *device = buffer->parent_device;
+ *device = buffer->resource.parent_device;
IDirect3DDevice8_AddRef(*device);
TRACE("Returning device %p.\n", *device);
@@ -274,7 +274,9 @@ static const IDirect3DVertexBuffer8Vtbl Direct3DVertexBuffer8_Vtbl =
static void STDMETHODCALLTYPE d3d8_vertexbuffer_wined3d_object_destroyed(void *parent)
{
- HeapFree(GetProcessHeap(), 0, parent);
+ struct d3d8_vertexbuffer *buffer = parent;
+ d3d8_resource_cleanup(&buffer->resource);
+ HeapFree(GetProcessHeap(), 0, buffer);
}
static const struct wined3d_parent_ops d3d8_vertexbuffer_wined3d_parent_ops =
@@ -288,7 +290,7 @@ HRESULT vertexbuffer_init(struct d3d8_vertexbuffer *buffer, struct d3d8_device *
HRESULT hr;
buffer->IDirect3DVertexBuffer8_iface.lpVtbl = &Direct3DVertexBuffer8_Vtbl;
- buffer->refcount = 1;
+ d3d8_resource_init(&buffer->resource);
buffer->fvf = fvf;
wined3d_mutex_lock();
@@ -301,8 +303,8 @@ HRESULT vertexbuffer_init(struct d3d8_vertexbuffer *buffer, struct d3d8_device *
return hr;
}
- buffer->parent_device = &device->IDirect3DDevice8_iface;
- IDirect3DDevice8_AddRef(buffer->parent_device);
+ buffer->resource.parent_device = &device->IDirect3DDevice8_iface;
+ IDirect3DDevice8_AddRef(buffer->resource.parent_device);
return D3D_OK;
}
@@ -343,13 +345,13 @@ static HRESULT WINAPI d3d8_indexbuffer_QueryInterface(IDirect3DIndexBuffer8 *ifa
static ULONG WINAPI d3d8_indexbuffer_AddRef(IDirect3DIndexBuffer8 *iface)
{
struct d3d8_indexbuffer *buffer = impl_from_IDirect3DIndexBuffer8(iface);
- ULONG refcount = InterlockedIncrement(&buffer->refcount);
+ ULONG refcount = InterlockedIncrement(&buffer->resource.refcount);
TRACE("%p increasing refcount to %u.\n", iface, refcount);
if (refcount == 1)
{
- IDirect3DDevice8_AddRef(buffer->parent_device);
+ IDirect3DDevice8_AddRef(buffer->resource.parent_device);
wined3d_mutex_lock();
wined3d_buffer_incref(buffer->wined3d_buffer);
wined3d_mutex_unlock();
@@ -361,13 +363,13 @@ static ULONG WINAPI d3d8_indexbuffer_AddRef(IDirect3DIndexBuffer8 *iface)
static ULONG WINAPI d3d8_indexbuffer_Release(IDirect3DIndexBuffer8 *iface)
{
struct d3d8_indexbuffer *buffer = impl_from_IDirect3DIndexBuffer8(iface);
- ULONG refcount = InterlockedDecrement(&buffer->refcount);
+ ULONG refcount = InterlockedDecrement(&buffer->resource.refcount);
TRACE("%p decreasing refcount to %u.\n", iface, refcount);
if (!refcount)
{
- IDirect3DDevice8 *device = buffer->parent_device;
+ IDirect3DDevice8 *device = buffer->resource.parent_device;
wined3d_mutex_lock();
wined3d_buffer_decref(buffer->wined3d_buffer);
@@ -387,7 +389,7 @@ static HRESULT WINAPI d3d8_indexbuffer_GetDevice(IDirect3DIndexBuffer8 *iface,
TRACE("iface %p, device %p.\n", iface, device);
- *device = buffer->parent_device;
+ *device = buffer->resource.parent_device;
IDirect3DDevice8_AddRef(*device);
TRACE("Returning device %p.\n", *device);
@@ -568,7 +570,9 @@ static const IDirect3DIndexBuffer8Vtbl d3d8_indexbuffer_vtbl =
static void STDMETHODCALLTYPE d3d8_indexbuffer_wined3d_object_destroyed(void *parent)
{
- HeapFree(GetProcessHeap(), 0, parent);
+ struct d3d8_indexbuffer *buffer = parent;
+ d3d8_resource_cleanup(&buffer->resource);
+ HeapFree(GetProcessHeap(), 0, buffer);
}
static const struct wined3d_parent_ops d3d8_indexbuffer_wined3d_parent_ops =
@@ -582,7 +586,7 @@ HRESULT indexbuffer_init(struct d3d8_indexbuffer *buffer, struct d3d8_device *de
HRESULT hr;
buffer->IDirect3DIndexBuffer8_iface.lpVtbl = &d3d8_indexbuffer_vtbl;
- buffer->refcount = 1;
+ d3d8_resource_init(&buffer->resource);
buffer->format = wined3dformat_from_d3dformat(format);
wined3d_mutex_lock();
@@ -595,8 +599,8 @@ HRESULT indexbuffer_init(struct d3d8_indexbuffer *buffer, struct d3d8_device *de
return hr;
}
- buffer->parent_device = &device->IDirect3DDevice8_iface;
- IDirect3DDevice8_AddRef(buffer->parent_device);
+ buffer->resource.parent_device = &device->IDirect3DDevice8_iface;
+ IDirect3DDevice8_AddRef(buffer->resource.parent_device);
return D3D_OK;
}
diff --git a/dlls/d3d8/d3d8_main.c b/dlls/d3d8/d3d8_main.c
index 1157465..2175a33 100644
--- a/dlls/d3d8/d3d8_main.c
+++ b/dlls/d3d8/d3d8_main.c
@@ -137,3 +137,12 @@ HRESULT WINAPI ValidatePixelShader(DWORD* pixelshader, DWORD* reserved1, BOOL bo
}
return ret;
}
+
+void d3d8_resource_cleanup(struct d3d8_resource *resource)
+{
+}
+
+void d3d8_resource_init(struct d3d8_resource *resource)
+{
+ resource->refcount = 1;
+}
diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h
index 436818f..df0066b 100644
--- a/dlls/d3d8/d3d8_private.h
+++ b/dlls/d3d8/d3d8_private.h
@@ -174,10 +174,19 @@ struct d3d8_device
HRESULT device_init(struct d3d8_device *device, struct d3d8 *parent, struct wined3d *wined3d, UINT adapter,
D3DDEVTYPE device_type, HWND focus_window, DWORD flags, D3DPRESENT_PARAMETERS *parameters) DECLSPEC_HIDDEN;
+struct d3d8_resource
+{
+ LONG refcount;
+ IDirect3DDevice8 *parent_device;
+};
+
+void d3d8_resource_cleanup(struct d3d8_resource *resource) DECLSPEC_HIDDEN;
+void d3d8_resource_init(struct d3d8_resource *resource) DECLSPEC_HIDDEN;
+
struct d3d8_volume
{
IDirect3DVolume8 IDirect3DVolume8_iface;
- LONG refcount;
+ struct d3d8_resource resource;
struct wined3d_volume *wined3d_volume;
IUnknown *container;
IUnknown *forwardReference;
@@ -200,9 +209,8 @@ HRESULT d3d8_swapchain_create(struct d3d8_device *device, struct wined3d_swapcha
struct d3d8_surface
{
IDirect3DSurface8 IDirect3DSurface8_iface;
- LONG refcount;
+ struct d3d8_resource resource;
struct wined3d_surface *wined3d_surface;
- IDirect3DDevice8 *parent_device;
/* The surface container */
IUnknown *container;
@@ -218,9 +226,8 @@ struct d3d8_surface *unsafe_impl_from_IDirect3DSurface8(IDirect3DSurface8 *iface
struct d3d8_vertexbuffer
{
IDirect3DVertexBuffer8 IDirect3DVertexBuffer8_iface;
- LONG refcount;
+ struct d3d8_resource resource;
struct wined3d_buffer *wined3d_buffer;
- IDirect3DDevice8 *parent_device;
DWORD fvf;
};
@@ -231,9 +238,8 @@ struct d3d8_vertexbuffer *unsafe_impl_from_IDirect3DVertexBuffer8(IDirect3DVerte
struct d3d8_indexbuffer
{
IDirect3DIndexBuffer8 IDirect3DIndexBuffer8_iface;
- LONG refcount;
+ struct d3d8_resource resource;
struct wined3d_buffer *wined3d_buffer;
- IDirect3DDevice8 *parent_device;
enum wined3d_format_id format;
};
@@ -244,9 +250,8 @@ struct d3d8_indexbuffer *unsafe_impl_from_IDirect3DIndexBuffer8(IDirect3DIndexBu
struct d3d8_texture
{
IDirect3DBaseTexture8 IDirect3DBaseTexture8_iface;
- LONG refcount;
+ struct d3d8_resource resource;
struct wined3d_texture *wined3d_texture;
- IDirect3DDevice8 *parent_device;
};
HRESULT cubetexture_init(struct d3d8_texture *texture, struct d3d8_device *device,
diff --git a/dlls/d3d8/device.c b/dlls/d3d8/device.c
index d28ada5..c1a3c17 100644
--- a/dlls/d3d8/device.c
+++ b/dlls/d3d8/device.c
@@ -600,7 +600,7 @@ static HRESULT CDECL reset_enum_callback(struct wined3d_resource *resource)
}
surface = wined3d_resource_get_parent(resource);
- if (surface->refcount)
+ if (surface->resource.refcount)
{
WARN("Surface %p (resource %p) in pool D3DPOOL_DEFAULT blocks the Reset call.\n", surface, resource);
return D3DERR_DEVICELOST;
@@ -916,7 +916,7 @@ static HRESULT d3d8_device_create_surface(struct d3d8_device *device, UINT width
sub_resource = wined3d_texture_get_sub_resource(texture, 0);
surface_impl = wined3d_resource_get_parent(sub_resource);
surface_impl->forwardReference = NULL;
- surface_impl->parent_device = &device->IDirect3DDevice8_iface;
+ surface_impl->resource.parent_device = &device->IDirect3DDevice8_iface;
*surface = &surface_impl->IDirect3DSurface8_iface;
IDirect3DSurface8_AddRef(*surface);
wined3d_texture_decref(texture);
@@ -2942,8 +2942,8 @@ static HRESULT CDECL device_parent_surface_created(struct wined3d_device_parent
TRACE("Created surface %p.\n", d3d_surface);
d3d_surface->container = container_parent;
- IDirect3DDevice8_Release(d3d_surface->parent_device);
- d3d_surface->parent_device = NULL;
+ IDirect3DDevice8_Release(d3d_surface->resource.parent_device);
+ d3d_surface->resource.parent_device = NULL;
IDirect3DSurface8_Release(&d3d_surface->IDirect3DSurface8_iface);
d3d_surface->forwardReference = container_parent;
@@ -3002,7 +3002,7 @@ static HRESULT CDECL device_parent_create_swapchain_surface(struct wined3d_devic
d3d_surface = wined3d_surface_get_parent(*surface);
d3d_surface->forwardReference = NULL;
- d3d_surface->parent_device = &device->IDirect3DDevice8_iface;
+ d3d_surface->resource.parent_device = &device->IDirect3DDevice8_iface;
return hr;
}
diff --git a/dlls/d3d8/surface.c b/dlls/d3d8/surface.c
index f1b143a..95face4 100644
--- a/dlls/d3d8/surface.c
+++ b/dlls/d3d8/surface.c
@@ -62,14 +62,14 @@ static ULONG WINAPI d3d8_surface_AddRef(IDirect3DSurface8 *iface)
else
{
/* No container, handle our own refcounting */
- ULONG ref = InterlockedIncrement(&surface->refcount);
+ ULONG ref = InterlockedIncrement(&surface->resource.refcount);
TRACE("%p increasing refcount to %u.\n", iface, ref);
if (ref == 1)
{
- if (surface->parent_device)
- IDirect3DDevice8_AddRef(surface->parent_device);
+ if (surface->resource.parent_device)
+ IDirect3DDevice8_AddRef(surface->resource.parent_device);
wined3d_mutex_lock();
wined3d_surface_incref(surface->wined3d_surface);
wined3d_mutex_unlock();
@@ -94,13 +94,13 @@ static ULONG WINAPI d3d8_surface_Release(IDirect3DSurface8 *iface)
else
{
/* No container, handle our own refcounting */
- ULONG ref = InterlockedDecrement(&surface->refcount);
+ ULONG ref = InterlockedDecrement(&surface->resource.refcount);
TRACE("%p decreasing refcount to %u.\n", iface, ref);
if (!ref)
{
- IDirect3DDevice8 *parent_device = surface->parent_device;
+ IDirect3DDevice8 *parent_device = surface->resource.parent_device;
/* Implicit surfaces are destroyed with the device, not if refcount reaches 0. */
wined3d_mutex_lock();
@@ -138,7 +138,7 @@ static HRESULT WINAPI d3d8_surface_GetDevice(IDirect3DSurface8 *iface, IDirect3D
return hr;
}
- *device = surface->parent_device;
+ *device = surface->resource.parent_device;
IDirect3DDevice8_AddRef(*device);
TRACE("Returning device %p.\n", *device);
@@ -325,7 +325,9 @@ static const IDirect3DSurface8Vtbl d3d8_surface_vtbl =
static void STDMETHODCALLTYPE surface_wined3d_object_destroyed(void *parent)
{
- HeapFree(GetProcessHeap(), 0, parent);
+ struct d3d8_surface *surface = parent;
+ d3d8_resource_cleanup(&surface->resource);
+ HeapFree(GetProcessHeap(), 0, surface);
}
static const struct wined3d_parent_ops d3d8_surface_wined3d_parent_ops =
@@ -337,11 +339,11 @@ void surface_init(struct d3d8_surface *surface, struct wined3d_surface *wined3d_
struct d3d8_device *device, const struct wined3d_parent_ops **parent_ops)
{
surface->IDirect3DSurface8_iface.lpVtbl = &d3d8_surface_vtbl;
- surface->refcount = 1;
+ d3d8_resource_init(&surface->resource);
wined3d_surface_incref(wined3d_surface);
surface->wined3d_surface = wined3d_surface;
- surface->parent_device = &device->IDirect3DDevice8_iface;
- IDirect3DDevice8_AddRef(surface->parent_device);
+ surface->resource.parent_device = &device->IDirect3DDevice8_iface;
+ IDirect3DDevice8_AddRef(surface->resource.parent_device);
*parent_ops = &d3d8_surface_wined3d_parent_ops;
}
diff --git a/dlls/d3d8/texture.c b/dlls/d3d8/texture.c
index e3e8ca4..06bc754 100644
--- a/dlls/d3d8/texture.c
+++ b/dlls/d3d8/texture.c
@@ -59,13 +59,13 @@ static HRESULT WINAPI d3d8_texture_2d_QueryInterface(IDirect3DTexture8 *iface, R
static ULONG WINAPI d3d8_texture_2d_AddRef(IDirect3DTexture8 *iface)
{
struct d3d8_texture *texture = impl_from_IDirect3DTexture8(iface);
- ULONG ref = InterlockedIncrement(&texture->refcount);
+ ULONG ref = InterlockedIncrement(&texture->resource.refcount);
TRACE("%p increasing refcount to %u.\n", iface, ref);
if (ref == 1)
{
- IDirect3DDevice8_AddRef(texture->parent_device);
+ IDirect3DDevice8_AddRef(texture->resource.parent_device);
wined3d_mutex_lock();
wined3d_texture_incref(texture->wined3d_texture);
wined3d_mutex_unlock();
@@ -77,13 +77,13 @@ static ULONG WINAPI d3d8_texture_2d_AddRef(IDirect3DTexture8 *iface)
static ULONG WINAPI d3d8_texture_2d_Release(IDirect3DTexture8 *iface)
{
struct d3d8_texture *texture = impl_from_IDirect3DTexture8(iface);
- ULONG ref = InterlockedDecrement(&texture->refcount);
+ ULONG ref = InterlockedDecrement(&texture->resource.refcount);
TRACE("%p decreasing refcount to %u.\n", iface, ref);
if (!ref)
{
- IDirect3DDevice8 *parent_device = texture->parent_device;
+ IDirect3DDevice8 *parent_device = texture->resource.parent_device;
wined3d_mutex_lock();
wined3d_texture_decref(texture->wined3d_texture);
@@ -101,7 +101,7 @@ static HRESULT WINAPI d3d8_texture_2d_GetDevice(IDirect3DTexture8 *iface, IDirec
TRACE("iface %p, device %p.\n", iface, device);
- *device = texture->parent_device;
+ *device = texture->resource.parent_device;
IDirect3DDevice8_AddRef(*device);
TRACE("Returning device %p.\n", *device);
@@ -427,13 +427,13 @@ static HRESULT WINAPI d3d8_texture_cube_QueryInterface(IDirect3DCubeTexture8 *if
static ULONG WINAPI d3d8_texture_cube_AddRef(IDirect3DCubeTexture8 *iface)
{
struct d3d8_texture *texture = impl_from_IDirect3DCubeTexture8(iface);
- ULONG ref = InterlockedIncrement(&texture->refcount);
+ ULONG ref = InterlockedIncrement(&texture->resource.refcount);
TRACE("%p increasing refcount to %u.\n", iface, ref);
if (ref == 1)
{
- IDirect3DDevice8_AddRef(texture->parent_device);
+ IDirect3DDevice8_AddRef(texture->resource.parent_device);
wined3d_mutex_lock();
wined3d_texture_incref(texture->wined3d_texture);
wined3d_mutex_unlock();
@@ -445,13 +445,13 @@ static ULONG WINAPI d3d8_texture_cube_AddRef(IDirect3DCubeTexture8 *iface)
static ULONG WINAPI d3d8_texture_cube_Release(IDirect3DCubeTexture8 *iface)
{
struct d3d8_texture *texture = impl_from_IDirect3DCubeTexture8(iface);
- ULONG ref = InterlockedDecrement(&texture->refcount);
+ ULONG ref = InterlockedDecrement(&texture->resource.refcount);
TRACE("%p decreasing refcount to %u.\n", iface, ref);
if (!ref)
{
- IDirect3DDevice8 *parent_device = texture->parent_device;
+ IDirect3DDevice8 *parent_device = texture->resource.parent_device;
TRACE("Releasing child %p.\n", texture->wined3d_texture);
@@ -471,7 +471,7 @@ static HRESULT WINAPI d3d8_texture_cube_GetDevice(IDirect3DCubeTexture8 *iface,
TRACE("iface %p, device %p.\n", iface, device);
- *device = texture->parent_device;
+ *device = texture->resource.parent_device;
IDirect3DDevice8_AddRef(*device);
TRACE("Returning device %p.\n", *device);
@@ -820,13 +820,13 @@ static HRESULT WINAPI d3d8_texture_3d_QueryInterface(IDirect3DVolumeTexture8 *if
static ULONG WINAPI d3d8_texture_3d_AddRef(IDirect3DVolumeTexture8 *iface)
{
struct d3d8_texture *texture = impl_from_IDirect3DVolumeTexture8(iface);
- ULONG ref = InterlockedIncrement(&texture->refcount);
+ ULONG ref = InterlockedIncrement(&texture->resource.refcount);
TRACE("%p increasing refcount to %u.\n", iface, ref);
if (ref == 1)
{
- IDirect3DDevice8_AddRef(texture->parent_device);
+ IDirect3DDevice8_AddRef(texture->resource.parent_device);
wined3d_mutex_lock();
wined3d_texture_incref(texture->wined3d_texture);
wined3d_mutex_unlock();
@@ -838,13 +838,13 @@ static ULONG WINAPI d3d8_texture_3d_AddRef(IDirect3DVolumeTexture8 *iface)
static ULONG WINAPI d3d8_texture_3d_Release(IDirect3DVolumeTexture8 *iface)
{
struct d3d8_texture *texture = impl_from_IDirect3DVolumeTexture8(iface);
- ULONG ref = InterlockedDecrement(&texture->refcount);
+ ULONG ref = InterlockedDecrement(&texture->resource.refcount);
TRACE("%p decreasing refcount to %u.\n", iface, ref);
if (!ref)
{
- IDirect3DDevice8 *parent_device = texture->parent_device;
+ IDirect3DDevice8 *parent_device = texture->resource.parent_device;
wined3d_mutex_lock();
wined3d_texture_decref(texture->wined3d_texture);
@@ -862,7 +862,7 @@ static HRESULT WINAPI d3d8_texture_3d_GetDevice(IDirect3DVolumeTexture8 *iface,
TRACE("iface %p, device %p.\n", iface, device);
- *device = texture->parent_device;
+ *device = texture->resource.parent_device;
IDirect3DDevice8_AddRef(*device);
TRACE("Returning device %p.\n", *device);
@@ -1174,7 +1174,9 @@ struct d3d8_texture *unsafe_impl_from_IDirect3DBaseTexture8(IDirect3DBaseTexture
static void STDMETHODCALLTYPE d3d8_texture_wined3d_object_destroyed(void *parent)
{
- HeapFree(GetProcessHeap(), 0, parent);
+ struct d3d8_texture *texture = parent;
+ d3d8_resource_cleanup(&texture->resource);
+ HeapFree(GetProcessHeap(), 0, texture);
}
static const struct wined3d_parent_ops d3d8_texture_wined3d_parent_ops =
@@ -1190,7 +1192,7 @@ HRESULT texture_init(struct d3d8_texture *texture, struct d3d8_device *device,
HRESULT hr;
texture->IDirect3DBaseTexture8_iface.lpVtbl = (const IDirect3DBaseTexture8Vtbl *)&Direct3DTexture8_Vtbl;
- texture->refcount = 1;
+ d3d8_resource_init(&texture->resource);
desc.resource_type = WINED3D_RTYPE_TEXTURE;
desc.format = wined3dformat_from_d3dformat(format);
@@ -1217,8 +1219,8 @@ HRESULT texture_init(struct d3d8_texture *texture, struct d3d8_device *device,
return hr;
}
- texture->parent_device = &device->IDirect3DDevice8_iface;
- IDirect3DDevice8_AddRef(texture->parent_device);
+ texture->resource.parent_device = &device->IDirect3DDevice8_iface;
+ IDirect3DDevice8_AddRef(texture->resource.parent_device);
return D3D_OK;
}
@@ -1231,7 +1233,7 @@ HRESULT cubetexture_init(struct d3d8_texture *texture, struct d3d8_device *devic
HRESULT hr;
texture->IDirect3DBaseTexture8_iface.lpVtbl = (const IDirect3DBaseTexture8Vtbl *)&Direct3DCubeTexture8_Vtbl;
- texture->refcount = 1;
+ d3d8_resource_init(&texture->resource);
desc.resource_type = WINED3D_RTYPE_CUBE_TEXTURE;
desc.format = wined3dformat_from_d3dformat(format);
@@ -1258,8 +1260,8 @@ HRESULT cubetexture_init(struct d3d8_texture *texture, struct d3d8_device *devic
return hr;
}
- texture->parent_device = &device->IDirect3DDevice8_iface;
- IDirect3DDevice8_AddRef(texture->parent_device);
+ texture->resource.parent_device = &device->IDirect3DDevice8_iface;
+ IDirect3DDevice8_AddRef(texture->resource.parent_device);
return D3D_OK;
}
@@ -1271,7 +1273,7 @@ HRESULT volumetexture_init(struct d3d8_texture *texture, struct d3d8_device *dev
HRESULT hr;
texture->IDirect3DBaseTexture8_iface.lpVtbl = (const IDirect3DBaseTexture8Vtbl *)&Direct3DVolumeTexture8_Vtbl;
- texture->refcount = 1;
+ d3d8_resource_init(&texture->resource);
desc.resource_type = WINED3D_RTYPE_VOLUME_TEXTURE;
desc.format = wined3dformat_from_d3dformat(format);
@@ -1295,8 +1297,8 @@ HRESULT volumetexture_init(struct d3d8_texture *texture, struct d3d8_device *dev
return hr;
}
- texture->parent_device = &device->IDirect3DDevice8_iface;
- IDirect3DDevice8_AddRef(texture->parent_device);
+ texture->resource.parent_device = &device->IDirect3DDevice8_iface;
+ IDirect3DDevice8_AddRef(texture->resource.parent_device);
return D3D_OK;
}
diff --git a/dlls/d3d8/volume.c b/dlls/d3d8/volume.c
index e2376d4..1a4e80c 100644
--- a/dlls/d3d8/volume.c
+++ b/dlls/d3d8/volume.c
@@ -61,7 +61,7 @@ static ULONG WINAPI d3d8_volume_AddRef(IDirect3DVolume8 *iface)
else
{
/* No container, handle our own refcounting */
- ULONG ref = InterlockedIncrement(&volume->refcount);
+ ULONG ref = InterlockedIncrement(&volume->resource.refcount);
TRACE("%p increasing refcount to %u.\n", iface, ref);
@@ -91,7 +91,7 @@ static ULONG WINAPI d3d8_volume_Release(IDirect3DVolume8 *iface)
else
{
/* No container, handle our own refcounting */
- ULONG ref = InterlockedDecrement(&volume->refcount);
+ ULONG ref = InterlockedDecrement(&volume->resource.refcount);
TRACE("%p decreasing refcount to %u.\n", iface, ref);
@@ -275,7 +275,9 @@ static const IDirect3DVolume8Vtbl d3d8_volume_vtbl =
static void STDMETHODCALLTYPE volume_wined3d_object_destroyed(void *parent)
{
- HeapFree(GetProcessHeap(), 0, parent);
+ struct d3d8_volume *volume = parent;
+ d3d8_resource_cleanup(&volume->resource);
+ HeapFree(GetProcessHeap(), 0, volume);
}
static const struct wined3d_parent_ops d3d8_volume_wined3d_parent_ops =
@@ -287,7 +289,7 @@ void volume_init(struct d3d8_volume *volume, struct wined3d_volume *wined3d_volu
const struct wined3d_parent_ops **parent_ops)
{
volume->IDirect3DVolume8_iface.lpVtbl = &d3d8_volume_vtbl;
- volume->refcount = 1;
+ d3d8_resource_init(&volume->resource);
wined3d_volume_incref(wined3d_volume);
volume->wined3d_volume = wined3d_volume;
--
1.8.3.2
More information about the wine-patches
mailing list