do not edit — generated by btf.
git.druid.rocksindexmilitantprogrammerastral_canvassrc/render/vk.h

src/render/vk.h


#ifndef VK_H
#define VK_H
 
#include "../platform/platform.h"
 
#include <stdbool.h>
#include <stdint.h>
#include <stdio.h>
#include <vulkan/vulkan.h>
 
#define VK_TRY(expr) \
    do { \
        VkResult vulkanResult = (expr); \
        if (vulkanResult != VK_SUCCESS) { \
            fprintf(stderr, "vulkan: %s failed (%d)\n", #expr, (int)vulkanResult); \
            return -1; \
        } \
    } while (0)
 
enum { VK_MAX_FRAMES = 2 };
enum { VK_MAX_SWAPCHAIN_IMAGES = 8 };
 
/*
 * Per in-flight frame's command buffer and GPU/CPU sync. Rendering
 * resources (uniforms, glyphs, descriptors) live on Renderer, not here.
 */
typedef struct {
    VkCommandBuffer commandBuffer;
    VkSemaphore imageAvailable;
    VkSemaphore renderFinished;
    VkFence inFlight;
} VkFrame;
 
/*
 * Vulkan device and swapchain. Created against the existing X11 or Wayland
 * window via Platform.createVulkanSurface. Does not draw; that is render.c.
 *
 * Destroy with vk_destroy() *before* platformClose().
 */
typedef struct {
    VkInstance instance;
    VkDebugUtilsMessengerEXT debug;
    PFN_vkDestroyDebugUtilsMessengerEXT destroyDebug;
 
    VkSurfaceKHR surface;
    VkPhysicalDevice physicalDevice;
    VkDevice device;
    uint32_t graphicsFamily;
    uint32_t presentFamily;
    VkQueue graphicsQueue;
    VkQueue presentQueue;
 
    VkSwapchainKHR swapchain;
    VkFormat swapchainFormat;
    VkExtent2D extent;
    uint32_t swapchainImageCount;
    VkImage swapchainImages[VK_MAX_SWAPCHAIN_IMAGES];
    VkImageView swapchainViews[VK_MAX_SWAPCHAIN_IMAGES];
    VkFramebuffer swapchainFramebuffers[VK_MAX_SWAPCHAIN_IMAGES];
    VkFence swapchainBusyFences[VK_MAX_SWAPCHAIN_IMAGES];
 
    VkRenderPass renderPass;
    VkCommandPool commandPool;
    VkFrame frames[VK_MAX_FRAMES];
    uint32_t frameIndex;
 
    bool ready;
} VkContext;
 
int vk_init(VkContext *vulkan, Platform *platform);
int vk_recreate_swapchain(VkContext *vulkan, Platform *platform);
void vk_destroy(VkContext *vulkan);
 
int vk_find_memory_type(VkPhysicalDevice physicalDevice, uint32_t filter,
                        VkMemoryPropertyFlags properties);
int vk_create_host_buffer(VkContext *vulkan, VkDeviceSize size, VkBufferUsageFlags usage,
                          VkBuffer *buffer, VkDeviceMemory *memory, void **mapped);
void vk_image_barrier(VkCommandBuffer commandBuffer, VkImage image,
                      VkImageLayout oldLayout, VkImageLayout newLayout,
                      VkAccessFlags sourceAccess, VkAccessFlags destinationAccess,
                      VkPipelineStageFlags sourceStage, VkPipelineStageFlags destinationStage);
 
#endif
powered by btf.