summaryrefslogtreecommitdiff
path: root/src/video_core/surface.h
diff options
context:
space:
mode:
authorGravatar greggameplayer2018-11-06 19:05:57 +0100
committerGravatar GitHub2018-11-06 19:05:57 +0100
commitd3b9599b2dd084db5b180a6b13ea0ceaec5c7587 (patch)
tree79bcd8922cb90d06b61e07b5cc6e84e320aa3128 /src/video_core/surface.h
parentcorrect syntax (diff)
parentMerge pull request #1649 from degasus/split_resource_manager (diff)
downloadyuzu-d3b9599b2dd084db5b180a6b13ea0ceaec5c7587.tar.gz
yuzu-d3b9599b2dd084db5b180a6b13ea0ceaec5c7587.tar.xz
yuzu-d3b9599b2dd084db5b180a6b13ea0ceaec5c7587.zip
Merge branch 'master' into Texture2DArray
Diffstat (limited to 'src/video_core/surface.h')
-rw-r--r--src/video_core/surface.h108
1 files changed, 95 insertions, 13 deletions
diff --git a/src/video_core/surface.h b/src/video_core/surface.h
index 3232e437f..dfdb8d122 100644
--- a/src/video_core/surface.h
+++ b/src/video_core/surface.h
@@ -72,19 +72,21 @@ enum class PixelFormat {
72 ASTC_2D_8X8_SRGB = 54, 72 ASTC_2D_8X8_SRGB = 54,
73 ASTC_2D_8X5_SRGB = 55, 73 ASTC_2D_8X5_SRGB = 55,
74 ASTC_2D_5X4_SRGB = 56, 74 ASTC_2D_5X4_SRGB = 56,
75 ASTC_2D_5X5 = 57,
76 ASTC_2D_5X5_SRGB = 58,
75 77
76 MaxColorFormat, 78 MaxColorFormat,
77 79
78 // Depth formats 80 // Depth formats
79 Z32F = 57, 81 Z32F = 59,
80 Z16 = 58, 82 Z16 = 60,
81 83
82 MaxDepthFormat, 84 MaxDepthFormat,
83 85
84 // DepthStencil formats 86 // DepthStencil formats
85 Z24S8 = 59, 87 Z24S8 = 61,
86 S8Z24 = 60, 88 S8Z24 = 62,
87 Z32FS8 = 61, 89 Z32FS8 = 63,
88 90
89 MaxDepthStencilFormat, 91 MaxDepthStencilFormat,
90 92
@@ -118,6 +120,7 @@ enum class SurfaceTarget {
118 Texture1DArray, 120 Texture1DArray,
119 Texture2DArray, 121 Texture2DArray,
120 TextureCubemap, 122 TextureCubemap,
123 TextureCubeArray,
121}; 124};
122 125
123/** 126/**
@@ -188,6 +191,8 @@ static constexpr u32 GetCompressionFactor(PixelFormat format) {
188 4, // ASTC_2D_8X8_SRGB 191 4, // ASTC_2D_8X8_SRGB
189 4, // ASTC_2D_8X5_SRGB 192 4, // ASTC_2D_8X5_SRGB
190 4, // ASTC_2D_5X4_SRGB 193 4, // ASTC_2D_5X4_SRGB
194 4, // ASTC_2D_5X5
195 4, // ASTC_2D_5X5_SRGB
191 1, // Z32F 196 1, // Z32F
192 1, // Z16 197 1, // Z16
193 1, // Z24S8 198 1, // Z24S8
@@ -199,6 +204,79 @@ static constexpr u32 GetCompressionFactor(PixelFormat format) {
199 return compression_factor_table[static_cast<std::size_t>(format)]; 204 return compression_factor_table[static_cast<std::size_t>(format)];
200} 205}
201 206
207static constexpr u32 GetDefaultBlockWidth(PixelFormat format) {
208 if (format == PixelFormat::Invalid)
209 return 0;
210 constexpr std::array<u32, MaxPixelFormat> block_width_table = {{
211 1, // ABGR8U
212 1, // ABGR8S
213 1, // ABGR8UI
214 1, // B5G6R5U
215 1, // A2B10G10R10U
216 1, // A1B5G5R5U
217 1, // R8U
218 1, // R8UI
219 1, // RGBA16F
220 1, // RGBA16U
221 1, // RGBA16UI
222 1, // R11FG11FB10F
223 1, // RGBA32UI
224 4, // DXT1
225 4, // DXT23
226 4, // DXT45
227 4, // DXN1
228 4, // DXN2UNORM
229 4, // DXN2SNORM
230 4, // BC7U
231 4, // BC6H_UF16
232 4, // BC6H_SF16
233 4, // ASTC_2D_4X4
234 1, // G8R8U
235 1, // G8R8S
236 1, // BGRA8
237 1, // RGBA32F
238 1, // RG32F
239 1, // R32F
240 1, // R16F
241 1, // R16U
242 1, // R16S
243 1, // R16UI
244 1, // R16I
245 1, // RG16
246 1, // RG16F
247 1, // RG16UI
248 1, // RG16I
249 1, // RG16S
250 1, // RGB32F
251 1, // RGBA8_SRGB
252 1, // RG8U
253 1, // RG8S
254 1, // RG32UI
255 1, // R32UI
256 8, // ASTC_2D_8X8
257 8, // ASTC_2D_8X5
258 5, // ASTC_2D_5X4
259 1, // BGRA8_SRGB
260 4, // DXT1_SRGB
261 4, // DXT23_SRGB
262 4, // DXT45_SRGB
263 4, // BC7U_SRGB
264 4, // ASTC_2D_4X4_SRGB
265 8, // ASTC_2D_8X8_SRGB
266 8, // ASTC_2D_8X5_SRGB
267 5, // ASTC_2D_5X4_SRGB
268 5, // ASTC_2D_5X5
269 5, // ASTC_2D_5X5_SRGB
270 1, // Z32F
271 1, // Z16
272 1, // Z24S8
273 1, // S8Z24
274 1, // Z32FS8
275 }};
276 ASSERT(static_cast<std::size_t>(format) < block_width_table.size());
277 return block_width_table[static_cast<std::size_t>(format)];
278}
279
202static constexpr u32 GetDefaultBlockHeight(PixelFormat format) { 280static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
203 if (format == PixelFormat::Invalid) 281 if (format == PixelFormat::Invalid)
204 return 0; 282 return 0;
@@ -261,6 +339,8 @@ static constexpr u32 GetDefaultBlockHeight(PixelFormat format) {
261 8, // ASTC_2D_8X8_SRGB 339 8, // ASTC_2D_8X8_SRGB
262 5, // ASTC_2D_8X5_SRGB 340 5, // ASTC_2D_8X5_SRGB
263 4, // ASTC_2D_5X4_SRGB 341 4, // ASTC_2D_5X4_SRGB
342 5, // ASTC_2D_5X5
343 5, // ASTC_2D_5X5_SRGB
264 1, // Z32F 344 1, // Z32F
265 1, // Z16 345 1, // Z16
266 1, // Z24S8 346 1, // Z24S8
@@ -299,7 +379,7 @@ static constexpr u32 GetFormatBpp(PixelFormat format) {
299 128, // BC7U 379 128, // BC7U
300 128, // BC6H_UF16 380 128, // BC6H_UF16
301 128, // BC6H_SF16 381 128, // BC6H_SF16
302 32, // ASTC_2D_4X4 382 128, // ASTC_2D_4X4
303 16, // G8R8U 383 16, // G8R8U
304 16, // G8R8S 384 16, // G8R8S
305 32, // BGRA8 385 32, // BGRA8
@@ -322,18 +402,20 @@ static constexpr u32 GetFormatBpp(PixelFormat format) {
322 16, // RG8S 402 16, // RG8S
323 64, // RG32UI 403 64, // RG32UI
324 32, // R32UI 404 32, // R32UI
325 16, // ASTC_2D_8X8 405 128, // ASTC_2D_8X8
326 16, // ASTC_2D_8X5 406 128, // ASTC_2D_8X5
327 32, // ASTC_2D_5X4 407 128, // ASTC_2D_5X4
328 32, // BGRA8_SRGB 408 32, // BGRA8_SRGB
329 64, // DXT1_SRGB 409 64, // DXT1_SRGB
330 128, // DXT23_SRGB 410 128, // DXT23_SRGB
331 128, // DXT45_SRGB 411 128, // DXT45_SRGB
332 128, // BC7U 412 128, // BC7U
333 32, // ASTC_2D_4X4_SRGB 413 128, // ASTC_2D_4X4_SRGB
334 16, // ASTC_2D_8X8_SRGB 414 128, // ASTC_2D_8X8_SRGB
335 16, // ASTC_2D_8X5_SRGB 415 128, // ASTC_2D_8X5_SRGB
336 32, // ASTC_2D_5X4_SRGB 416 128, // ASTC_2D_5X4_SRGB
417 128, // ASTC_2D_5X5
418 128, // ASTC_2D_5X5_SRGB
337 32, // Z32F 419 32, // Z32F
338 16, // Z16 420 16, // Z16
339 32, // Z24S8 421 32, // Z24S8