- Further Implemented frame skipping functionality to improve performance on lower-end devices by skipping alternate frames.
- Added interpolation logic to create additional frames, resulting in smoother gameplay when frame interpolation is enabled.
- Introduced new settings for toggling frame skipping and interpolation in the renderer configuration.
- Moved the `frame_skipping` setting from the `Graphics` category to the `Core` category.
- This aligns the setting with core emulator functionalities related to performance.
- Removed obsolete key generation logic from the project.
- This feature is no longer required for the current workflow.
- Cleaned up associated files and code references to ensure a streamlined build process.
- Added a new setting `frame_skipping` in the settings configuration.
- Provides users the ability to enable or disable frame skipping via the UI.
- Frame skipping helps improve performance by skipping frames when the emulator can't maintain the target frame rate, at the cost of visual fluidity.
- Added descriptive text to explain the setting's purpose and its impact on gameplay.
- Refactored `GuestMemory` and `GuestMemoryScoped` to remove redundant code and improve clarity.
- Introduced `allocateBackupOrCopy` helper function to handle memory backup or copy operations.
- Moved data writing logic into a dedicated `writeData` function in `GuestMemoryScoped` to reduce repetition.
- Marked functions `noexcept` where applicable to optimize performance and indicate exception safety.
- Used `constexpr if` to reduce unnecessary runtime checks.
- Improved resource management by adding move semantics for constructors and assignment operators in `GuestMemory`.
- General improvements to code maintainability and efficiency without changing functionality.
- Implemented `useSyncCoreSpeedSetting` to handle `BooleanSetting.SYNC_CORE_SPEED`.
- Mirrored structure from the existing multi-core setting for consistency.
- Added explicit cast to address narrowing conversion warning in the initializer list for `IPC::ResponseBuilder`.
- Ensured compatibility with strict type conversion requirements.
- Changed forward declaration of `Layer` from `class` to `struct` to match its actual definition in `display.h`.
- Resolved potential linker errors under the Microsoft C++ ABI due to mismatched struct/class declarations.
- Resolved narrowing conversion issues by applying appropriate casting.
- Fixed incorrect `evt_sequence_num` by using `sequence_number`.
- Updated the use of `std::optional::value_or` to prevent type mismatch with `chrono` durations.
- Ensured compatibility with `std::chrono` types across timing-related logic.
- Added `CORE_SYNC_SPEED` to the Phoenix Hacks submenu as a toggleable option.
- This allows users to enable or disable synchronization of CPU core speed with game rendering.
- Updated the settings menu to include relevant title and description for the new setting.
- Added missing declaration for `ReleaseFramebuffers` in the `HardwareComposer` class.
- Forward-declared the `Layer` class to avoid incomplete type issues.
- Ensured method declarations in the header match the implementation in the `.cpp` file.
- Verified necessary includes and forward declarations for all relevant types.
- Implemented the `HardwareComposer::CacheFramebufferLocked` function to handle caching and reuse of framebuffers.
- Introduced logic to acquire and release framebuffers based on their acquisition state.
- Integrated support for sorting layers by Z-index during composition and rendering.
- Added functionality to normalize swap intervals, supporting speed control based on frame timing.
- Optimized the handling of framebuffers, releasing them when no longer needed to avoid resource contention.
- Improved buffer management to reduce redundant acquisitions, enhancing overall performance.
- Modularized common logic for multicore and single-core checks using ternary operators.
- Reduced code duplication in event scheduling and handling.
- Implemented early returns to simplify control flow and improve readability.
- Flattened nested conditions and improved consistency in function calls.
- Modularized repeated patterns for request parsing and response building:
- Created helper functions `ParseAndRespond`, `ParseSetAndRespond`, and `ParseGetAndRespond` for consistency and readability.
- Introduced `LogStubCall` for logging stubbed functions to reduce redundancy.
- Cleaned up `mm_u.h` by removing redundant enum assignments and replacing `typedef` with `using`.
- Simplified and improved readability in `mm_u.cpp` by reducing duplicate code and centralizing response logic.
- Ensured consistency and streamlined logic across all functions handling IPC requests.
- Added new features `EnhancedAudioProcessing` and `AdvancedNoiseSuppression` to `SupportTags` for revision 12.
- Updated `CurrentRevision` to 12.
- Expanded `features` array to map the new features to revision 12.
- Improved error logging:
- Logs an error to `std::cerr` if an invalid `SupportTag` is passed.
- Logs an error to `std::cerr` if the user revision exceeds the `CurrentRevision` value.
- Ensured `CheckValidRevision` function logs an error for invalid revision numbers.
- Removed fragment shader that blended previous and current frames with a 50% linear interpolation
- This shader was no longer required or used in the current pipeline
- Better Interpolation Method Used
- Updated Horizon OS version to 18.1.0 (from 12.1.0)
- Updated NintendoSDK firmware display version to 18.1.0-1.0
- Updated VERSION_HASH to "437857bcb1604c717ae3fe62d03ae1fcaa783264"
- Updated Atmosphere release version to 1.7.1 (from 1.0.0)
- Added shader module and pipeline for ABGR8 sRGB to D24S8 conversion in `convert_abgr8_srgb_to_d24s8.frag`.
- Implemented `BlitImageHelper::ConvertABGR8SRGBToD24S8` to handle the conversion using the new pipeline.
- Integrated the shader and pipeline with the `Framebuffer` and `ImageView` for proper rendering.
- Added logic to select the conversion function when the source image format is `PixelFormat::A8B8G8R8_SRGB`.
- Implemented a new host shader to enhance rendering performance and visual quality.
- The shader optimizes the handling of specific graphical effects and improves efficiency in Vulkan rendering.
- Integrated the shader into the rendering pipeline, ensuring compatibility with existing framebuffer handling.
- Added necessary shader compilation steps and resources for proper deployment across platforms.
- Refactored logic operation handling for AMD drivers to reduce unnecessary object creation.
- Inlined lambda for float type checking in vertex attribute format to improve performance.
- Updated dynamic state management with support for extended dynamic state and primitive restart enable.
- Added checks for various extended dynamic state support features (v1, v2, v3).
- Implemented frame skipping logic to skip every 4th frame in the Vulkan renderer.
- Added basic frame interpolation using a fragment shader to blend the previous and current frames.
- The interpolation shader performs a 50% blend between the two frames to smooth out skipped frames.
- Frame buffers are captured and used for interpolation in case a frame is skipped.
- Implemented logic to determine memory limit based on available memory.
- The system now sets a memory limit of 8 GiB, 6 GiB, or 4 GiB based on the available memory, using the total available memory if it's less than 4 GiB.
- Added multi-core, shader backend, NVDEC emulation, ASTC decode method, and ASTC recompression settings to the Phoenix Hacks submenu.
- This enhances the customization of rendering settings in the Phoenix Hacks section.
- Added ResolutionSetup enum to represent different resolution scaling levels.
- Integrated dynamic resolution adjustment based on FPS into the FPS overlay.
- Fixed type mismatch by safely handling nullable 'perfStatsUpdater' with null-safe operators.
- Ensured proper null safety handling when posting and removing callbacks.
- Resolved smart cast issue by preventing potential state changes of 'perfStatsUpdater'.
- Fixed argument order in String.format for FPS and memory usage.
- Improved null safety checks for binding and perfStatsUpdater.
- Ensured proper removal of callbacks to avoid memory leaks.
- Introduced a new 'Phoenix Hacks' submenu in the settings UI.
- Added options for Phoenix-specific hack toggles and adjustments.
- Prepared the settings infrastructure for upcoming Phoenix cherry-picked optimizations.
- Implemented `uninstallFirmware` method to remove installed firmware files from the system.
- Added confirmation and error handling for firmware uninstallation.
- Updated UI strings with messages for firmware uninstallation process.
- Linked the uninstallation option in the installable list of actions.
- Added battery temperature tracking through a broadcast receiver to update thermal overlay.
- Integrated memory usage display in the performance overlay.
- Updated lifecycle management to handle battery receiver registration and unregistration.
- Refined thermal overlay visibility and removed extra handling for foldable layouts.
- Improved overall performance tracking, memory statistics, and UI adjustments.
- Removed `CheckKgslPresent()` from `SupportsCustomDriver()` function.
- Updated API level requirement to 30 for custom driver support.
- Simplified the `supportsCustomDriverLoading` JNI function to rely solely on API level check.
- Introduced a Python-based tool for processing log files.
- The tool removes unnecessary `<Info>` lines, focusing on device information, warnings, and errors.
- Designed for easy integration into development workflows with drag-and-drop file selection.
- Output is formatted for Discord, making it easy to share logs with relevant details.
- Updated `nvn_bias` structure to extend the offset range.
- Adjusted `offset_begin` from 0x110 to 0x100 and `offset_end` from 0x610 to 0x700.
- These changes provide a broader range for better memory alignment and handling.
- Commented out the section in `CMakeLists.txt` responsible for downloading and extracting Vulkan Validation Layers (VVL).
- As VVL is now provided manually, the automated download and extraction process is no longer required.
- The script block responsible for copying the VVL binaries to `jniLibs` has also been commented out.
- Replaced outdated branding references with the new brand name.
- Updated URLs to point to the correct and current addresses.
- Ensured all references in `strings.xml` reflect the latest company or product updates.
- Upgraded Gradle to version 8.10 for enhanced build performance and compatibility.
- Updated Android Studio `build.gradle.kts` with new dependencies, NDK, and JDK versions.
- Improved obfuscation settings for better security and minimized APK size.
- Ensured all dependencies are compatible with the latest tooling for smoother development workflow.
- Implemented stubs for `SR_WScaleFactorXY` and `SR_WScaleFactorZ` to handle scaling factors for X, Y, and Z dimensions in the shader recompiler.
- Placeholder logic for scaling factor fetching, allowing future extension for proper uniform or buffer access.
- Ensures compatibility with the GLSL backend by providing stubbed implementations for scaling factors.
- Implemented necessary fixes for handling `std::optional`, ensuring proper assignment and value checks.
- Corrected all assignments and comparisons with pointers and `nullptr` to avoid potential runtime issues.
- Improved code reliability by addressing cases where optional values were improperly accessed or compared with null pointers.
- Replaced the old logo colors with vibrant cyan (#00FFFF) and bright purple (#BF40BF)
- Adjusted all relevant branding assets to reflect the new color scheme
- Updated documentation and references to the logo
- Merged two versions of EmitInvocationInfo into a single function handling multiple stages.
- Replaced repeated shift values with a constant `SHIFT_AMOUNT` for improved readability and maintainability.
- Ensured consistent use of comments and improved code organization.
- Replaced hardcoded shift value of 16 with a named constant `SHIFT_AMOUNT` for better readability and maintainability.
- Standardized the formatting and operation of all stages for consistency.
- Added comments to clarify the purpose of each case.
- Improved logging in the default case to include the shader stage for better debugging.
- Fixed path formatting issues for Windows batch script by using backslashes (`\`) in `rmdir` commands.
- Added `--force` option to `git submodule add` commands to handle existing local directories.
- Addressed warnings related to line-ending conversion (LF to CRLF).
- Improved error handling during submodule cleanup, removal, and reinitialization.