summaryrefslogtreecommitdiff
path: root/src
AgeCommit message (Collapse)Author
2025-05-11service/nvnflinger: Unstub GetNativeHandleZephyron
Removes the STUBBED designation from GetNativeHandle in IHOSBinderDriver as the implementation is now complete. Changes the log level from WARNING to DEBUG to reflect this status. The function properly handles binder ID validation and returns the appropriate handle as documented in switchbrew.
2025-05-11service/vi: Improve OpenDisplay validationZephyron
Updates the OpenDisplay function in IApplicationDisplayService to properly validate display names. Instead of only accepting "Default", now validates against all known valid display names: "Default", "External", "Edid", "Internal", and "Null". - Changes log level from WARNING to DEBUG since this is no longer stubbed - Adds proper validation for all valid display names - Returns ResultOperationFailed for invalid display names - Improves logging by including the requested display name
2025-05-11service/aoc: Implement CheckAddOnContentMountStatusZephyron
Implements the CheckAddOnContentMountStatus command for the aoc:u service. This function checks whether add-on content (DLC) is currently mounted. Currently returns false as we don't yet track mounted content state. Changed log level from WARNING to DEBUG since this is no longer stubbed.
2025-05-11android: Disable RAM Overlay By DefaultZephyron
- TODO
2025-05-11vulkan: Rename resolve_image to resolve_image_holderZephyron
Fix Android compilation with latest NDK (28.0.13004108) and Java JDK 21 by renaming the resolve_image variable to resolve_image_holder to avoid potential naming conflicts. This change helps maintain compatibility with the updated build toolchain while keeping the core functionality intact. The change affects the MSAA image copy operation in the Vulkan texture cache implementation.
2025-05-11network: Fix 0.0 FPS bug on Android (Part 2)Zephyron
- Add network interface enumeration support for Android - Implement fallback loopback interface when no interfaces are detected - Add ability to force offline mode on critical network errors - Improve socket initialization with better error handling - Add socket state tracking (domain, type, protocol) - Make translation functions static and mark as maybe_unused - Add detailed logging for network initialization failures Part 2 of the Android FPS bug fix focuses on network resilience, particularly handling cases where network initialization fails. Instead of hanging the emulator, it now gracefully falls back to offline mode and provides better diagnostic information.
2025-05-11common: Enhance memory mapping safety and debuggingZephyron
- Reduce max_memory_size from 512GB to 1GB for safer allocation limits - Add memory operation logging for debugging purposes - Implement MapMemory() with additional safety checks and large allocation handling - Add validation checks for memory mappings - Introduce chunked allocation strategy for large memory requests - Add detailed error logging for memory operations
2025-05-11service/nvdrv: Implement NVGPU_GPU_IOCTL_NUM_VSMSZephyron
- Add IoctlNumVsms struct definition - Implement ioctl 0x13 to return number of SM units (2 for Tegra X1)
2025-05-11service/friend: Clean up friend service implementationZephyron
- Remove unused function stubs - Improve GetCompletionEvent implementation - Clean up response builder naming
2025-05-11service/audio: Clean up audio controller implementationZephyron
- Remove Unknown5000 function and related debug commands - Fix incorrect service name in log message
2025-05-11service/acc: Clean up account service implementationZephyron
- Remove unused function stubs - Add version information comments - Add clang-format markers - Remove duplicate TrySelectUserWithoutInteraction function - Fix formatting and code style
2025-05-11service/friend: implement additional friend service functionsZephyron
- Add implementations for previously stubbed functions: * Cancel - Handle operation cancellation * RequestSyncFriendList - Friend list synchronization * GetUserPresenceView - User presence information * LoadUserSetting - User settings loading - Improve GetCompletionEvent implementation: * Add proper event signaling * Use clearer variable names * Improve debug logging - Enhance logging messages: * Add more descriptive debug messages * Include user ID in presence view logging * Use consistent naming in response builders - Fix response builder formatting for consistency These changes improve the friend service implementation by adding support for more friend-related functionality while enhancing the debugging experience through better logging and code organization.
2025-05-11service/audio: implement Unknown5000 and add debug commandsZephyron
- Add Unknown5000 implementation to create duplicate controller interface - Add new debug-related command handlers: * OverrideDefaultTargetForDebug (50001) * SetForceOverrideExternalDeviceNameForDebug (50003) * ClearForceOverrideExternalDeviceNameForDebug (50004) - Add proper debug logging for interface creation - Update header with new function declaration - Fix missing commas in function registration array These changes improve the audio controller implementation by adding support for interface duplication and debug override functionality. The implementation maintains proper interface lifetime management using SharedFrom.
2025-05-11service/nim: implement CreateServerInterface2 and improve loggingZephyron
- Add CreateServerInterface2 implementation for NIM_ECA service - Change log level from WARNING to DEBUG for CreateServerInterface - Add descriptive log message for server interface creation - Maintain consistent interface creation pattern between both versions - Fix missing comma in function registration array These changes improve the NIM service implementation by adding support for the newer server interface creation method while making logging more appropriate for stubbed functions.
2025-05-11service/acc: implement Nintendo Account integration and cleanupZephyron
- Add Nintendo Account related implementations: * GetNintendoAccountId * GetNintendoAccountUserResourceCache * IsLinkedWithNintendoAccount * StoreSaveDataThumbnailApplication - Improve version handling: * Add proper firmware version comments * Implement deprecated and new TrySelectUserWithoutInteraction * Update service interface versioning - Clean up code organization: * Remove redundant clang-format markers * Fix constructor formatting * Improve error handling in InitializeApplicationInfoBase * Add proper debug logging * Update copyright headers - Add proper documentation for buffer types and sizes These changes improve Nintendo Account integration support while cleaning up the codebase and improving version compatibility handling. The implementation provides stubs for network-related functionality to allow applications to proceed while proper integration is developed.
2025-05-11service/nifm: implement additional network interface functionsZephyron
- Add implementations for previously stubbed functions: * EnumerateNetworkInterfaces * EnumerateNetworkProfiles * ConfirmSystemAvailability * SetBackgroundRequestEnabled - Add proper debug logging for new implementations - Update header with new function declarations - Add Citron copyright notice - Improve response builder naming for clarity These implementations return success status with empty results to allow applications to proceed while proper network interface management is developed. Debug logging has been added to track usage of these functions.
2025-05-11service/sm: improve service manager implementationZephyron
- Reorder error codes to match numerical order - Rename RegisterClient to Initialize in service registration to match actual function name - Update function declaration order in header to match implementation - Improve QueryPointerBufferSize implementation: * Add proper documentation comment * Use constexpr for maximum transfer memory size * Use std::numeric_limits where appropriate * Improve debug logging message * Use meaningful constant name These changes improve code organization and clarity while making the service manager interface more consistent with Nintendo's official naming conventions.
2025-05-11service/hid: reorganize gesture-related functionsZephyron
- Move SetGestureOutputRanges function registration to be with other gesture-related functions (next to ActivateGesture) - Move SetGestureOutputRanges implementation to be with other gesture-related implementations - Change log level from WARNING to DEBUG for SetGestureOutputRanges - Move function declaration to private section with other IPC handlers - Update function ordering to match service registration order These changes improve code organization by grouping related functionality together and maintain consistency between the interface registration and implementation ordering.
2025-05-11common: improve host memory mapping validationZephyron
- Add maximum memory size limit of 512GB (Overkill) - Implement additional safety checks for memory mapping: * Validate non-zero addresses * Verify address alignment * Add length validation against maximum size - Remove redundant assertion for host_offset alignment - Remove potentially problematic mapping verification - Improve error logging for invalid mapping attempts These changes enhance memory safety by adding proper bounds checking and validation before performing memory mappings, while removing a potentially problematic post-mapping verification step.
2025-05-11core: improve nvdrv and buffer queue implementationsZephyron
Buffer Queue Changes: - Add assertion for buffer state in free slots - Improve error handling for buffer dequeuing - Add buffer count validation checks - Update log levels for better diagnostics NVDRV Changes: - Add host1x reference to nvhost_nvdec_common - Improve ioctl error reporting with more detailed messages - Reorder function declarations in nvhost_ctrl_gpu - Add stub for unimplemented ioctl command 0x13 - Clean up initialization of boolean flags These changes improve error handling and debugging capabilities while adding additional safety checks for buffer management. The nvdrv interface is also made more robust with better error reporting and proper hardware access patterns.
2025-05-11sockets: reorder errno values numericallyZephyron
Reorder the Errno enum values to be in ascending numerical order, moving NOMEM (12) to be between AGAIN (11) and INVAL (22). This improves readability and makes it easier to verify completeness of the error code list.
2025-05-11audio_core/renderer: Add compressor and splitter support for Rev13Zephyron
Implement new audio features available in AudioRenderer Revision 13: - Add AudioRendererRevision enum to track version-specific features - Implement CompressorEffect with statistics tracking support - Add SplitterDestination with previous volume reset functionality - Add version checks for feature compatibility The compressor provides dynamic range compression with configurable parameters and optional statistics tracking. The splitter improvements allow for more flexible volume management between audio transitions. These changes maintain compatibility with older revisions while enabling new features in Rev13.
2025-05-11api_version: Update Atmosphere version and add citron copyrightZephyron
Update the Atmosphere release version minor number from 0 to 8 to match newer firmware versions. Also add copyright notice for citron Emulator Project. This change maintains compatibility with newer system versions while preserving the existing version number format.
2025-05-11vulkan: Add Samsung driver workaroundsZephyron
Add workarounds for Samsung Xclipse GPUs: - Disable extendedDynamicState3ColorBlendEquation as it is broken in Samsung drivers, similar to AMD drivers - Add Samsung's proprietary driver to the validated driver list for clock boosting - Fix log message to indicate both AMD and Samsung drivers have broken color blend equation support Remove stray logical OR operator from validated_driver condition.
2025-05-11video_core/vulkan: Improve texture format conversion handlingZephyron
Refactors and improves the texture format conversion system in the Vulkan renderer: - Adds proper sRGB to linear conversion for depth formats - Improves shader accuracy for ABGR8 SRGB to D24S8 conversion - Adds gamma correction and proper depth range clamping - Moves GetSupportedFormat implementation to header - Cleans up format conversion switch statement - Removes redundant format conversion paths The changes improve accuracy when converting between color and depth formats, particularly for sRGB sources. The shader improvements ensure proper gamma correction and depth range handling. Technical changes: - Improves sRGB to linear conversion in fragment shader - Adds proper depth value clamping - Consolidates format conversion logic - Removes duplicate GetSupportedFormat implementation
2025-05-11kernel/svc: Refactor UnmapProcessCodeMemory validationZephyron
Improve the validation logic in UnmapProcessCodeMemory by: - Add missing size validation check at the start - Reorganize validation checks into logical groups - Simplify error handling using R_UNLESS macros - Remove redundant page table range check - Add copyright notice for Citron Emulator Project - Add ResultInvalidSize constant definition The changes make the validation code more concise and easier to follow while maintaining the same validation requirements. Error handling is now more consistent with other SVC implementations.
2025-05-11memory: Improve debug logging and validation in InvalidateNCEZephyron
Add more detailed debug logging and validation to the InvalidateNCE function: - Add entry debug log showing NCE invalidation request details - Add upfront validation of memory region before proceeding - Add debug logs for rasterizer and separate heap handling cases - Add warning logs for invalid address ranges and failed invalidations - Improve error message formatting and clarity - Group related operations with descriptive comments These changes make it easier to debug NCE invalidation issues by providing more visibility into the validation steps and failure cases.
2025-05-11vulkan: Implement native MSAA resolve in texture cacheZephyron
Implements hardware-accelerated MSAA resolve functionality in the Vulkan texture cache instead of relying on compute shaders. This change: - Adds proper MSAA to non-MSAA image copy support using VkResolveImage - Creates temporary resolve images with appropriate memory allocation - Handles format compatibility checks with proper fallback to compute - Manages image layout transitions and memory barriers - Preserves existing compute shader fallback for unsupported formats The implementation follows Vulkan best practices for MSAA resolve operations and should provide better performance for supported formats.
2025-05-11vulkan: Add 4KB memory alignment for AMD and Qualcomm driversZephyron
Adds special handling for memory allocation size on AMD and Qualcomm (Adreno) drivers by aligning allocations to 4KB boundaries. This fixes potential memory allocation issues on these drivers where unaligned allocations may fail or cause undefined behavior. Affected drivers: - AMD Proprietary (AMDVLK) - AMD Open Source (RADV) - Qualcomm Proprietary (Adreno)
2025-05-11vulkan: Fix parameter naming consistency for Android compilationZephyron
Renames 'size' parameter to 'length' in IsValidMapping() methods to avoid conflicts with Android NDK macros that define 'size'. This fixes compilation issues on Android platforms where the 'size' macro is defined.
2025-05-11video_core: Add new shader format conversion pipelinesZephyron
Adds several new shader-based format conversion pipelines to support additional texture formats and operations: - RGBA8 to BGRA8 conversion - YUV420/RGB conversions - BC7 to RGBA8 decompression - ASTC HDR to RGBA16F decompression - RGBA16F to RGBA8 conversion - Temporal dithering - Dynamic resolution scaling Updates the texture cache runtime to handle these new conversion paths and adds helper functions to check format compatibility for dithering and scaling operations. The changes include: - New shader files and CMake entries - Additional conversion pipeline setup in BlitImageHelper - Extended format conversion logic in TextureCacheRuntime - New format compatibility check helpers
2025-05-11common/nvdrv: improve memory validation and error handlingZephyron
Implements several improvements to memory handling and validation: - host_memory: Add IsValidMapping() and IsDirectMappingEnabled() methods to validate memory access - host_memory: Fix virtual base offset calculation to use proper pointer arithmetic - host_memory: Add size field to track allocation size - nvhost_ctrl_gpu: Return InvalidState instead of InvalidValue for TPC mask buffer size validation - Update copyright year for citron The changes improve memory safety by adding explicit validation checks and fixing pointer arithmetic in the virtual memory implementation.
2025-05-11nvdrv: Add GetTpcMasks2 support and improve memory mapping validationZephyron
This commit makes two main changes: 1. Adds support for GetTpcMasks2 (ioctl 0x13) in nvhost_ctrl_gpu: - Implements new GetTpcMasks2 method to handle TPC mask queries - Adds IoctlGetTpcMasks structure to store mask parameters - Returns conservative single TPC configuration for compatibility 2. Enhances memory mapping validation in HostMemory: - Adds verification check after memory mapping operations - Improves error handling for direct mapped address enabling - Adds logging for mapping and direct address failures Additional changes: - Updates copyright headers to include citron Emulator Project - Improves error handling and validation in several paths - Adds debug logging for TPC mask operations This improves GPU virtualization support and memory mapping reliability.
2025-05-11feat: Add RAM usage overlay and improve thermal displayZephyron
- Add new RAM usage overlay showing current/max memory usage with color gradient - Simplify thermal overlay to show temperature in C/F with color indication - Add SHOW_RAM_OVERLAY boolean setting (disabled by default in UI) - Set default values for thermal overlay and black backgrounds to true - Update copyright headers to include Citron Emulator Project The RAM overlay displays native heap usage with color gradient from green (low usage) to red (high usage). The thermal display was simplified to show just temperatures while maintaining the color indication based on system thermal status.
2025-05-11video_core: Add sRGB to D24S8 depth-stencil conversion supportZephyron
Implements conversion from sRGB color formats to D24S8 depth-stencil format in the Vulkan renderer. This change includes: - New fragment shader convert_abgr8_srgb_to_d24s8.frag that handles proper sRGB to linear conversion before depth calculation - Added shader to CMake build system - Extended BlitImageHelper with new conversion pipeline and methods - Updated texture cache to handle sRGB to D24S8 format conversion paths The conversion properly handles sRGB color space by first converting to linear space before calculating luminance values for the depth component, while preserving alpha channel data for the stencil component.
2025-05-11string_util: Replace deprecated wstring_convert with direct UTF conversionsZephyron
Removes usage of std::wstring_convert and std::codecvt_utf8_utf16 which are deprecated since C++17. Implements direct UTF conversions for: - UTF16ToUTF8: Manual conversion with proper surrogate pair handling - UTF8ToUTF16: Direct conversion supporting full Unicode range - UTF8ToUTF32: New implementation with proper code point extraction The new implementations are more robust and handle edge cases better while avoiding deprecated functionality. Windows-specific code paths remain unchanged using the existing UTF16W conversions. This change improves maintainability and removes compiler warnings about deprecated features while maintaining full Unicode support.
2025-05-11common: Improve error handling in host memory managementZephyron
Add proper error handling and recovery mechanisms for memory mapping operations instead of using assertions.
2025-05-11Update build.gradle.ktsMike Lothian
2025-05-11service: Implement rebootless system update stubs and typesZephyron
Adds initial support for rebootless system update related functionality: - Add system archive title IDs for ApplicationBlackList, RebootlessSystemUpdateVersion, and ContentActionTable - Add NS service result codes for system update operations - Implement stubs for ISystemUpdateControl::SetupToReceiveSystemUpdate and RequestCheckLatestUpdateIncludesRebootlessUpdate - Add RebootlessSystemUpdateVersion settings type and implement GetRebootlessSystemUpdateVersion in SET service - Fix GetSettingsItemValueImpl template implementation This provides basic infrastructure for handling system updates, particularly the rebootless update feature, though actual update functionality remains stubbed.
2025-05-11android: Fix non-scrollable legal disclaimer on setupvampiric_x
2025-05-11kernel/svc: Implement InitialProcessIdRange and improve process exit handlingZephyron
- Replace stubbed InitialProcessIdRange implementation with proper bounds (1-0x50) - Add handle and info_sub_id validation for InitialProcessIdRange - Replace process exit ASSERT with graceful error handling and logging - Add try-catch block around system.Exit() for safer shutdown - Add atomic header inclusion for binder.h This improves system call reliability by properly implementing process ID range checks and adding safer process exit handling with proper error logging.
2025-05-11network: Add NOMEM errno handling for socket operationsZephyron
Implements support for ENOMEM (errno 12) across the network stack: - Added NOMEM to Network::Errno enum - Added NOMEM = 12 to sockets Errno enum - Added translation case in sockets_translate.cpp This is the first step towards addressing the 0.0 FPS bug that occurs when the system runs out of memory during socket operations. Previously, these operations would trigger an unimplemented assertion, causing the emulator to halt. Now the error will be properly propagated to the guest application.
2025-05-11qt: Replace deprecated stateChanged with checkStateChangedZephyron
Updates QCheckBox signal connections to use checkStateChanged instead of the deprecated stateChanged signal. This change affects: - qt_controller.cpp - configure_filesystem.cpp - configure_input.cpp - configure_input_advanced.cpp - configure_system.cpp - configure_ui.cpp - shared_widget.cpp Also updates lambda signatures to use Qt::CheckState instead of int for the state parameter where needed.
2025-05-11vulkan: Relax VRAM allocation limits for better stabilityZephyron
Adjusts VRAM allocation strategy to be more conservative while maintaining performance: - Increases reserve memory from 1/8th to 1/4th (max 2GB) for discrete GPUs - Increases base memory limit from 6GB to 8GB - Doubles resolution scaling memory from 1GB to 2GB per scale factor - Reduces system memory reservation from 8GB to 4GB for integrated GPUs - Increases maximum memory limit from 4GB to 6GB for integrated GPUs These changes help prevent memory leaks while still providing adequate VRAM for optimal performance.
2025-05-11android: Update Gradle and Java version requirementsZephyron
Updates Android build configuration to use newer versions: - Upgrade Java/JVM target from 17 to 21 - Update Android Gradle Plugin from 8.1.2 to 8.8.0 These changes modernize the Android build system to use the latest LTS version of Java and the most recent stable Android Gradle Plugin. This enables access to newer language features and build optimizations while maintaining compatibility with modern Android development tools.
2025-05-11android: Fix compilation by adding missing log.h includeZephyron
Adds missing include for common/logging/log.h in gpu.h which was causing compilation failures on Android. This header is needed for logging functionality used in GPU-related operations. The include was previously indirectly available through other headers, but making it explicit improves code clarity and prevents potential future compilation issues.
2025-05-11service: Implement GPU error handling IPC commands for AMZephyron
Implements several IPC commands in IApplicationFunctions related to GPU error handling and system events: - EnableApplicationAllThreadDumpOnCrash (cmd 124) - SetDelayTimeToAbortOnGpuError (cmd 131) - TryPopFromNotificationStorageChannel (cmd 151) - SetHdcpAuthenticationActivated (cmd 170) - GetLaunchRequiredVersion (cmd 180) - UpgradeLaunchRequiredVersion (cmd 181) Also adds the LaunchRequiredVersion struct definition to the header file. These are currently stubbed implementations that log warnings when called. REFS: switchbrew.org/wiki/Applet_Manager_services#GetGpuErrorDetectedSystemEvent
2025-05-11buffer_cache: Simplify storage buffer binding logicZephyron
Reverts overly restrictive storage buffer validation and size calculation that was causing rendering issues in The Legend of Zelda: Tears of the Kingdom, particularly in underground/depth areas. The simplified approach: - Uses GetMemoryLayoutSize() instead of manual page probing - Removes unnecessary 4GB memory bounds validation - Streamlines address translation and alignment handling This fixes numerous reported cases of missing or corrupted rendering in TOTK's underground areas where storage buffer operations are heavily used for depth-related effects.
2025-05-11nvnflinger: Implement reference counting for binder objectsZephyron
Implements proper reference counting for binder objects based on the official documentation. This adds both weak and strong reference counting support to the IBinder interface and its implementations (BufferQueueProducer and BufferQueueConsumer). The implementation follows the documented behavior where: - type 0 affects weak references - type 1 affects strong references - During initialization: {addval=1, type=0} followed by {addval=1, type=1} - For onFirstRef: {addval=1, type=1} - For onLastStrongRef: {addval=-1, type=1} Reference counters are implemented using std::atomic to ensure thread safety. REFS: switchbrew.org/wiki/Nvnflinger_services#AdjustRefcount
2025-05-11service: vi: Implement missing IApplicationDisplayService functionsZephyron
Implements missing functions and improves permission handling in the VI (Visual Interface) IApplicationDisplayService based on official documentation. Key changes: - Add session type enum to properly handle vi:u/vi:s/vi:m permissions - Implement GetIndirectLayerImageCropMap for handling cropped layer images - Implement GetDisplayVsyncEventForDebug for debug vsync event handling - Add proper permission checks for GetSystemDisplayService and GetManagerDisplayService - Improve AppletResourceUserId validation in OpenLayer - Clean up logging and error handling The changes follow the official documentation for permission handling: - vi:u sessions can only use GetRelayService - vi:s sessions can use everything except GetManagerDisplayService - vi:m sessions can use all commands REFS: switchbrew.org/wiki/Display_services#IApplicationDisplayService