Back to Provenance

2793

.changelog/2793.md

3.3.12.3 KB
Original Source

Added

  • JIT Capability Matrix — each core declares its JIT requirement via a PVJITRequirement key in its own Core.plist (required, optional, or notRequired). CoreLoader automatically populates a thread-safe PVJITRequirementRegistry (using PVCoreBridge.PVJITPlistRequirement) at startup — no hardcoded identifier list to maintain.
  • PVEmulatorCore.jitRequirement propertyopen var jitRequirement: PVPrimitives.PVJITRequirement on PVEmulatorCore (default: .notSupported) lets the app layer query any core's JIT requirement directly without a string lookup. Dolphin → .automaticWithFallback; melonDS, DeSmuME 2015, PCSX Rearmed, Mupen64Plus, PPSSPP, Flycast, Play! → see DEVELOPER.md table; Azahar (Citra) and emuThree → .requiredOrCrash.
  • PVPrimitives.PVJITRequirement enum — richer four-case enum with .notSupported, .optional(fallback:), .requiredOrCrash, and .automaticWithFallback. Includes isSafeWithoutJIT and hasJIT helpers for the app layer.
  • PVCoreBridge.PVJITPlistRequirement enum — simple three-case plist-level classification (notRequired, optional, required) used by PVJITRequirementRegistry. Distinct name from PVPrimitives.PVJITRequirement to prevent compiler ambiguity in modules that import both.
  • PVJITDisabledWithoutJIT plist key — new Core.plist key that marks cores disabled solely because they need JIT. CoreLoader.jitDisabledCoreIdentifiers() returns these identifiers so the app can auto-enable them once a JIT entitlement is acquired (smart JIT acquisition flow, #2794).

Fixed

  • PVJITRequirementRegistry.reset() — added public reset() method; CoreLoader.registerJITRequirements was calling it but only _resetForTesting() existed, which would have caused a compile error.
  • Flycast jitRequirement overridePVFlycastEmuCore now correctly declares .optional(fallback: "Interpreter"), matching its Core.plist and documentation.
  • Play! jitRequirement overridePVPlayCore now correctly declares .requiredOrCrash, matching its Core.plist required entry.
  • Plist round-trip equalityCorePlistEntry == and EmulatorCoreInfoPlist == helpers now include PVJITRequirement and PVJITDisabledWithoutJIT fields so JIT data isn't silently dropped in equality checks.