From eeb68768d6c74007f18052f3082c136ebde95c30 Mon Sep 17 00:00:00 2001 From: JPikachu Date: Sun, 27 Jul 2025 19:56:22 +0200 Subject: [PATCH] [vk] Exclude size equal alpha different copies from incompatible copy (#138) Should fix bugs in Splatoon 2 and TotK Co-authored-by: Maufeat Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/138 Co-authored-by: JPikachu Co-committed-by: JPikachu --- src/video_core/renderer_vulkan/vk_texture_cache.cpp | 6 ++++-- src/video_core/surface.cpp | 9 +++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 6272d6231a..9259639107 100644 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: Copyright 2019 yuzu Emulator Project // SPDX-License-Identifier: GPL-3.0-or-later @@ -1368,8 +1371,7 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, std::span copies) { // As per the size-compatible formats section of vulkan, copy manually via ReinterpretImage // these images that aren't size-compatible - if (HasAlpha(src.info.format) != HasAlpha(dst.info.format) || - BytesPerBlock(src.info.format) != BytesPerBlock(dst.info.format)) { + if (BytesPerBlock(src.info.format) != BytesPerBlock(dst.info.format)) { auto oneCopy = VideoCommon::ImageCopy{ .src_offset = VideoCommon::Offset3D(0, 0, 0), .dst_offset = VideoCommon::Offset3D(0, 0, 0), diff --git a/src/video_core/surface.cpp b/src/video_core/surface.cpp index c791bfa4e4..1998849e84 100644 --- a/src/video_core/surface.cpp +++ b/src/video_core/surface.cpp @@ -1,3 +1,6 @@ +// SPDX-FileCopyrightText: Copyright 2025 Eden Emulator Project +// SPDX-License-Identifier: GPL-3.0-or-later + // SPDX-FileCopyrightText: 2014 Citra Emulator Project // SPDX-License-Identifier: GPL-2.0-or-later @@ -263,6 +266,12 @@ bool HasAlpha(PixelFormat pixel_format) { case PixelFormat::B8G8R8A8_SRGB: case PixelFormat::BC1_RGBA_SRGB: case PixelFormat::A4B4G4R4_UNORM: + case PixelFormat::BC2_SRGB: + case PixelFormat::BC2_UNORM: + case PixelFormat::BC3_SRGB: + case PixelFormat::BC3_UNORM: + case PixelFormat::BC7_SRGB: + case PixelFormat::BC7_UNORM: return true; default: return false;