Commit Graph

27437 Commits

Author SHA1 Message Date
Zephyron
5855414f01 Delete README.md 2025-09-06 07:44:22 +00:00
Zephyron Dev
493ef62436 Initial commit 2025-09-06 07:25:53 +00:00
Zephyron
69c3bc705c feat: implement missing kernel event handle and service function
- Implement CreateInterruptEvent SVC function to resolve panic
  - Add proper resource management with KScopedResourceReservation
  - Use regular KEvent as placeholder for interrupt events
  - Add proper cleanup with SCOPE_EXIT
  - Include debug logging for troubleshooting

- Implement GetLaunchRequiredVersionUpgrade in IApplicationFunctions service
  - Fix "Unknown / unimplemented function" error for command 210
  - Return event handle instead of boolean to match Nintendo Switch API
  - Use state_changed_event as placeholder until dedicated event is implemented
  - Add function declaration to header file

Tested with Hollow Knight: Silksong - successfully boots.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-06 14:20:45 +10:00
Zephyron
50afaefffb feat: Enhanced Nintendo SDK crash detection and recovery system
* Enhanced ARM interface backtrace logging with Nintendo SDK crash detection
  - Detects nnSdk module crashes and initialization-time failures
  - Provides detailed recovery suggestions and logging
  - Identifies recoverable vs non-recoverable crashes

* Improved physical core crash handling
  - Enhanced prefetch abort and data abort recovery
  - Continues execution for Nintendo SDK crashes instead of suspending
  - Better logging for crash analysis and debugging

* Expanded SVC exception handling
  - Added Nintendo SDK-specific crash recovery logic
  - Enhanced general crash recovery for low-address and assertion failures
  - Improved UE4 crash handling integration

* Updated Horizon OS version to 20.4.0
  - Updated HOS_VERSION_MINOR from 1 to 4
  - Updated HOS_VERSION_MICRO from 5 to 0
  - Updated version hash and display strings accordingly

* Fixed Vulkan turbo mode performance metrics
  - Added proper type casting for execution time comparisons
  - Prevents potential integer overflow issues

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-05 14:57:58 +10:00
Zephyron
ae46d4629f Merge branch 'vulkan-turbo-mode-optimization' into 'master'
vulkan: Add adaptive timeout and auto-disable to turbo mode

See merge request citron/rewrite!56
2025-08-26 08:33:43 +00:00
Zephyron
c851521a6b vulkan: Add adaptive timeout and auto-disable to turbo mode
- Implement adaptive timeout system that adjusts based on GPU performance
- Add auto-disable after 10 cycles of persistent timeouts
- Reduce workload (32x32 dispatch, 1MB buffer) for better compatibility
- Add performance monitoring and runtime control
- Fixes persistent timeout warnings by gracefully degrading when GPU is busy

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-26 18:30:58 +10:00
Zephyron
7f9047e52a Merge branch 'vulkan-descriptor-queue-optimization' into 'master'
vulkan: Optimize descriptor update queue performance

See merge request citron/rewrite!55
2025-08-26 08:03:05 +00:00
Zephyron
4cdc602f1e vulkan: Optimize descriptor update queue performance
- Increase frame count (8→12) and payload size (0x20000→0x40000)
- Add batch operations and memory management helpers
- Improve overflow handling with statistics tracking
- Create specialized classes for different workload types
- Implement smart pre-allocation and memory optimization
- Add comprehensive performance monitoring

Improves performance for Switch titles with complex shaders under Vulkan.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-26 16:15:10 +10:00
Zephyron
98a207e516 Merge branch 'zbc-table-management' into 'master'
nvdrv: Implement ZBC table management with GPU memory integration

See merge request citron/rewrite!54
2025-08-25 08:01:12 +00:00
Zephyron
f819b5d58d nvdrv: Implement ZBC table management with GPU memory integration
- Replace stubbed ZBCSetTable with comprehensive implementation
- Add parameter validation for format and type fields
- Implement detailed logging of ZBC color values for debugging
- Add proper documentation explaining ZBC (Zero Bandwidth Clear) functionality
- Handle color_ds and color_l2 arrays for GPU memory clearing operations
- Validate format parameter range (0-0xFF) and type parameter (0-1)
- Provide clear error handling for invalid parameters
- Add ZBCManager singleton class for global ZBC table management
- Implement ZBCQueryTable with full table lookup functionality
- Add thread-safe ZBC table storage with proper mutex protection
- Create ZBC namespace helper functions for GPU clearing operations
- Fix IoctlGpuCharacteristics struct size (0xA0) by correcting field types
- Add comprehensive logging and error handling for ZBC operations
- Enable ZBC table integration with GPU memory management system
- Store ZBC entries in both local device table and global manager
- Implement reference counting for proper ZBC entry lifecycle management

ZBC (Zero Bandwidth Clear) allows the GPU to perform efficient memory
clearing operations without requiring CPU bandwidth by storing clear
values in a dedicated table that can be referenced during rendering.
This implementation provides the foundation for zero-bandwidth clear
operations, allowing the GPU to efficiently clear color and depth
buffers using pre-defined values stored in the ZBC table.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-25 18:00:23 +10:00
Zephyron
72b8b60e59 Merge branch 'implement-zbc-set-table' into 'master'
nvdrv: Implement ZBCSetTable with proper parameter validation and logging

See merge request citron/rewrite!53
2025-08-25 07:57:58 +00:00
Zephyron
9f13c0a827 nvdrv: Implement ZBCSetTable with proper parameter validation and logging
- Replace stubbed ZBCSetTable with comprehensive implementation
- Add parameter validation for format and type fields
- Implement detailed logging of ZBC color values for debugging
- Add proper documentation explaining ZBC (Zero Bandwidth Clear) functionality
- Handle color_ds and color_l2 arrays for GPU memory clearing operations
- Validate format parameter range (0-0xFF) and type parameter (0-1)
- Provide clear error handling for invalid parameters

ZBC (Zero Bandwidth Clear) allows the GPU to perform efficient memory
clearing operations without requiring CPU bandwidth by storing clear
values in a dedicated table that can be referenced during rendering.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-25 17:21:06 +10:00
Zephyron
9e5cee7f1f Merge branch 'implement-query-pointer-buffer-size' into 'master'
service: Implement QueryPointerBufferSize with proper IPC buffer calculation

See merge request citron/rewrite!52
2025-08-25 06:56:12 +00:00
Zephyron
3af5af3078 service: Implement QueryPointerBufferSize with proper IPC buffer calculation
- Replace stubbed QueryPointerBufferSize with comprehensive implementation
- Calculate pointer buffer size based on IPC message buffer requirements
- Account for all buffer descriptor types (X, A, B, W, C) and message headers
- Include proper alignment and overhead calculations
- Cap buffer size to reasonable maximum (64KB) to prevent excessive memory usage
- Use dynamic calculation instead of hardcoded 0x8000 value
- Add detailed comments explaining the buffer size calculation logic

This implementation properly handles the IPC marshalling requirements for
pointer buffers used in service communication, eliminating the frequent
stub warnings in the logs.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-25 16:55:33 +10:00
Zephyron
d2c6f3ab9c shader_recompiler: Implement ISBERD instruction
- Replace stubbed ISBERD implementation with proper internal stage buffer read
- Add support for different modes (Default, Patch, Prim, Attr)
- Implement shift operations (U16, B32) for buffer data processing
- Convert float results from GetAttributeIndexed to unsigned integers
- Handle buffer index from source register for stage buffer access
- Maintain proper error handling for unimplemented features (SKEW, O)

This completes the internal stage buffer entry read functionality for Maxwell shader translation.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-25 16:26:05 +10:00
Zephyron
432d6da7c1 fix(network): prevent datagram socket SendTo errors in HDR multiplayer
Changes:
- Add validation in BSD::SendToImpl to check for empty address buffers on
  datagram sockets and return EINVAL instead of passing nullptr to sendto()
- Add null pointer check in ProxySocket::SendTo to prevent dereferencing
  nullptr address parameters
- Improve error logging to help identify socket configuration issues

Fixes: Socket operation errors in HDR multiplayer sessions
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-24 16:39:39 +10:00
Zephyron
b9326b0527 Merge branch 'Linux-Compilation-Fix' into 'master'
fix: Linux compilation

See merge request citron/rewrite!51
2025-08-23 11:57:41 +00:00
Boss.sfc
01757c21ea fix: Linux compilation
There were linking errors

Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-08-23 18:53:24 +07:00
Zephyron
be6e154499 Merge branch 'list-view-and-applets-settings' into 'master'
feat: Add list view toggle and separate applets settings category

See merge request citron/rewrite!50
2025-08-21 06:47:51 +00:00
Zephyron
00d6eb12d9 feat: Add list view toggle and separate applets settings category
- Add list/grid view toggle button to games fragment
- Implement dual-view GameAdapter with separate ViewHolders for grid/list layouts
- Create compact card_game_list.xml layout for list view
- Add "Applets on Android" settings category to separate applet settings from Zep Zone
- Add logging settings with log filter configuration
- Add view toggle icons (ic_view_list, ic_view_grid)
- Update strings.xml with new UI text and settings descriptions

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-21 16:47:08 +10:00
Zephyron
2d43a2d47b feat: add movable shader building overlay with touch handling
- Add touch event handling to ShaderBuildingOverlayView for dragging
- Implement boundary constraints to keep overlay within screen bounds
- Add visual feedback with border color changes during dragging
- Add resetPosition() method to restore overlay to default position
- Move ShaderBuildingOverlayView to separate FrameLayout for absolute positioning
- Set container to non-clickable to prevent interference with input controls
- Maintain clickable/focusable state only on the overlay view itself

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-17 17:03:52 +10:00
Zephyron
f76a40fa12 Merge branch 'remove-frame-generation-wip' into 'master'
feat: remove frame generation options from all platforms

See merge request citron/rewrite!49
2025-08-17 06:17:30 +00:00
Zephyron
e27fc65d11 feat: remove frame generation options from all platforms
Frame generation was marked as WIP and not ready for production use.
This commit removes all frame generation related code and UI elements
to prevent users from enabling an incomplete feature.

Changes:
- Remove frame generation settings from Android UI (Kotlin/XML)
- Remove frame generation settings from Desktop UI (Qt/C++)
- Remove frame generation enums and settings from core (C++)
- Remove frame generation Vulkan renderer implementation
- Remove frame generation shader files
- Update CMake build configuration

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-17 16:09:05 +10:00
Zephyron
87651883cb Merge branch 'android-shader-building-overlay' into 'master'
android: Add shader building overlay with performance graph

See merge request citron/rewrite!48
2025-08-17 05:48:41 +00:00
Zephyron
06f13f3cb1 android: Add shader building overlay with performance graph
- Add new settings for shader building overlay and performance graph
- Create ShaderBuildingOverlayView with animated shader building indicator
- Implement JNI bridge to get shader building count from core
- Add performance metrics display (FPS, frametime, emulation speed)
- Include real-time frametime graph with min/avg/max statistics
- Add menu options to toggle overlay and graph independently
- Integrate with existing overlay system in EmulationFragment
- Optimize Vulkan pipeline cache loading with pre-reservation
- Improve async shader building to reduce main thread blocking

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-17 15:48:06 +10:00
Zephyron
85324599a6 sockets/network: relax SockAddrIn len check and fix port byte-order to avoid SSBU crashes
- Accept SockAddrIn len in [6, sizeof] and warn instead of asserting to handle libnx/SSBU quirks
- Ensure TranslateFromSockAddrIn sets sin_port via htons(uint16_t) for consistent network byte-order
- Prevents assertion crashes and reduces “Broken pipe” error spam observed in Frozen's SSBU logs

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-11 20:59:44 +10:00
Zephyron
96dd82ea3b chore(network): Change web API from HTTPS -> HTTP
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-11 18:41:23 +10:00
Zephyron
57abfe4c77 Merge branch 'MoltenVK' into 'master'
feat: Updated MoltenVK

See merge request citron/rewrite!47
2025-08-10 03:53:53 +00:00
Boss.sfc
f9758f1770 feat: Updated MoltenVK
Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-08-08 16:02:09 +07:00
Zephyron
5af2f00baa Merge branch 'frame-generation-skipping-and-ue4-support' into 'master'
feat: Add frame generation and enhance UE4 game compatibility

See merge request citron/rewrite!46
2025-08-05 09:41:35 +00:00
Zephyron
117c467ff3 feat: Add frame generation and enhance UE4 game compatibility
- Add frame generation settings (enabled/disabled, interpolation/extrapolation modes)
- Add frame skipping settings (enabled/disabled, adaptive/fixed modes)
- Implement frame skipping logic with adaptive and fixed modes
- Enhance UE4 crash handling with recovery mechanisms
- Add support for signed and float 32-bit image formats across shader backends
- Update Vulkan Validation Layers to v1.4.321.0
- Fix duplicate frame skipping options in Qt UI
- Improve memory handling for UE4 games (Hogwarts Legacy compatibility)
- Add enhanced bindless texture handling with fallback approach
- Update Android build configuration and dependencies

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-05 19:32:28 +10:00
Zephyron
612871f81f Merge branch 'android-applet-settings' into 'master'
android: Add applet mode settings to UI

See merge request citron/rewrite!45
2025-08-05 07:30:49 +00:00
Zephyron
011a546229 android: Add applet mode settings to UI
Add comprehensive applet mode configuration options to the Android settings
interface. This includes settings for all major applets:

- Cabinet applet mode
- Controller applet mode
- Data Erase applet mode
- Error applet mode
- Network Connect applet mode
- Player Select applet mode
- Software Keyboard applet mode
- Mii Edit applet mode
- Web applet mode
- Shop applet mode
- Photo Viewer applet mode
- Offline Web applet mode
- Login Share applet mode
- WiFi Web Auth applet mode
- My Page applet mode

Each setting allows users to choose between HLE (High-Level Emulation)
and LLE (Low-Level Emulation) modes for individual applets, providing
granular control over applet emulation behavior.

Changes:
- Add applet mode settings to IntSetting enum
- Add corresponding string resources for all applet settings
- Add applet mode choice arrays (HLE/LLE options)
- Add applet settings section to SettingsItem mapping
- Add applet settings header and all applet mode settings to
  SettingsFragmentPresenter

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-05 17:29:45 +10:00
Zephyron
45daff11c9 feat(audio): Fix OpenAL auto detection
This commit addresses serveral bugs within the audio service where OpenAL would fail to register the output device to the mapped engine.

- Increase null safety checks for all audio backends (cubeb, sdl2, openal)
- Added failsafe for Device selection

These ensure the audio_renderer can validate calls from the OpenAL engine, Credits to Hayate Yoshida for helping Identify the issue.

Credit: Hayate Yoshida <hayate_yoshida@citron-emu.org>
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-08-02 20:36:40 +10:00
Zephyron
b8039b4b2e Merge branch 'Citron-AppImage-Builder' into 'master'
feat: Added Torzu's AppImageBuilder

See merge request citron/rewrite!44
2025-07-31 08:51:53 +00:00
Boss.sfc
317a8b2bd5 feat: Added Torzu's AppImageBuilder
Added support for building AppImages using Torzu's AppImageBuilder.

Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-07-31 14:40:22 +07:00
Zephyron
c5dce33345 Merge branch 'fsr2-implementation' into 'master'
feat: Add FSR 2.0 scaling filter option

See merge request citron/rewrite!43
2025-07-29 05:50:13 +00:00
Zephyron
568999fd59 feat: Improve FSR2 UI with dropdown quality mode and conditional FSR sharpness
- Convert FSR2 quality mode from number input to dropdown with 4 options
- Disable and grey out FSR sharpness slider when FSR2 is selected
- Add proper enum-based settings for FSR2 quality modes
- Update both Vulkan and OpenGL FSR2 implementations
- Connect UI state changes automatically

Provides better UX by using appropriate controls and preventing confusion
between FSR 1.0 and FSR 2.0 sharpening options.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-07-29 15:49:05 +10:00
Zephyron
3b8da3d80a feat: Add FSR 2.0 scaling filter option
- Add FSR2 to ScalingFilter enum alongside existing FSR
- Implement FSR2 classes for both Vulkan and OpenGL renderers
- Add fsr2_quality_mode setting with 4 quality levels (Quality, Balanced, Performance, Ultra Performance)
- Integrate FSR2 into present pipeline for both renderers
- Add UI support for FSR2 option in scaling filter dropdown
- Add FSR2 quality mode setting with dropdown selection
- Update translations and Android strings for new options
- Default to Performance mode for optimal balance

This provides users with FSR 2.0 as a scaling option, offering different
quality/performance characteristics compared to FSR 1.0. The implementation
uses quality-based sharpening values and integrates seamlessly with the
existing rendering pipeline.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-07-29 15:21:36 +10:00
Zephyron
d38b58ca77 Merge branch 'performance-overlay-enhancements' into 'master'
feat: enhance performance overlay with frame graph and draggable UI

See merge request citron/rewrite!42
2025-07-27 10:52:07 +00:00
Zephyron
93a48ad682 feat: enhance performance overlay with frame graph and draggable UI
- Add real-time frame time graph with min/avg/max statistics
- Implement draggable overlay functionality with cursor feedback
- Modernize UI with Material Design colors and improved typography
- Fix crash issues by throttling performance data updates
- Ensure FPS and frame time consistency
- Add proper error handling and validation
- Increase overlay size to accommodate new graph feature

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-07-27 20:50:57 +10:00
Zephyron
1e691bbbb2 Merge branch 'CachyOS-LTO-Fix' into 'master'
fix: CachyOS LTO Compilation

See merge request citron/rewrite!41
2025-07-27 05:34:36 +00:00
Zephyron
af0deddb19 Merge branch 'citron-icns-change' into 'master'
chore: update Yuzu logo to Citron in .icns file

See merge request citron/rewrite!40
2025-07-24 09:08:25 +00:00
Boss.sfc
04c2e3b212 chore: update Yuzu logo to Citron in .icns file
Replaced the Yuzu logo with the new Citron branding in the macOS .icns file used for the application icon. This change aligns with the project's rebranding from Yuzu to Citron and ensures consistent visual identity across platforms. No functional changes to the application.

Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-07-23 18:58:43 +07:00
Boss.sfc
fc480dcb69 fix: CachyOS LTO Compilation
Fix LTO linking issues on CachyOS with GCC 15.x

- Add LTO support to all core library targets (input_common, frontend_common,
  network, shader_recompiler, web_service) that were missing LTO configuration
- Create citron_configure_lto() helper function for consistent LTO handling
- Implement CachyOS-specific detection via /etc/os-release and kernel version
- Apply conservative LTO flags (-flto=auto -ffat-lto-objects) only for
  CachyOS + GCC 15+ to resolve linking errors with newer toolchains
- Other distributions continue using aggressive LTO settings for maximum performance
- Disable LTO on executable targets to prevent main function optimization issues

This resolves "undefined symbol" errors when building with -DCITRON_ENABLE_LTO=ON
on CachyOS while maintaining optimal LTO performance on other distributions.

Fixes linking errors including:
- Core::Frontend::EmuWindow symbols
- Core::System methods
- Settings::values
- Common logging functions

Tested on CachyOS with GCC 15.1.1 + LLD 20.1.8

Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-07-22 21:37:37 +07:00
Zephyron
d0ae8f1582 docs: rewrite README for homebrew focus and update repository paths
- Replace citron/emu with citron/rewrite in all URLs
- Add comprehensive legal disclaimers for homebrew-only use
- Update content to emphasize legal software and developer respect
- Modernize formatting with emojis and improved structure
- Add new sections for getting started, contributing, and contact info
- Focus messaging on homebrew development and legal use cases

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-07-22 17:36:15 +10:00
Zephyron
eb4512e9de Merge branch 'CachyOS-compiling-fix' into 'master'
fix: Compiling for CachyOS

See merge request citron/rewrite!39
2025-07-22 06:34:51 +00:00
Zephyron
04c17586d4 Merge branch 'high-dpi-settings-menu' into 'master'
frontend: Improve High DPI support and scaling

See merge request citron/rewrite!38
2025-07-22 06:31:13 +00:00
Zephyron
f5bea18fd9 frontend: Improve High DPI support and scaling
This patch enhances High DPI support across the Qt frontend with the following improvements:

**Windows DPI Awareness:**
- Add shellscalingapi.h include for Windows DPI functions
- Implement Per Monitor DPI Awareness (Windows 8.1+) and Per Monitor v2 DPI Awareness (Windows 10+)
- Use SetProcessDPIAware() and SetProcessDpiAwareness() for better multi-monitor scaling
- Dynamically load shcore.dll to access modern DPI awareness APIs

**Configuration Dialog Enhancements:**
- Add comprehensive High DPI responsive CSS media queries for different DPI levels (192dpi, 240dpi)
- Scale UI elements (buttons, comboboxes, line edits, checkboxes, radio buttons) based on screen DPI
- Improve scroll area styling with proper scrollbar theming for high DPI displays
- Set proper window attributes for scaling (WA_TranslucentBackground, WA_NoSystemBackground)
- Calculate logical window size based on device pixel ratio for accurate scaling

**UI Improvements:**
- Enhanced scroll area styling with custom scrollbar appearance
- Better visual feedback with hover effects on scrollbar handles
- Improved spacing and sizing for high DPI displays
- Set proper window modality and title for configuration dialog

These changes provide better visual quality and usability on high DPI displays, particularly on Windows systems with multiple monitors or high-resolution screens. The scaling is now more accurate and consistent across different display configurations.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-07-22 16:30:47 +10:00
Boss.sfc
e02ba8b5bf fix: Compiling for CachyOS
- Made CreateScrollArea function static to limit its linkage to the current translation unit.

Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-07-22 13:29:16 +07:00