mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-31 19:48:53 +00:00
[core] Speed up NCZBLOCK reads and skip double AES for pre-decrypted NCZ (#4582)
- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md). - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- - Use a 32-slot direct-mapped block cache and reuse one ZSTD_DCtx per BlockReader instead of re-creating it per block. - Find the covering section with std::lower_bound instead of a linear scan (helps BKTR updates with thousands of sections). - Mark BlockNczFile as HasDecryptedSections() and drop its CTR pass; NCZ body is stored decrypted, so NcaFileSystemDriver now skips its AES layers for these files (no double decryption). - Recognize .xcz as XCZ in AppLoader_XCI::IdentifyType. thanks Reikatari Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4582 Reviewed-by: Maufeat <sahyno1996@gmail.com>
This commit is contained in:
@@ -112,6 +112,9 @@ public:
|
||||
// Returns whether or not the file can be read from.
|
||||
virtual bool IsReadable() const = 0;
|
||||
|
||||
// Returns true if this file serves NCA body data that is already decrypted (e.g. NCZ).
|
||||
virtual bool HasDecryptedSections() const { return false; }
|
||||
|
||||
// The primary method of reading from the file. Reads length bytes into data starting at offset
|
||||
// into file. Returns number of bytes successfully read.
|
||||
virtual std::size_t Read(u8* data, std::size_t length, std::size_t offset = 0) const = 0;
|
||||
|
||||
Reference in New Issue
Block a user