Changes:
- Optimize InvalidateNCE to avoid unnecessary DeferredMapSeparateHeap
calls for already-mapped memory and early return for rasterizer case
- Add lock-free fast path to HeapTracker.DeferredMapSeparateHeap using
atomic m_map_count to avoid mutex acquisition when no mappings exist
- Replace seq_cst memory barriers with acquire/release ordering for
instruction cache invalidation and ordered load/store operations to
reduce pipeline stalls while maintaining ARM memory model correctness
- Optimize spinlock implementation in patcher with YIELD instruction
and non-exclusive check before acquisition to reduce bus contention
These optimizations eliminate the primary bottlenecks causing poor NCE
performance: excessive mutex contention on every memory access and
overly conservative memory barriers. The changes restore NCE to match
its original performance levels.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Fixed NullPointerException caused by missing EXTENDED_DYNAMIC_STATE and
USE_CONDITIONAL_RENDERING entries in SettingsItem.settingsItems HashMap.
These settings were referenced in the Zep Zone menu but not registered,
causing the app to crash when trying to display them.
Signed-off-by: Zephyron <zephyron@citron-emu.org>
Changes:
- Add missing encryption type cases to all switch statements
- Only call CreatePatchMetaStorage() when both tables are present
- Update assertions to allow partial table combinations
Fixes loading for Hades II, Pokémon Legends: Z-A, and other games
with newer NCA structures.
Reported-by: Dr.Stug@citron-emu.org
Signed-off-by: Zephyron <zephyron@citron-emu.org>