Where previously the emulator thread was halted, frame advancing mode is now enabled instead
This commit also removes the "Enable Frame Advancing" option due to being obsolete
An optional boolean `primary_only` has been added to `link_action_shortcut` when it is necessary to seperate primary and secondary window hotkeys.
Currently this is only used for the fullscreen binding, as a different prodedure is used for each window.
This feature is accessible by long-pressing on a game card, replacing the old method of accessing the cheats menu
The cheats menu is now accessed from within the about game dialog
Adapted from 69c323289f
Co-authored-by: Ishan09811 <156402647+ishan09811@users.noreply.github.com>
Co-authored-by: kleidis <167202775+kleidis@users.noreply.github.com>
This add Custom Layout selector in Both Menu and Enhancment Setting. This will allow to use or change Custom Layout mode or by using toggle. Still No Overlay Editor, just manual edit box, and this Not saved or carried at per game settings
Replace deprecated `stateChanged` function with `checkStateChanged` that was first introduced in QT 6.7 but keep the old code to maintain compatibility with older versions of QT.
* common/aarch64: Allow generic code generator types
Use the templated `BasicCodeGenerator` type rather than the specialized
`CodeGenerator` type.
Allows `VectorCodeGenerator` to work with these functions.
* common/aarch64: Add `VectorCodeGenerator` to `CallFarFunction`
`VectorCodeGenerator` will always do far-calls since we cannot resolve any absolute addresses here.
* shader_jit_a64: Implement position-independent VectorCodeGenerator
Generates more position-independent assembly to allow for code to be
generated within a resizable vector before copying into executable
memory, allowing for more compact memory allocations and usage rather
than a statically defined worst-case for all-cases.
`VectorCodeGenerator` will need to generate position-independent code
rather than use absolute addresses. Assumes all far function calls in the
case of `VectorCodeGenerator` to use absolute addresses rather than
potentially use a relative `BL` branch after memory relocation.
* Refactor Vulkan stream buffer memory type selection
This is a fix for GPUs with Vulkan V1.1 and V1.2
* add requested refactoring
* clang format
* fix typo
* act: Add more command names and implement GetErrorCode
The command names have been extracted from 3dbrew and the JavaScript
bindings that the NNID settings uses internally.
The error names have been extracted from the Wii U implementation
(102-XXXX), which are compatible with the 3DS ones except for 022-5XXX,
which are error codes specific to the 3DS.
* act: Split error codes into separate file
* Implements a steps per hour (global) setting that gets returned by PTM GetStepHistory
* Make setting label text clearer
* Add setting to SDL frontend
* Add setting to Android (no UI)
* Remove IntSetting enum value
* Follow convension in android default ini
* Android: replace company in the game card with titleId.
TitleId is more useful for users than companies
because it can help them find game saves and the cheat file.
* Android: restore the company name on the game card.
* shader_jit: Add conditional unit-tests
Tests all permutations of X, Y, AND, OR with each possible input value.
* video_core: Fix shader-interpreter conditional-code initialization
Rather than reserving the incoming state of the conditional codes, the
shader-interpreter was setting them both to false. In pretty much all
cases, the initial state of a shaderunit can be zero-initialized
statically. Just running the interpreter shouldn't necessarily reset the
conditional codes though. The JIT loads incoming conditional codes
while the shader-interpreter resets them to false. This makes the
interpreter match the behavior of the shader-jit.
* shader_jit_a64: Fix/optimize conditional evaluation
Fix some of the regressions introduced by the previous optimization.
EOR does not support a constant of `0` in its immediate. In these cases
the COND{0,1} registers can be utilized immediately.
* shader_jit_x64: Fix conditional evaluation extended-bit hazard
The unit test seems to have identified a bug in the x64 jit too. The x64
jit was doing 32-bit comparisons despite the condition flags being 8-bit
values and is sensitive to garbage being in the upper 24 bits of the
register. This is fixed by using the proper 8-bit register types rather
than the 32-bit ones(`eax,`ebx` -> `al`, `bl`).
* shader_jit_x64: Zero-extend conditional-code bytes
`mov` was doing a partial update of bits within the register, allowing
garbage to be introduced in the upper bits of the register.
These conditional tests are a 1:1 translation from the x64 code but do
not have to be. Reference-values are known at emit-time and can be
embedded as an immediate into an `EOR` instruction rather than moved
into a register. The `TST` instruction can be utilized to more optimally
test and update the `EQ`/`NE` status flags.
* shader_jit/tests: Test both the shader interpreter and jit
Uses Catch2's `TEMPLATE_TEST_CASE`-feature to test both the JIT and the
interpreter.
* shader_jit/tests: Use generator-expressions for nested-loop test cases
Tests more permutations of inputs than just the two it had before
* shader/tests: Refactor `shader_jit` tests to just `shader` tests
Since these tests will test both the interpreter and the jit, they are no longer jit-specific tests and are more general shader-tests.
* shaders/tests: Disable Nested-Loop `ShaderInterpreterTest` test
Restoring loop-state on nested loops is bugged on the ShaderInterpreter.
* shader/tests: Fix Nested Loop generator expressions
* Soc and artic_bass: gcc 13+ compatibility fix.
* externals/fmt: update to HEAD fcd3e1e19.
It will fix error.
integer_sequence<bool, (Is == Is)...> [-Werror=tautological-compare]
The updating is helpful and needed.
Fmt has gone through two public versions since its last update
and has fixed many bugs, including new compiler optimizations.
But neither of these two public versions can fix the errors encountered above.
We need to switch to a working version.
It can be fixed after fmt/8e62172.There are still many optimizations,
Such as this one:
Std. h c++23 build fix (# 3856)
And these:
C++23 compatibility: basicstring_view cannot be constructed from nullptr (# 3846)
Fix warning C4702 emitted from format.h (MSVC) (#3866)
Of course, there are other functional improvements as well.
Very helpful.
The selected version is the one that has been checked and works well.
And synchronously updating local code.
* citra_qt/ui: clean up duplicate naming warnings.
* Allow screenshot capture in paused state by unpausing to capture next frame
* Change `QMessageBox::No` to `QMessageBox::Yes`
* Fix formatting
* Fix formatting
* Android: Remember last entered Artic Base server address
* Android: Updated string key for last Artic Base address
`lastArticBaseAddr` --> `last_artic_base_addr`
Co-authored-by: PabloMK7 <hackyglitch2@gmail.com>
---------
Co-authored-by: PabloMK7 <hackyglitch2@gmail.com>
* renderer_vulkan: Remove vulkan prefix in SetObjectName
* renderer_vulkan: Rename renderpass cache to render manager
* It is no longer just a cache
* renderer_vulkan: Rewrite descriptor management
* Switch to batched vkUpdateDescriptorSets from cached descriptor sets with templates
* vk_master_semaphore: Remove waitable atomic
* These are buggy on some platforms and regular condition_variables are faster most of the time
* vk_texture_runtime.cpp: remove outdated references
* vk_render_manager: Minor cleanups and rename to RenderManager
* It is no longer just a renderpass cache
* Revert variable name change from render_manager back to renderpass_cache
---------
Co-authored-by: GPUCode <geoster3d@gmail.com>
* fix SOC_U::Accept invalid log function
* make logging get checked at compile time
- ensures log strings match the amount and type (if the format specifies an integer, for example) of the arguments
- if at any later point a runtime-generated string is used as the log format, FmtLogMessage might require an overload taking a fmt::runtime_format_string<> as the format argument type, everything else being equal. wrap the generated string with fmt::runtime() before passing to the LOG_X function
* formatting fix: aligning the arguments
* vk_texture_runtime: Use boost-`static_vector` for image init-barriers
Uses `static_vector` rather than `std::array`+`u32` when passing input
parameters into the initialization barriers.
* vk_texture_runtime: Use boost-`static_vector` for framebuffer attachments
* vk_texture_runtime: Use boost-`static_vector` for surface uploads
* yuzu: Use displayed port on direct connect
* Color player counts in the multiplayer public lobby list
- Full lobbies have their player count displayed in red.
- Lobbies with one slot left have their player count displayed in orange.
- Empty lobbies have their player count grayed out.
* Add hotkeys for multiplayer actions
Default shortcuts were chosen as to be intuitive (use the first letter
of the action, or the second word's first letter) and work on all
types of keyboards. The hotkeys can be used while playing a game too,
as they are application-wide.
* Persist filters in multiplayer public lobby list
After connecting to a room, the chosen filter text, "Games I Own",
"Hide Empty Rooms" and "Hide Full Rooms" values are persisted
to configuration so they are preserved across restarts.
This makes it easier to rejoin a room if you regularly play the same
game, or after a crash.
* citra_qt/lobby: Fix multiplayer player count color in dark theme
Co-Authored-By: Kevnkkm <56404895+kevnkkm@users.noreply.github.com>
* Address review comments
---------
Co-authored-by: Narr the Reg <juangerman-13@hotmail.com>
Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
Co-authored-by: Kevnkkm <56404895+kevnkkm@users.noreply.github.com>
This adds support for the Performance and Battery Saver modes in the Game Dashboard mostly found on Google Pixel devices.
This does not yet define the specifics for the performance modes but does provide the initial basic support.
Co-authored-by: Emma <153868115+gaypotatoemma@users.noreply.github.com>
Currently, the RESOLUTION_FACTOR preference is being set with the GRAPHICS_API key and default. Therefore, it will set/retrieve the wrong values
This revision updates the RESOLUTION_FACTOR preference to use the RESOLUTION_FACTOR key and default value. As a result, RESOLUTION_FACTOR and GRAPHICS_API should store and return the correct (separate) values
* dist: Remove duplicated Finnish translation
For some reason, we had Finnish listed twice on Transifex, causing it be shown twice in Citra.
It has already been deleted again from Transifex, now we only need to remove it from the repo as well.
* citra_qt/configure_ui: Show country of language in the combobox
This prevents an issue where we had seperate versions of the same language for different regions and they were not distinguishable (e.g. "Chinese (China)" and "Chinese (Taiwan)").
* geometry_pipeline: Remove unneeded assert
* Has been hw-tested that gs works correctly even when not in exclusive mode
* pica_core: Propagate output_mask to gs
* Has been hw-tested to occur under the same conditions that other uniforms are shared
* regs_shader: Intialize GPUREG_SH_INPUTBUFFER_CONFIG to default value
* Default value verified on hw. Tales of Abyss does not update the number of vertex attributes for the geometry unit and expects it to be 2
* texture_codec: Align buffer sizes to bpp
* Prevents out of bounds texture reads when launching TOA from the HOME menu
* pica_core: Make default value more clear
While I was looking at the NEWS sysmodule, I noticed the params order
for this command were backwards: the info type is the first param,
followed by the buffer size.
This is accurate to my reverse engineered code for the NEWS sysmodule.
Upon further research, I found out the unknown value in FS::Get[This]SaveDataSecureValue indicates that the requesting process is a game card. I have updated the comment for future reference.
* Add random delay to app main thread
* Suggestions
* Remove randomness, only delay with lle
* Apply suggestions
* Fix clang format
* Fix compilation (again)
* Remove unused include
* Implement some missing/wrong AC functionality.
* Schedule NDM connect event into the future
* Disable NDM connect for now as it's causing issues
* Apply latest changes and suggestions.
* Workaround to fake wifi connection.
* Add missing command to ac:i
* Fix compilation
* Fix error codes for CamcelConnectAsync
* Fix missing global state.
* do not move constant variables
* applet_manager: avoid possible use after move
* use constant references where pointed out by msvc
* extra_hid: initialize response
* ValidateSaveState: passing slot separately is not necessary
* common: mark HashCombine as nodiscard
* cityhash: remove use of using namespace std
* Prefix all size_t with std::
done automatically by executing regex replace `([^:0-9a-zA-Z_])size_t([^0-9a-zA-Z_])` -> `$1std::size_t$2`
based on 7d8f115
* shared_memory.cpp: fix log error format
* fix compiling with pch off
* core_timing: Apply random base ticks value on startup.
* core: Maintain consistent base system ticks in TAS movies.
* frontend: Add setting to configure a fixed base system ticks value.
* core: Config plg_ldr after its creation
* Also use service manager to retrieve the service
* thread: Release resource limit in Thread::Stop
* service: Undo plgldr change
* Associate 3ds files with Citra in Info.plist
* qt: Add support for opening files directly on macOS.
---------
Co-authored-by: shinra-electric <50119606+shinra-electric@users.noreply.github.com>
* framebuffer_layout.cpp: simplify FrameLayoutFromResolutionScale
- upright_screen seems to only be swapped width and height calculation, so it is replaced with std::swap
- Get rid of call to GetCardboardSettings, The FrameLayoutFromResolutionScale function is used for Screenshots and Video Dumping where we dont need 3D effects
* framebuffer_layout.cpp: Combine SideFrameLayout and MobileLandscapeFrameLayout into variants of LargeFrameLayout
* framebuffer_layout.{cpp,h}: rename maxRectangle to MaxRectangle, plus
minor documentation update
* clang-format
* kernel: Switch to atmosphere style macros
* code: Rename ResultCode to Result
* code: Result constants are lower case
* Address review comments
* core: Remove CASCADE_CODE
* R_TRY replaces completely
* core: Run clang format
* boss: Implement some NsData header and read commands.
Co-authored-by: Rokkubro <lachlanb03@gmail.com>
* boss: Move opening ext data to common function and improve logging.
---------
Co-authored-by: Rokkubro <lachlanb03@gmail.com>
* feat(android-hotkeys): Introduce hotkey support for Android app
* android: Fix settings not saving for layout options - screen swap + layout.
* android: Fix `from` method to default to "DEFAULT" if passed an invalid method (and also not be based on ordering)
* android: PR response - name to togglePause
This is particularly relavant for TASing, not savestating these values will often cause dropped inputs on loading a savestate, due to the previous old circle pad values being used rather than the ones used during the savestate.
For casual usage, this likely doesn't have much effect compared to the previous code, considering a casual user is probably not likely to care if inputs on the first frame of loading a savestate is dropped or not.
* android: Rework cheats
Reworks cheats to use the navigation component, kotlin, and a tweaked layout for a better tuned look.
* android: Convert remaining files to kotlin and add overlay home button
* android: Remove Picasso dependency
* android: Fix home option layout centering
* android: Adjust logo size in-app
* code: Remove some old msvc workarounds
* android: Upgrade to NDK 26
* Allows access to newer libc++
* common/swap: Make use of std::endian
Allows removing a bunch of defines in favor of a two liner.
* common: Remove misc.cpp
* GetLastErrorMsg has been in error.h for a while and also helps removing a depedency from a hot header like common_funcs
* common: use SetThreadDescription API for thread names
* common: Remove linear disk cache
* Has never been used?
* bit_set: Make constexpr
* ring_buffer: Use feature macro
* bit_set: Use <bit> and concepts
* gsp_gpu: Restore comment
* core: Ignore GCC warning
---------
Co-authored-by: Lioncash <mathew1800@gmail.com>
Co-authored-by: Liam <byteslice@airmail.cc>
* vk_platform: Add `SetObjectName`
Creates a name-info struct and automatically deduces the object handle type using vulkan-hpp's handle trait data.
Supports `string_view` and `fmt` arguments.
* vk_texture_runtime: Use `SetObjectName` for surface handles
Names both the image handle and the image-view.
* vk_stream_buffer: Add debug object names
Names the buffer and its device memory based on its size and type.
* vk_swapchain: Set swapchain handle debug names
Identifies the swapchain images themselves as well as the semaphores
* vk_present_window: Set handle debug names
* vk_resource_pool: Set debug handle names
* vk_blit_helper: Set debug handle names
* vk_platform: Use `VulkanHandleType` concept
Use a new `concept`-type rather than `enable_if`-patterns to restrict
this function to Vulkan handle-types only.
* android: Rework Emulation Activity's UI
- New in-game menu
- Ability to open games from file manager
- New shader loading UI
- Fixes an issue where the system bars would stay visible during emulation
* android: Port yuzu's foreground service logic
Fixes an issue where the foreground service notification would be stuck with no way to dismiss it
This fixes a compile-error with gcc I was getting from
`LOG_TRACE`(`error: ‘LOG_TRACE’ was not declared in this scope`) and
`u32`(`error: ‘u32’ was not declared in this scope`) being used without
their header-files being included.
Not sure how `romfs_reader.cpp` is even compiling when nothing in its
include-tree is refers to those macros.
For each draw, Citra will rebind all descriptor set slots and may redundantly re-bind descriptor-sets that were already bound. Instead it should only bind the descriptor-sets that have either changed or have had their buffer-offsets changed. This also allows entire calls to `vkCmdBindDescriptorSets` to be removed in the case that nothing has changed between draw calls.
* android: Android 14 support
* android: New home UI flow
Port of the yuzu-android home UI with a few Citra specific tweaks.
A few important things to note
- New and existing Citra users will be guided through the new setup flow
- Existing game directory location is discarded and will have to be reselected
- Protections around making sure the user has selected a user directory were reworked to fit this new UI. I removed async directory init and DirectoryStateReceivers and check during MainActivity's onResume callback.
- Removed Citra premium. The light/dark theme is now available for everyone.
* android: New blue app theme
* android: Extend UI into status/navigation bar area
* android: Remove yellow theme specific styles
* android: Disable status/navigation bar contrast enforcement
We handle it ourselves so there's no need to use a contrasty background on the system bars
* android: GPU Driver Manager
Includes a rewrite of FileUtil with some helper functions for the manager
* android: Rework NativeLibrary in Kotlin
Besides the rewrite this cleans up the alert dialogs that are used for system errors. Generally removes unused JNI code and makes things a little more consistent.
* android: Home menu support + downloader
* android: Enable minify and resource shrinking
* android: Remove premium page and expose texture filtering modes
* android: Update AGP to 8.1.2
* android: Don't display emulation in cutout area
We don't currently handle the notch properly in the emulation fragment so just don't render under it for now.
* android: native.cpp ClangFormat fixes
* core: SystemTitles: Include std::optional
Without it, the android build would fail
* vk: android: Properly override GetDriverLibrary
* vk_instance: Blacklist timeline semaphore ext on turnip
* vk_platform: Hardcode apiVersion to VK_API_VERSION_1_3
* android: native: Use const where applicable
* android: native: Array pointer access style fix
* android: Share relevant log
Shares the old log if it exists and you haven't booted a game yet and shares the current log if you have booted a game.
* android: Apply dark theme color for software keyboard text
---------
Co-authored-by: GPUCode <geoster3d@gmail.com>
* android: Unify DocumentNode's `key` and `name`
They're effectively the same data, just obtained in different ways.
* android: Remove getFilenameWithExtensions method
After the previous commit, there's only one remaining use of
getFilenameWithExtensions. Let's get rid of that one in favor of
DocumentFile.getName so we no longer need to do manual URI parsing.
* android: Use case insensitivity in DocumentsTree
External storage on Android is case insensitive. This is still the case
when accessing it through SAF. (Of course, SAF makes no guarantees about
whether the storage location picked by the user is backed by external
storage or whether it's case insensitive, but I'm just going to ignore
that for now because I am *so tired of SAF*)
Because the underlying file system is case insensitive, Citra's caching
layer that had to be implemented because SAF's performance is atrocious
also needs to be case insensitive. Otherwise, we get a problem in the
following scenario:
1. Citra wants to check if a particular folder exists in sdmc, and if
not, create it.
2. The folder does exist, but it has a different capitalization than
Citra expects, due to a mismatch between Citra's code and (typically)
files dumped from a real 3DS using ThreeSD.
3. Citra tries to open the folder, but DocumentsTree fails to find it,
because the case doesn't match.
4. Citra then tries to create the folder, but creating the folder fails,
because the underlying filesystem considers the folder to exist.
5. The game fails to start.
(Sorry, did I say creating the folder fails? Actually, a new folder does
get created, with " (1)" appended to the end of the name. SAF makes no
guarantees whatsoever about what happens in this situation – it's all
determined by the storage provider!)
This commit makes the caching layer case insensitive so that the
described scenario will work better.
* externals: Add oaksim submodule
Used for emitting ARM64 assembly
* common: Implement aarch64 ABI
Utilize oaknut to implement a stack frame.
* tests: Allow shader-jit tests for x64 and a64
Run the shader-jit tests for both x86_64 and arm64 targets
* video_core: Initialize arm64 shader-jit backend
Passes all current unit tests!
* shader_jit_a64: protect/unprotect memory when jit-ing
Required on MacOS. Memory needs to be fully unprotected and then
re-protected when writing or there will be memory access errors on
MacOS.
* shader_jit_a64: Fix ARM64-Imm overflow
These conditionals were throwing exceptions since the immediate values
were overflowing the available space in the `EOR` instructions. Instead
they are generated from `MOV` and then `EOR`-ed after.
* shader_jit_a64: Fix Geometry shader conditional
* shader_jit_a64: Replace `ADRL` with `MOVP2R`
Fixes some immediate-generation exceptions.
* common/aarch64: Fix CallFarFunction
* shader_jit_a64: Optimize `SantitizedMul`
Co-authored-by: merryhime <merryhime@users.noreply.github.com>
* shader_jit_a64: Fix address register offset behavior
Based on https://github.com/citra-emu/citra/pull/6942
Passes unit tests.
* shader_jit_a64: Fix `RET` address offset
A64 stack is 16-byte aligned rather than 8. So a direct port of the x64
code won't work. Fixes weird branches into invalid memory for any
shaders with subroutines.
* shader_jit_a64: Increase max program size
Tuned for A64 program size.
* shader_jit_a64: Use `UBFX` for extracting loop-state
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
* shader_jit_a64: Optimize `SUB+CMP` to `SUBS`
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
* shader_jit_a64: Optimize `CMP+B` to `CBNZ`
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
* shader_jit_a64: Use `FMOV` for `ONE` vector
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
* shader_jit_a64: Remove x86-specific documentation
* shader_jit_a64: Use `UBFX` to extract exponent
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
* shader_jit_a64: Remove redundant MIN/MAX `SRC2`-NaN check
Special handling only needs to check SRC1 for NaN, not SRC2.
It would work as follows in the four possible cases:
No NaN: No special handling needed.
Only SRC1 is NaN: The special handling is triggered because SRC1 is NaN, and SRC2 is picked.
Only SRC2 is NaN: FMAX automatically picks SRC2 because it always picks the NaN if there is one.
Both SRC1 and SRC2 are NaN: The special handling is triggered because SRC1 is NaN, and SRC2 is picked.
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
* shader_jit/tests:: Add catch-stringifier for vec2f/vec3f
* shader_jit/tests: Add Dest Mask unit test
* shader_jit_a64: Fix Dest-Mask `BSL` operand order
Passes the dest-mask unit tests now.
* shader_jit_a64: Use `MOVI` for DestEnable mask
Accelerate certain cases of masking with MOVI as well
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
* shader_jit/tests: Add source-swizzle unit test
This is not expansive. Generating all `4^4` cases seems to make Catch2
crash. So I've added some component-masking(non-reordering) tests based
on the Dest-Mask unit-test and some additional ones to test
broadcasts/splats and component re-ordering.
* shader_jit_a64: Fix swizzle index generation
This was still generating `SHUFPS` indices and not the ones that we wanted for the `TBL` instruction. Passes all unit tests now.
* shader_jit/tests: Add `ShaderSetup` constructor to `ShaderTest`
Rather than using the direct output of `CompileShaderSetup` allow a
`ShaderSetup` object to be passed in directly. This enabled the ability
emit assembly that is not directly supported by nihstro.
* shader_jit/tests: Add `CALL` unit-test
Tests nested `CALL` instructions to eventually reach an `EX2`
instruction.
EX2 is picked in particular since it is implemented as an even deeper
dispatch and ensures subroutines are properly implemented between `CALL`
instructions and implementation-calls.
* shader_jit_a64: Fix nested `BL` subroutines
`lr` was getting writen over by nested calls to `BL`, causing undefined
behavior with mixtures of `CALL`, `EX2`, and `LG2` instructions.
Each usage of `BL` is now protected with a stach push/pop to preserve
and restore teh `lr` register to allow nested subroutines to work
properly.
* shader_jit/tests: Allocate generated tests on heap
Each of these generated shader-test objects were causing the stack to
overflow. Allocate each of the generated tests on the heap and use
unique_ptr so they only exist within the life-time of the `REQUIRE`
statement.
* shader_jit_a64: Preserve `lr` register from external function calls
`EMIT` makes an external function call, and should be preserving `lr`
* shader_jit/tests: Add `MAD` unit-test
The Inline Asm version requires an upstream fix:
https://github.com/neobrain/nihstro/issues/68
Instead, the program code is manually configured and added.
* shader_jit/tests: Fix uninitialized instructions
These `union`-type instruction-types were uninitialized, causing tests
to indeterminantly fail at times.
* shader_jit_a64: Remove unneeded `MOV`
Residue from the direct-port of x64 code.
* shader_jit_a64: Use `std::array` for `instr_table`
Add some type-safety and const-correctness around this type as well.
* shader_jit_a64: Avoid c-style offset casting
Add some more const-correctness to this function as well.
* video_core: Add arch preprocessor comments
* common/aarch64: Use X16 as the veneer register
https://developer.arm.com/documentation/102374/0101/Procedure-Call-Standard
* shader_jit/tests: Add uniform reading unit-test
Particularly to ensure that addresses are being properly truncated
* common/aarch64: Use `X0` as `ABI_RETURN`
`X8` is used as the indirect return result value in the case that the
result is bigger than 128-bits. Principally `X0` is the general-case
return register though.
* common/aarch64: Add veneer register note
`LR` is generally overwritten by `BLR` anyways, and would also be a safe
veneer to utilize for far-calls.
* shader_jit_a64: Remove unneeded scratch register from `SanitizedMul`
* shader_jit_a64: Fix CALLU condition
Should be `EQ` not `NE`. Fixes the regression on Kid Icarus.
No known regressions anymore!
---------
Co-authored-by: merryhime <merryhime@users.noreply.github.com>
Co-authored-by: JosJuice <JosJuice@users.noreply.github.com>
Adds the current viewport and scissor to the dynamic pipeline state to
reduce redundant viewport/scissor assignments in the command buffer.
This greatly reduces the amount of API calls to `vkCmdSetViewport` and
`vkCmdSetScissor` by only emitting the API call when the state actually
changes.
* vk_stream_buf: Avoid protected memory heaps
* Add an "Exclude" argument when finding a memory-type that avoids
`VK_MEMORY_PROPERTY_PROTECTED_BIT` by default
* vk_stream_buf: Utilize dedicated allocations when preferred by driver
`VK_KHR_dedicated_allocation` is part of the core Vulkan 1.1
specification and should be utilized when `prefersDedicatedAllocation`
is set.
* game_list: Treat demos as applications
Allows the dumping of RomFS from demos.
* game_list: Add TODO about using bitmasks for title ID high checks.
---------
Co-authored-by: Steveice10 <1269164+Steveice10@users.noreply.github.com>
`DebugScope` was capturing a `string_view` in a lambda which is only
valid during the scope of this ctor. When the lambda gets invoked at a
later time, it will read undefined garbage. The lambda needs to make a
deep copy of this `string_view` into a `string` so that it is valid by
the time the scheduler invokes this lambda.
* Implement missing http:c functionality.
* More implementation details and cleanup.
* Organize code
* Disable treat errors as warnings for httplib
* Fix defines
* Remove pragmas that do nothing and mark as SYSTEM
* Make httplib system
* Try to fix issue from httplib
* Apply suggestions
* Fix header ordering
* Fix compilation issue
* Create and use ctx.CommandID()
* Add and use Common::TruncateString
* Apply more suggestions
* Apply suggestions
* Fix compilation
* Apply suggestions
* Fix format
* Revert SplitURL to previous version
* Apply suggestions
* qt: Partially fix Wayland on NVIDIA.
* qt: Fix Vulkan under Wayland.
Showing and hiding the window here messes up the surface,
causing an instant crash on load.
* qt: Properly set up GLES context when requested.
* video_core: Abstract shader generators.
* shader: Extract common generator structures and move generators to specific namespaces.
* shader: Minor fixes and clean-up.