[PATCH v2 0/2] MR7313: wined3d: Fix blitting from CLEARED in the Vulkan renderer.
This broke after d58e917e2cb36c6ffcb259356c06171d8f6d4dcc in some situations, since it resulted in us calling wined3d_texture_download_from_texture() with CLEARED location. The latter was not aware of CLEARED and incorrectly assumed the source texture was in TEXTURE_SRGB. -- v2: wined3d: Explicitly check for BUFFER/SYSMEM before calling wined3d_texture_download_from_texture(). wined3d: Propagate a CLEARED location when blitting. https://gitlab.winehq.org/wine/wine/-/merge_requests/7313
From: Elizabeth Figura <zfigura(a)codeweavers.com> Fixes: d58e917e2cb36c6ffcb259356c06171d8f6d4dcc --- dlls/wined3d/surface.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 4ad1e65fafb..21a7aa48f65 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1498,6 +1498,15 @@ HRESULT texture2d_blt(struct wined3d_texture *dst_texture, unsigned int dst_sub_ { blit_op = WINED3D_BLIT_OP_COLOR_BLIT_ALPHATEST; } + else if ((src_sub_resource->locations & WINED3D_LOCATION_CLEARED) + && wined3d_texture_is_full_rect(dst_texture, dst_sub_resource_idx % dst_texture->level_count, &dst_rect)) + { + TRACE("Source is cleared.\n"); + wined3d_texture_validate_location(dst_texture, dst_sub_resource_idx, WINED3D_LOCATION_CLEARED); + wined3d_texture_invalidate_location(dst_texture, dst_sub_resource_idx, ~WINED3D_LOCATION_CLEARED); + dst_sub_resource->clear_value.colour = src_sub_resource->clear_value.colour; + return WINED3D_OK; + } else if (sub_resource_is_on_cpu(src_texture, src_sub_resource_idx) && !sub_resource_is_on_cpu(dst_texture, dst_sub_resource_idx) && (dst_texture->resource.access & WINED3D_RESOURCE_ACCESS_GPU)) -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/7313
From: Elizabeth Figura <zfigura(a)codeweavers.com> Do not consider cleared textures here; wined3d_texture_download_from_texture() cannot handle them. Fixes: d58e917e2cb36c6ffcb259356c06171d8f6d4dcc --- dlls/wined3d/surface.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dlls/wined3d/surface.c b/dlls/wined3d/surface.c index 21a7aa48f65..14cfebd7074 100644 --- a/dlls/wined3d/surface.c +++ b/dlls/wined3d/surface.c @@ -1532,7 +1532,7 @@ HRESULT texture2d_blt(struct wined3d_texture *dst_texture, unsigned int dst_sub_ return WINED3D_OK; } } - else if (!sub_resource_is_on_cpu(src_texture, src_sub_resource_idx) + else if (!(src_sub_resource->locations & (WINED3D_LOCATION_BUFFER | WINED3D_LOCATION_SYSMEM)) && !(dst_texture->resource.access & WINED3D_RESOURCE_ACCESS_GPU)) { /* Download */ -- GitLab https://gitlab.winehq.org/wine/wine/-/merge_requests/7313
This merge request was approved by Jan Sikorski. -- https://gitlab.winehq.org/wine/wine/-/merge_requests/7313
participants (3)
-
Elizabeth Figura -
Elizabeth Figura (@zfigura) -
Jan Sikorski (@jsikorski)