diff --git a/src/video_core/vulkan_common/vulkan_device.cpp b/src/video_core/vulkan_common/vulkan_device.cpp index c34df6fc56..b36bf65486 100644 --- a/src/video_core/vulkan_common/vulkan_device.cpp +++ b/src/video_core/vulkan_common/vulkan_device.cpp @@ -92,8 +92,16 @@ constexpr std::array VK_FORMAT_A4B4G4R4_UNORM_PACK16{ // B10G11R11_UFLOAT (R11G11B10F) - PRIMARY HDR format for Nintendo Switch // Nintendo Switch hardware validation: FULL support (COLOR_ATTACHMENT + STORAGE_IMAGE + BLEND) // Reference: vp_gpuinfo_nintendo_switch_v2_495_0_0_0 - All required feature bits present +// +// Fallback strategy: Degrade to LDR instead of expensive HDR emulation +// - RGBA8 UNORM/SRGB: Universal support, 32-bit (same size as B10G11R11), acceptable quality +// - RGB10A2: Better precision if available, still 32-bit +// - RGBA16F: Last resort only if RGB8 variants fail (should never happen) constexpr std::array B10G11R11_UFLOAT_PACK32{ - VK_FORMAT_R16G16B16A16_SFLOAT, // Fallback: RGBA16F (4x memory, slower, but universally supported) + VK_FORMAT_A8B8G8R8_UNORM_PACK32, // Primary fallback: RGBA8 LDR (32-bit, universal) + VK_FORMAT_A2B10G10R10_UNORM_PACK32, // Better precision: RGB10A2 (32-bit, common) + VK_FORMAT_A8B8G8R8_SRGB_PACK32, // sRGB variant (for gamma-correct fallback) + VK_FORMAT_R16G16B16A16_SFLOAT, // Emergency fallback: RGBA16F (64-bit, should never reach) VK_FORMAT_UNDEFINED, };