[PATCH v4 6/6] wined3d: Try to allocate new Vulkan BOs from the client thread for DISCARD maps.

Henri Verbeet hverbeet at gmail.com
Tue Nov 9 10:44:08 CST 2021


On Mon, 8 Nov 2021 at 23:50, Zebediah Figura <zfigura at codeweavers.com> wrote:
> +static void wined3d_buffer_set_bo(struct wined3d_buffer *buffer, struct wined3d_context *context, struct wined3d_bo *bo)
> +{
> +    struct wined3d_bo *prev_bo = buffer->buffer_object;
> +
> +    TRACE("buffer %p, context %p, bo %p.\n", buffer, context, bo);
> +
> +    if (prev_bo)
> +    {
> +        struct wined3d_bo_user *bo_user;
> +
> +        LIST_FOR_EACH_ENTRY(bo_user, &prev_bo->users, struct wined3d_bo_user, entry)
> +            bo_user->valid = false;
> +        assert(list_empty(&bo->users));
> +        list_move_head(&bo->users, &prev_bo->users);
> +
> +        wined3d_context_destroy_bo(context, prev_bo);
> +        heap_free(prev_bo);
> +    }
> +    else
> +    {
> +        list_add_head(&bo->users, &buffer->bo_user.entry);
> +    }
> +
> +    buffer->buffer_object = bo;
> +    wined3d_buffer_validate_location(buffer, WINED3D_LOCATION_BUFFER);
> +    wined3d_buffer_invalidate_location(buffer, ~WINED3D_LOCATION_BUFFER);
> +}
> +
The location management could now be in wined3d_buffer_update_sub_resource().



More information about the wine-devel mailing list