mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2024-11-23 21:02:50 +00:00
98 lines
3.4 KiB
C
98 lines
3.4 KiB
C
#ifndef __QF_Vulkan_image_h
|
|
#define __QF_Vulkan_image_h
|
|
|
|
#include "QF/darray.h"
|
|
|
|
typedef struct qfv_imageset_s
|
|
DARRAY_TYPE (VkImage) qfv_imageset_t;
|
|
|
|
#define QFV_AllocImages(num, allocator) \
|
|
DARRAY_ALLOCFIXED (qfv_imageset_t, num, allocator)
|
|
|
|
typedef struct qfv_imageviewset_s
|
|
DARRAY_TYPE (VkImageView) qfv_imageviewset_t;
|
|
|
|
#define QFV_AllocImageViews(num, allocator) \
|
|
DARRAY_ALLOCFIXED (qfv_imageviewset_t, num, allocator)
|
|
|
|
typedef struct qfv_imageresource_s {
|
|
struct qfv_device_s *device;
|
|
VkImage image;
|
|
VkDeviceMemory object;
|
|
VkImageView view;
|
|
} qfv_imageresource_t;
|
|
|
|
typedef struct qfv_imagetransition_s {
|
|
VkImage image;
|
|
VkAccessFlags srcAccess;
|
|
VkAccessFlags dstAccess;
|
|
VkImageLayout oldLayout;
|
|
VkImageLayout newLayout;
|
|
uint32_t srcQueueFamily;
|
|
uint32_t dstQueueFamily;
|
|
VkImageAspectFlags aspect;
|
|
} qfv_imagetransition_t;
|
|
|
|
typedef struct qfv_imagetransitionset_s
|
|
DARRAY_TYPE (qfv_imagetransition_t) qfv_imagetransitionset_t;
|
|
typedef struct qfv_imagebarrierset_s
|
|
DARRAY_TYPE (VkImageMemoryBarrier) qfv_imagebarrierset_t;
|
|
#define QFV_AllocImageBarrierSet(num, allocator) \
|
|
DARRAY_ALLOCFIXED (qfv_imagebarrierset_t, num, allocator)
|
|
|
|
struct qfv_device_s;
|
|
VkImage QFV_CreateImage (struct qfv_device_s *device, int cubemap,
|
|
VkImageType type,
|
|
VkFormat format,
|
|
VkExtent3D size,
|
|
uint32_t num_mipmaps,
|
|
uint32_t num_layers,
|
|
VkSampleCountFlags samples,
|
|
VkImageUsageFlags usage_scenarios);
|
|
|
|
VkDeviceMemory QFV_AllocImageMemory (struct qfv_device_s *device,
|
|
VkImage image,
|
|
VkMemoryPropertyFlags properties,
|
|
VkDeviceSize size, VkDeviceSize offset);
|
|
|
|
int QFV_BindImageMemory (struct qfv_device_s *device, VkImage image,
|
|
VkDeviceMemory object, VkDeviceSize offset);
|
|
|
|
qfv_imagebarrierset_t *
|
|
QFV_CreateImageTransitionSet (qfv_imagetransition_t *transitions,
|
|
int numTransitions);
|
|
|
|
VkImageView QFV_CreateImageView (struct qfv_device_s *device,
|
|
VkImage image, VkImageViewType type,
|
|
VkFormat format, VkImageAspectFlags aspect);
|
|
|
|
size_t QFV_GetImageSize (struct qfv_device_s *device, VkImage image);
|
|
|
|
/** Generate all mipmaps for a given texture down to a 1x1 pixel.
|
|
*
|
|
* Uses the GPU blit command from one mip level to the next, thus the base mip
|
|
* level data must have already been transfered to the image and the image is
|
|
* expected to be in VK_IMAGE_LAYOUT_TRANSFER_DST_OPTIMAL. This includes any
|
|
* array levels.
|
|
*
|
|
* \param device The device owning the command buffer.
|
|
* \param cmd The command buffer to which the barrier and blit commands
|
|
* will be written.
|
|
* \param image The image to be processed. All array layers of the base mip
|
|
* level must be initialized and in "transfer dst optimal"
|
|
* layout. All remaining mip levels must be in "undefined"
|
|
* oayout.
|
|
* \param mips The total number of mip levels of the processed image.
|
|
* \param width The pixel width of the base image.
|
|
* \param height The pixel height of the base image.
|
|
* \param layers The number of array layers in the base image.
|
|
*
|
|
* \note The processed image will be in "shader read only optimal" layout on
|
|
* completion.
|
|
*/
|
|
void QFV_GenerateMipMaps (struct qfv_device_s *device, VkCommandBuffer cmd,
|
|
VkImage image, unsigned mips,
|
|
unsigned width, unsigned height, unsigned layers);
|
|
int QFV_MipLevels (int width, int height) __attribute__((const));
|
|
|
|
#endif//__QF_Vulkan_image_h
|