Orange/include/Orange/Render/VulkanHelpers.h

44 lines
1.1 KiB
C++

#pragma once
#include <Orange/Core/Traits.h>
#include <vulkan/vulkan_core.h>
namespace orange
{
template <typename Func, typename OutArray, typename... Args>
uint32_t VkEnumerate(Func function, OutArray& outArray, Args&&... arguments)
{
uint32_t count = 0;
function(arguments..., &count, nullptr);
outArray.Resize(count);
if (!count)
return 0;
function(Forward<Args>(arguments)..., &count, outArray.Data());
return count;
}
static constexpr VkImageSubresourceRange FirstMipSubresourceRange =
{
.aspectMask = VK_IMAGE_ASPECT_COLOR_BIT,
.baseMipLevel = 0,
.levelCount = 1,
.baseArrayLayer = 0,
.layerCount = 1,
};
constexpr VkFormat FormatToSrgbFormat(VkFormat format)
{
switch (format)
{
case VK_FORMAT_R8G8B8A8_UNORM:
return VK_FORMAT_R8G8B8A8_SRGB;
case VK_FORMAT_B8G8R8A8_UNORM:
return VK_FORMAT_B8G8R8A8_SRGB;
default:
return format;
}
}
}