Commit Graph

27572 Commits

Author SHA1 Message Date
collecting
09ef525ef2 Fix null pointer dereference in patch_manager.cpp line 362 2025-09-22 08:54:03 +00:00
Zephyron
a02d4ce6c4 Merge branch 'march-fix' into 'main'
fix(ci): resolve submodule initialization failures in GitLab CI

See merge request citron/emulator!14
2025-09-21 12:18:25 +10:00
Boss.sfc
392058e7d9 ci: fix march in cachyos v3
Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-09-21 09:16:35 +07:00
Zephyron
ce73fce35e ci: Remove max_size
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-21 11:47:04 +10:00
Zephyron
0c4fc23dcd fix: use gzip compression for CI artifacts to avoid size limit
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-21 11:45:41 +10:00
Zephyron
a76c3e8808 fix: resolve UpdaterService redefinition error with conditional compilation
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-21 11:33:26 +10:00
Zephyron
b585120025 fix: add UpdateResult enum to updater dialog forward declarations
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-21 11:11:30 +10:00
Zephyron
04132ac6b7 fix(ci): resolve submodule initialization failures in GitLab CI
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-21 11:02:20 +10:00
Zephyron
34f1e741a4 Merge branch 'mtune-fix' into 'main'
ci: fixed mtune

See merge request citron/emulator!13
2025-09-21 10:50:58 +10:00
Boss.sfc
e9d2d06f06 ci: fixed mtune
Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-09-21 07:47:23 +07:00
Zephyron
b3bbae83fc Merge branch 'boss-ci-fixes' into 'main'
ci: overhaul to the ci

See merge request citron/emulator!12
2025-09-21 10:39:55 +10:00
Boss.sfc
50f2e0472d ci: overhaul to the ci
- new build flags
- fixes compiling on linux
- fixes compiling on android
- changed ci from ubuntu to cachyos

Signed-off-by: Boss.sfc <boss.sfc@citron-emu.org>
2025-09-21 07:38:03 +07:00
Zephyron
1f4d6ccdc0 Merge branch 'taa-implementation' into 'main'
feat: add Temporal Anti-Aliasing (TAA) support for OpenGL and Vulkan

See merge request citron/emulator!11
2025-09-21 10:35:14 +10:00
Zephyron
19cf31b215 feat: add Temporal Anti-Aliasing (TAA) support for OpenGL and Vulkan
- Add TAA option to AntiAliasing enum in settings
- Implement TAA shaders for both OpenGL (GLSL) and Vulkan (SPIR-V)
- Add OpenGL TAA class with framebuffer management and temporal blending
- Add Vulkan TAA class following existing AntiAliasPass architecture
- Integrate TAA into OpenGL and Vulkan rendering pipelines
- Add UI translations and Android string resources for TAA option
- Implement Halton sequence jittering for temporal sampling
- Add motion vector validation and neighborhood clamping to reduce ghosting
- Configure aggressive temporal blending to minimize visual artifacts
- Add proper descriptor set management for Vulkan TAA implementation

The TAA implementation provides high-quality anti-aliasing by combining
information from multiple frames with per-pixel jittering, resulting
in smoother edges and reduced aliasing artifacts while maintaining
good performance and temporal stability.

Fixes: Black screen issues with proper descriptor set bindings
Fixes: Ghosting artifacts with improved temporal blending parameters
Fixes: Jitter visibility with reduced jitter intensity (50% scaling)
Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-21 10:34:19 +10:00
Zephyron
42bc6b7b6c fix(android): Fix aspect ratio crash for non-16:9 settings
- Add missing Force 32:9 option and fix Stretch mapping
- Add safety checks to prevent division by zero in FixedRatioSurfaceView
- Update handlers to support all 6 AspectRatio enum values

Fixes crashes when selecting any aspect ratio other than Force 16:9.

Signed-off-by: Zephyron <zephyron@citron-emu.org>
2025-09-17 20:46:59 +10:00
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