* Enable the SecondScreenPresentation class
* Update everything to enable second screen on android under GL and Vulkan. Still some issues!
* Some attempts to enable surface changes
* OpenGL is working on surface change, vulkan still no
* release surfaces (also fixed vulkan?)
* added and enabled layout setting
* resolve merge conflict
* rearrange switch cases to satisfy linux compiler
* openGL is working!
* several vk changes to try to fix crashes
* maybe vulkan is working?
* removing unnecessary code attempts
* Simplified secondscreen for better performance
* vk_platform.cpp: Fixed build failure caused by bad rebase
* vk_present_window.h: Removed stray newline
* Applied clang-format
* bug fix for odin 2
* Applied clang-format
* Updated license headers
* Moved SecondScreen class to org.citra.citra_emu.display
* Various formatting and readability improvements
* Added brackets where previously absent for readability
* Additional readability improvement
* RendererVulkan::NotifySurfaceChanged: Simplified condition checking
* change all references to "secondary screen" to "secondary display" to limit confusion with top screen / bottom screen
* rename main_window to main_present_window and second_window to secondary_present_window
* Reverted accidentally downgraded compatibility list submodule
* Removed unnecessary log message
* Applied clang-format
* Added a description to the Secondary Display Screen Layout setting
* Added `_ptr` suffix to `secondary_present_window`
This distinguishes it as a pointer, as `main_present_window` isn't a pointer, so there could be confusion on whether to use `.` or `->`
---------
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
* renderer_vulkan: remove out of context SDL_Quit call (fixes#1220)
SDL_Quit must not be called unless the application must exit or SDL is no longer needed
* comment: simplify, forgot init had ref-count
* renderer_vulkan: Disable FIFO when refresh rate is lower than ~60hz
Also disables FIFO when Apple low power mode is enabled, as it can limit the application framerate to 30fps
* renderer_vulkan.cpp: Put `IsLowRefreshRate` into anon namespace + make static
Uses SIMD operations on the RasterizerAccelerated::AnalyzeVertexArray
function, which is hot code. Slightly reduces GPU processing time
on all games.
This idea was suggested by an anonymous contributor.
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
When the frame limit was set to 0 (unthrottled), the Vulkan present mode would be unintentionally set to FIFO, which caps out at the monitor's refresh rate
* Stereoscopic 3D Enhancements
- Increase maximum 3D depth to 255%
- Fix touch screen to only render 2D when separate window layout is used
- Cleanup some 3D option localizations
* qt: Added warning label below depth slider for values over 100%
* Fixed broken rendering for Interlaced, Reverse Interlaced and Anaglyph options when using 3D with seperate windows
* android: Added warning label below depth slider for values over 100%
* Fixed a bracket and break statement being incorrectly positioned
---------
Co-authored-by: oneup03 <oneup03@gmail.com>
* error checking for layout value from older config
* rename enum and update aspect ratio code
* rewrite LargeFrameLayout to support multiple positions
* add settings for smallscreenposition, fix minsize function
* fixed framebuffer from res scale (screenshots)
* add desktop UI for small screen position
* small screen position submenu on desktop
* fix int-float conversion warning
* rename Above and Below to hopefully fix linux issue
* Add Small Screen Position Setting to android settings menu
* fix sliders to work with floats, mostly
* fix android slider textinput ui
* change None enums in settings and cam_params
* Apply clang-format-18
* SettingsAdapter.kt: Make more null pointer exception resistant
* Updated license headers
* Code formatting nitpicks
* fix bug in main.ui that was hiding menu
* replace default layout with a special call to LargeFrame (like SideBySide does)
* fix bug when "large screen" is actually narrower
* edit documentation for LargeScreenLayout
* update PortraitTopFullFrameLayout to use LargeFrameLayout
* fix unary minus on unsigned int bug
* Applied formatting correction
* Added `const`s where appropriate
* android: Add mention of the bottom-right small screen position being the default
* review fixes + more constants
* refactor all Upright calculations to a reverseLayout method, simplifying code and reducing bugs
* Removed stray extra newline
* SettingsAdapter.kt: Fixed some strange indentation
* Removed unnecessary `if` in favour of direct value usage
---------
Co-authored-by: Reg Tiangha <rtiangha@users.noreply.github.com>
Co-authored-by: OpenSauce04 <opensauce04@gmail.com>
* 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
* 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.