[PATCH 1/1] wined3d: Don't do a full cleanup when waiting for a command buffer.

Henri Verbeet hverbeet at gmail.com
Fri May 13 11:02:51 CDT 2022


On Wed, 4 May 2022 at 15:36, Jan Sikorski <wine at gitlab.winehq.org> wrote:
> @@ -1838,10 +1846,17 @@ void wined3d_context_vk_wait_command_buffer(struct wined3d_context_vk *context_v
>          if (context_vk->submitted.buffers[i].id != id)
>              continue;
>
> -        VK_CALL(vkWaitForFences(device_vk->vk_device, 1,
> -                &context_vk->submitted.buffers[i].vk_fence, VK_TRUE, UINT64_MAX));
> -        wined3d_context_vk_cleanup_resources(context_vk);
> -        return;
> +        vk_fence = context_vk->submitted.buffers[i].vk_fence;
> +        wined3d_context_vk_cleanup_resources(context_vk, vk_fence);
> +        for (i = 0; i < context_vk->submitted.buffer_count; ++i)
> +        {
> +            if (context_vk->submitted.buffers[i].id != id)
> +                continue;
> +
> +            VK_CALL(vkWaitForFences(device_vk->vk_device, 1, &vk_fence, VK_TRUE, UINT64_MAX));
> +            wined3d_context_vk_remove_command_buffer(context_vk, i);
> +            return;
> +        }
>      }

I suppose that works, although I think the double loop look a little
awkward. It might be worth introducing a helper to lookup a command
buffer by ID to avoid that at some point.



More information about the wine-devel mailing list