From: Paul Gofman pgofman@codeweavers.com
--- dlls/winevulkan/loader.c | 2 ++ dlls/winevulkan/vulkan.c | 6 ++++-- 2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/dlls/winevulkan/loader.c b/dlls/winevulkan/loader.c index 644e0982e7a..79bbe8a2758 100644 --- a/dlls/winevulkan/loader.c +++ b/dlls/winevulkan/loader.c @@ -697,6 +697,8 @@ void WINAPI vkFreeCommandBuffers(VkDevice device, VkCommandPool cmd_pool, uint32 assert(!status); for (i = 0; i < count; i++) { + if (!buffers[i]) + continue; list_remove(&buffers[i]->pool_link); free(buffers[i]); } diff --git a/dlls/winevulkan/vulkan.c b/dlls/winevulkan/vulkan.c index ac93931092b..26d3a4b0c10 100644 --- a/dlls/winevulkan/vulkan.c +++ b/dlls/winevulkan/vulkan.c @@ -470,12 +470,14 @@ static void wine_vk_free_command_buffers(struct vulkan_device *device, struct wine_cmd_pool *pool, uint32_t count, const VkCommandBuffer *buffers) { struct vulkan_instance *instance = device->physical_device->instance; + struct wine_cmd_buffer *buffer; unsigned int i;
for (i = 0; i < count; i++) { - struct wine_cmd_buffer *buffer = wine_cmd_buffer_from_handle(buffers[i]); - + if (!buffers[i]) + continue; + buffer = wine_cmd_buffer_from_handle(buffers[i]); if (!buffer) continue;
From Vulkan spec: ``` VUID-vkFreeCommandBuffers-pCommandBuffers-00048 pCommandBuffers must be a valid pointer to an array of commandBufferCount VkCommandBuffer handles, each element of which must either be a valid handle or NULL ```
So NULL elements of buffers array are allowed and should be handled.