59 lines
1.4 KiB
C
59 lines
1.4 KiB
C
#pragma once
|
||
#include "vk_core.h"
|
||
#include "vk_devmem.h"
|
||
|
||
typedef struct r_vk_image_s {
|
||
vk_devmem_t devmem;
|
||
VkImage image;
|
||
VkImageView view;
|
||
|
||
// Optional, created by kVkImageFlagCreateUnormView
|
||
// Used for sRGB-γ-unaware traditional renderer
|
||
VkImageView view_unorm;
|
||
|
||
uint32_t width, height, depth;
|
||
int mips, layers;
|
||
VkFormat format;
|
||
uint32_t flags;
|
||
} r_vk_image_t;
|
||
|
||
enum {
|
||
kVkImageFlagIgnoreAlpha = (1<<0),
|
||
kVkImageFlagIsCubemap = (1<<1),
|
||
kVkImageFlagCreateUnormView = (1<<2),
|
||
};
|
||
|
||
typedef struct {
|
||
const char *debug_name;
|
||
uint32_t width, height, depth;
|
||
int mips, layers;
|
||
VkFormat format;
|
||
VkImageTiling tiling;
|
||
VkImageUsageFlags usage;
|
||
VkMemoryPropertyFlags memory_props;
|
||
uint32_t flags;
|
||
} r_vk_image_create_t;
|
||
|
||
r_vk_image_t R_VkImageCreate(const r_vk_image_create_t *create);
|
||
void R_VkImageDestroy(r_vk_image_t *img);
|
||
|
||
void R_VkImageClear(VkCommandBuffer cmdbuf, VkImage image);
|
||
|
||
typedef struct {
|
||
VkPipelineStageFlags in_stage;
|
||
struct {
|
||
VkImage image;
|
||
int width, height;
|
||
VkImageLayout oldLayout;
|
||
VkAccessFlags srcAccessMask;
|
||
} src, dst;
|
||
} r_vkimage_blit_args;
|
||
|
||
void R_VkImageBlit( VkCommandBuffer cmdbuf, const r_vkimage_blit_args *blit_args );
|
||
|
||
uint32_t R_VkImageFormatTexelBlockSize( VkFormat format );
|
||
|
||
void R_VkImageUploadBegin( r_vk_image_t *img );
|
||
void R_VkImageUploadSlice( r_vk_image_t *img, int layer, int mip, int size, const void *data );
|
||
void R_VkImageUploadEnd( r_vk_image_t *img );
|