From 9618d5700c5bd46dad78ba46d5f4384e29e21219 Mon Sep 17 00:00:00 2001 From: Erik Faye-Lund Date: Mon, 10 May 2021 15:31:18 +0200 Subject: [PATCH] zink: check for error when binding memory If binding fails, we don't really have a valid image. So let's make sure we free up the memory sooner rather than later. Reviewed-by: Adam Jackson Part-of: --- src/gallium/drivers/zink/zink_resource.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/gallium/drivers/zink/zink_resource.c b/src/gallium/drivers/zink/zink_resource.c index 80908a2b195..d0d9df53eb4 100644 --- a/src/gallium/drivers/zink/zink_resource.c +++ b/src/gallium/drivers/zink/zink_resource.c @@ -538,11 +538,17 @@ resource_object_create(struct zink_screen *screen, const struct pipe_resource *t if (templ->target == PIPE_BUFFER) { if (!(templ->flags & PIPE_RESOURCE_FLAG_SPARSE)) - vkBindBufferMemory(screen->dev, obj->buffer, obj->mem, obj->offset); - } else - vkBindImageMemory(screen->dev, obj->image, obj->mem, obj->offset); + if (vkBindBufferMemory(screen->dev, obj->buffer, obj->mem, obj->offset) != VK_SUCCESS) + goto fail3; + } else { + if (vkBindImageMemory(screen->dev, obj->image, obj->mem, obj->offset) != VK_SUCCESS) + goto fail3; + } return obj; +fail3: + vkFreeMemory(screen->dev, obj->mem, NULL); + fail2: if (templ->target == PIPE_BUFFER) vkDestroyBuffer(screen->dev, obj->buffer, NULL);