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 <ajax@redhat.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10689>
This commit is contained in:
Erik Faye-Lund 2021-05-10 15:31:18 +02:00 committed by Marge Bot
parent deb7fa10a2
commit 9618d5700c

View file

@ -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);