···11+// Copyright 2019-2023, Collabora, Ltd.
22+// SPDX-License-Identifier: BSL-1.0
33+/*!
44+ * @file
55+ * @brief Super small defines that makes writing Vulkan code smaller.
66+ * @author Jakob Bornecrantz <jakob@collabora.com>
77+ * @ingroup aux_vk
88+ */
99+1010+#pragma once
1111+1212+#include "vk/vk_helpers.h"
1313+1414+1515+/*!
1616+ * Calls `vkDestroy##TYPE` on @p THING if it is not @p VK_NULL_HANDLE, sets it
1717+ * to @p VK_NULL_HANDLE afterwards. The implicit argument @p vk will be used to
1818+ * look up the function, and @p vk->device will be used as the device.
1919+ *
2020+ * @param TYPE The type of the thing to be destroyed.
2121+ * @param THING Object to be destroyed.
2222+ *
2323+ * @ingroup aux_vk
2424+ */
2525+#define D(TYPE, THING) \
2626+ if (THING != VK_NULL_HANDLE) { \
2727+ vk->vkDestroy##TYPE(vk->device, THING, NULL); \
2828+ THING = VK_NULL_HANDLE; \
2929+ }
3030+3131+/*!
3232+ * Calls `vkFree##TYPE` on @p THING` if it is not @p VK_NULL_HANDLE, sets it to
3333+ * @p VK_NULL_HANDLE afterwards. The implicit argument @p vk will be used to
3434+ * look up the function, and @p vk->device will be used as the device.
3535+ *
3636+ * @param TYPE The type of the thing to be freed.
3737+ * @param THING Object to be freed.
3838+ *
3939+ * @ingroup aux_vk
4040+ */
4141+#define DF(TYPE, THING) \
4242+ if (THING != VK_NULL_HANDLE) { \
4343+ vk->vkFree##TYPE(vk->device, THING, NULL); \
4444+ THING = VK_NULL_HANDLE; \
4545+ }