Commit Graph

27257 Commits

Author SHA1 Message Date
Zephyron
da3f017c32 fix: resolve Qt MOC generation for conditionally compiled UpdaterDialog
Move UpdaterDialog class declaration outside #ifdef _WIN32 to ensure
Qt's MOC can see the Q_OBJECT macro. Add stub implementations for
non-Windows platforms to satisfy linker.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-17 20:27:22 +10:00
Zephyron
10c5e582fc ci: Fix GitLab CI YAML syntax errors for pipeline execution
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-16 15:32:13 +10:00
Zephyron
673341d7a6 ci: Initial impl
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-16 15:29:33 +10:00
Zephyron
28c5c74f54 Merge branch 'Boss-Boost-Fix' into 'main'
chore(core/debugger): modernize Boost.Process include path to v1

See merge request citron/emulator!6
2025-09-16 14:45:36 +10:00
Boss.sfc
056e6bf951 chore(core/debugger): modernize Boost.Process include path to v1
Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-09-15 21:59:01 +07:00
Zephyron
132caccc1a Merge branch 'Boss-Linux-Compilation-Fix' into 'main'
fix: Linux compiling

See merge request citron/emulator!5
2025-09-15 19:22:01 +10:00
Boss.sfc
a3c4f0614a fix: Linux compiling
Made it so that the updater stuff is windows only.

Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-09-14 18:46:18 +07:00
Zephyron
94119302ec feat: Add OpenGL ZBC clear support and refactor ZBC management
Moved ZBCManager to `video_core/zbc_manager.cpp/h` for modularity. Added
`gl_zbc_clear.cpp/h` for efficient OpenGL color, depth, and stencil clears.
Updated `RasterizerOpenGL::Clear` to use ZBC with fallback. Added stencil
type validation. Fixed color mask and logging. Updated `CMakeLists.txt`.
Enhances performance and code organization.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 20:28:39 +10:00
Zephyron
12c3e4b92c Revert "fix: resolve X11 macro conflicts with enum values and Qt constants"
This reverts commit c32ac3b3c1.
2025-09-14 20:15:29 +10:00
Zephyron
c32ac3b3c1 fix: resolve X11 macro conflicts with enum values and Qt constants
Rename Success enums and fix Qt event types to avoid X11 macro conflicts.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 20:09:09 +10:00
Zephyron
2d890316ad shader_recompiler: Implement ISBERD instruction for internal stage buffer reads
This commit properly implements the ISBERD (Internal Stage Buffer Entry Read)
instruction that was previously stubbed. The implementation supports all
modes and shift types:

- Patch mode: Reads tessellation patch attributes using ir.GetPatch()
- Prim mode: Reads primitive attributes for geometry shaders
- Attr mode: Reads generic vertex attributes
- Default mode: Maintains backward compatibility

The implementation also supports:
- U16 and B32 shift modes for different data formats
- SKEW and O flags for advanced buffer addressing
- Proper data type conversions and bit casting

This fixes rendering issues in UE4 titles that rely on internal stage
buffer operations in tessellation and geometry shaders. The previous
stubbed implementation caused compatibility problems with modern
rendering pipelines.

Credit: Hayate Yoshida (吉田 疾風) <hayate@citron-emu.org> for discovering
the root cause and providing insight on the proper implementation approach.

Fixes: Internal stage buffer read operations in tessellation shaders
Resolves: UE4 title rendering issues related to ISBERD instruction
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 19:01:19 +10:00
Zephyron
ce06115c2c Revert "shader_recompiler: Implement ISBERD instruction"
This reverts commit d2c6f3ab9c.
2025-09-14 18:19:36 +10:00
Zephyron
3c70fd52bd fix: update Android build config and dependencies
Update NDK/CMake versions, switch default build variant, re-enable x86_64
support, add ConstraintLayout dependency, and enable LTCG optimization.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 16:09:04 +10:00
Zephyron
0b0b61572b Merge branch 'insane-vram-mode' into 'main'
feat: add High-End and Insane VRAM modes with leak prevention

See merge request citron/emulator!3
2025-09-14 16:06:09 +10:00
Zephyron
6e6b2f438e feat: add High-End and Insane VRAM modes with leak prevention
- Add HighEnd and Insane VRAM usage modes for RTX 4090/4080+ users
- Implement VRAM limits: HighEnd (12GB), Insane (22GB) with scaling
- Optimize buffer allocation with larger chunks for high-end GPUs
- Add VRAM leak detection and aggressive cleanup for Insane mode
- Increase shader compilation buffer sizes for better performance
- Add VRAM monitoring functions to Vulkan rasterizer
- Implement memory usage tracking for staging buffers

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 16:05:31 +10:00
Zephyron
b4e0e50505 Merge branch 'vram-monitor-overlay' into 'main'
feat: add VRAM monitoring overlay with modern UI

See merge request citron/emulator!2
2025-09-14 16:00:37 +10:00
Zephyron
8356d9fea0 fix: clean up VRAM overlay layout and remove visual clutter
- Remove cut-off percentage labels from graph area
- Isolate graph with proper background and border
- Reduce padding and spacing to match performance overlay
- Compress leak warnings to single line
- Adjust widget size to 250x180 for consistent proportions

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 16:00:13 +10:00
Zephyron
192cb91286 feat: add VRAM monitoring overlay with modern UI
- Clean dark-themed overlay with real-time VRAM usage display
- Memory breakdown (Buffers, Textures, Staging) with color coding
- Interactive graph with 2-minute history and leak detection
- VRAM mode indicator with special highlighting for Insane mode
- Draggable interface with persistent positioning
- Menu integration with keyboard shortcut support
- Safe Vulkan renderer integration with exception handling

Files: CMakeLists.txt, main.cpp, main.h, main.ui, uisettings.h, vram_overlay.cpp, vram_overlay.h
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 15:49:27 +10:00
Zephyron
56d8bd7dd3 feat: Add mouse wheel support for game input passthrough
- Implement mouse wheel event handling in SDL2 backend (emu_window_sdl2)
- Add wheel event routing from GRenderWindow to input subsystem
- Add debugging logs to trace mouse wheel events through input chain
- Support mouse wheel input for mods like Ultracam when games are running (WIP)

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-14 15:18:38 +10:00
Zephyron
206d778782 Merge branch 'master' into 'main'
master -> main

See merge request citron/emulator!1
0.7.0
2025-09-06 07:44:34 +00:00
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