[PATCH v4 3/4] wined3d: Handle typeless resolve in the Vulkan blitter.

Henri Verbeet hverbeet at gmail.com
Fri Apr 9 07:57:25 CDT 2021


On Tue, 6 Apr 2021 at 17:44, Jan Sikorski <jsikorski at codeweavers.com> wrote:
> ---
>  dlls/wined3d/texture.c | 214 ++++++++++++++++++++++++++++++++++++-----
>  1 file changed, 190 insertions(+), 24 deletions(-)
>
I think these are generally fine, just a couple of small comments:

> @@ -6499,30 +6504,191 @@ static DWORD vk_blitter_blit(struct wined3d_blitter *blitter, enum wined3d_blit_
>              dst_texture_vk->layout, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL,
>              dst_texture_vk->image.vk_image, &vk_dst_range);
>
> +
>      if (resolve)
Superfluous whitespace.

> +        const struct wined3d_format_vk *src_format_vk = wined3d_format_vk(src_texture->resource.format);
> +        const struct wined3d_format_vk *dst_format_vk = wined3d_format_vk(dst_texture->resource.format);
> +        const unsigned int usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT
> +                | VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
> +        const struct wined3d_format_vk *resolve_format_vk = NULL;
> +        VkImage src_vk_image, dst_vk_image;
> +        VkImageSubresourceRange vk_range;
> +        VkImageResolve resolve_region;
> +        VkImageType vk_image_type;
> +        VkImageCopy copy_region;
> +        VkFormat vk_format;
...
> +        resolve_format_vk = wined3d_format_vk(resolve_format);
>
> -        VK_CALL(vkCmdResolveImage(vk_command_buffer, src_texture_vk->image.vk_image, VK_IMAGE_LAYOUT_TRANSFER_SRC_OPTIMAL,
> -                dst_texture_vk->image.vk_image, VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL, 1, &region));
> +        vk_format = resolve_format_vk->vk_format;
> +
"resolve_format" may be NULL, right?

> +        switch (src_texture->resource.type)
> +        {
> +            case WINED3D_RTYPE_TEXTURE_1D:
> +                vk_image_type = VK_IMAGE_TYPE_1D;
> +                break;
> +            case WINED3D_RTYPE_TEXTURE_2D:
> +                vk_image_type = VK_IMAGE_TYPE_2D;
> +                break;
> +            case WINED3D_RTYPE_TEXTURE_3D:
> +                vk_image_type = VK_IMAGE_TYPE_3D;
> +                break;
> +            default:
> +                ERR("Unexpected resource type: %s\n", debug_d3dresourcetype(src_texture->resource.type));
> +                goto next;
> +        }
The "goto next;" above leaves the source texture in the
TRANSFER_SRC_OPTIMAL layout, and the destination texture in the
TRANSFER_DST_OPTIMAL layout.

> +            if (!wined3d_context_vk_create_image(context_vk, vk_image_type, usage, vk_format,
> +                    resolve_region.extent.width, resolve_region.extent.height, 1,
> +                    src_sample_count, 1, 1, 0, &src_image))
> +                goto next;
Likewise.

> +            if (!wined3d_context_vk_create_image(context_vk, vk_image_type, usage, vk_format,
> +                    resolve_region.extent.width, resolve_region.extent.height, 1,
> +                    VK_SAMPLE_COUNT_1_BIT, 1, 1, 0, &dst_image))
> +                goto next;
Likewise.



More information about the wine-devel mailing list