diff options
| -rw-r--r-- | src/video_core/renderer_vulkan/maxwell_to_vk.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/texture_cache/format_lookup_table.cpp | 62 | ||||
| -rw-r--r-- | src/video_core/textures/texture.h | 70 |
3 files changed, 67 insertions, 72 deletions
diff --git a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp index ca52e2389..5dce51be8 100644 --- a/src/video_core/renderer_vulkan/maxwell_to_vk.cpp +++ b/src/video_core/renderer_vulkan/maxwell_to_vk.cpp | |||
| @@ -166,7 +166,7 @@ struct FormatTuple { | |||
| 166 | {VK_FORMAT_R16G16_UINT, Attachable | Storage}, // R16G16_UINT | 166 | {VK_FORMAT_R16G16_UINT, Attachable | Storage}, // R16G16_UINT |
| 167 | {VK_FORMAT_R16G16_SINT, Attachable | Storage}, // R16G16_SINT | 167 | {VK_FORMAT_R16G16_SINT, Attachable | Storage}, // R16G16_SINT |
| 168 | {VK_FORMAT_R16G16_SNORM, Attachable | Storage}, // R16G16_SNORM | 168 | {VK_FORMAT_R16G16_SNORM, Attachable | Storage}, // R16G16_SNORM |
| 169 | {VK_FORMAT_UNDEFINED}, // R32G32B32_FLOAT | 169 | {VK_FORMAT_R32G32B32_SFLOAT}, // R32G32B32_FLOAT |
| 170 | {VK_FORMAT_A8B8G8R8_SRGB_PACK32, Attachable}, // A8B8G8R8_SRGB | 170 | {VK_FORMAT_A8B8G8R8_SRGB_PACK32, Attachable}, // A8B8G8R8_SRGB |
| 171 | {VK_FORMAT_R8G8_UNORM, Attachable | Storage}, // R8G8_UNORM | 171 | {VK_FORMAT_R8G8_UNORM, Attachable | Storage}, // R8G8_UNORM |
| 172 | {VK_FORMAT_R8G8_SNORM, Attachable | Storage}, // R8G8_SNORM | 172 | {VK_FORMAT_R8G8_SNORM, Attachable | Storage}, // R8G8_SNORM |
| @@ -234,11 +234,6 @@ FormatInfo SurfaceFormat(const Device& device, FormatType format_type, bool with | |||
| 234 | PixelFormat pixel_format) { | 234 | PixelFormat pixel_format) { |
| 235 | ASSERT(static_cast<size_t>(pixel_format) < std::size(tex_format_tuples)); | 235 | ASSERT(static_cast<size_t>(pixel_format) < std::size(tex_format_tuples)); |
| 236 | FormatTuple tuple = tex_format_tuples[static_cast<size_t>(pixel_format)]; | 236 | FormatTuple tuple = tex_format_tuples[static_cast<size_t>(pixel_format)]; |
| 237 | if (tuple.format == VK_FORMAT_UNDEFINED) { | ||
| 238 | UNIMPLEMENTED_MSG("Unimplemented texture format with pixel format={}", pixel_format); | ||
| 239 | return FormatInfo{VK_FORMAT_A8B8G8R8_UNORM_PACK32, true, true}; | ||
| 240 | } | ||
| 241 | |||
| 242 | // Use A8B8G8R8_UNORM on hardware that doesn't support ASTC natively | 237 | // Use A8B8G8R8_UNORM on hardware that doesn't support ASTC natively |
| 243 | if (!device.IsOptimalAstcSupported() && VideoCore::Surface::IsPixelFormatASTC(pixel_format)) { | 238 | if (!device.IsOptimalAstcSupported() && VideoCore::Surface::IsPixelFormatASTC(pixel_format)) { |
| 244 | const bool is_srgb = with_srgb && VideoCore::Surface::IsPixelFormatSRGB(pixel_format); | 239 | const bool is_srgb = with_srgb && VideoCore::Surface::IsPixelFormatSRGB(pixel_format); |
diff --git a/src/video_core/texture_cache/format_lookup_table.cpp b/src/video_core/texture_cache/format_lookup_table.cpp index 08aa8ca33..5fc2b2fec 100644 --- a/src/video_core/texture_cache/format_lookup_table.cpp +++ b/src/video_core/texture_cache/format_lookup_table.cpp | |||
| @@ -42,15 +42,15 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, | |||
| 42 | ComponentType blue, ComponentType alpha, | 42 | ComponentType blue, ComponentType alpha, |
| 43 | bool is_srgb) noexcept { | 43 | bool is_srgb) noexcept { |
| 44 | switch (Hash(format, red, green, blue, alpha, is_srgb)) { | 44 | switch (Hash(format, red, green, blue, alpha, is_srgb)) { |
| 45 | case Hash(TextureFormat::A8R8G8B8, UNORM): | 45 | case Hash(TextureFormat::A8B8G8R8, UNORM): |
| 46 | return PixelFormat::A8B8G8R8_UNORM; | 46 | return PixelFormat::A8B8G8R8_UNORM; |
| 47 | case Hash(TextureFormat::A8R8G8B8, SNORM): | 47 | case Hash(TextureFormat::A8B8G8R8, SNORM): |
| 48 | return PixelFormat::A8B8G8R8_SNORM; | 48 | return PixelFormat::A8B8G8R8_SNORM; |
| 49 | case Hash(TextureFormat::A8R8G8B8, UINT): | 49 | case Hash(TextureFormat::A8B8G8R8, UINT): |
| 50 | return PixelFormat::A8B8G8R8_UINT; | 50 | return PixelFormat::A8B8G8R8_UINT; |
| 51 | case Hash(TextureFormat::A8R8G8B8, SINT): | 51 | case Hash(TextureFormat::A8B8G8R8, SINT): |
| 52 | return PixelFormat::A8B8G8R8_SINT; | 52 | return PixelFormat::A8B8G8R8_SINT; |
| 53 | case Hash(TextureFormat::A8R8G8B8, UNORM, SRGB): | 53 | case Hash(TextureFormat::A8B8G8R8, UNORM, SRGB): |
| 54 | return PixelFormat::A8B8G8R8_SRGB; | 54 | return PixelFormat::A8B8G8R8_SRGB; |
| 55 | case Hash(TextureFormat::B5G6R5, UNORM): | 55 | case Hash(TextureFormat::B5G6R5, UNORM): |
| 56 | return PixelFormat::B5G6R5_UNORM; | 56 | return PixelFormat::B5G6R5_UNORM; |
| @@ -74,13 +74,13 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, | |||
| 74 | return PixelFormat::R8_UINT; | 74 | return PixelFormat::R8_UINT; |
| 75 | case Hash(TextureFormat::R8, SINT): | 75 | case Hash(TextureFormat::R8, SINT): |
| 76 | return PixelFormat::R8_SINT; | 76 | return PixelFormat::R8_SINT; |
| 77 | case Hash(TextureFormat::R8G8, UNORM): | 77 | case Hash(TextureFormat::G8R8, UNORM): |
| 78 | return PixelFormat::R8G8_UNORM; | 78 | return PixelFormat::R8G8_UNORM; |
| 79 | case Hash(TextureFormat::R8G8, SNORM): | 79 | case Hash(TextureFormat::G8R8, SNORM): |
| 80 | return PixelFormat::R8G8_SNORM; | 80 | return PixelFormat::R8G8_SNORM; |
| 81 | case Hash(TextureFormat::R8G8, UINT): | 81 | case Hash(TextureFormat::G8R8, UINT): |
| 82 | return PixelFormat::R8G8_UINT; | 82 | return PixelFormat::R8G8_UINT; |
| 83 | case Hash(TextureFormat::R8G8, SINT): | 83 | case Hash(TextureFormat::G8R8, SINT): |
| 84 | return PixelFormat::R8G8_SINT; | 84 | return PixelFormat::R8G8_SINT; |
| 85 | case Hash(TextureFormat::R16G16B16A16, FLOAT): | 85 | case Hash(TextureFormat::R16G16B16A16, FLOAT): |
| 86 | return PixelFormat::R16G16B16A16_FLOAT; | 86 | return PixelFormat::R16G16B16A16_FLOAT; |
| @@ -136,49 +136,49 @@ PixelFormat PixelFormatFromTextureInfo(TextureFormat format, ComponentType red, | |||
| 136 | return PixelFormat::R32_SINT; | 136 | return PixelFormat::R32_SINT; |
| 137 | case Hash(TextureFormat::E5B9G9R9, FLOAT): | 137 | case Hash(TextureFormat::E5B9G9R9, FLOAT): |
| 138 | return PixelFormat::E5B9G9R9_FLOAT; | 138 | return PixelFormat::E5B9G9R9_FLOAT; |
| 139 | case Hash(TextureFormat::D32, FLOAT): | 139 | case Hash(TextureFormat::Z32, FLOAT): |
| 140 | return PixelFormat::D32_FLOAT; | 140 | return PixelFormat::D32_FLOAT; |
| 141 | case Hash(TextureFormat::D16, UNORM): | 141 | case Hash(TextureFormat::Z16, UNORM): |
| 142 | return PixelFormat::D16_UNORM; | 142 | return PixelFormat::D16_UNORM; |
| 143 | case Hash(TextureFormat::S8D24, UINT, UNORM, UNORM, UNORM, LINEAR): | 143 | case Hash(TextureFormat::Z24S8, UINT, UNORM, UNORM, UNORM, LINEAR): |
| 144 | return PixelFormat::S8_UINT_D24_UNORM; | 144 | return PixelFormat::S8_UINT_D24_UNORM; |
| 145 | case Hash(TextureFormat::S8D24, UINT, UNORM, UINT, UINT, LINEAR): | 145 | case Hash(TextureFormat::Z24S8, UINT, UNORM, UINT, UINT, LINEAR): |
| 146 | return PixelFormat::S8_UINT_D24_UNORM; | 146 | return PixelFormat::S8_UINT_D24_UNORM; |
| 147 | case Hash(TextureFormat::R8G24, UINT, UNORM, UNORM, UNORM, LINEAR): | 147 | case Hash(TextureFormat::G24R8, UINT, UNORM, UNORM, UNORM, LINEAR): |
| 148 | return PixelFormat::S8_UINT_D24_UNORM; | 148 | return PixelFormat::S8_UINT_D24_UNORM; |
| 149 | case Hash(TextureFormat::D24S8, UNORM, UINT, UINT, UINT, LINEAR): | 149 | case Hash(TextureFormat::S8Z24, UNORM, UINT, UINT, UINT, LINEAR): |
| 150 | return PixelFormat::D24_UNORM_S8_UINT; | 150 | return PixelFormat::D24_UNORM_S8_UINT; |
| 151 | case Hash(TextureFormat::D32S8, FLOAT, UINT, UNORM, UNORM, LINEAR): | 151 | case Hash(TextureFormat::Z32_X24S8, FLOAT, UINT, UNORM, UNORM, LINEAR): |
| 152 | return PixelFormat::D32_FLOAT_S8_UINT; | 152 | return PixelFormat::D32_FLOAT_S8_UINT; |
| 153 | case Hash(TextureFormat::R32_B24G8, FLOAT, UINT, UNORM, UNORM, LINEAR): | 153 | case Hash(TextureFormat::R32B24G8, FLOAT, UINT, UNORM, UNORM, LINEAR): |
| 154 | return PixelFormat::D32_FLOAT_S8_UINT; | 154 | return PixelFormat::D32_FLOAT_S8_UINT; |
| 155 | case Hash(TextureFormat::BC1_RGBA, UNORM, LINEAR): | 155 | case Hash(TextureFormat::DXT1, UNORM, LINEAR): |
| 156 | return PixelFormat::BC1_RGBA_UNORM; | 156 | return PixelFormat::BC1_RGBA_UNORM; |
| 157 | case Hash(TextureFormat::BC1_RGBA, UNORM, SRGB): | 157 | case Hash(TextureFormat::DXT1, UNORM, SRGB): |
| 158 | return PixelFormat::BC1_RGBA_SRGB; | 158 | return PixelFormat::BC1_RGBA_SRGB; |
| 159 | case Hash(TextureFormat::BC2, UNORM, LINEAR): | 159 | case Hash(TextureFormat::DXT23, UNORM, LINEAR): |
| 160 | return PixelFormat::BC2_UNORM; | 160 | return PixelFormat::BC2_UNORM; |
| 161 | case Hash(TextureFormat::BC2, UNORM, SRGB): | 161 | case Hash(TextureFormat::DXT23, UNORM, SRGB): |
| 162 | return PixelFormat::BC2_SRGB; | 162 | return PixelFormat::BC2_SRGB; |
| 163 | case Hash(TextureFormat::BC3, UNORM, LINEAR): | 163 | case Hash(TextureFormat::DXT45, UNORM, LINEAR): |
| 164 | return PixelFormat::BC3_UNORM; | 164 | return PixelFormat::BC3_UNORM; |
| 165 | case Hash(TextureFormat::BC3, UNORM, SRGB): | 165 | case Hash(TextureFormat::DXT45, UNORM, SRGB): |
| 166 | return PixelFormat::BC3_SRGB; | 166 | return PixelFormat::BC3_SRGB; |
| 167 | case Hash(TextureFormat::BC4, UNORM): | 167 | case Hash(TextureFormat::DXN1, UNORM): |
| 168 | return PixelFormat::BC4_UNORM; | 168 | return PixelFormat::BC4_UNORM; |
| 169 | case Hash(TextureFormat::BC4, SNORM): | 169 | case Hash(TextureFormat::DXN1, SNORM): |
| 170 | return PixelFormat::BC4_SNORM; | 170 | return PixelFormat::BC4_SNORM; |
| 171 | case Hash(TextureFormat::BC5, UNORM): | 171 | case Hash(TextureFormat::DXN2, UNORM): |
| 172 | return PixelFormat::BC5_UNORM; | 172 | return PixelFormat::BC5_UNORM; |
| 173 | case Hash(TextureFormat::BC5, SNORM): | 173 | case Hash(TextureFormat::DXN2, SNORM): |
| 174 | return PixelFormat::BC5_SNORM; | 174 | return PixelFormat::BC5_SNORM; |
| 175 | case Hash(TextureFormat::BC7, UNORM, LINEAR): | 175 | case Hash(TextureFormat::BC7U, UNORM, LINEAR): |
| 176 | return PixelFormat::BC7_UNORM; | 176 | return PixelFormat::BC7_UNORM; |
| 177 | case Hash(TextureFormat::BC7, UNORM, SRGB): | 177 | case Hash(TextureFormat::BC7U, UNORM, SRGB): |
| 178 | return PixelFormat::BC7_SRGB; | 178 | return PixelFormat::BC7_SRGB; |
| 179 | case Hash(TextureFormat::BC6H_SFLOAT, FLOAT): | 179 | case Hash(TextureFormat::BC6H_S16, FLOAT): |
| 180 | return PixelFormat::BC6H_SFLOAT; | 180 | return PixelFormat::BC6H_SFLOAT; |
| 181 | case Hash(TextureFormat::BC6H_UFLOAT, FLOAT): | 181 | case Hash(TextureFormat::BC6H_U16, FLOAT): |
| 182 | return PixelFormat::BC6H_UFLOAT; | 182 | return PixelFormat::BC6H_UFLOAT; |
| 183 | case Hash(TextureFormat::ASTC_2D_4X4, UNORM, LINEAR): | 183 | case Hash(TextureFormat::ASTC_2D_4X4, UNORM, LINEAR): |
| 184 | return PixelFormat::ASTC_2D_4X4_UNORM; | 184 | return PixelFormat::ASTC_2D_4X4_UNORM; |
diff --git a/src/video_core/textures/texture.h b/src/video_core/textures/texture.h index 7c4553a53..7e5837b20 100644 --- a/src/video_core/textures/texture.h +++ b/src/video_core/textures/texture.h | |||
| @@ -15,26 +15,26 @@ enum class TextureFormat : u32 { | |||
| 15 | R32G32B32 = 0x02, | 15 | R32G32B32 = 0x02, |
| 16 | R16G16B16A16 = 0x03, | 16 | R16G16B16A16 = 0x03, |
| 17 | R32G32 = 0x04, | 17 | R32G32 = 0x04, |
| 18 | R32_B24G8 = 0x05, | 18 | R32B24G8 = 0x05, |
| 19 | ETC2_RGB = 0x06, | 19 | ETC2_RGB = 0x06, |
| 20 | X8B8G8R8 = 0x07, | 20 | X8B8G8R8 = 0x07, |
| 21 | A8R8G8B8 = 0x08, | 21 | A8B8G8R8 = 0x08, |
| 22 | A2B10G10R10 = 0x09, | 22 | A2B10G10R10 = 0x09, |
| 23 | ETC2_RGB_PTA = 0x0a, | 23 | ETC2_RGB_PTA = 0x0a, |
| 24 | ETC2_RGBA = 0x0b, | 24 | ETC2_RGBA = 0x0b, |
| 25 | R16G16 = 0x0c, | 25 | R16G16 = 0x0c, |
| 26 | R24G8 = 0x0d, | 26 | G8R24 = 0x0d, |
| 27 | R8G24 = 0x0e, | 27 | G24R8 = 0x0e, |
| 28 | R32 = 0x0f, | 28 | R32 = 0x0f, |
| 29 | BC6H_SFLOAT = 0x10, | 29 | BC6H_S16 = 0x10, |
| 30 | BC6H_UFLOAT = 0x11, | 30 | BC6H_U16 = 0x11, |
| 31 | A4B4G4R4 = 0x12, | 31 | A4B4G4R4 = 0x12, |
| 32 | A5B5G5R1 = 0x13, | 32 | A5B5G5R1 = 0x13, |
| 33 | A1B5G5R5 = 0x14, | 33 | A1B5G5R5 = 0x14, |
| 34 | B5G6R5 = 0x15, | 34 | B5G6R5 = 0x15, |
| 35 | B6G5R5 = 0x16, | 35 | B6G5R5 = 0x16, |
| 36 | BC7 = 0x17, | 36 | BC7U = 0x17, |
| 37 | R8G8 = 0x18, | 37 | G8R8 = 0x18, |
| 38 | EAC = 0x19, | 38 | EAC = 0x19, |
| 39 | EACX2 = 0x1a, | 39 | EACX2 = 0x1a, |
| 40 | R16 = 0x1b, | 40 | R16 = 0x1b, |
| @@ -46,33 +46,33 @@ enum class TextureFormat : u32 { | |||
| 46 | B10G11R11 = 0x21, | 46 | B10G11R11 = 0x21, |
| 47 | G8B8G8R8 = 0x22, | 47 | G8B8G8R8 = 0x22, |
| 48 | B8G8R8G8 = 0x23, | 48 | B8G8R8G8 = 0x23, |
| 49 | BC1_RGBA = 0x24, | 49 | DXT1 = 0x24, |
| 50 | BC2 = 0x25, | 50 | DXT23 = 0x25, |
| 51 | BC3 = 0x26, | 51 | DXT45 = 0x26, |
| 52 | BC4 = 0x27, | 52 | DXN1 = 0x27, |
| 53 | BC5 = 0x28, | 53 | DXN2 = 0x28, |
| 54 | S8D24 = 0x29, | 54 | Z24S8 = 0x29, |
| 55 | X8D24 = 0x2a, | 55 | X8Z24 = 0x2a, |
| 56 | D24S8 = 0x2b, | 56 | S8Z24 = 0x2b, |
| 57 | X4V4D24__COV4R4V = 0x2c, | 57 | X4V4Z24__COV4R4V = 0x2c, |
| 58 | X4V4D24__COV8R8V = 0x2d, | 58 | X4V4Z24__COV8R8V = 0x2d, |
| 59 | V8D24__COV4R12V = 0x2e, | 59 | V8Z24__COV4R12V = 0x2e, |
| 60 | D32 = 0x2f, | 60 | Z32 = 0x2f, |
| 61 | D32S8 = 0x30, | 61 | Z32_X24S8 = 0x30, |
| 62 | X8D24_X20V4S8__COV4R4V = 0x31, | 62 | X8Z24_X20V4S8__COV4R4V = 0x31, |
| 63 | X8D24_X20V4S8__COV8R8V = 0x32, | 63 | X8Z24_X20V4S8__COV8R8V = 0x32, |
| 64 | D32_X20V4X8__COV4R4V = 0x33, | 64 | Z32_X20V4X8__COV4R4V = 0x33, |
| 65 | D32_X20V4X8__COV8R8V = 0x34, | 65 | Z32_X20V4X8__COV8R8V = 0x34, |
| 66 | D32_X20V4S8__COV4R4V = 0x35, | 66 | Z32_X20V4S8__COV4R4V = 0x35, |
| 67 | D32_X20V4S8__COV8R8V = 0x36, | 67 | Z32_X20V4S8__COV8R8V = 0x36, |
| 68 | X8D24_X16V8S8__COV4R12V = 0x37, | 68 | X8Z24_X16V8S8__COV4R12V = 0x37, |
| 69 | D32_X16V8X8__COV4R12V = 0x38, | 69 | Z32_X16V8X8__COV4R12V = 0x38, |
| 70 | D32_X16V8S8__COV4R12V = 0x39, | 70 | Z32_X16V8S8__COV4R12V = 0x39, |
| 71 | D16 = 0x3a, | 71 | Z16 = 0x3a, |
| 72 | V8D24__COV8R24V = 0x3b, | 72 | V8Z24__COV8R24V = 0x3b, |
| 73 | X8D24_X16V8S8__COV8R24V = 0x3c, | 73 | X8Z24_X16V8S8__COV8R24V = 0x3c, |
| 74 | D32_X16V8X8__COV8R24V = 0x3d, | 74 | Z32_X16V8X8__COV8R24V = 0x3d, |
| 75 | D32_X16V8S8__COV8R24V = 0x3e, | 75 | Z32_X16V8S8__COV8R24V = 0x3e, |
| 76 | ASTC_2D_4X4 = 0x40, | 76 | ASTC_2D_4X4 = 0x40, |
| 77 | ASTC_2D_5X5 = 0x41, | 77 | ASTC_2D_5X5 = 0x41, |
| 78 | ASTC_2D_6X6 = 0x42, | 78 | ASTC_2D_6X6 = 0x42, |