mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-01 14:59:13 +00:00
aa4e494c08075f5d048e8e3d6e0f7426d88d0f0a
29
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
50cb8fd1c9 |
[vulkan] Implementation for VK_EXT_shader_quad_control (#4168)
An experimental approach to introduce an smarter way to use and access QUAD's capabilities on shaders, suggested by @gidoly some months ago, finally came into something usable; current implementation checks GLASM, GLSL and Vulkan on their own way, stablishes proper emitters and receivers for Quads inside our recompiler, which are the introductions for future changes; checks for support and actual feature bit, OpCodes and mask were added within this PR. Meanwhile the expected behavior was to reduce graphical issues (on games with Quad shaders reliant), we encountered a very slight performance increase depending on what game and shader are actually compiled. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4168 Reviewed-by: MaranBr <[email protected]> Reviewed-by: Samuel <[email protected]> |
||
|
|
0295dc5fff |
[vulkan] Removal of QCOM sampler limiters + CustomBorderColor and ColorBorderSwizzle adjustments (#4301)
This PR removes the artificial limit added for QCOM drivers based on a sampler budget limit (based on #3280 work), removes the ban on CustomBorderColor/BorderColorSwizzle for also QCOM driver, reduce the amount of combination required to created a sampler with custom border color/ color border swizzle; adds cases on R16 formats not able to swizzle on BGR565 formats; degrades samplers and color combinations when there's no color border swizzle available; fixes the srgb (LUT) values from legacy and now all the color variations are cached in the same key, instead of having 7 different handlers for them. In resume, rather than performance (due to the reduced amount of process on duplicated/ synced code on pipeline/texture cache), it's a graphica accuracy work that will improve image quality at the cost of almost 0 performance hit, rather than certain hitch if the color combination wasn't cached before. This applies to all platform. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4301 Reviewed-by: Samuel <[email protected]> Reviewed-by: MaranBr <[email protected]> |
||
|
|
60a474b8df |
[vulkan, qcom] Fix shader float controls on QCOM driver (#4297)
Finishes my torture to find the culprit behind the broken behavior with float controls, even if device does support flush denorm on fp32 it doesn't really support it and provokes bad rounding modes by not flushing correctly denorms; this also returns the other working rounding modes on QCOM drivers. _Special Thanks_ 1.- Smoly The Big (@Gidoly) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4297 Reviewed-by: Samuel <[email protected]> Reviewed-by: MaranBr <[email protected]> |
||
|
|
2000fdfb7b |
[vulkan, android] Initial implementation of LSFG-VK (#4263)
Pretty much self explanatory, own implementation based on LSFG-VK available with some additional reverse engineer work for the actual use of shaders inside Lossless.dll, we don't store/ bundle any tools that bypass security and self ownership: to use this feature is required to own your own copy of Lossless Scaling and I encourage to support developers behind this work. Special thanks: 1.- THS - Original developer behind Lossless Scaling 2.- PancakeTAS - Developer behind LSFG-VK 3.- The Big Smolio The Sleeper (@gidoly) Co-authored-by: lizzie <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4263 |
||
|
|
3f52bf4b4b |
[core, gpu, threads] Multithreading refactor (#4254)
This insufferable work tries to cover some holes on previous threading implementation from yuzu's team, starting with Windows and Linux reordering of priorities (NICE), reworks previous Android's threading and cpu affinity with adpf, adjust emulated clocks/gpu for better "accuracy" with their work, bumps android minSDK for all flavors, legacy will now work with AP 29 to cover A10 - A12, standard will reach A13 as base and finally the optimized build will come with API 35, mostly targeted on devices with A15 support and newer, NDK and AGP wasn't upgraded yet. The performance cost efficiency have been improved based on device power configuration; preventing overheating if certain devices tended to fall into NICE0 (not allocated threads priority, all task ran with higher priority, 11 tasks running within the limited 2 - 7 threads available on the most common configuration 1x3x4 or 1x4x3). Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4254 |
||
|
|
49a0ca6d5d |
[vulkan] Initial implementation on Bindless Buffer/Descriptors (#4251)
Adds a VK_EXT_descriptor_buffer, VK_KHR_device_buffer_address path alongside push descriptors and descriptor sets. The ring is chunked and sized from the device limits, so drivers with a small sampler range (QCOM reports 128 KiB) get more, chunks per frame instead of losing the feature. A pipeline uses one path or the other, never both, since some drivers do not support bufferless push descriptors. The chunk binding is only re-emitted when it changes, and a draw that repeats the previous payload reuses its allocation instead of rewriting it. This whole change will help to reduce the constant use of descriptors on the slower path, improves the "slow implementation" on QCOM drivers (A7xx and older) for push descriptors, improves latency when compiling pipelines. The implementation on indexing descriptors was also refined. _Special Thanks_ 1.- Meowly The Bindless Smol (@Gidoly) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4251 |
||
|
|
5e1d5e82dc |
[vulkan] Re-adjusting ASTC resolve (#4250)
This is an adjustment made due to problems caused by my ASTC changes some pr's earlier; added sanity to decoded blocks, removes the inconditional storage view for ASTC formats (verified against MaxwellToVk logic), added support to VK_EXT_astc_decode_mode which will ensure a better way to resolve RGFA16/RGFA32 on tilers, simplified ASTC HDR decoding into LDR valid formats. This fixes some issues with SteamDeck, Fire Emblem: Engage washed colors and other problems related to ASTC. _Special Thanks_ 1.- Meowly The Smol (@Gidoly) 2.- @simply0001 for the actual idea on the redundant storage views on the transcoded ASTC path. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4250 |
||
|
|
eb9280dedf |
[vulkan] 4th Vulkan Global Maintenance (#4212)
The approach on this PR moves around refactoring/ updating residual work; main issue was the whole logic behind msaa upload/download images with the constant image copy per pass required; which was gated via shaderStorageImageMultisample, which is not available on all the platforms supported including Android, making them to rely into a more heavier approach to convert msaa image copy into a non msaa image copy, not only losing precision in the conversion, but also creating bugs around the resolve of the image itself, if the supported path had to copy 2 times the same image to be actually presentable, when the fallback was enabled 3 copies were performed, not only decreasing the performance but also increasing race conditions due to the certain capabilities processed in this chain (storage_views). In order to resolve them more naturally, the constant copies were removed from the now "common" path along establishing a proper color resolve for Android and actually making them more direct. Yet this opened a new pack of outdated handling on our current backend; since we now pass msaa images more directly (whenever a game request a msaa type of image/ which seems to be not common + each fragment resolves images on how it's actually required, adding missing depth/stencil), how we often load and store them becomes a critical issue, since our current configuration renderpass/framebuffer forces to always load and load clear whenever a new attachment it's passing through the renderpass, making this really heavier on memory bandwidth limited devices as SteamDeck and others that doesn't rely on the inmediate rendering mode (Tilers vs iGPU); to prevent over allocating data, I had to re-structure part of the current renderpass and framebuffer to actually reuse part of the data/ attachments called, with flags as DON'T_CARE, simplifying partially on how we actually call attachments including their barriers and conditions (occlusion, etc), the DON'T_CARE it's specifically useful to not only prevent calling new loads (which is a flush and heavier on tiler devices) and not only reusing the actual data store, which works on the future time, this saves memory bandwidth and gives space to actually avoid the constant pressure on SYSMEM/GMEM shader resolver path. This maintenance also improved the current removal features logic on QCOM drivers, closing gaps between implementations on descriptors (VK_EXT_indexing_descriptor), adjusting the whole WMEL to avoid being so stricter if certain capabilities are missing to actually use this feature, leading to test and play more on how QCOM drivers are actually behaving; meanwhile the main objective is to open path for a robust and bigger implementation in the future, the changes made here also contains small bug fixes on SPIR-V logic, adding missing cases to resolve shaders (FP64 -> FP16), adding more robustness on how narrow features are actually being used and how to wired them whenever they're not available, meanwhile there are still some issues in regards on how Tegra vs Adreno can preserve unorms at FP32 and FP16, leaving better understanding on base for what VK_EXT_shader_float_controls is actually doing most of the times (flushes NaN's and Denorms equally). Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4212 |
||
|
|
372bdfccbc |
[vulkan, android] Mediacodec implementation + Vulkan fixes (#4191)
This is the first step into the conversion on full GPU video decoding for Android; currently due to the VIC structure, I couldn't set it on surface mode to prevent the latency when sending video decoded (which is processed by GPU now), because currently we convert YUV420 into the Nvidia's format each frame constantly on CPU, aside the requirements from other extensions to work + VIC rewrite, which is a work currently not planned to happen on this PR; the actual configuration for video decoding is ByteBuffer, using GPU to decode NVDEC data (all codecs supported, h264, vp8 and vp9) and send it to CPU for display purposes, which is more faster than relying purely on CPU for any drawing task, saving devices resources/ heating, the downside on this will be the slight latency when a new frame is displayed, which is gonna be a black frame for less than a second, nothing major to harm the experience rather than actually trying our best to take advantage on hardware accelerated. Aside this, I also added a bunch of minor Vulkan fixes to grant drivers less thinkering when receiving spir-v instructions, meaning this has new bans for extensions on QCOM (following reported issues on other projects working around Adreno driver behavior), this more than providing performance aims to enhance the stability on the driver, performance it's gonna likely to be hit based on the UBO's (StorageBufferAccess) operations and SSBO (uniformStorageBufferAccess), there was an already existing path for the emulation which forces to wide them into 32bit packed operations. I also included some smaller changes/ bugs + VUID's fixes from earlier changes on my work. Special Thanks: -> Mr. Smoly Gidolard (@gidoly) Sources: 1.- https://github.com/microsoft/DirectXShaderCompiler/issues/2842 2.- https://github.com/mlc-ai/web-llm/issues/836 3.- https://github.com/ggml-org/llama.cpp/issues/5186 4.- https://github.com/encounter/aurora/pull/202 Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4191 |
||
|
|
3a6ac6e418 |
[video_core] Implementation on ASTC HDR formats + Vulkan fixes (#4190)
Based on the register of the ASTC implementation from Ameerj (yuzu), currently our conversion from ASTC on Desktop tends to duplicates the unpacking of ASTC converted textures, leading to bad performance; since there are some graphical effects that actually access on the band of 32bits (RGAF32) than the common 16bits (RGAF16) from our ASTC path decoding method, which commonly uses ARGB8 (degradation -> LDR) transformation to reduce the memory cost per conversion; meanwhile it could actually provide initially better performance; the engine tended to get stalled when this writted stage effect got skipped; mostly because CPU tends to look for an unimplemented texture/ format query (from which doesn't exist on our MaxwellToVK); unlike what's commonly believed HDR was a format to write enviroment effects even before their appearance on video output (since Switch doesn't have HDR, only SDR on certain engines). The test result on this PR showed games like Astral Chain and other heavy reliant on ASTC decoding improved their performance and stability by around 15%; meanwhile could it be tied to a hardware gain, it's clearly a gain for direct access on what's required on most games. This PR also contains few Vulkan bug fix I encountered along this implementation. Special Thanks: -> Mr. Smoly Gidolard (@gidoly) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4190 |
||
|
|
8225151a44 |
[vulkan] 3rd Vulkan Global Maintenance (#4189)
Following the philosophy on the previous Vulkan maintenance PR's, this one is reviewing the video_core to resolve VUID's related to the missing handling/ safechecks (UBO's case on missing StorageBufferAccess 8/16 bits on QCOM drivers, resulting on bad compute pipeline compiled), wiring topology representative to EDS2 configuration (following #4117), refactored the sampled image access via new memeber function for type "typeless" which adds a handling on the integer mistmatch (uint to sint, float to uint) + fixing bugs on current texture sampling (int) including the depth/stencil path resolve, maintenance to previous changes on query cache (resolving bugs from #3853), reduced the amount of binding BindVertexBufferEXT2 when a new tick/ frame is presented (with this being a reason for performance reduction on games where vertex polutes the stage, like BOTW/TOTK where grass is draw with vertex); implemented color border swizzle and color write enable for future improvements on EDS3, added initial implementation on Synchronization2 starting a path to ensure an access to VK 1.3 features safely and other smaller fixes along the road. Special Thanks: -> Mr. Smolio Gidolard (@gidoly) Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4189 |
||
|
|
3d19743d95 |
[vulkan] Fix regressions found in last stable release (#3953)
This PR aims to fix some regressions found in the latest release 0.2.0, which were a bunch of constant crashes/ random on certain Android devices with issues with the PiP configuration, addressing some problems founds for AMD after the maintenance of 2nd Global Vulkan Maintenance. -> Fixes Final Fantasy Tactics on AMD (no longer requires of generic bits to work "all commands bit") -> Fixes some performance regressions on android due to the Tomodachi fix applied globally as common behavior (#3898, #3900) -> Fixes blittering of screen found on ARM Windows devices and QCOM stock drivers (Android and ARM Windows) related to Mario Kart 8 Deluxe strange blittering in races, caused by a strange race condition with the ResetQueryPool and mostly the workaround for presync -> Fixes issues on Luigi's Mansion 3 issue where the pause screen became black on AMD due to the early reset of queries. -> Fixes crashes on Mario Party Jamboree for AMD/ Nvidia. -> Keeps previous fixes related to crashes on AMD with other games such as Astral Chain, Fire Emblem Three Houses and Xenoblade 3 based on the lack of access to vertex fragment replaced with generic flags. -> Fixes TOTK RADV skybox lighting. -------- Credits: @melod-y @Gidoly @MaranBr @AlexWolff @Lizzie And all the people who contributed into the reporting issues/ helping with the bisect. Co-authored-by: lizzie <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3953 Reviewed-by: Lizzie <[email protected]> Reviewed-by: crueter <[email protected]> |
||
|
|
5575d77520 |
[android] Another set of QoL changes for Android - 2 (#3886)
Changes: - Defaults: Set Async GPU and Async Vulkan Presentation to OFF. Stability wasn't worth the trade-off. - Threading: Lowered default pipeline workers from 7 to 4 to reduce heat and CPU contention. - Settings: Added a slider for manual pipeline worker count so users can test what works best for their SoC. - QCOM: Removed SPIRV bans; improves load times and thermals in heavy titles like Jump Force. - UI: Cleaned up settings descriptions to be less ambiguous. ------------------------ Some games fixed: -> Trinity Fusion: No longer crashes with Turnip, no longer shows the black dot in the middle of the screen on both QCOM and Turnip drivers. -> Naruto X Boruto - Ultimate Ninja Storm Connections: Game no longer requires a fixed version of turnip to work (previously requiring Turnip driver from MESA 24.3/ @MrPurple666 EoL v2 driver) Co-authored-by: lizzie <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3886 Reviewed-by: crueter <[email protected]> Reviewed-by: Lizzie <[email protected]> |
||
|
|
b3cc8723c1 |
[vulkan] 2nd Vulkan Global Maintenance (#3853)
This pr is a sequel to the one merged some days ago (#3839); which aims to improve stability, graphical accuracy and better Vulkan implementation and coherency among all platforms, contains the next changes: -> Removal of VK_EXT_unified_image_layouts: The removal of this ext was for cleaning purposes since the only part of this extension implemented was the activator; meanwhile a proper structure of use for this extension was not implemented, currently it's not viable to keep following an idea of a proper implementation due to complexity of this feature and the state of buffer cache and texture cache, which it's task that we must do near in the future, when this happens a better oportunity will arise to properly set layouts along a proper implementation of VK_EXT_descriptors_indexing, practically this feature was dead code. -> Adjustment of VK_EXT_custom_border_color: The implementation of this feature was handled poorly and worsened during the first tries of making ExtendedDynamicState stable, by gating it's use to the slider of EDS (dyna_state) if the counter was at least in 1, even tho this entered in a bug with the RemoveUnsuitableExtension, when is not a requirement for enabling in Vulkan's documentation and was my mistake, some time later in ExtendedDynamicState refactor (#3074) I tried to make the implementation more robust in comparison the Yuzu's implementation which had bans on vendor drivers, the new handling was requesting if extension was available and what kind of support feature it had, enabling what it was available and wiring an adequate path for said available feature; which leads us to today's change, after reading carefully how certain paths weren't triggered or caused mostly issues on how extension should work I did the next changes: - I removed the forced disabling with ExtendedDynamicState setting - Resolved the bug with RemoveUnsuitableExtension + dyna_state - Removed comments of explanation + log_debug warning - Set extension to be disabled if customBorderColorWithoutFormat is not available - Helps to solidify the removal of bans in vendor drivers This changes fixes the VUID 04015 for the handling with undefined format and made the usage of the extension more near to what Vulkan specification expects, yet there is still cases where we can't emulate properly samplers and some translucid black boxes will still appear, yet, now alleviated by allowing extension choose the proper custom available in Vulkan or degrade into a fallaback of solid colors. -> Adjustment of VK_EXT/KHR_robustness2: This feature was introduced in ExtendedDynamicState refactor (#3074), as safety measure for descriptors during the Write of buffers, providing robustness with an upgraded access to image, buffers and proper discard of null data in descriptors, however, despite the configuration the logs during debug sessions never stopped to bring the next VUID-VkWriteDescriptorSet-descriptorType-00324 and VUID-VkWriteDescriptorSet-descriptorType-00325, being the first one, the most constant issue plaguing logs; the approach was not only ensuring device can access between each of the version of this feature, whether is an EXT or KHR (drivers can report one of them or both, yet, if we call the one of them and it's not the version supported, driver would not load the feature, there's a priority to the KHR version) with a simplified configuration of the extension to use only nullDescritor to deflect properly buffers and other trash data outside of descriptors bound; ensuring to wire the path when it's and not available and also with BindVertexBuffers2EXT when it's or not available; fixing both VUID's. This changes helps to save some CPU resources and memory on binding routes. - Fixes VUID-VkWriteDescriptorSet-descriptorType-00324 - Fixes VUID-VkWriteDescriptorSet-descriptorType-00325 - Fixes VUID-vkCmdBindVertexBuffers-pBuffers-00621 (alongisde a latter adjustment for pStrides) -> Adjustment VK_EXT_image_robustness: As other features, this was implemented during the ExtendedDynamicState refactor (#3074), currently this change it's just to ensure more drivers are accessing this feature by changing the modality from extension to an explicit feature, some other redundant code was cleaned within this change. -> Restored gating flush operation on removed gpu accuracy: An issue report from an user called CaptFaraday in https://github.com/eden-emulator/Issue-Reports/issues/425, posted a behavior appearing after the rework of gpu accuracy levels (#3129), which broke the rendering in Paper Mario - The-Thousand-Year Door where some graphical issues such as black flash and missing rendering from many animations through the game thanks to the removal of the flush inside FlushAndInvalidateRegion gated with IsGPULevelExtreme and suggested a possible fix with resting the missing gating and flush; which I did and properly restoring the complete behavior of this functionality + wiring to the new IsGPULevelHigh for a better semantic correctness, the change was tested and didn't affected Yoshi's Crafted World graphical problems and main reason behind the deletion of this function, fixed in |
||
|
|
3d0eb4b5d7 |
[vulkan] 1st Vulkan Global Maintenance (#3839)
This pr aims to make a first step into giving Eden's Vulkan backend maintenance with better formatting, understanding and reduce the redundancy between some wrong implementations: -> ProvokingVertex: Has been reworked completely, now the wiring to ExtendedDynamicState3 (ProvokingVertexMode) it works safe, the gating of the extension no longer requires user enabling on UI, it will be enabled automatically based on what features of the extension are available on driver, depending if first or last mode are available and also will be properly set under TrasformFeedback operations; this way we're gonna ensure all drivers, including Android stock drivers on QCOM, Mali and other mobile vendors drivers access correctly to the extension, fixing some graphical issues (flickering textures or wrong sccisors on vertex that required first mode) generated by the missing first mode handling or the proper clearing on pipeline state. This change will increase/ decrease slightly the performance on some games that changes dynamically between first and last modes, but will also ensure a clear path to GPU to use resources smartly, reducing VRAM consumption in PC and MEM/GPU percentage of use on Android (marginal to 5 - 8% approx). -> Removal VK_EXT_multi_draw: It has passed some months since the first try to implement this feature, but wasn't completed so functionality was null to negative, taking space in source and using small CPU cicles for initialization during device creation that reduced CPU effectiveness by 2 - 5%, aside that, after reviewing the situation of formally introducing handling for multidraws to reduce the floods of constants draw calls into 1 per batch, seems to not pay the overhead when the multidraw capacity is less or equal to 1, aside that, for the time being batching multidraws will introduce indirections on each batch of command draws, that graphical issues will appear and reducing performance can happen, something it was gonna solve. For the time being it's discarded, but, may be analyzed the chance to introduce it properly in a later date. -> Removal VK_EXT_indexing_descriptor: Currently the implementation of this feature was partial, with not proper handling on layouts; just the initial checks on device creation and chained up to the pNext feature, currently this extension will require a buffer cache and texture cache rework to set layouts and reduce the amount of use of descriptor into making it a less expensive cost effective, aside that to generate a path for the Bindless Texture and Bindless Buffer, allowing to track state of textures in runtime and ensuring the state of some compiled shaders doesn't change if it's no needed, among other benefits, besides that, enabling this feature was only generating innecessary checks on GPU, so consumption would be higher than it should be. -> Removal of VK_EXT_swapchain_maintenance1: The use of this feature was really conditional to certain support on newer drivers and cards, which wasn't available for all platforms, I concluded that if the support for this instance wasn't really there, the cost effective between the try to initialize it and running it, won't be good as when it didn't exist on our Vulkan device, with also the constant factor of not being completely implemented, right now I'm aiming to reduce the complexity on Vulkan side to keep it as simple as it could for a future video_core rework, which may start somewhere these weeks. -> Refined the Maintenance features: Meawhile this features are usually inherent to Vulkan core functionality, sometimes drivers doesn't expose them well, which leads to Eden run Vulkan without really noticing the existence of maintenance features on driver to improve stability, so we're tied to declare them and load them when a device creation starts by asking if driver supports and which, currently 1 - 5 are core maintenance features, meanwhile the 7 - 9 are more experimental and not being available everywhere, so right now to help drivers give attention to this features we not only load them, but also calculate with features bits which features inside Maintenance5 are available to use, that was the initial purpose, but we weren't using the full potential of the extension; I made cleaned part of the unneeded log code for the initialization of this Maintenance5 and it's feature flags, but also making an operation to sanitize depth/ stencil when One is not available in swizzle operations, making it easier to draw it; it's also needed to mention that Maintenance9 was removed from source code until we can have better handling on Arrays2D, aside that, the use of the extension was really conditional to certain drivers being capable of use it, so I remove it. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3839 Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
1b4a79c7ee |
[android] QoL changes to Android Phase - 1 (#3832)
This pr content and goal is to provide following to Eden's user base issues with settings, adjust default values on settings and refactor some handlings to improve the plug-and-play factor: -> Combo-box for ASTC Recompression Method Removed: The removal of this toggle was due to the redundant process inside Android devices, most drivers do suppot ASTC handling natively and meanwhile this option provided some benefits to some older Mali devices, the specifications from those and the real compatibility doesn't pay the need for this setting, unless something else is provided to be wrong, the default setting will be uncompressed and no longer available in UI to change. Removed some dead code along with it. -> Removal of ASTC Decode Method ifdef block for Android: Since Yuzu's, the handling for this option was strangely set on CPU, having a specific block for Android in settings, possibly due to the constant spikes on GPU usage that wouldn't be good to load GPU with the whole flow of operations; but since then and until today, Eden's constant effort to make operations more accurate and smartly resolved, have marked the difference that now CPU default on Android no longer provides the benefit to relief GPU stress than reducing performance in some heavy draw commands on some games; the default will be set to GPU to keep parity with PC configuration aiming for a global configuration with all platforms. The setting will be kept to user range, unless is proved to no longer be needed, right now low end devices could still have benefit from CPU/Async, but requires testing from community to show real potential. -> Adjusted default value of ExtendedDynamicState: Currently we're facing some issues of logic inside of ExtendedDynamicState implementation, that makes it a bit unstable when it comes to use the disabled mode, right now we jump to ExtendedDynamicState1 for more stability, meanwhile we fix the remaining issues in future updates (currently one fix will be presented - or would be merged along this pr, the 1st Global Vulkan Maintenance which has some fixes for this situation), so stock drivers and other mobile drivers will behave and benefit from this. -> Exposed hidden and defaulted settings to user's UI: Yuzu implemented some settings that were available on PC's UI but weren't presented on Android's UI or wasn't something expected to do, either way there are some strange behaviors due to this default settings and each of them do something different, i'm not gonna dive into a deep explanation, but to make it short, they stablish asynchronous operations for GPU operations, like Async GPU Emulation (to use a CPU thread to boost performance with GPU emulation, currently a performance hack), Asynchronous Vulkan Presentation this does something a like to disperse draw's/ syncing from TimelineSemaphores and set a thread of CPU to help in running some Vulkan operations (another performance Hack), meanwhile most of the Desktop drivers are mostly nice with this setting, Nvidia aren't due to the nature of the hack, so provokes black screen or failing into initialize games. Mostly Asynchronous operations are fast-paths/ hacks to improve performance to the cost of some graphical issues like the pop-in with Asynchronous Shader Building during the shader compilations, sometimes the trade-off could give random crashes and other issues. Android it's not the exception and currently by disabling GPU Async Emulation user's will be able to fix some strange flickering on Zelda - Link's Awakening (NCE) and other games suffering from similar issues, may also fix random crashes on games that are supposed to work. These settings will be exposed for a short amount of time, meanwhile I receive feedback of the usefulness of having them active or the whole operation being used on Android, aside that, disabling them or one of them will inevitable reduce performance a bit, not so notorious, but it will be up to user's decision now to use them or not. -> AMD FidelityFX's Super Resolution UI handling (a personal request): Now the slider default value will be 0% and will only appear whenever FSR is choosed among other window adapting filters, this will also work with the quick setting menu during runtime. -> Fixed the issue of changing drivers removing all games compiled shader cache: Currently our implementation to safeguard users from unknown issues when a different driver tries to load/ read compiled shaders from another version of Turnip/ QCOM driver, that will delete shaders if the driver is removed or changed; deleted all games compiled shader cache, which increased the annoyance on Android users along with adding unneeded complexity, this used to happen whenever a driver was changed in global settings or per-game settings. Now no longer will happen if the driver is changed on global settings and changing drivers in per-game configuration will only delete current game where the driver was change without affecting others, from here, I'll apologize for this unneeded situation. -> Refactored the input controller detection (another request of mine, hehehe...): This implementation will work to reduce the burden on a new installation (since I have to test everything personally, cuz testers are lazy ass mfs), the input detection is now more accurate to what kind of input a device has, whether is in-built or wireless gamepad, will map it once Eden detect's physical input by reading the controllers inputs that OS provides natively and set or disable touchscreen controllers automatically: - If in-built is detected (Ayaneo, Ayn, Retroid or any Android handheld), Eden will map it automatically and will disable touchscreen controller. - If Wireless gamepad is detected, the same behavior as described above will happen with the extra to recover touchscreen controller whenever the gamepad goes off. It was quite funny to do this, cuz Xiaomi and some other manufacturers always do strange shenanigans with how the inputs are detected (wasn't funny). Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3832 Reviewed-by: MaranBr <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
1fbace438c |
[vulkan, qcom] Another set of fixes for QCOM stock driver (#3334)
This pr is another set of fixes for the system driver (stock) on Qualcomm devices, mostly taking into consideration drivers from series 512.800.0 and on, reduces unwanted loads in the GPU by allocating properly features that were forced available, when they weren't, generating wrong commands between shader recompiler and Adreno's compiler; also this pr has a bunch of small fixes on games that some textures were displayed wrongly due to double swizzling during the creation of shaders, which allows serveral games to be fixed: - Zelda: Link's Awakening (no blur, hearts properly displayed, flickering highly reduced on NCE) - Zelda: Echoes Of Wisdom (no blur, hearts properly displayed, reduced highly flickering, rift properly rendered) - Mario Kart 8 Deluxe (no longer wrong blue texture on icons of the cups or countdown marker, no longer freezes when compilling shaders on game versions below NCE update to bring more compatibility with CTGP MOD) - Naruto's Ninja Storm series (no longer blue texturing on Naruto or main character on the screeen) - Pokemon Scarlet/ Violet (no longer missing characters or npc) - And many more games that are missing from our scope of testing. But not only that, but also improved GPU - CPU synchornization for better performance (by 15% compared to previous builds) more stable shader compilations and removed unneeded emulation paths; making games as Breath Of The Wild less stuttery than it was used to; along some cleaning from dead code, allowing mobile devices to go brrrr, always long live to the Snapdragon Master Race, it's needed to explain that devices from A7XX need to use the driver 819.2, meanwhile A8XX can use 842.9 to obtain all the benefits from VK 1.4 allowed in Eden. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3334 Reviewed-by: DraVee <[email protected]> Reviewed-by: Maufeat <[email protected]> Reviewed-by: Lizzie <[email protected]> Reviewed-by: MaranBr <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
1a9b4b37e1 |
[buffer_cache] Add batching support for memory tracker updates (#3288)
I added a batching/ coalescing of ranges in WordManager to reduce calls per pages in UpdatePagesCachedCount, also a test to verify if FlushCachedWrites coalesced (reduces callings to UpdatePagesCachedCount) callings and register each of them to inspect them. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3288 Reviewed-by: Maufeat <[email protected]> Reviewed-by: DraVee <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
51cc1bc6be |
[scheduler, dma, maxwell] Reduce CPU stalls in the GPU command processing pipeline through multiple targeted optimizations (#3296)
- Scheduler: Reduced lock scope to allow parallel command preparation across channels - DmaPusher: Added command prefetching (16-command lookahead) to improve cache hit rate - Maxwell3D: Pre-allocated macro parameter vectors to eliminate dynamic allocations and unrolls dirty register tracking loop for better cache locality - MacroEngine: Added last-executed macro cache to skip hash table lookups on hot path Co-authored-by: lizzie <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3296 Reviewed-by: Maufeat <[email protected]> Reviewed-by: DraVee <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
4a7772f104 |
[renderer_vulkan, buffer_cache] Fixing turnip shenanigans (#3325)
This is a trivial change to remove turnip from some of my clamps for qcom hardware, fixes crashes of turnip drivers in recent nightlies. Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3325 Reviewed-by: MaranBr <[email protected]> Reviewed-by: DraVee <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
a27d35362d |
[vk, qcom] Memory, Samplers, BindingBuffers and UniformBufferAlignment set by hardware capabilities for QCOM. (#3280)
This PR adjust resources usage of Eden based on driver specification, improving stability and smarter resources usage, extends the amount of TotalPipelineWorkers on Android. Co-authored-by: Caio Oliveira <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3280 Reviewed-by: Lizzie <[email protected]> Reviewed-by: DraVee <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
5edcdea78f |
[refactor, vk] DynamicState, ExtendedDynamicState and VertexInputDynamicState (#3074)
This PR rewrites the DynamicState, ExtendedDynamicState and VertexInputDynamicState logic: - Adds proper handling on how features should be loaded based on driver available features for ExtendedDynamicState/ VertexInputDynamicState. - Fixes some old regressions with emulated formats for Android. - Adds better formatting for tiling format features. - Adds better formatting for format features. - Adds NonWritable buffers handling for Spir-v. - Updates Maintenance features calling. - Adds new features: Multidraw, Robustness2, Image Robustness. - Removes dead code/ duplicated on Vulkan device related to ExtendedDynamicState handling. - Adjusts and conditions with better handling for some features callings: SwapchainMaintenance1, ConditionalRendering, ShaderExtencilExport, CustomBorderColor, TransformFeedback, VertexInputDynamicState. - Removes some older feature ban logic. - Adds hardware resolve path for MSAA Image Blits on Nvidia cards. - Adds flat decorations for input interfaces on Spir-v. - Reduces flushwork within drawcalls. - Clamps render limits on out-of-area for rasterizer. Co-authored-by: lizzie <[email protected]> Co-authored-by: Caio Oliveira <[email protected]> Co-authored-by: DraVee <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3074 Reviewed-by: DraVee <[email protected]> Reviewed-by: Lizzie <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
b6241e4148 |
revert [vk] StreamBuffer Changes (#2684) (#2707)
revert [vk] StreamBuffer Changes (#2684) Streambuffer changes did broke stuff in other games that got out of our scope of testing, we're going to study this changes in the future for better graphic stability. Co-authored-by: Ribbit <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2684 Reviewed-by: MaranBr <[email protected]> Reviewed-by: Lizzie <[email protected]> Reviewed-by: CamilleLaVey <[email protected]> Co-authored-by: Ribbit <[email protected]> Co-committed-by: Ribbit <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2707 Reviewed-by: MaranBr <[email protected]> Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
3c6ef765af |
revert [vk] Fast UBO: fix tracking, resize heuristics, add debug guard (#2695) (#2706)
revert [vk] Fast UBO: fix tracking, resize heuristics, add debug guard (#2695) Well, stuff showed up after testing phase, that showed us this change break SMO and some mods after being merged directly into master, we will keep stuying why happens this and add a better handling later. Co-authored-by: Ribbit <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2695 Reviewed-by: CamilleLaVey <[email protected]> Co-authored-by: Ribbit <[email protected]> Co-committed-by: Ribbit <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/2706 Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
9fae048a5a |
revert [jit] Increase x86_64 default code size to full 2GiB hugepage (#318) (#337)
revert [jit] Increase x86_64 default code size to full 2GiB hugepage (#318) Abuses the existence of transparent huge pages on Unix. 4*2 = 8GiB virtual memory used total by JIT. May reduce native host TLB trees. -------------- WIP: Wasn't meant to be merged, it's going to be refined to be added later when more data/ testing have been made about this approach. Signed-off-by: lizzie <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/318 Reviewed-by: Shinmegumi <[email protected]> Co-authored-by: lizzie <[email protected]> Co-committed-by: lizzie <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/337 Co-authored-by: CamilleLaVey <[email protected]> Co-committed-by: CamilleLaVey <[email protected]> |
||
|
|
15d371c51a |
revert 45e7c0d62d
Revert fix inversion of toggle for early fences (#175) This should fix performance regressions in games that didn't need this and fix it to work with the games it is intended to be used for. // Commit reverted there's some issues with the logic of "release early fences", it's going to be solved in a later commit. Made based on recommendations by Discord Contributor. Signed-off-by: Shinmegumi <[email protected]> Co-authored-by: Gamer64 <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/175 Co-authored-by: Shinmegumi <[email protected]> Co-committed-by: Shinmegumi <[email protected]> |
||
|
|
be9a415157 |
Revert [Android] 0 FPS Error fix for certain titles.
revert [android] Fix 0fps errors on DKCR, Subnautica, and Ori 2 (#79) Co-authored-by: Pavel Barabanov <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/79 Option reverted due problems caused with another games and make some advances worst when testing, if necessary it's going to be refined to be converted into a toggle. |
||
|
|
cd394fc40f |
revert [android] Snapdragon 865 patches (#23)
revert [android] Snapdragon 865 patches (#23) Co-authored-by: Aleksandr Popovich <[email protected]> Reviewed-on: https://git.bixed.xyz/Bix/eden/pulls/23 Reverted due to heavy performance hits on Android with higher specifications, will be adjusted to be included in a specific build for older A6XX devices, as 855, 860, 865, 870, meanwhile it does fix critical issues with certain games crashing due to memory and VRAM usage, hits performance on SoC that can do it without this special flags. |
||
|
|
3df06da02c |
revert Align and bias memory stronger
revert [ir] Align and bias memory stronger Signed-off-by: Aleksandr Popovich <[email protected]> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/229 Co-authored-by: Aleksandr Popovich <[email protected]> Co-committed-by: Aleksandr Popovich <[email protected]> Reverted as showed up issues with buffers on games that weren't expected, it's going to be refined and implemented again with better params. |