[PATCH] ddraw: Update texture_memory when setting new texture parent in ddraw_surface7_Flip().
Henri Verbeet
hverbeet at gmail.com
Tue Jun 16 10:29:02 CDT 2020
On Tue, 16 Jun 2020 at 16:24, Paul Gofman <pgofman at codeweavers.com> 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.
More information about the wine-devel
mailing list