summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar liamwhite2023-03-14 11:35:37 -0400
committerGravatar GitHub2023-03-14 11:35:37 -0400
commit0c7149d222a42bbc4653f6e56af1e8b0f2a8017d (patch)
treee3b2f2d7ab921224b45c7794a7b62c6ea6a236d4
parentMerge pull request #9951 from Morph1984/save (diff)
parentvideo_core: Update texture format (diff)
downloadyuzu-0c7149d222a42bbc4653f6e56af1e8b0f2a8017d.tar.gz
yuzu-0c7149d222a42bbc4653f6e56af1e8b0f2a8017d.tar.xz
yuzu-0c7149d222a42bbc4653f6e56af1e8b0f2a8017d.zip
Merge pull request #9933 from vonchenplus/texture_format
video_core: Update texture format
-rw-r--r--src/video_core/renderer_vulkan/maxwell_to_vk.cpp7
-rw-r--r--src/video_core/texture_cache/format_lookup_table.cpp62
-rw-r--r--src/video_core/textures/texture.h70
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,