vulkan : improve ggml_vk_create_buffer error handling

This commit is contained in:
Shupei Fan 2024-10-15 19:31:26 +08:00
parent 4c42f93b22
commit 6a308cbc06

View file

@ -1035,7 +1035,6 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor
return buf; return buf;
} }
buf->size = size;
vk::BufferCreateInfo buffer_create_info{ vk::BufferCreateInfo buffer_create_info{
vk::BufferCreateFlags(), vk::BufferCreateFlags(),
size, size,
@ -1063,7 +1062,6 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor
if (memory_type_index == UINT32_MAX) { if (memory_type_index == UINT32_MAX) {
device->device.destroyBuffer(buf->buffer); device->device.destroyBuffer(buf->buffer);
buf->size = 0;
throw vk::OutOfDeviceMemoryError("No suitable memory type found"); throw vk::OutOfDeviceMemoryError("No suitable memory type found");
} }
@ -1080,13 +1078,11 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor
} }
catch (const vk::SystemError& e) { catch (const vk::SystemError& e) {
device->device.destroyBuffer(buf->buffer); device->device.destroyBuffer(buf->buffer);
buf->size = 0;
throw e; throw e;
} }
} else { } else {
// Out of Host/Device memory, clean up buffer // Out of Host/Device memory, clean up buffer
device->device.destroyBuffer(buf->buffer); device->device.destroyBuffer(buf->buffer);
buf->size = 0;
throw e; throw e;
} }
} }
@ -1099,6 +1095,7 @@ static vk_buffer ggml_vk_create_buffer(vk_device& device, size_t size, vk::Memor
device->device.bindBufferMemory(buf->buffer, buf->device_memory, 0); device->device.bindBufferMemory(buf->buffer, buf->device_memory, 0);
buf->device = device; buf->device = device;
buf->size = size;
#ifdef GGML_VULKAN_MEMORY_DEBUG #ifdef GGML_VULKAN_MEMORY_DEBUG
device->memory_logger->log_allocation(buf, size); device->memory_logger->log_allocation(buf, size);