diff options
| author | 2022-08-01 19:49:11 -0400 | |
|---|---|---|
| committer | 2022-08-02 18:39:33 -0400 | |
| commit | c40cec5e581890b25ec016d900d9695f41881f45 (patch) | |
| tree | 1a05d2f6572e8e39eab775c6d222d5b782ca5c71 /src/video_core/vulkan_common | |
| parent | Merge pull request #8681 from Docteh/test (diff) | |
| download | yuzu-c40cec5e581890b25ec016d900d9695f41881f45.tar.gz yuzu-c40cec5e581890b25ec016d900d9695f41881f45.tar.xz yuzu-c40cec5e581890b25ec016d900d9695f41881f45.zip | |
renderer_vulkan: add format fallbacks for R16G16B16_SFLOAT, R16G16B16_SSCALED, R8G8B8_SSCALED
Diffstat (limited to 'src/video_core/vulkan_common')
| -rw-r--r-- | src/video_core/vulkan_common/vulkan_device.cpp | 234 |
1 files changed, 144 insertions, 90 deletions
diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index 743ac09f6..ddecfca13 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp | |||
| @@ -50,6 +50,21 @@ constexpr std::array R4G4_UNORM_PACK8{ | |||
| 50 | VK_FORMAT_UNDEFINED, | 50 | VK_FORMAT_UNDEFINED, |
| 51 | }; | 51 | }; |
| 52 | 52 | ||
| 53 | constexpr std::array R16G16B16_SFLOAT{ | ||
| 54 | VK_FORMAT_R16G16B16A16_SFLOAT, | ||
| 55 | VK_FORMAT_UNDEFINED, | ||
| 56 | }; | ||
| 57 | |||
| 58 | constexpr std::array R16G16B16_SSCALED{ | ||
| 59 | VK_FORMAT_R16G16B16A16_SSCALED, | ||
| 60 | VK_FORMAT_UNDEFINED, | ||
| 61 | }; | ||
| 62 | |||
| 63 | constexpr std::array R8G8B8_SSCALED{ | ||
| 64 | VK_FORMAT_R8G8B8A8_SSCALED, | ||
| 65 | VK_FORMAT_UNDEFINED, | ||
| 66 | }; | ||
| 67 | |||
| 53 | } // namespace Alternatives | 68 | } // namespace Alternatives |
| 54 | 69 | ||
| 55 | enum class NvidiaArchitecture { | 70 | enum class NvidiaArchitecture { |
| @@ -102,6 +117,12 @@ constexpr const VkFormat* GetFormatAlternatives(VkFormat format) { | |||
| 102 | return Alternatives::B5G6R5_UNORM_PACK16.data(); | 117 | return Alternatives::B5G6R5_UNORM_PACK16.data(); |
| 103 | case VK_FORMAT_R4G4_UNORM_PACK8: | 118 | case VK_FORMAT_R4G4_UNORM_PACK8: |
| 104 | return Alternatives::R4G4_UNORM_PACK8.data(); | 119 | return Alternatives::R4G4_UNORM_PACK8.data(); |
| 120 | case VK_FORMAT_R16G16B16_SFLOAT: | ||
| 121 | return Alternatives::R16G16B16_SFLOAT.data(); | ||
| 122 | case VK_FORMAT_R16G16B16_SSCALED: | ||
| 123 | return Alternatives::R16G16B16_SSCALED.data(); | ||
| 124 | case VK_FORMAT_R8G8B8_SSCALED: | ||
| 125 | return Alternatives::R8G8B8_SSCALED.data(); | ||
| 105 | default: | 126 | default: |
| 106 | return nullptr; | 127 | return nullptr; |
| 107 | } | 128 | } |
| @@ -122,109 +143,142 @@ VkFormatFeatureFlags GetFormatFeatures(VkFormatProperties properties, FormatType | |||
| 122 | 143 | ||
| 123 | std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(vk::PhysicalDevice physical) { | 144 | std::unordered_map<VkFormat, VkFormatProperties> GetFormatProperties(vk::PhysicalDevice physical) { |
| 124 | static constexpr std::array formats{ | 145 | static constexpr std::array formats{ |
| 125 | VK_FORMAT_A8B8G8R8_UNORM_PACK32, | 146 | VK_FORMAT_A1R5G5B5_UNORM_PACK16, |
| 126 | VK_FORMAT_A8B8G8R8_UINT_PACK32, | 147 | VK_FORMAT_A2B10G10R10_SINT_PACK32, |
| 127 | VK_FORMAT_A8B8G8R8_SNORM_PACK32, | 148 | VK_FORMAT_A2B10G10R10_SNORM_PACK32, |
| 149 | VK_FORMAT_A2B10G10R10_SSCALED_PACK32, | ||
| 150 | VK_FORMAT_A2B10G10R10_UINT_PACK32, | ||
| 151 | VK_FORMAT_A2B10G10R10_UNORM_PACK32, | ||
| 152 | VK_FORMAT_A2B10G10R10_USCALED_PACK32, | ||
| 128 | VK_FORMAT_A8B8G8R8_SINT_PACK32, | 153 | VK_FORMAT_A8B8G8R8_SINT_PACK32, |
| 154 | VK_FORMAT_A8B8G8R8_SNORM_PACK32, | ||
| 129 | VK_FORMAT_A8B8G8R8_SRGB_PACK32, | 155 | VK_FORMAT_A8B8G8R8_SRGB_PACK32, |
| 130 | VK_FORMAT_R5G6B5_UNORM_PACK16, | 156 | VK_FORMAT_A8B8G8R8_UINT_PACK32, |
| 131 | VK_FORMAT_B5G6R5_UNORM_PACK16, | 157 | VK_FORMAT_A8B8G8R8_UNORM_PACK32, |
| 132 | VK_FORMAT_R5G5B5A1_UNORM_PACK16, | 158 | VK_FORMAT_ASTC_10x10_SRGB_BLOCK, |
| 159 | VK_FORMAT_ASTC_10x10_UNORM_BLOCK, | ||
| 160 | VK_FORMAT_ASTC_10x5_SRGB_BLOCK, | ||
| 161 | VK_FORMAT_ASTC_10x5_UNORM_BLOCK, | ||
| 162 | VK_FORMAT_ASTC_10x6_SRGB_BLOCK, | ||
| 163 | VK_FORMAT_ASTC_10x6_UNORM_BLOCK, | ||
| 164 | VK_FORMAT_ASTC_10x8_SRGB_BLOCK, | ||
| 165 | VK_FORMAT_ASTC_10x8_UNORM_BLOCK, | ||
| 166 | VK_FORMAT_ASTC_12x10_SRGB_BLOCK, | ||
| 167 | VK_FORMAT_ASTC_12x10_UNORM_BLOCK, | ||
| 168 | VK_FORMAT_ASTC_12x12_SRGB_BLOCK, | ||
| 169 | VK_FORMAT_ASTC_12x12_UNORM_BLOCK, | ||
| 170 | VK_FORMAT_ASTC_4x4_SRGB_BLOCK, | ||
| 171 | VK_FORMAT_ASTC_4x4_UNORM_BLOCK, | ||
| 172 | VK_FORMAT_ASTC_5x4_SRGB_BLOCK, | ||
| 173 | VK_FORMAT_ASTC_5x4_UNORM_BLOCK, | ||
| 174 | VK_FORMAT_ASTC_5x5_SRGB_BLOCK, | ||
| 175 | VK_FORMAT_ASTC_5x5_UNORM_BLOCK, | ||
| 176 | VK_FORMAT_ASTC_6x5_SRGB_BLOCK, | ||
| 177 | VK_FORMAT_ASTC_6x5_UNORM_BLOCK, | ||
| 178 | VK_FORMAT_ASTC_6x6_SRGB_BLOCK, | ||
| 179 | VK_FORMAT_ASTC_6x6_UNORM_BLOCK, | ||
| 180 | VK_FORMAT_ASTC_8x5_SRGB_BLOCK, | ||
| 181 | VK_FORMAT_ASTC_8x5_UNORM_BLOCK, | ||
| 182 | VK_FORMAT_ASTC_8x6_SRGB_BLOCK, | ||
| 183 | VK_FORMAT_ASTC_8x6_UNORM_BLOCK, | ||
| 184 | VK_FORMAT_ASTC_8x8_SRGB_BLOCK, | ||
| 185 | VK_FORMAT_ASTC_8x8_UNORM_BLOCK, | ||
| 186 | VK_FORMAT_B10G11R11_UFLOAT_PACK32, | ||
| 187 | VK_FORMAT_B4G4R4A4_UNORM_PACK16, | ||
| 133 | VK_FORMAT_B5G5R5A1_UNORM_PACK16, | 188 | VK_FORMAT_B5G5R5A1_UNORM_PACK16, |
| 134 | VK_FORMAT_A2B10G10R10_UNORM_PACK32, | 189 | VK_FORMAT_B5G6R5_UNORM_PACK16, |
| 135 | VK_FORMAT_A2B10G10R10_UINT_PACK32, | 190 | VK_FORMAT_B8G8R8A8_SRGB, |
| 136 | VK_FORMAT_A1R5G5B5_UNORM_PACK16, | 191 | VK_FORMAT_B8G8R8A8_UNORM, |
| 137 | VK_FORMAT_R32G32B32A32_SFLOAT, | 192 | VK_FORMAT_BC1_RGBA_SRGB_BLOCK, |
| 138 | VK_FORMAT_R32G32B32A32_SINT, | 193 | VK_FORMAT_BC1_RGBA_UNORM_BLOCK, |
| 139 | VK_FORMAT_R32G32B32A32_UINT, | 194 | VK_FORMAT_BC2_SRGB_BLOCK, |
| 140 | VK_FORMAT_R32G32_SFLOAT, | 195 | VK_FORMAT_BC2_UNORM_BLOCK, |
| 141 | VK_FORMAT_R32G32_SINT, | 196 | VK_FORMAT_BC3_SRGB_BLOCK, |
| 142 | VK_FORMAT_R32G32_UINT, | 197 | VK_FORMAT_BC3_UNORM_BLOCK, |
| 198 | VK_FORMAT_BC4_SNORM_BLOCK, | ||
| 199 | VK_FORMAT_BC4_UNORM_BLOCK, | ||
| 200 | VK_FORMAT_BC5_SNORM_BLOCK, | ||
| 201 | VK_FORMAT_BC5_UNORM_BLOCK, | ||
| 202 | VK_FORMAT_BC6H_SFLOAT_BLOCK, | ||
| 203 | VK_FORMAT_BC6H_UFLOAT_BLOCK, | ||
| 204 | VK_FORMAT_BC7_SRGB_BLOCK, | ||
| 205 | VK_FORMAT_BC7_UNORM_BLOCK, | ||
| 206 | VK_FORMAT_D16_UNORM, | ||
| 207 | VK_FORMAT_D16_UNORM_S8_UINT, | ||
| 208 | VK_FORMAT_D24_UNORM_S8_UINT, | ||
| 209 | VK_FORMAT_D32_SFLOAT, | ||
| 210 | VK_FORMAT_D32_SFLOAT_S8_UINT, | ||
| 211 | VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, | ||
| 212 | VK_FORMAT_R16G16B16A16_SFLOAT, | ||
| 143 | VK_FORMAT_R16G16B16A16_SINT, | 213 | VK_FORMAT_R16G16B16A16_SINT, |
| 144 | VK_FORMAT_R16G16B16A16_UINT, | ||
| 145 | VK_FORMAT_R16G16B16A16_SNORM, | 214 | VK_FORMAT_R16G16B16A16_SNORM, |
| 215 | VK_FORMAT_R16G16B16A16_SSCALED, | ||
| 216 | VK_FORMAT_R16G16B16A16_UINT, | ||
| 146 | VK_FORMAT_R16G16B16A16_UNORM, | 217 | VK_FORMAT_R16G16B16A16_UNORM, |
| 147 | VK_FORMAT_R16G16_UNORM, | 218 | VK_FORMAT_R16G16B16A16_USCALED, |
| 148 | VK_FORMAT_R16G16_SNORM, | 219 | VK_FORMAT_R16G16B16_SFLOAT, |
| 220 | VK_FORMAT_R16G16B16_SINT, | ||
| 221 | VK_FORMAT_R16G16B16_SNORM, | ||
| 222 | VK_FORMAT_R16G16B16_SSCALED, | ||
| 223 | VK_FORMAT_R16G16B16_UINT, | ||
| 224 | VK_FORMAT_R16G16B16_UNORM, | ||
| 225 | VK_FORMAT_R16G16B16_USCALED, | ||
| 149 | VK_FORMAT_R16G16_SFLOAT, | 226 | VK_FORMAT_R16G16_SFLOAT, |
| 150 | VK_FORMAT_R16G16_UINT, | ||
| 151 | VK_FORMAT_R16G16_SINT, | 227 | VK_FORMAT_R16G16_SINT, |
| 152 | VK_FORMAT_R16_UNORM, | 228 | VK_FORMAT_R16G16_SNORM, |
| 229 | VK_FORMAT_R16G16_SSCALED, | ||
| 230 | VK_FORMAT_R16G16_UINT, | ||
| 231 | VK_FORMAT_R16G16_UNORM, | ||
| 232 | VK_FORMAT_R16G16_USCALED, | ||
| 233 | VK_FORMAT_R16_SFLOAT, | ||
| 234 | VK_FORMAT_R16_SINT, | ||
| 153 | VK_FORMAT_R16_SNORM, | 235 | VK_FORMAT_R16_SNORM, |
| 236 | VK_FORMAT_R16_SSCALED, | ||
| 154 | VK_FORMAT_R16_UINT, | 237 | VK_FORMAT_R16_UINT, |
| 238 | VK_FORMAT_R16_UNORM, | ||
| 239 | VK_FORMAT_R16_USCALED, | ||
| 240 | VK_FORMAT_R32G32B32A32_SFLOAT, | ||
| 241 | VK_FORMAT_R32G32B32A32_SINT, | ||
| 242 | VK_FORMAT_R32G32B32A32_UINT, | ||
| 243 | VK_FORMAT_R32G32B32_SFLOAT, | ||
| 244 | VK_FORMAT_R32G32B32_SINT, | ||
| 245 | VK_FORMAT_R32G32B32_UINT, | ||
| 246 | VK_FORMAT_R32G32_SFLOAT, | ||
| 247 | VK_FORMAT_R32G32_SINT, | ||
| 248 | VK_FORMAT_R32G32_UINT, | ||
| 249 | VK_FORMAT_R32_SFLOAT, | ||
| 250 | VK_FORMAT_R32_SINT, | ||
| 251 | VK_FORMAT_R32_UINT, | ||
| 252 | VK_FORMAT_R4G4B4A4_UNORM_PACK16, | ||
| 253 | VK_FORMAT_R4G4_UNORM_PACK8, | ||
| 254 | VK_FORMAT_R5G5B5A1_UNORM_PACK16, | ||
| 255 | VK_FORMAT_R5G6B5_UNORM_PACK16, | ||
| 256 | VK_FORMAT_R8G8B8A8_SINT, | ||
| 257 | VK_FORMAT_R8G8B8A8_SNORM, | ||
| 155 | VK_FORMAT_R8G8B8A8_SRGB, | 258 | VK_FORMAT_R8G8B8A8_SRGB, |
| 156 | VK_FORMAT_R8G8_UNORM, | 259 | VK_FORMAT_R8G8B8A8_SSCALED, |
| 157 | VK_FORMAT_R8G8_SNORM, | 260 | VK_FORMAT_R8G8B8A8_UINT, |
| 261 | VK_FORMAT_R8G8B8A8_UNORM, | ||
| 262 | VK_FORMAT_R8G8B8A8_USCALED, | ||
| 263 | VK_FORMAT_R8G8B8_SINT, | ||
| 264 | VK_FORMAT_R8G8B8_SNORM, | ||
| 265 | VK_FORMAT_R8G8B8_SSCALED, | ||
| 266 | VK_FORMAT_R8G8B8_UINT, | ||
| 267 | VK_FORMAT_R8G8B8_UNORM, | ||
| 268 | VK_FORMAT_R8G8B8_USCALED, | ||
| 158 | VK_FORMAT_R8G8_SINT, | 269 | VK_FORMAT_R8G8_SINT, |
| 270 | VK_FORMAT_R8G8_SNORM, | ||
| 271 | VK_FORMAT_R8G8_SSCALED, | ||
| 159 | VK_FORMAT_R8G8_UINT, | 272 | VK_FORMAT_R8G8_UINT, |
| 160 | VK_FORMAT_R8_UNORM, | 273 | VK_FORMAT_R8G8_UNORM, |
| 161 | VK_FORMAT_R8_SNORM, | 274 | VK_FORMAT_R8G8_USCALED, |
| 162 | VK_FORMAT_R8_SINT, | 275 | VK_FORMAT_R8_SINT, |
| 276 | VK_FORMAT_R8_SNORM, | ||
| 277 | VK_FORMAT_R8_SSCALED, | ||
| 163 | VK_FORMAT_R8_UINT, | 278 | VK_FORMAT_R8_UINT, |
| 164 | VK_FORMAT_B10G11R11_UFLOAT_PACK32, | 279 | VK_FORMAT_R8_UNORM, |
| 165 | VK_FORMAT_R32_SFLOAT, | 280 | VK_FORMAT_R8_USCALED, |
| 166 | VK_FORMAT_R32_UINT, | ||
| 167 | VK_FORMAT_R32_SINT, | ||
| 168 | VK_FORMAT_R16_SFLOAT, | ||
| 169 | VK_FORMAT_R16G16B16A16_SFLOAT, | ||
| 170 | VK_FORMAT_B8G8R8A8_UNORM, | ||
| 171 | VK_FORMAT_B8G8R8A8_SRGB, | ||
| 172 | VK_FORMAT_R4G4_UNORM_PACK8, | ||
| 173 | VK_FORMAT_R4G4B4A4_UNORM_PACK16, | ||
| 174 | VK_FORMAT_B4G4R4A4_UNORM_PACK16, | ||
| 175 | VK_FORMAT_D32_SFLOAT, | ||
| 176 | VK_FORMAT_D16_UNORM, | ||
| 177 | VK_FORMAT_S8_UINT, | 281 | VK_FORMAT_S8_UINT, |
| 178 | VK_FORMAT_D16_UNORM_S8_UINT, | ||
| 179 | VK_FORMAT_D24_UNORM_S8_UINT, | ||
| 180 | VK_FORMAT_D32_SFLOAT_S8_UINT, | ||
| 181 | VK_FORMAT_BC1_RGBA_UNORM_BLOCK, | ||
| 182 | VK_FORMAT_BC2_UNORM_BLOCK, | ||
| 183 | VK_FORMAT_BC3_UNORM_BLOCK, | ||
| 184 | VK_FORMAT_BC4_UNORM_BLOCK, | ||
| 185 | VK_FORMAT_BC4_SNORM_BLOCK, | ||
| 186 | VK_FORMAT_BC5_UNORM_BLOCK, | ||
| 187 | VK_FORMAT_BC5_SNORM_BLOCK, | ||
| 188 | VK_FORMAT_BC7_UNORM_BLOCK, | ||
| 189 | VK_FORMAT_BC6H_UFLOAT_BLOCK, | ||
| 190 | VK_FORMAT_BC6H_SFLOAT_BLOCK, | ||
| 191 | VK_FORMAT_BC1_RGBA_SRGB_BLOCK, | ||
| 192 | VK_FORMAT_BC2_SRGB_BLOCK, | ||
| 193 | VK_FORMAT_BC3_SRGB_BLOCK, | ||
| 194 | VK_FORMAT_BC7_SRGB_BLOCK, | ||
| 195 | VK_FORMAT_ASTC_4x4_UNORM_BLOCK, | ||
| 196 | VK_FORMAT_ASTC_4x4_SRGB_BLOCK, | ||
| 197 | VK_FORMAT_ASTC_5x4_UNORM_BLOCK, | ||
| 198 | VK_FORMAT_ASTC_5x4_SRGB_BLOCK, | ||
| 199 | VK_FORMAT_ASTC_5x5_UNORM_BLOCK, | ||
| 200 | VK_FORMAT_ASTC_5x5_SRGB_BLOCK, | ||
| 201 | VK_FORMAT_ASTC_6x5_UNORM_BLOCK, | ||
| 202 | VK_FORMAT_ASTC_6x5_SRGB_BLOCK, | ||
| 203 | VK_FORMAT_ASTC_6x6_UNORM_BLOCK, | ||
| 204 | VK_FORMAT_ASTC_6x6_SRGB_BLOCK, | ||
| 205 | VK_FORMAT_ASTC_8x5_UNORM_BLOCK, | ||
| 206 | VK_FORMAT_ASTC_8x5_SRGB_BLOCK, | ||
| 207 | VK_FORMAT_ASTC_8x6_UNORM_BLOCK, | ||
| 208 | VK_FORMAT_ASTC_8x6_SRGB_BLOCK, | ||
| 209 | VK_FORMAT_ASTC_8x8_UNORM_BLOCK, | ||
| 210 | VK_FORMAT_ASTC_8x8_SRGB_BLOCK, | ||
| 211 | VK_FORMAT_ASTC_10x5_UNORM_BLOCK, | ||
| 212 | VK_FORMAT_ASTC_10x5_SRGB_BLOCK, | ||
| 213 | VK_FORMAT_ASTC_10x6_UNORM_BLOCK, | ||
| 214 | VK_FORMAT_ASTC_10x6_SRGB_BLOCK, | ||
| 215 | VK_FORMAT_ASTC_10x8_UNORM_BLOCK, | ||
| 216 | VK_FORMAT_ASTC_10x8_SRGB_BLOCK, | ||
| 217 | VK_FORMAT_ASTC_10x10_UNORM_BLOCK, | ||
| 218 | VK_FORMAT_ASTC_10x10_SRGB_BLOCK, | ||
| 219 | VK_FORMAT_ASTC_12x10_UNORM_BLOCK, | ||
| 220 | VK_FORMAT_ASTC_12x10_SRGB_BLOCK, | ||
| 221 | VK_FORMAT_ASTC_12x12_UNORM_BLOCK, | ||
| 222 | VK_FORMAT_ASTC_12x12_SRGB_BLOCK, | ||
| 223 | VK_FORMAT_ASTC_8x6_UNORM_BLOCK, | ||
| 224 | VK_FORMAT_ASTC_8x6_SRGB_BLOCK, | ||
| 225 | VK_FORMAT_ASTC_6x5_UNORM_BLOCK, | ||
| 226 | VK_FORMAT_ASTC_6x5_SRGB_BLOCK, | ||
| 227 | VK_FORMAT_E5B9G9R9_UFLOAT_PACK32, | ||
| 228 | }; | 282 | }; |
| 229 | std::unordered_map<VkFormat, VkFormatProperties> format_properties; | 283 | std::unordered_map<VkFormat, VkFormatProperties> format_properties; |
| 230 | for (const auto format : formats) { | 284 | for (const auto format : formats) { |
| @@ -739,9 +793,9 @@ VkFormat Device::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags | |||
| 739 | if (!IsFormatSupported(alternative, wanted_usage, format_type)) { | 793 | if (!IsFormatSupported(alternative, wanted_usage, format_type)) { |
| 740 | continue; | 794 | continue; |
| 741 | } | 795 | } |
| 742 | LOG_WARNING(Render_Vulkan, | 796 | LOG_DEBUG(Render_Vulkan, |
| 743 | "Emulating format={} with alternative format={} with usage={} and type={}", | 797 | "Emulating format={} with alternative format={} with usage={} and type={}", |
| 744 | wanted_format, alternative, wanted_usage, format_type); | 798 | wanted_format, alternative, wanted_usage, format_type); |
| 745 | return alternative; | 799 | return alternative; |
| 746 | } | 800 | } |
| 747 | 801 | ||