+bool
+vk_create_fences(struct vk_ctx *ctx,
+ int num_cmd_buf,
+ VkFenceCreateFlagBits flags,
+ VkFence *fences)
+{
+ VkFenceCreateInfo f_info;
+ int i, j = -1;
+
+ memset(&f_info, 0, sizeof f_info);
+ f_info.sType = VK_STRUCTURE_TYPE_FENCE_CREATE_INFO;
+ f_info.flags = flags ? flags : VK_FENCE_CREATE_SIGNALED_BIT;
+
+
+ fences = malloc(num_cmd_buf * sizeof(VkFence));
+ for (i = 0; i < num_cmd_buf; i++) {
+ if (vkCreateFence(ctx->dev, &f_info, 0, &fences[i]) != VK_SUCCESS) {
+ fprintf(stderr, "Failed to create fence number: %d\n", (i + 1));
+ j = i;
+ break;
+ }
+ }
+
+ if (j == i) {
+ for (i = 0; i < j; i++) {
+ vkDestroyFence(ctx->dev, fences[i], 0);
+ }
+ return false;
+ }
+
+ return true;
+}
+
+void
+vk_destroy_fences(struct vk_ctx *ctx,
+ int num_fences,
+ VkFence *fences)
+{
+ int i;
+ for (i = 0; i < num_fences; i++) {
+ vkDestroyFence(ctx->dev, fences[i], 0);
+ }
+}
+