[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