From be13e91cfe9f9cbd1114efa9b767cdd818d2625b Mon Sep 17 00:00:00 2001 From: Elizabeth Figura Date: Tue, 24 Oct 2023 12:31:32 -0500 Subject: [PATCH] d3d8: Store the texture's parent device as a d3d8_device pointer. --- dlls/d3d8/d3d8_private.h | 2 +- dlls/d3d8/surface.c | 2 +- dlls/d3d8/texture.c | 19 +++++++++---------- 3 files changed, 11 insertions(+), 12 deletions(-) diff --git a/dlls/d3d8/d3d8_private.h b/dlls/d3d8/d3d8_private.h index 722c801db57..9af6e559fdb 100644 --- a/dlls/d3d8/d3d8_private.h +++ b/dlls/d3d8/d3d8_private.h @@ -243,7 +243,7 @@ struct d3d8_texture IDirect3DBaseTexture8 IDirect3DBaseTexture8_iface; struct d3d8_resource resource; struct wined3d_texture *wined3d_texture, *draw_texture; - IDirect3DDevice8 *parent_device; + struct d3d8_device *parent_device; struct list rtv_list; }; diff --git a/dlls/d3d8/surface.c b/dlls/d3d8/surface.c index 9257134b478..5b02035d539 100644 --- a/dlls/d3d8/surface.c +++ b/dlls/d3d8/surface.c @@ -372,7 +372,7 @@ static const struct wined3d_parent_ops d3d8_view_wined3d_parent_ops = struct d3d8_device *d3d8_surface_get_device(const struct d3d8_surface *surface) { IDirect3DDevice8 *device; - device = surface->texture ? surface->texture->parent_device : surface->parent_device; + device = surface->texture ? &surface->texture->parent_device->IDirect3DDevice8_iface : surface->parent_device; return impl_from_IDirect3DDevice8(device); } diff --git a/dlls/d3d8/texture.c b/dlls/d3d8/texture.c index ee06aac9610..5d2080e7da1 100644 --- a/dlls/d3d8/texture.c +++ b/dlls/d3d8/texture.c @@ -30,7 +30,7 @@ static ULONG d3d8_texture_incref(struct d3d8_texture *texture) { struct d3d8_surface *surface; - IDirect3DDevice8_AddRef(texture->parent_device); + IDirect3DDevice8_AddRef(&texture->parent_device->IDirect3DDevice8_iface); wined3d_mutex_lock(); LIST_FOR_EACH_ENTRY(surface, &texture->rtv_list, struct d3d8_surface, rtv_entry) { @@ -51,7 +51,7 @@ static ULONG d3d8_texture_decref(struct d3d8_texture *texture) if (!ref) { - IDirect3DDevice8 *parent_device = texture->parent_device; + IDirect3DDevice8 *parent_device = &texture->parent_device->IDirect3DDevice8_iface; struct d3d8_surface *surface; wined3d_mutex_lock(); @@ -70,11 +70,10 @@ static ULONG d3d8_texture_decref(struct d3d8_texture *texture) static void d3d8_texture_preload(struct d3d8_texture *texture) { - struct d3d8_device *device = impl_from_IDirect3DDevice8(texture->parent_device); - wined3d_mutex_lock(); if (texture->draw_texture) - wined3d_device_update_texture(device->wined3d_device, texture->wined3d_texture, texture->draw_texture); + wined3d_device_update_texture(texture->parent_device->wined3d_device, + texture->wined3d_texture, texture->draw_texture); else wined3d_resource_preload(wined3d_texture_get_resource(texture->wined3d_texture)); wined3d_mutex_unlock(); @@ -135,7 +134,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->parent_device->IDirect3DDevice8_iface; IDirect3DDevice8_AddRef(*device); TRACE("Returning device %p.\n", *device); @@ -436,7 +435,7 @@ static HRESULT WINAPI d3d8_texture_cube_GetDevice(IDirect3DCubeTexture8 *iface, TRACE("iface %p, device %p.\n", iface, device); - *device = texture->parent_device; + *device = &texture->parent_device->IDirect3DDevice8_iface; IDirect3DDevice8_AddRef(*device); TRACE("Returning device %p.\n", *device); @@ -760,7 +759,7 @@ static HRESULT WINAPI d3d8_texture_3d_GetDevice(IDirect3DVolumeTexture8 *iface, TRACE("iface %p, device %p.\n", iface, device); - *device = texture->parent_device; + *device = &texture->parent_device->IDirect3DDevice8_iface; IDirect3DDevice8_AddRef(*device); TRACE("Returning device %p.\n", *device); @@ -1103,8 +1102,8 @@ static HRESULT d3d8_texture_init(struct d3d8_texture *texture, struct d3d8_devic } wined3d_mutex_unlock(); - texture->parent_device = &device->IDirect3DDevice8_iface; - IDirect3DDevice8_AddRef(texture->parent_device); + texture->parent_device = device; + IDirect3DDevice8_AddRef(&texture->parent_device->IDirect3DDevice8_iface); return D3D_OK; } -- 2.11.4.GIT