[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