• 0.8.0 4e0178c678

    Citron Release 0.8.0 Pre-release

    Zephyron released this 2025-10-11 07:11:09 +00:00 | 155 commits to main since this release

    Citron Emulator v0.8.0 Changelog

    This is a special coordinated release:


    Special Thanks & Acknowledgments

    This release would not have been possible without the incredible work and collaboration from:

    Research & Development

    • LotP (Ryubing/Ryujinx): Reverse engineering genius
    • Lord Bubbles & TKMM Team: For creating the amazing TKMM mod manager and collaborative support
    • MaxLastBreath: Extensive testing, insights, and creator of NX Optimizer

    Testing & Quality Assurance

    • Hayate Yoshida (JapanMan): Dedicated testing
    • Tetsuya Takahashi: Thorough testing across multiple titles
    • Dr.Stug: Testing, detailed logging, and hardware compatibility reports
    • Collecting: UI Developer, Linux Maintainer, and new features to Citron

    The Citron Team

    A massive thank you to all Citron contributors and community members who made this release possible!


    Major Game Compatibility Updates

    BOTW & TOTK Support - BREAKTHROUGH UPDATE

    This release brings full compatibility with the latest game versions:

    • The Legend of Zelda: Breath of the Wild v1.8.2 - Now fully supported!
    • The Legend of Zelda: Tears of the Kingdom v1.4.2 - Resolved boot loop and controller crashes!

    What's Fixed:

    • Boot loop issues caused by incorrect HID state implementation
    • "No controller" crash on game launch
    • Audio crackling and stability issues with REV15 games
    • Improved performance and stability in both titles

    New Features

    Audio System - Complete REV15 Implementation

    This is our biggest audio update yet!

    Core REV15 Features

    • Audio Renderer REV15: Full implementation of SDK version 15 audio renderer with native float processing
      • Native float biquad filters for superior audio quality (BiquadFilterParameter2)
      • Proper handling of Voice Input Parameter V2 format (0x188 bytes vs legacy 0x170)
      • Splitter Destination V2b support with biquad filter parameters (0xA8 bytes)
      • Multi-tap biquad filter processing with FP16/FP32 optimization
      • Dual coefficient storage: maintains both float and fixed-point for compatibility

    HID Sampling Number Fix (Critical)

    • Fixed Boot Loop Bug: HID atomic storage sampling number now correctly doubles the input state value
    • Resolves controller detection issues in SDK20 games
    • Fixes the exact issue preventing TotK v1.4.2 and BotW v1.8.2 from launching

    New Audio Subsystems

    • AudioSnoopManager: DSP statistics and performance monitoring system
      • Real-time CPU/DSP usage tracking
      • Voice drop and command drop counting
      • Buffer underrun/overrun detection
    • AudioSystemManager: Applet audio state management
      • Suspend/resume support for applet transitions
      • Master volume control (input/output/record)
      • Debug suspension capabilities
      • Applet resource user ID registration
    • FinalOutputRecorder: Complete output recording implementation
      • Shared ring buffer for audio capture
      • ITU-R BS.1770 loudness measurement support
      • Work buffer management and buffer lifecycle

    Audio Processing Enhancements

    • FFT (Fast Fourier Transform): Cooley-Tukey algorithm implementation
      • Real-to-complex and complex-to-real transforms
      • Complex-to-complex transforms with inverse support
      • Proper bit-reversal and work buffer management
    • Loudness Calculator: Professional loudness metering
      • ITU-R BS.1770 standard compliance
      • LUFS (Loudness Units Full Scale) measurement
      • K-weighting filter with shelf and high-pass stages
      • Momentary (400ms), short-term (3s), and integrated loudness
    • Limiter Effect: Full-featured dynamics processor
      • Attack and release time controls
      • Threshold and ratio parameters
      • Makeup gain compensation
      • Envelope follower with peak detection
    • Audio Device Enhancements:
      • Device gain support for AudioInSystem
      • Improved buffer management utilities
      • ADPCM helper functions

    Visual Enhancements

    ScaleFX Filter - New Pixel Art Upscaling

    • Edge-detection based pixel art upscaling algorithm
    • Preserves sharp edges while reducing pixelation
    • Six pattern detection types (horizontal, vertical, diagonal)
    • Sub-pixel anti-aliasing with configurable strength
    • Corner handling for improved quality
    • Available in both OpenGL and Vulkan
    • FP16/FP32 variants for hardware optimization
    • Based on libretro's ScaleFX implementation
    • Ideal for low-resolution games and pixel art styles

    Lanczos Filter - High-Quality Resampling

    • Professional-grade resampling filter
    • Sinc-based interpolation for maximum sharpness
    • Minimal ringing artifacts
    • Excellent for integer scaling scenarios

    0.25X Quarter Resolution - Extreme Performance Mode

    • Render at 180p/270p for 720p/1080p native
    • Four times faster rendering
    • Perfect for ultra-low-end hardware
    • Performance testing and profiling
    • Marked as EXPERIMENTAL (may cause visual artifacts)

    Performance Monitoring

    • CPU & GPU Temperature Display (Linux): Real-time hardware temperature monitoring
      • Color-coded temperature indicators
      • Desktop and Android support
      • Non-intrusive overlay integration
    • Battery Percentage (Android): Battery status in performance overlay
      • Charge percentage display
      • Charging state indicator
      • Temperature alongside battery info

    Performance - Profile-Guided Optimization (PGO)

    Introducing PGO Build System - 10-30% Performance Boost!

    • Two-Stage Optimization Process:
      • Stage 1: Instrumented builds collect runtime profiling data
      • Stage 2: Optimized builds use profile data for intelligent optimization
    • Multi-Compiler Support:
      • MSVC with FASTGENPROFILE for fast profiling
      • GCC with profile-generate/profile-use
      • Clang with llvm-profdata integration
    • Automated Build Scripts:
      • pgo-build.ps1 for Windows (PowerShell)
      • pgo-build.sh for Linux/macOS (Bash)
      • fix-pgo-dll.ps1 utility for MSVC DLL issues
    • CMake Integration:
      • -DCITRON_ENABLE_PGO_GENERATE=ON for profiling builds
      • -DCITRON_ENABLE_PGO_USE=ON for optimized builds
      • Automatic PGO runtime DLL detection and deployment

    Improvements

    Audio System Architecture

    REV15 Implementation Details:

    • Biquad Filter Processing:
      • Legacy fixed-point Q2.14 conversion maintained for compatibility
      • Native float processing path for REV15+ games
      • Proper coefficient conversion with clamping
      • Enhanced filter state initialization
      • ApplyBiquadFilterFloat2() for native float coefficients
    • Command Generation:
      • Smart selection between float and fixed-point processing
      • Automatic detection of REV15 capabilities via behavior flags
      • Multi-tap biquad optimization for REV10+ games
      • Proper integration with voice and effect contexts
    • Parameter Handling:
      • VoiceInParameterV2 struct (0x188 bytes) for REV15 voices
      • InParameterVersion2b (0xA8 bytes) for splitter destinations
      • Dual storage system: biquads (s16) and biquads_float (f32)
      • Proper stride calculation for mixed revision support

    UI/UX Improvements

    • Adjustable Configuration Window: Resizable settings dialog with proper scroll support
    • Graphics & System Tab Fixes: Proper resize and scroll behavior
    • Accent Color System: Customizable UI theming with accent colors
    • Column Layout: Improved game list column organization
    • State Management UI: Enhanced save state interface

    Build System & Compiler Support

    • Clang Compiler Support: Full Clang compilation with LTO support
      • Fixed template instantiation issues
      • Resolved warning suppressions
      • Proper attribute handling
    • MSVC Improvements:
      • Fixed C4305 truncation warnings in QColor calls
      • Disabled C2375 warning for __builtin_assume_aligned redefinition
      • Proper PGO runtime DLL handling
    • CMake Enhancements:
      • Automatic user directory creation for portable mode
      • Improved dependency management
      • Better cross-platform configuration

    Platform Support

    • Android Enhancements:
      • Fixed instant crash in RAM overlay
      • Battery percentage and temperature display
      • Improved resource handling
    • Qt Framework:
      • Fixed QImage::mirrored() usage (was incorrectly using non-existent flipped())
      • Proper state change handling
      • Better event management

    Bug Fixes

    Critical Fixes

    • TotK/BotW Boot Loop: Fixed HID sampling number mismatch preventing game startup
      • Atomic storage sampling number now properly doubles state value
    • Controller Detection: Resolved "no controller" crash by fixing atomic storage state
      • Proper SamplingNumber propagation in ring LIFO
      • Fixes SDK20 game controller initialization
    • Use-After-Free Bug: Resolved memory safety issue in core systems
    • Android RAM Overlay Crash: Fixed instant crash when enabling RAM display (Credit To Beta Tester: Shadai theonlyshadai)

    Audio Fixes

    • REV15 Compatibility: Native float biquad processing prevents audio distortion
    • Mix Parameter Validation: Added bounds checking for mix count in dirty parameter mode
    • Splitter Float Coefficients: Properly stores and applies biquad filters in splitters
    • Audio Stability: Fixed crashes and crackling in REV15 games

    Compilation Fixes

    • Clang Warnings: Resolved all Clang compilation warnings
    • MSVC Truncation: Fixed C4305 warnings in color conversion
    • Discord RPC: Applied wclass-memaccess fix patch
    • RapidJSON: Compiler compatibility patch
    • STB Image: Overflow fix patch (CVE mitigation)

    UI Fixes

    • Configuration Window Scrolling: Proper scroll behavior in all tabs
    • Qt Vertical Layout: Fixed deprecated value usage
    • State Change Events: Proper checkStateChanged handling
    • Theme Application: Correct theme.h inclusion and initialization

    Build System Fixes

    • Ring Buffer Alignment: Stable and predictable 64-byte alignment
    • Dynarmic Fastmem: Removed MSVC-specific pointer assignments
    • Patch Application: Corrected -p0 flag usage in patches
    • Copyright Headers: Added proper SPDX headers to new files

    Technical Improvements

    Code Architecture

    Float Coefficient Storage:

    • Dual storage system for biquad filters maintains accuracy
      • Legacy s16 fixed-point for older revisions (REV1-14)
      • Native f32 float for REV15+ accuracy
      • Automatic selection based on IsVoiceInParameterV2Supported()
    • Backward compatibility fully maintained

    Splitter Context Enhancement:

    • V2b parameter format support (0xA8 bytes)
    • Biquad filter storage in splitter destinations
    • Proper handling of extended parameter structures
    • splitter_float_coeff_supported flag management

    Type Safety:

    • Added use_float_biquads and use_float_coefficients flags
    • Proper scope management for parameter structures
    • Enhanced error handling for parameter parsing
    • Eliminated variable shadowing issues

    Shader System

    ScaleFX Implementation:

    • 6 edge detection patterns (horizontal, vertical, diagonal)
    • Sub-pixel anti-aliasing with configurable strength (SFX_SAA)
    • Color threshold tuning (SFX_CLR = 0.35)
    • Corner handling for improved quality
    • FP16 optimization with AMD/NVIDIA extension support

    Lanczos Refinements:

    • Optimized sinc function calculation
    • Improved window function
    • Better edge handling

    Performance Optimizations

    • PGO Infrastructure: Profile-guided optimization for 10-30% gains
    • Temperature Monitoring: Zero-overhead when disabled
    • Buffer Management: Optimized ring buffer implementation
    • FFT Processing: Efficient Cooley-Tukey algorithm

    New Files Added

    Audio Core

    src/audio_core/audio_snoop_manager.{cpp,h}
    src/audio_core/audio_system_manager.{cpp,h}
    src/audio_core/common/audio_helpers.h
    src/audio_core/common/fft.{cpp,h}
    src/audio_core/common/loudness_calculator.{cpp,h}
    src/audio_core/device/audio_buffer_list.h
    src/audio_core/device/shared_ring_buffer.{cpp,h}
    src/audio_core/renderer/command/effect/limiter.{cpp,h}
    src/audio_core/renderer/effect/limiter.{cpp,h}
    src/audio_core/renderer/final_output_recorder/
      ├── final_output_recorder_buffer.h
      ├── final_output_recorder_system.cpp
      └── final_output_recorder_system.h
    

    Video Core

    src/video_core/host_shaders/opengl_present_scalefx.frag
    src/video_core/host_shaders/vulkan_present_scalefx_fp16.frag
    src/video_core/host_shaders/vulkan_present_scalefx_fp32.frag
    

    Build System

    CMakeModules/PGO.cmake
    fix-pgo-dll.ps1
    pgo-build.ps1
    pgo-build.sh
    

    Modified Files (Major Changes)

    Audio Core - REV15 Implementation

    • src/audio_core/common/feature_support.h: CurrentRevision 13 → 15
    • src/audio_core/renderer/behavior/behavior_info.{cpp,h}: Added REV15 support methods
    • src/audio_core/renderer/behavior/info_updater.cpp: VoiceInParameterV2 parsing
    • src/audio_core/renderer/voice/voice_info.h: Added InParameter2 and float biquad storage
    • src/audio_core/renderer/command/effect/biquad_filter.{cpp,h}: Native float processing
    • src/audio_core/renderer/command/effect/multi_tap_biquad_filter.{cpp,h}: Float coefficient support
    • src/audio_core/renderer/command/command_buffer.cpp: Updated command generation
    • src/audio_core/renderer/splitter/splitter_destinations_data.{cpp,h}: V2b parameter support
    • src/audio_core/renderer/splitter/splitter_context.{cpp,h}: Float coefficient handling
    • src/audio_core/in/audio_in_system.{cpp,h}: Device gain support

    HID Core

    • src/hid_core/resources/ring_lifo.h: Critical fix - sampling_number now properly doubled

    Video Core

    • src/video_core/renderer_opengl/gl_blit_screen.cpp: ScaleFX integration
    • src/video_core/renderer_opengl/present/filters.{cpp,h}: ScaleFX factory
    • src/video_core/renderer_vulkan/vk_blit_screen.cpp: ScaleFX integration
    • src/video_core/renderer_vulkan/present/filters.{cpp,h}: ScaleFX shader selection
    • src/video_core/host_shaders/CMakeLists.txt: New shader registrations

    Configuration & UI

    • src/common/settings.cpp: 0.25X resolution handling
    • src/common/settings_enums.h: Added Res1_4X and ScaleFx enums
    • src/citron/configuration/shared_translation.{cpp,h}: ScaleFX and 0.25X translations
    • src/citron/main.{cpp,h}: Temperature monitoring, UI improvements
    • src/citron/about_dialog.cpp: Version 0.7.1 → 0.8.0
    • UI configuration files: Resizable dialogs, accent colors, improved layouts

    Build System

    • CMakeLists.txt: PGO module integration
    • src/audio_core/CMakeLists.txt: All new audio files added
    • .gitignore: PGO profile exclusions

    Known Issues

    • FSR2 and TAA remain experimental (from v0.7/v0.7.1)
    • ScaleFX may show artifacts with some UI elements at extreme scales
    • 0.25X resolution marked EXPERIMENTAL - may cause rendering issues in some games
    • PGO requires two complete build cycles (expected behavior)
    • Temperature monitoring requires hardware sensor support (may show 0°C on some systems)

    Building with PGO (Optional)

    For maximum performance, you can build Citron with Profile-Guided Optimization:

    Windows:

    .\pgo-build.ps1 generate    # Build instrumented version
    # Run Citron and play games for 15-30 minutes
    .\pgo-build.ps1 use         # Build optimized version
    

    Linux/macOS:

    ./pgo-build.sh generate     # Build instrumented version
    # Run Citron and play games for 15-30 minutes
    ./pgo-build.sh use          # Build optimized version
    

    PGO can provide 10-30% performance improvements based on your typical usage patterns!


    Migration Notes

    For Users

    • No configuration migration needed - fully backward compatible
    • Existing saves remain compatible
    • REV15 games will automatically use new audio path

    For Developers

    • New audio subsystems available for service implementations
    • CurrentRevision updated to 15 - update any hardcoded checks
    • BiquadFilterCommand now has dual coefficient storage
    • Check use_float_biquads flag when handling voice info

    Community & Coordination

    This synchronized release shows the power of community collaboration:

    • Citron: Core emulator with REV15 audio and enhanced compatibility
    • Ryubing: Research and reverse engineering insights for SDK20 support
    • TKMM: Professional mod management for seamless game modifications
    • NX Optimizer: Performance optimization and advanced game tweaking

    Together, we're providing the most complete and optimized experience for Nintendo Switch emulation!


    Statistics

    • Files Changed: 100+ files modified/added
    • Lines Added: ~5,000+ lines of new code
    • New Subsystems: 4 major audio subsystems
    • Bug Fixes: 20+ critical and minor fixes
    • New Features: 8 major user-facing features

    Full Changelog: v0.7.1...v0.8.0

    Download: Latest Release


    Enjoy full TotK 1.4.2 and BotW 1.8.2 support!

    Special thanks to the Ryubing community, MaxLastBreath community and TKMM community, and to all our testers and contributors who made this release possible!

    Downloads