Module: vkd3d Branch: master Commit: c9aea8993fc02a677cb8f2d30741d10f6e9c2b49 URL: https://source.winehq.org/git/vkd3d.git/?a=commit;h=c9aea8993fc02a677cb8f2d3...
Author: Conor McCarthy cmccarthy@codeweavers.com Date: Mon Feb 14 15:58:22 2022 +1000
vkd3d: Lock the heap mutex while binding heap memory.
Signed-off-by: Conor McCarthy cmccarthy@codeweavers.com Signed-off-by: Henri Verbeet hverbeet@codeweavers.com Signed-off-by: Alexandre Julliard julliard@winehq.org
---
libs/vkd3d/resource.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/libs/vkd3d/resource.c b/libs/vkd3d/resource.c index 7b94ac9..4c48e22 100644 --- a/libs/vkd3d/resource.c +++ b/libs/vkd3d/resource.c @@ -1941,11 +1941,17 @@ static HRESULT vkd3d_bind_heap_memory(struct d3d12_device *device, goto allocate_memory; }
+ /* Syncronisation is not required for binding, but vkMapMemory() may be called + * from another thread and it requires exclusive access. */ + vkd3d_mutex_lock(&heap->mutex); + if (d3d12_resource_is_buffer(resource)) vr = VK_CALL(vkBindBufferMemory(vk_device, resource->u.vk_buffer, heap->vk_memory, heap_offset)); else vr = VK_CALL(vkBindImageMemory(vk_device, resource->u.vk_image, heap->vk_memory, heap_offset));
+ vkd3d_mutex_unlock(&heap->mutex); + if (vr == VK_SUCCESS) { resource->heap = heap;