early-access version 3836

This commit is contained in:
pineappleEA 2023-08-27 00:26:38 +02:00
parent 17bf9b7d23
commit d07529eada
5 changed files with 32 additions and 12 deletions

View file

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 3835. This is the source code for early-access 3836.
## Legal Notice ## Legal Notice

View file

@ -1189,25 +1189,30 @@ void KeyManager::DeriveETicket(PartitionDataManager& data,
} }
void KeyManager::PopulateTickets() { void KeyManager::PopulateTickets() {
if (!common_tickets.empty() && !personal_tickets.empty()) { if (ticket_databases_loaded) {
return; return;
} }
ticket_databases_loaded = true;
std::vector<Ticket> tickets;
const auto system_save_e1_path = const auto system_save_e1_path =
Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/80000000000000e1"; Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/80000000000000e1";
if (Common::FS::Exists(system_save_e1_path)) {
const Common::FS::IOFile save_e1{system_save_e1_path, Common::FS::FileAccessMode::Read, const Common::FS::IOFile save_e1{system_save_e1_path, Common::FS::FileAccessMode::Read,
Common::FS::FileType::BinaryFile}; Common::FS::FileType::BinaryFile};
const auto blob1 = GetTicketblob(save_e1);
tickets.insert(tickets.end(), blob1.begin(), blob1.end());
}
const auto system_save_e2_path = const auto system_save_e2_path =
Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/80000000000000e2"; Common::FS::GetYuzuPath(Common::FS::YuzuPath::NANDDir) / "system/save/80000000000000e2";
if (Common::FS::Exists(system_save_e2_path)) {
const Common::FS::IOFile save_e2{system_save_e2_path, Common::FS::FileAccessMode::Read, const Common::FS::IOFile save_e2{system_save_e2_path, Common::FS::FileAccessMode::Read,
Common::FS::FileType::BinaryFile}; Common::FS::FileType::BinaryFile};
const auto blob2 = GetTicketblob(save_e2);
auto tickets = GetTicketblob(save_e1); tickets.insert(tickets.end(), blob2.begin(), blob2.end());
const auto blob2 = GetTicketblob(save_e2); }
tickets.insert(tickets.end(), blob2.begin(), blob2.end());
for (const auto& ticket : tickets) { for (const auto& ticket : tickets) {
AddTicket(ticket); AddTicket(ticket);

View file

@ -304,6 +304,7 @@ private:
// Map from rights ID to ticket // Map from rights ID to ticket
std::map<u128, Ticket> common_tickets; std::map<u128, Ticket> common_tickets;
std::map<u128, Ticket> personal_tickets; std::map<u128, Ticket> personal_tickets;
bool ticket_databases_loaded = false;
std::array<std::array<u8, 0xB0>, 0x20> encrypted_keyblobs{}; std::array<std::array<u8, 0xB0>, 0x20> encrypted_keyblobs{};
std::array<std::array<u8, 0x90>, 0x20> keyblobs{}; std::array<std::array<u8, 0x90>, 0x20> keyblobs{};

View file

@ -83,6 +83,14 @@ bool DmaPusher::Step() {
dma_state.dma_get, command_list_header.size * sizeof(u32)); dma_state.dma_get, command_list_header.size * sizeof(u32));
} }
} }
if (Settings::IsGPULevelHigh() && dma_state.method < MacroRegistersStart) {
Core::Memory::GpuGuestMemory<Tegra::CommandHeader,
Core::Memory::GuestMemoryFlags::SafeRead>
headers(memory_manager, dma_state.dma_get, command_list_header.size,
&command_headers);
ProcessCommands(headers);
return true;
}
Core::Memory::GpuGuestMemory<Tegra::CommandHeader, Core::Memory::GpuGuestMemory<Tegra::CommandHeader,
Core::Memory::GuestMemoryFlags::UnsafeRead> Core::Memory::GuestMemoryFlags::UnsafeRead>
headers(memory_manager, dma_state.dma_get, command_list_header.size, &command_headers); headers(memory_manager, dma_state.dma_get, command_list_header.size, &command_headers);

View file

@ -1193,6 +1193,12 @@ void TextureCacheRuntime::CopyImage(Image& dst, Image& src,
const VkImageAspectFlags aspect_mask = dst.AspectMask(); const VkImageAspectFlags aspect_mask = dst.AspectMask();
ASSERT(aspect_mask == src.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) { std::ranges::transform(copies, vk_copies.begin(), [aspect_mask](const auto& copy) {
return MakeImageCopy(copy, aspect_mask); return MakeImageCopy(copy, aspect_mask);
}); });