diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_shader_cache.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/shader/node.h | 3 | ||||
| -rw-r--r-- | src/video_core/surface.h | 128 | ||||
| -rw-r--r-- | src/video_core/texture_cache/surface_base.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/texture_cache/surface_base.h | 3 | ||||
| -rw-r--r-- | src/video_core/texture_cache/texture_cache.h | 1 | ||||
| -rw-r--r-- | src/video_core/textures/decoders.cpp | 7 |
7 files changed, 75 insertions, 71 deletions
diff --git a/src/video_core/renderer_opengl/gl_shader_cache.cpp b/src/video_core/renderer_opengl/gl_shader_cache.cpp index 02e217b8c..718703091 100644 --- a/src/video_core/renderer_opengl/gl_shader_cache.cpp +++ b/src/video_core/renderer_opengl/gl_shader_cache.cpp | |||
| @@ -104,7 +104,7 @@ constexpr std::tuple<const char*, const char*, u32> GetPrimitiveDescription(GLen | |||
| 104 | std::size_t CalculateProgramSize(const GLShader::ProgramCode& program) { | 104 | std::size_t CalculateProgramSize(const GLShader::ProgramCode& program) { |
| 105 | constexpr std::size_t start_offset = 10; | 105 | constexpr std::size_t start_offset = 10; |
| 106 | constexpr u64 key = 0xE2400FFFFF07000FULL; | 106 | constexpr u64 key = 0xE2400FFFFF07000FULL; |
| 107 | constexpr u64 mask =0xFFFFFFFFFF7FFFFFULL; | 107 | constexpr u64 mask = 0xFFFFFFFFFF7FFFFFULL; |
| 108 | std::size_t offset = start_offset; | 108 | std::size_t offset = start_offset; |
| 109 | std::size_t size = start_offset * sizeof(u64); | 109 | std::size_t size = start_offset * sizeof(u64); |
| 110 | while (offset < program.size()) { | 110 | while (offset < program.size()) { |
diff --git a/src/video_core/shader/node.h b/src/video_core/shader/node.h index 2bf535928..0ac83fcf0 100644 --- a/src/video_core/shader/node.h +++ b/src/video_core/shader/node.h | |||
| @@ -339,7 +339,8 @@ struct MetaImage { | |||
| 339 | }; | 339 | }; |
| 340 | 340 | ||
| 341 | /// Parameters that modify an operation but are not part of any particular operand | 341 | /// Parameters that modify an operation but are not part of any particular operand |
| 342 | using Meta = std::variant<MetaArithmetic, MetaTexture, MetaImage, MetaStackClass, Tegra::Shader::HalfType>; | 342 | using Meta = |
| 343 | std::variant<MetaArithmetic, MetaTexture, MetaImage, MetaStackClass, Tegra::Shader::HalfType>; | ||
| 343 | 344 | ||
| 344 | /// Holds any kind of operation that can be done in the IR | 345 | /// Holds any kind of operation that can be done in the IR |
| 345 | class OperationNode final { | 346 | class OperationNode final { |
diff --git a/src/video_core/surface.h b/src/video_core/surface.h index 959504cd3..ee9f00fa6 100644 --- a/src/video_core/surface.h +++ b/src/video_core/surface.h | |||
| @@ -447,70 +447,70 @@ enum class SurfaceCompression : u8 { | |||
| 447 | }; | 447 | }; |
| 448 | 448 | ||
| 449 | inline constexpr std::array<SurfaceCompression, MaxPixelFormat> compression_type_table = {{ | 449 | inline constexpr std::array<SurfaceCompression, MaxPixelFormat> compression_type_table = {{ |
| 450 | SurfaceCompression::None, // ABGR8U | 450 | SurfaceCompression::None, // ABGR8U |
| 451 | SurfaceCompression::None, // ABGR8S | 451 | SurfaceCompression::None, // ABGR8S |
| 452 | SurfaceCompression::None, // ABGR8UI | 452 | SurfaceCompression::None, // ABGR8UI |
| 453 | SurfaceCompression::None, // B5G6R5U | 453 | SurfaceCompression::None, // B5G6R5U |
| 454 | SurfaceCompression::None, // A2B10G10R10U | 454 | SurfaceCompression::None, // A2B10G10R10U |
| 455 | SurfaceCompression::None, // A1B5G5R5U | 455 | SurfaceCompression::None, // A1B5G5R5U |
| 456 | SurfaceCompression::None, // R8U | 456 | SurfaceCompression::None, // R8U |
| 457 | SurfaceCompression::None, // R8UI | 457 | SurfaceCompression::None, // R8UI |
| 458 | SurfaceCompression::None, // RGBA16F | 458 | SurfaceCompression::None, // RGBA16F |
| 459 | SurfaceCompression::None, // RGBA16U | 459 | SurfaceCompression::None, // RGBA16U |
| 460 | SurfaceCompression::None, // RGBA16UI | 460 | SurfaceCompression::None, // RGBA16UI |
| 461 | SurfaceCompression::None, // R11FG11FB10F | 461 | SurfaceCompression::None, // R11FG11FB10F |
| 462 | SurfaceCompression::None, // RGBA32UI | 462 | SurfaceCompression::None, // RGBA32UI |
| 463 | SurfaceCompression::Compressed, // DXT1 | 463 | SurfaceCompression::Compressed, // DXT1 |
| 464 | SurfaceCompression::Compressed, // DXT23 | 464 | SurfaceCompression::Compressed, // DXT23 |
| 465 | SurfaceCompression::Compressed, // DXT45 | 465 | SurfaceCompression::Compressed, // DXT45 |
| 466 | SurfaceCompression::Compressed, // DXN1 | 466 | SurfaceCompression::Compressed, // DXN1 |
| 467 | SurfaceCompression::Compressed, // DXN2UNORM | 467 | SurfaceCompression::Compressed, // DXN2UNORM |
| 468 | SurfaceCompression::Compressed, // DXN2SNORM | 468 | SurfaceCompression::Compressed, // DXN2SNORM |
| 469 | SurfaceCompression::Compressed, // BC7U | 469 | SurfaceCompression::Compressed, // BC7U |
| 470 | SurfaceCompression::Compressed, // BC6H_UF16 | 470 | SurfaceCompression::Compressed, // BC6H_UF16 |
| 471 | SurfaceCompression::Compressed, // BC6H_SF16 | 471 | SurfaceCompression::Compressed, // BC6H_SF16 |
| 472 | SurfaceCompression::Converted, // ASTC_2D_4X4 | 472 | SurfaceCompression::Converted, // ASTC_2D_4X4 |
| 473 | SurfaceCompression::None, // BGRA8 | 473 | SurfaceCompression::None, // BGRA8 |
| 474 | SurfaceCompression::None, // RGBA32F | 474 | SurfaceCompression::None, // RGBA32F |
| 475 | SurfaceCompression::None, // RG32F | 475 | SurfaceCompression::None, // RG32F |
| 476 | SurfaceCompression::None, // R32F | 476 | SurfaceCompression::None, // R32F |
| 477 | SurfaceCompression::None, // R16F | 477 | SurfaceCompression::None, // R16F |
| 478 | SurfaceCompression::None, // R16U | 478 | SurfaceCompression::None, // R16U |
| 479 | SurfaceCompression::None, // R16S | 479 | SurfaceCompression::None, // R16S |
| 480 | SurfaceCompression::None, // R16UI | 480 | SurfaceCompression::None, // R16UI |
| 481 | SurfaceCompression::None, // R16I | 481 | SurfaceCompression::None, // R16I |
| 482 | SurfaceCompression::None, // RG16 | 482 | SurfaceCompression::None, // RG16 |
| 483 | SurfaceCompression::None, // RG16F | 483 | SurfaceCompression::None, // RG16F |
| 484 | SurfaceCompression::None, // RG16UI | 484 | SurfaceCompression::None, // RG16UI |
| 485 | SurfaceCompression::None, // RG16I | 485 | SurfaceCompression::None, // RG16I |
| 486 | SurfaceCompression::None, // RG16S | 486 | SurfaceCompression::None, // RG16S |
| 487 | SurfaceCompression::None, // RGB32F | 487 | SurfaceCompression::None, // RGB32F |
| 488 | SurfaceCompression::None, // RGBA8_SRGB | 488 | SurfaceCompression::None, // RGBA8_SRGB |
| 489 | SurfaceCompression::None, // RG8U | 489 | SurfaceCompression::None, // RG8U |
| 490 | SurfaceCompression::None, // RG8S | 490 | SurfaceCompression::None, // RG8S |
| 491 | SurfaceCompression::None, // RG32UI | 491 | SurfaceCompression::None, // RG32UI |
| 492 | SurfaceCompression::None, // R32UI | 492 | SurfaceCompression::None, // R32UI |
| 493 | SurfaceCompression::Converted, // ASTC_2D_8X8 | 493 | SurfaceCompression::Converted, // ASTC_2D_8X8 |
| 494 | SurfaceCompression::Converted, // ASTC_2D_8X5 | 494 | SurfaceCompression::Converted, // ASTC_2D_8X5 |
| 495 | SurfaceCompression::Converted, // ASTC_2D_5X4 | 495 | SurfaceCompression::Converted, // ASTC_2D_5X4 |
| 496 | SurfaceCompression::None, // BGRA8_SRGB | 496 | SurfaceCompression::None, // BGRA8_SRGB |
| 497 | SurfaceCompression::Compressed, // DXT1_SRGB | 497 | SurfaceCompression::Compressed, // DXT1_SRGB |
| 498 | SurfaceCompression::Compressed, // DXT23_SRGB | 498 | SurfaceCompression::Compressed, // DXT23_SRGB |
| 499 | SurfaceCompression::Compressed, // DXT45_SRGB | 499 | SurfaceCompression::Compressed, // DXT45_SRGB |
| 500 | SurfaceCompression::Compressed, // BC7U_SRGB | 500 | SurfaceCompression::Compressed, // BC7U_SRGB |
| 501 | SurfaceCompression::Converted, // ASTC_2D_4X4_SRGB | 501 | SurfaceCompression::Converted, // ASTC_2D_4X4_SRGB |
| 502 | SurfaceCompression::Converted, // ASTC_2D_8X8_SRGB | 502 | SurfaceCompression::Converted, // ASTC_2D_8X8_SRGB |
| 503 | SurfaceCompression::Converted, // ASTC_2D_8X5_SRGB | 503 | SurfaceCompression::Converted, // ASTC_2D_8X5_SRGB |
| 504 | SurfaceCompression::Converted, // ASTC_2D_5X4_SRGB | 504 | SurfaceCompression::Converted, // ASTC_2D_5X4_SRGB |
| 505 | SurfaceCompression::Converted, // ASTC_2D_5X5 | 505 | SurfaceCompression::Converted, // ASTC_2D_5X5 |
| 506 | SurfaceCompression::Converted, // ASTC_2D_5X5_SRGB | 506 | SurfaceCompression::Converted, // ASTC_2D_5X5_SRGB |
| 507 | SurfaceCompression::Converted, // ASTC_2D_10X8 | 507 | SurfaceCompression::Converted, // ASTC_2D_10X8 |
| 508 | SurfaceCompression::Converted, // ASTC_2D_10X8_SRGB | 508 | SurfaceCompression::Converted, // ASTC_2D_10X8_SRGB |
| 509 | SurfaceCompression::None, // Z32F | 509 | SurfaceCompression::None, // Z32F |
| 510 | SurfaceCompression::None, // Z16 | 510 | SurfaceCompression::None, // Z16 |
| 511 | SurfaceCompression::None, // Z24S8 | 511 | SurfaceCompression::None, // Z24S8 |
| 512 | SurfaceCompression::Rearranged, // S8Z24 | 512 | SurfaceCompression::Rearranged, // S8Z24 |
| 513 | SurfaceCompression::None, // Z32FS8 | 513 | SurfaceCompression::None, // Z32FS8 |
| 514 | }}; | 514 | }}; |
| 515 | 515 | ||
| 516 | static constexpr SurfaceCompression GetFormatCompressionType(PixelFormat format) { | 516 | static constexpr SurfaceCompression GetFormatCompressionType(PixelFormat format) { |
diff --git a/src/video_core/texture_cache/surface_base.cpp b/src/video_core/texture_cache/surface_base.cpp index 97bf9ad7a..051014c6a 100644 --- a/src/video_core/texture_cache/surface_base.cpp +++ b/src/video_core/texture_cache/surface_base.cpp | |||
| @@ -101,7 +101,7 @@ MatchStructureResult SurfaceBaseImpl::MatchesStructure(const SurfaceParams& rhs) | |||
| 101 | std::optional<std::pair<u32, u32>> SurfaceBaseImpl::GetLayerMipmap( | 101 | std::optional<std::pair<u32, u32>> SurfaceBaseImpl::GetLayerMipmap( |
| 102 | const GPUVAddr candidate_gpu_addr) const { | 102 | const GPUVAddr candidate_gpu_addr) const { |
| 103 | if (gpu_addr == candidate_gpu_addr) { | 103 | if (gpu_addr == candidate_gpu_addr) { |
| 104 | return {{0,0}}; | 104 | return {{0, 0}}; |
| 105 | } | 105 | } |
| 106 | if (candidate_gpu_addr < gpu_addr) { | 106 | if (candidate_gpu_addr < gpu_addr) { |
| 107 | return {}; | 107 | return {}; |
diff --git a/src/video_core/texture_cache/surface_base.h b/src/video_core/texture_cache/surface_base.h index 662221adc..252b18538 100644 --- a/src/video_core/texture_cache/surface_base.h +++ b/src/video_core/texture_cache/surface_base.h | |||
| @@ -254,7 +254,8 @@ public: | |||
| 254 | } | 254 | } |
| 255 | return {}; | 255 | return {}; |
| 256 | } else { | 256 | } else { |
| 257 | return GetView(ViewParams(view_params.target, layer, 1, mipmap, end_mipmap - mipmap + 1)); | 257 | return GetView( |
| 258 | ViewParams(view_params.target, layer, 1, mipmap, end_mipmap - mipmap + 1)); | ||
| 258 | } | 259 | } |
| 259 | } | 260 | } |
| 260 | 261 | ||
diff --git a/src/video_core/texture_cache/texture_cache.h b/src/video_core/texture_cache/texture_cache.h index d86ddeb76..b720856f2 100644 --- a/src/video_core/texture_cache/texture_cache.h +++ b/src/video_core/texture_cache/texture_cache.h | |||
| @@ -18,6 +18,7 @@ | |||
| 18 | #include "common/common_types.h" | 18 | #include "common/common_types.h" |
| 19 | #include "common/math_util.h" | 19 | #include "common/math_util.h" |
| 20 | #include "core/memory.h" | 20 | #include "core/memory.h" |
| 21 | #include "core/settings.h" | ||
| 21 | #include "video_core/engines/fermi_2d.h" | 22 | #include "video_core/engines/fermi_2d.h" |
| 22 | #include "video_core/engines/maxwell_3d.h" | 23 | #include "video_core/engines/maxwell_3d.h" |
| 23 | #include "video_core/gpu.h" | 24 | #include "video_core/gpu.h" |
diff --git a/src/video_core/textures/decoders.cpp b/src/video_core/textures/decoders.cpp index 9a2f4198a..7e8295944 100644 --- a/src/video_core/textures/decoders.cpp +++ b/src/video_core/textures/decoders.cpp | |||
| @@ -256,7 +256,8 @@ std::vector<u8> UnswizzleTexture(u8* address, u32 tile_size_x, u32 tile_size_y, | |||
| 256 | } | 256 | } |
| 257 | 257 | ||
| 258 | void SwizzleSubrect(u32 subrect_width, u32 subrect_height, u32 source_pitch, u32 swizzled_width, | 258 | void SwizzleSubrect(u32 subrect_width, u32 subrect_height, u32 source_pitch, u32 swizzled_width, |
| 259 | u32 bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data, u32 block_height_bit) { | 259 | u32 bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data, |
| 260 | u32 block_height_bit) { | ||
| 260 | const u32 block_height = 1U << block_height_bit; | 261 | const u32 block_height = 1U << block_height_bit; |
| 261 | const u32 image_width_in_gobs{(swizzled_width * bytes_per_pixel + (gob_size_x - 1)) / | 262 | const u32 image_width_in_gobs{(swizzled_width * bytes_per_pixel + (gob_size_x - 1)) / |
| 262 | gob_size_x}; | 263 | gob_size_x}; |
| @@ -278,8 +279,8 @@ void SwizzleSubrect(u32 subrect_width, u32 subrect_height, u32 source_pitch, u32 | |||
| 278 | } | 279 | } |
| 279 | 280 | ||
| 280 | void UnswizzleSubrect(u32 subrect_width, u32 subrect_height, u32 dest_pitch, u32 swizzled_width, | 281 | void UnswizzleSubrect(u32 subrect_width, u32 subrect_height, u32 dest_pitch, u32 swizzled_width, |
| 281 | u32 bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data, u32 block_height_bit, | 282 | u32 bytes_per_pixel, u8* swizzled_data, u8* unswizzled_data, |
| 282 | u32 offset_x, u32 offset_y) { | 283 | u32 block_height_bit, u32 offset_x, u32 offset_y) { |
| 283 | const u32 block_height = 1U << block_height_bit; | 284 | const u32 block_height = 1U << block_height_bit; |
| 284 | for (u32 line = 0; line < subrect_height; ++line) { | 285 | for (u32 line = 0; line < subrect_height; ++line) { |
| 285 | const u32 y2 = line + offset_y; | 286 | const u32 y2 = line + offset_y; |