From d07529eada0b12f4521fdc811eea4013cb60ac2a Mon Sep 17 00:00:00 2001 From: pineappleEA Date: Sun, 27 Aug 2023 00:26:38 +0200 Subject: [PATCH] early-access version 3836 --- README.md | 2 +- src/core/crypto/key_manager.cpp | 27 +++++++++++-------- src/core/crypto/key_manager.h | 1 + src/video_core/dma_pusher.cpp | 8 ++++++ .../renderer_vulkan/vk_texture_cache.cpp | 6 +++++ 5 files changed, 32 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index f39ccb834..500d985f0 100755 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ yuzu emulator early access ============= -This is the source code for early-access 3835. +This is the source code for early-access 3836. ## Legal Notice diff --git a/src/core/crypto/key_manager.cpp b/src/core/crypto/key_manager.cpp index 95dc467c6..709fb835c 100755 --- a/src/core/crypto/key_manager.cpp +++ b/src/core/crypto/key_manager.cpp @@ -1189,25 +1189,30 @@ void KeyManager::DeriveETicket(PartitionDataManager& data, } void KeyManager::PopulateTickets() { - if (!common_tickets.empty() && !personal_tickets.empty()) { + if (ticket_databases_loaded) { return; } + ticket_databases_loaded = true; + + std::vector tickets; const auto system_save_e1_path = Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/80000000000000e1"; - - const Common::FS::IOFile save_e1{system_save_e1_path, Common::FS::FileAccessMode::Read, - Common::FS::FileType::BinaryFile}; + if (Common::FS::Exists(system_save_e1_path)) { + const Common::FS::IOFile save_e1{system_save_e1_path, Common::FS::FileAccessMode::Read, + Common::FS::FileType::BinaryFile}; + const auto blob1 = GetTicketblob(save_e1); + tickets.insert(tickets.end(), blob1.begin(), blob1.end()); + } const auto system_save_e2_path = Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/80000000000000e2"; - - const Common::FS::IOFile save_e2{system_save_e2_path, Common::FS::FileAccessMode::Read, - Common::FS::FileType::BinaryFile}; - - auto tickets = GetTicketblob(save_e1); - const auto blob2 = GetTicketblob(save_e2); - tickets.insert(tickets.end(), blob2.begin(), blob2.end()); + if (Common::FS::Exists(system_save_e2_path)) { + const Common::FS::IOFile save_e2{system_save_e2_path, Common::FS::FileAccessMode::Read, + Common::FS::FileType::BinaryFile}; + const auto blob2 = GetTicketblob(save_e2); + tickets.insert(tickets.end(), blob2.begin(), blob2.end()); + } for (const auto& ticket : tickets) { AddTicket(ticket); diff --git a/src/core/crypto/key_manager.h b/src/core/crypto/key_manager.h index e2c3c7ce2..41502309a 100755 --- a/src/core/crypto/key_manager.h +++ b/src/core/crypto/key_manager.h @@ -304,6 +304,7 @@ private: // Map from rights ID to ticket std::map common_tickets; std::map personal_tickets; + bool ticket_databases_loaded = false; std::array, 0x20> encrypted_keyblobs{}; std::array, 0x20> keyblobs{}; diff --git a/src/video_core/dma_pusher.cpp b/src/video_core/dma_pusher.cpp index 51f836fd9..3ff55f60e 100755 --- a/src/video_core/dma_pusher.cpp +++ b/src/video_core/dma_pusher.cpp @@ -83,6 +83,14 @@ bool DmaPusher::Step() { dma_state.dma_get, command_list_header.size * sizeof(u32)); } } + if (Settings::IsGPULevelHigh() && dma_state.method < MacroRegistersStart) { + Core::Memory::GpuGuestMemory + headers(memory_manager, dma_state.dma_get, command_list_header.size, + &command_headers); + ProcessCommands(headers); + return true; + } Core::Memory::GpuGuestMemory headers(memory_manager, dma_state.dma_get, command_list_header.size, &command_headers); diff --git a/src/video_core/renderer_vulkan/vk_texture_cache.cpp b/src/video_core/renderer_vulkan/vk_texture_cache.cpp index 7ac73d41b..8f86597ef 100755 --- a/src/video_core/renderer_vulkan/vk_texture_cache.cpp +++ b/src/video_core/renderer_vulkan/vk_texture_cache.cpp @@ -1193,6 +1193,12 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src, const VkImageAspectFlags aspect_mask = dst.AspectMask(); ASSERT(aspect_mask == src.AspectMask()); + if (VideoCore::Surface::BytesPerBlock(src.info.format) != + VideoCore::Surface::BytesPerBlock(dst.info.format)) { + ReinterpretImage(dst, src, copies); + return; + } + std::ranges::transform(copies, vk_copies.begin(), [aspect_mask](const auto& copy) { return MakeImageCopy(copy, aspect_mask); });