early-access version 3836
This commit is contained in:
parent
17bf9b7d23
commit
d07529eada
5 changed files with 32 additions and 12 deletions
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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{};
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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);
|
||||||
});
|
});
|
||||||
|
|
Loading…
Reference in a new issue