vk_conversion.h

cross platform rendering playground

src/backend/vulkan/vk_conversion.h

2.03 KB
#pragma once

#include <volk.h>

#include <array>
#include <cassert>
#include <cstdint>
#include <type_traits>

#include "backend/rhi_types.h"

namespace rhi {
struct Device;
} // namespace rhi

namespace vk {
using namespace rhi;

VkFormat image_format_to_vk(ImageFormat format);
ImageFormat image_format_from_vk(VkFormat format);
VkImageViewType image_view_type_to_vk(TextureViewDimension type);
VkComponentSwizzle component_swizzle_to_vk(ComponentSwizzle swizzle);

VkImageUsageFlags image_usage_to_vk(Device &device, ImageDesc const &desc);
VkImageAspectFlags image_aspect_to_vk(ImageAspect aspect);
VkImageAspectFlags image_aspect_bit_to_vk(ImageAspect flag);

VkSamplerAddressMode sampler_address_to_vk(SamplerAddressMode mode);
VkFilter sampler_filter_to_vk(SamplerFilter filter);
VkCompareOp sampler_comparison_to_vk(SamplerComparisonFunc func);

VkPrimitiveTopology pipeline_topology_to_vk(rhi::PipelineTopology topology);
VkPolygonMode pipeline_fill_mode_to_vk(rhi::PipelineFillMode fill_mode);
VkCullModeFlags pipeline_cull_mode_to_vk(rhi::PipelineCullMode cull_mode);
VkFrontFace triangle_winding_to_vk(rhi::PipelineTriangleWindingOrder winding);
VkCompareOp pipeline_compare_op_to_vk(rhi::PipelineCompareOp compare_op);
VkShaderStageFlags shader_stage_to_vk(rhi::ShaderStage stages);
VkBlendFactor pipeline_blend_factor_to_vk(rhi::PipelineBlendFactor factor);
VkBlendOp pipeline_blend_op_to_vk(rhi::PipelineBlendOp op);
VkSampleCountFlagBits sample_count_to_vk(rhi::SampleCount samples);

VkCommandPoolCreateFlags to_vk_cmd_pool_flags(CmdPoolUsage flags);
VkCommandBufferLevel to_vk_cmd_buffer_level(CmdBufferLevel level);
VkCommandBufferUsageFlags to_vk_cmd_buffer_usage_flags(CmdBufferUsage flags);

VkPipelineStageFlags2 pipeline_stage_flags_to_vk(PipelineStages stages);

struct StateSync {
    VkPipelineStageFlags2 stages = 0;
    VkAccessFlags2 access = 0;
    VkImageLayout layout = VK_IMAGE_LAYOUT_UNDEFINED;
};
StateSync image_state_to_vk(ResourceState state, ImageAspect aspect);
StateSync buffer_state_to_vk(ResourceState state);

} // namespace vk