From 55a5ae06485b586d7c11ff3507cc3bb20b673205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Leclercq?= Date: Sun, 27 Feb 2022 18:41:43 +0100 Subject: [PATCH] VulkanRenderer: Improve pixel format handling --- include/Nazara/VulkanRenderer/Utils.inl | 7 ++++++- src/Nazara/VulkanRenderer/VulkanDevice.cpp | 6 +++++- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/include/Nazara/VulkanRenderer/Utils.inl b/include/Nazara/VulkanRenderer/Utils.inl index 94a66f42c..ba698b072 100644 --- a/include/Nazara/VulkanRenderer/Utils.inl +++ b/include/Nazara/VulkanRenderer/Utils.inl @@ -256,6 +256,7 @@ namespace Nz case PixelFormat::BGRA8_SRGB: return VK_FORMAT_B8G8R8A8_SRGB; case PixelFormat::Depth16: return VK_FORMAT_D16_UNORM; case PixelFormat::Depth16Stencil8: return VK_FORMAT_D16_UNORM_S8_UINT; + case PixelFormat::Depth24: return VK_FORMAT_UNDEFINED; case PixelFormat::Depth24Stencil8: return VK_FORMAT_D24_UNORM_S8_UINT; case PixelFormat::Depth32F: return VK_FORMAT_D32_SFLOAT; case PixelFormat::Depth32FStencil8: return VK_FORMAT_D32_SFLOAT_S8_UINT; @@ -265,11 +266,15 @@ namespace Nz case PixelFormat::RGBA8_SRGB: return VK_FORMAT_R8G8B8A8_SRGB; case PixelFormat::RGBA16F: return VK_FORMAT_R16G16B16A16_SFLOAT; case PixelFormat::RGBA32F: return VK_FORMAT_R32G32B32A32_SFLOAT; + case PixelFormat::Stencil1: return VK_FORMAT_UNDEFINED; + case PixelFormat::Stencil4: return VK_FORMAT_UNDEFINED; + case PixelFormat::Stencil8: return VK_FORMAT_S8_UINT; + case PixelFormat::Stencil16: return VK_FORMAT_UNDEFINED; default: break; } NazaraError("Unhandled PixelFormat 0x" + NumberToString(UnderlyingCast(pixelFormat), 16)); - return {}; + return VK_FORMAT_UNDEFINED; } VkImageAspectFlags ToVulkan(PixelFormatContent pixelFormatContent) diff --git a/src/Nazara/VulkanRenderer/VulkanDevice.cpp b/src/Nazara/VulkanRenderer/VulkanDevice.cpp index 82bfa3835..0f03c63b6 100644 --- a/src/Nazara/VulkanRenderer/VulkanDevice.cpp +++ b/src/Nazara/VulkanRenderer/VulkanDevice.cpp @@ -91,6 +91,10 @@ namespace Nz bool VulkanDevice::IsTextureFormatSupported(PixelFormat format, TextureUsage usage) const { + VkFormat vulkanFormat = ToVulkan(format); + if (vulkanFormat == VK_FORMAT_UNDEFINED) + return false; + VkFormatFeatureFlags flags = 0; switch (usage) { @@ -116,7 +120,7 @@ namespace Nz break; } - VkFormatProperties formatProperties = GetInstance().GetPhysicalDeviceFormatProperties(GetPhysicalDevice(), ToVulkan(format)); + VkFormatProperties formatProperties = GetInstance().GetPhysicalDeviceFormatProperties(GetPhysicalDevice(), vulkanFormat); return formatProperties.optimalTilingFeatures & flags; //< Assume optimal tiling } }