quakeforge/include/QF/Vulkan/resource.h

83 lines
1.9 KiB
C
Raw Normal View History

#ifndef __QF_Vulkan_resource_h
#define __QF_Vulkan_resource_h
#ifndef VK_NO_PROTOTYPES
#define VK_NO_PROTOTYPES
#endif
#include <vulkan/vulkan.h>
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