From: Henri Verbeet Subject: Re: [PATCH] ddraw: Update texture_memory when setting new texture parent in ddraw_surface7_Flip(). Message-Id: Date: Tue, 16 Jun 2020 19:59:02 +0430 In-Reply-To: <20200616115357.336314-1-pgofman@codeweavers.com> References: <20200616115357.336314-1-pgofman@codeweavers.com> On Tue, 16 Jun 2020 at 16:24, Paul Gofman wrote: > @@ -1293,6 +1293,7 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Flip(IDirectDrawSurface7 > DDSCAPS2 caps = {DDSCAPS_FLIP, 0, 0, {0}}; > struct wined3d_texture *texture; > IDirectDrawSurface7 *current; > + void *texture_memory; > HRESULT hr; > > TRACE("iface %p, src %p, flags %#x.\n", iface, src, flags); > @@ -1347,6 +1348,10 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Flip(IDirectDrawSurface7 > wined3d_texture_set_sub_resource_parent(src_impl->wined3d_texture, 0, dst_impl); > prev_ddraw_texture = wined3d_texture_get_parent(src_impl->wined3d_texture); > wined3d_resource_set_parent(wined3d_texture_get_resource(src_impl->wined3d_texture), ddraw_texture); > + texture_memory = ddraw_texture->texture_memory; > + ddraw_texture->texture_memory = prev_ddraw_texture->texture_memory; > + prev_ddraw_texture->texture_memory = texture_memory; > + > if (src_impl->sub_resource_idx) > ERR("Invalid sub-resource index %u on surface %p.\n", src_impl->sub_resource_idx, src_impl); > dst_impl->wined3d_texture = src_impl->wined3d_texture; > @@ -1378,6 +1383,10 @@ static HRESULT WINAPI DECLSPEC_HOTPATCH ddraw_surface7_Flip(IDirectDrawSurface7 > wined3d_texture_set_sub_resource_parent(src_impl->wined3d_texture, 0, dst_impl); > prev_ddraw_texture = wined3d_texture_get_parent(src_impl->wined3d_texture); > wined3d_resource_set_parent(wined3d_texture_get_resource(src_impl->wined3d_texture), ddraw_texture); > + texture_memory = ddraw_texture->texture_memory; > + ddraw_texture->texture_memory = prev_ddraw_texture->texture_memory; > + prev_ddraw_texture->texture_memory = texture_memory; > + > ddraw_texture = prev_ddraw_texture; > if (src_impl->sub_resource_idx) > ERR("Invalid sub-resource index %u on surface %p.\n", src_impl->sub_resource_idx, src_impl); > I think that works, but it doesn't make the code any easier to follow. I'd prefer for this to use the same update scheme we use for the "wined3d_texture" and "wined3d_rtv" fields.