#ifndef __QF_Vulkan_resource_h #define __QF_Vulkan_resource_h #ifndef VK_NO_PROTOTYPES #define VK_NO_PROTOTYPES #endif #include typedef enum { qfv_res_buffer = 1, qfv_res_buffer_view, qfv_res_image, qfv_res_image_view, } qfv_res_type; typedef struct qfv_resobj_s { const char *name; qfv_res_type type; union { struct { VkDeviceSize size; VkBufferUsageFlags usage; VkBuffer buffer; VkDeviceSize offset; } buffer; struct { unsigned buffer; VkFormat format; VkDeviceSize offset; VkDeviceSize size; VkBufferView view; } buffer_view; struct { VkImageCreateFlags flags; VkImageType type; VkFormat format; VkExtent3D extent; uint32_t num_mipmaps; uint32_t num_layers; VkSampleCountFlags samples; VkImageTiling tiling; VkImageUsageFlags usage; VkSharingMode sharing; uint32_t num_queue_inds; const uint32_t *queue_inds; VkImageLayout initialLayout; VkImage image; VkDeviceSize offset; } image; struct { unsigned image; VkImage external_image; VkImageViewCreateFlags flags; VkImageViewType type; VkFormat format; VkComponentMapping components; VkImageSubresourceRange subresourceRange; VkImageView view; } image_view; }; } qfv_resobj_t; typedef struct qfv_resource_s { const char *name; struct va_ctx_s *va_ctx; VkMemoryPropertyFlags memory_properties; unsigned num_objects; qfv_resobj_t *objects; VkDeviceMemory memory; VkDeviceSize size; } qfv_resource_t; struct qfv_device_s; int QFV_CreateResource (struct qfv_device_s *device, qfv_resource_t *resource); void QFV_DestroyResource (struct qfv_device_s *device, qfv_resource_t *resource); struct tex_s; void QFV_ResourceInitTexImage (qfv_resobj_t *image, const char *name, int mips, const struct tex_s *tex); #endif//__QF_Vulkan_resource_h