Renderer: Handle more depthstencil formats (as Depth24Stencil8 may not be supported everywhere)

This commit is contained in:
Jérôme Leclercq
2021-06-02 20:16:43 +02:00
parent 9ee3a0d6be
commit 6161bbec76
17 changed files with 294 additions and 102 deletions

View File

@@ -83,4 +83,35 @@ namespace Nz
{
return std::make_shared<VulkanTextureSampler>(*this, params);
}
bool VulkanDevice::IsTextureFormatSupported(PixelFormat format, TextureUsage usage) const
{
VkFormatFeatureFlags flags = 0;
switch (usage)
{
case TextureUsage::ColorAttachment:
flags = VK_FORMAT_FEATURE_COLOR_ATTACHMENT_BIT;
break;
case TextureUsage::DepthStencilAttachment:
flags = VK_FORMAT_FEATURE_DEPTH_STENCIL_ATTACHMENT_BIT;
break;
case TextureUsage::InputAttachment:
case TextureUsage::ShaderSampling:
flags = VK_FORMAT_FEATURE_SAMPLED_IMAGE_BIT;
break;
case TextureUsage::TransferSource:
flags = VK_FORMAT_FEATURE_TRANSFER_SRC_BIT;
break;
case TextureUsage::TransferDestination:
flags = VK_FORMAT_FEATURE_TRANSFER_DST_BIT;
break;
}
VkFormatProperties formatProperties = GetInstance().GetPhysicalDeviceFormatProperties(GetPhysicalDevice(), ToVulkan(format));
return formatProperties.optimalTilingFeatures & flags; //< Assume optimal tiling
}
}