Commit graph

18253 commits

Author SHA1 Message Date
german77 d552f84322 input_common/tas: Add swap controller 2021-09-18 23:22:42 +02:00
german77 368c9db4ee input_common/tas: overwrite file dialog 2021-09-18 23:22:42 +02:00
MonsterDruide1 1b67085cda input_common/tas: Fallback to simple update 2021-09-18 23:22:30 +02:00
german77 bba1ab83d6 config: Move TAS options to it's own menu 2021-09-18 23:22:30 +02:00
MonsterDruide1 cce0d58312 core: Hacky TAS syncing & load pausing
To keep the TAS inputs synced to the game speed even through lag spikes and loading zones, deeper access is required.

First, the `TAS::UpdateThread` has to be executed exactly once per frame. This is done by connecting it to the service method the game calls to pass parameters to the GPU: `Service::VI::QueueBuffer`.

Second, the loading time of new subareas and/or kingdoms (SMO) can vary. To counteract that, the `CPU_BOOST_MODE` can be detected: In the `APM`-interface, the call to enabling/disabling the boost mode can be caught and forwarded to the TASing system, which can pause the script execution if neccessary and enabled in the settings.
2021-09-18 23:22:20 +02:00
MonsterDruide1 518852f505 main: TAS Playback state label
During script playback/recording, the user has to see what happens currently. For that, a new label has been added to the bottom-left corner, always displaying the current state of the TASing system.
2021-09-18 23:22:12 +02:00
MonsterDruide1 5f826dd03a settings: File selector & other settings
First of all, TASing requires a script to play back. The user can select the parent directory at `System -> Filesystem`, next to an option to pause TAS during loads: This requires a "hacky" setup deeper in the code and will be added in the last commit.

Also, Hotkeys are being introduced: CTRL+F5 for playback start/stop, CTRL+F6 for re-reading the script and CTRL+F7 for recording a new script.
2021-09-18 23:22:11 +02:00
MonsterDruide1 31068a63a9 input_common/tas: Base playback & recording system
The base playback system supports up to 8 controllers (specified by `PLAYER_NUMBER` in `tas_input.h`), which all change their inputs simulataneously when `TAS::UpdateThread` is called.

The recording system uses the controller debugger to read the state of the first controller and forwards that data to the TASing system for recording. Currently, this process sadly is not frame-perfect and pixel-accurate.

Co-authored-by: Naii-the-Baf <sfabian200@gmail.com>
Co-authored-by: Narr-the-Reg <juangerman-13@hotmail.com>
2021-09-18 23:22:00 +02:00
bunnei 4fde9d058b Merge pull request #7020 from Moonlacer/remove_audio_stretching
Remove audio stretching
2021-09-18 11:18:24 -07:00
Valeri 882216dcbc If not on Windows, disable raw input
This way, if someone copies their Windows config to other OS, they won't be stuck without web applet for no apparent reason.
2021-09-18 15:10:00 +03:00
Valeri 1bf178abe8 Hide XInput bypass on non-Windows OSes
Follow-up to #6950. This option is a no-op on other OSes and only serves to spread confusion there.
2021-09-18 14:41:51 +03:00
bunnei f67b0345f1 Merge pull request #6950 from german77/multiplay
input_common: Add advanced setting for 8 player support
2021-09-17 17:25:51 -07:00
bunnei a6f7c06446 Merge pull request #7015 from german77/NotGoodForTerra
ngct: Stub Match
2021-09-17 10:58:55 -07:00
bunnei d2d6a759f2 Merge pull request #7011 from ameerj/vk-validation-0x0
vulkan_debug_callback: Ignore InvalidCommandBuffer-VkDescriptorSet errors
2021-09-16 17:17:04 -07:00
ameerj 933b5dff61 host_shaders: Remove opengl_copy_bgra.comp 2021-09-16 19:49:13 -04:00
ameerj 6aaf430d15 gl_texture_cache: Migrate BGRCopyPass from util_shaders
The BGR copies no longer use shaders.
2021-09-16 19:49:12 -04:00
Fernando S 295ddaa076 Merge pull request #7027 from ameerj/sorry-amd
vulkan_device: Reorder Float16Int8 declaration
2021-09-16 07:05:58 +02:00
ameerj 43d59a4bbe vulkan_device: Reorder Float16Int8 declaration
This variable was going out of scope before its usage in the vulkan device creation, causing a crash on very specific drivers.
2021-09-16 00:54:24 -04:00
ameerj abf9900d82 Revert "Merge pull request #7006 from FernandoS27/a-motherfucking-driver"
This reverts commit 9ac9c85ecd, reversing
changes made to e99525fb5b.
2021-09-16 00:51:22 -04:00
bunnei e0a73c8420 Merge pull request #7010 from Morph1984/fs-timestamp
vfs: Partially implement GetFileTimeStampRaw
2021-09-15 20:13:26 -07:00
Moonlacer d0d7ce6960 fix_clang_error 2021-09-15 20:20:45 -05:00
ameerj 6af2ea8253 util_shaders: Unify BGRA copy passes 2021-09-15 21:10:52 -04:00
Moonlacer dabeb349f5 fix_accidental_deletion 2021-09-15 19:59:10 -05:00
Moonlacer 1c445d1050 remove-audio-stretching-setting 2021-09-15 19:52:43 -05:00
ameerj f1b7800866 vk_scheduler: Use std::jthread 2021-09-15 20:49:07 -04:00
ameerj 2cb4bb689b gpu: Use std::jthread for async gpu thread 2021-09-15 20:49:07 -04:00
ameerj 4cad11c5f3 threadsafe_queue: Add std::stop_token overload to PopWait
Useful for jthreads which make use of the threadsafe queues.
2021-09-15 20:49:07 -04:00
lat9nq 7fc8560939 audin_u: Return a buffer event in RegisterBufferEvent
Co-authored-by: Morph <39850852+Morph1984@users.noreply.github.com>
2021-09-15 16:38:12 -04:00
lat9nq 34c6afd6c1 audin_u: stub Start, RegisterBufferEvent, AppendAudioInBufferAuto
This also moves IAudioIn's definition to the header.

Required for Splatoon 2 LAN play.
2021-09-15 15:52:09 -04:00
Fernando Sahmkow d240a8bb35 Build System: Build with JCC Erratum Mitigation 2021-09-15 21:32:44 +02:00
Fernando Sahmkow 0bd7c14e04 Spir-V: Rescale the frag depth to 0,1 mode when -1,1 mode is used in Vulkan. 2021-09-15 21:30:33 +02:00
Narr the Reg 77886a6134 ngct: Stub Match
Needed for  Cruis'n Blast
2021-09-15 00:17:31 -05:00
Morph 653acf39e2 renderers: Log total pipeline count 2021-09-14 13:18:26 -04:00
Morph 65c2d00bd9 vfs: Partially implement GetFileTimeStampRaw
Gets rid of homebrew warnings using this func
2021-09-14 08:48:01 -04:00
bunnei d3cab3095d Merge pull request #7009 from ameerj/main_process_cleanup
core: Destroy main_process during shutdown
2021-09-13 23:32:43 -07:00
ameerj 177affe3ce core: Destroy main_process during shutdown
The main_process was never being cleaned up, causing a noticeable memory leak after subsequent launches. This change cleans up the memory during Core Shutdown, mitigating the leak.
2021-09-13 23:44:52 -04:00
ameerj ccf4fa3aaa vulkan_debug_callback: Ignore InvalidCommandBuffer-VkDescriptorSet errors
This validation error is spammed on some titles, asserting that VkDescriptorSet 0x0[] was destroyed.

This is likely a validation layer bug when using VK_KHR_push_descriptor, which can avoid using traditional VkDescriptorSet. It should be safe to ignore for now.
2021-09-13 23:08:59 -04:00
Morph 419f0efe06 Merge pull request #6943 from FernandoS27/omae-wa-mou-shindeiru
Vulkan: Disable VK_EXT_SAMPLER_FILTER_MINMAX in GCN AMD
2021-09-13 17:33:15 -04:00
Fernando Sahmkow 17e879aa56 Vulkan: Disable VK_EXT_SAMPLER_FILTER_MINMAX in GCN AMD since it's broken. 2021-09-13 23:29:57 +02:00
Morph 9ac9c85ecd Merge pull request #7006 from FernandoS27/a-motherfucking-driver
Vulkan: Blacklist Int8Float16 Extension on AMD on driver 21.9.1
2021-09-13 17:25:56 -04:00
Mai M e99525fb5b Merge pull request #7005 from Morph1984/enum-bitwise-shift-ops
common_funcs: Add enum flag bitwise shift operator overloads
2021-09-13 17:21:22 -04:00
Morph a6825459db Merge pull request #6944 from FernandoS27/dear-drunk-me
Vulkan/Descriptors: Increase sets per pool on AMD propietary driver.
2021-09-13 17:20:07 -04:00
Fernando Sahmkow a3f4f92e7e Vulkan: Blacklist Int8Float16 Extension on AMD on driver 21.9.1 2021-09-13 23:17:37 +02:00
Fernando S 256ac97a7b Merge pull request #7001 from ameerj/wario-fix
vk_rasterizer: Fix dynamic StencilOp updating when two faces are enabled
2021-09-13 23:16:59 +02:00
Fernando Sahmkow dbe8a4fc2f Vulkan/Descriptors: Increase sets per pool on AMFD propietary driver. 2021-09-13 23:09:18 +02:00
Morph 00823acf70 common_funcs: Add enum flag bitwise shift operator overloads
This adds bitwise shift operator overloads (<<, >>, <<=, >>=) in the macro DECLARE_ENUM_FLAG_OPERATORS(type)
2021-09-13 16:01:20 -04:00
Ameer J c3be5da634 Merge pull request #7000 from Morph1984/create-dir-comment
FS: Mark recursive CreateDirectory as inaccurate and temporary
2021-09-12 21:06:52 -04:00
ameerj 184de8c1ca vk_swapchain: Use immediate present mode when mailbox is unavailable and FPS is unlocked
Allows drivers that do not support VK_PRESENT_MODE_MAILBOX_KHR the ability to present at a framerate higher than the monitor's refresh rate when the FPS is unlocked.
2021-09-12 20:32:23 -04:00
Mai M d40462b0f1 Merge pull request #7002 from ameerj/vk-state-unused
vk_state_tracker: Remove unused function
2021-09-12 17:31:56 -04:00
ameerj bf366c1738 vk_rasterizer: Fix dynamic StencilOp updating when two faces are enabled
This function was incorrectly using the stencil_two_side_enable register when dynamically updating the StencilOp.
2021-09-12 16:19:12 -04:00
ameerj 14612971ef vk_state_tracker: Remove unused function 2021-09-12 15:28:24 -04:00
Morph 9191db654d FS: Mark recursive CreateDirectory as inaccurate and temporary 2021-09-12 14:06:01 -04:00
Morph b4d9be4aae Merge pull request #6948 from ameerj/amd-warp-fix
shaders: Fix warp instructions on 64-thread warp devices
2021-09-12 13:53:29 -04:00
Morph 26734981cf Merge pull request #6975 from ogniK5377/acc-async-ctx
account: EnsureTokenIdCacheAsync
2021-09-12 12:03:10 -04:00
Morph 26b459393d Merge pull request #6974 from ogniK5377/fs-recursive-createdir
FS: Recursively create directories for CreateDirectory
2021-09-12 12:02:39 -04:00
Morph eb0222d77f Merge pull request #6997 from ameerj/stop-emulation-confirmation
main: Apply confirm exit setting in exit locked scenarios
2021-09-12 12:01:57 -04:00
Morph f2f9009a9b Merge pull request #6992 from german77/brains
hid/am: Stub SetTouchScreenConfiguration and implement GetNotificationStorageChannelEvent
2021-09-12 12:01:43 -04:00
Morph 4520ae9eed Merge pull request #6987 from Morph1984/common-error
common: Move error handling functions out of common_funcs
2021-09-12 12:01:23 -04:00
Morph e01b714fd5 Merge pull request #6986 from Morph1984/version-update
api_version: Update and add AtmosphereTargetFirmware
2021-09-12 12:01:11 -04:00
ameerj 829fa4c77b main: Apply confirm exit setting in exit locked scenarios
Some titles set an exit lock through HLE, which prompts an exit confirmation when stopping emulation if the system is locked.
This change allows bypassing this confirmation if the setting to confirm exits has been disabled by the user.
2021-09-12 00:31:32 -04:00
Morph fc29159ac7 shader_environment: Add missing <algorithm> include 2021-09-11 17:19:16 -04:00
Morph 5d3d9560e1 vk_descriptor_pool: Add missing <algorithm> include 2021-09-11 17:19:16 -04:00
Morph 244017d3aa slot_vector: Add missing <algorithm> include 2021-09-11 17:19:15 -04:00
Morph 421ff5ea79 video_core/memory_manager: Add missing <algorithm> include 2021-09-11 17:19:15 -04:00
Morph 3e49eac2de kernel: Add missing <functional> include 2021-09-11 17:19:15 -04:00
Morph b529f4b6b7 file_sys/kernel_executable: Add missing <string> include 2021-09-11 17:19:14 -04:00
Morph 84b969a442 codec: Add missing <string_view> include 2021-09-11 17:19:14 -04:00
Morph c4801b0599 common_funcs: Replace <algorithm> with <iterator> 2021-09-11 17:19:14 -04:00
Morph c0ff1dce0b common: Move error handling to error.cpp/h
This allows us to avoid implicitly including <string> every time common_funcs.h is included.
2021-09-11 17:19:14 -04:00
Fernando S f35f5c5072 Merge pull request #6846 from ameerj/nvdec-gpu-decode
nvdec: Add GPU video decoding for all capable drivers and platforms
2021-09-11 23:11:32 +02:00
Fernando S dc8598b472 Merge pull request #6901 from ameerj/vk-clear-bits
vk_rasterizer: Only clear depth/stencil buffers when specified in attachment aspect mask
2021-09-11 22:36:22 +02:00
Fernando S ecad7e67b7 Merge pull request #6941 from ameerj/swapchain-srgb
vk_swapchain: Prefer linear swapchain format when presenting sRGB images
2021-09-11 22:36:03 +02:00
Fernando S a700249ee6 Merge pull request #6953 from ameerj/anv-semaphore
renderer_vulkan: Wait on present semaphore at queue submit
2021-09-11 22:35:52 +02:00
Fernando S 67c075d51d Merge pull request #6981 from ameerj/nvflinger-hb-format
nvflinger: Use external surface format for framebuffer creation
2021-09-11 22:35:25 +02:00
german77 a36409ff16 am: Implement GetNotificationStorageChannelEvent 2021-09-10 12:24:50 -05:00
german77 9847b58137 hid: Stub SetTouchScreenConfiguration 2021-09-10 12:24:28 -05:00
german77 0cea589993 input_common: Enable steam controllers and 8 player support 2021-09-10 00:58:12 -05:00
Morph e92bc1f091 api_version: Update and add AtmosphereTargetFirmware 2021-09-10 01:10:47 -04:00
bunnei 9a7c619698 Merge pull request #6962 from vonchenplus/spirv_support_legacy_attribute
renderer_vulkan: Spirv support glsl  legacy attribute
2021-09-08 14:04:44 -07:00
Chloe 82fca3ab45 Addressed issues
Co-authored-by: Mai M. <mathew1800@gmail.com>
2021-09-09 03:00:08 +10:00
Chloe Marcec 398b0ce799 Mark is_complete as atomic 2021-09-09 00:10:52 +10:00
Chloe Marcec dd526c8bf5 Addressed issues 2021-09-09 00:09:04 +10:00
Fernando S 3821e784bc Merge pull request #6980 from vonchenplus/fix_blend_equation_error
Fix blend equation enum error
2021-09-08 11:50:26 +02:00
Ameer J b9193040cf Merge pull request #6971 from bunnei/buffer-queue-kevent
core: hle: service: buffer_queue: Improve management of KEvent.
2021-09-08 00:34:36 -04:00
Feng Chen 63aba30181 Detail adjustment 2021-09-08 10:30:00 +08:00
Feng Chen 38b28f1c4d Detail adjustment 2021-09-08 09:53:10 +08:00
Feng Chen 3948edde71 Re-implement get unused location 2021-09-07 13:22:52 +08:00
Feng Chen bd94ea2f5a Move attribute related definitions to spirv anonymous namespace 2021-09-07 12:34:35 +08:00
german77 94028da35e input_common: Add alternative string for joycons 2021-09-06 22:20:19 -05:00
ameerj 3e19187560 nvflinger: Use external surface format for framebuffer creation
The format member the IGBPBuffer may not always specify the correct desired format. Using the external format member ensures a valid format is provided when creating the framebuffer.

Fixes homebrew using the wrong framebuffer format.
2021-09-06 23:14:31 -04:00
Ameer J 5eccd5e3c8 Merge pull request #6977 from Moonlacer/master
Second part of Golden's PR #6976
2021-09-06 22:58:23 -04:00
Feng Chen 63acf10871 Fix blend equation enum error 2021-09-07 10:12:09 +08:00
Moonlacer 76c8fdfc78 Second part of Golden's PR 2021-09-06 15:25:40 -05:00
Matías Locatti c80d8c9d11 Rename all shader cache references to pipeline cache
After Hades, both OpenGL and Vulkan use a pipeline cache instead of single stages of the graphics pipeline. Renamed the Remove menu entries to match.
2021-09-06 15:53:04 -03:00
Chloe Marcec 0b8d28b62a address name shadowing with system 2021-09-06 22:13:51 +10:00
Chloe Marcec e27cb5526b account: EnsureTokenIdCacheAsync
Closes #2547, #6946
2021-09-06 21:16:21 +10:00
bunnei 54d33383e8 Merge pull request #6965 from bunnei/cpu_manager_jthread
core: cpu_manager: Use jthread.
2021-09-06 03:49:14 -07:00
Chloe Marcec 2cf086d244 FS: Recursively create directories for CreateDirectory
Originally we only created the parent directory, this caused issues for creating directories which also contained subdirectories, eg `/Folder1/Folder2`

This allows the ultimate mod manager homebrew to at least boot
2021-09-06 19:35:55 +10:00
Feng Chen dc8967ebcd Dynamic get unused location 2021-09-06 10:46:03 +08:00
Feng Chen 1aaa6a353b Implement intput and output fixed fnc textures 2021-09-06 10:36:45 +08:00
bunnei b690071dd5 core: hle: service: buffer_queue: Improve management of KEvent. 2021-09-04 22:25:46 -07:00
bunnei a1a415914d core: hle: service: nvflinger/vi: Improve management of KEvent. 2021-09-03 21:53:00 -07:00
bunnei 14d3f114a5 core: cpu_manager: Use jthread. 2021-09-03 19:05:41 -07:00
Feng Chen 49c66fa4e9 Rename parameters 2021-09-03 23:52:20 +08:00
Feng Chen b3e5a2f75d Fix create GraphicsPipelines crash 2021-09-03 22:55:53 +08:00
ameerj f22d524c39 renderer_vulkan: Wait on present semaphore at queue submit
The present semaphore is being signalled by the call to acquire the
swapchain image. This semaphore is meant to be waited on when rendering
to the swapchain image. Currently it is waited on when presenting, but
moving its usage to be waited on in the command buffer submission allows
for proper usage of this semaphore.

Fixes the device lost when launching titles on the Intel Linux Mesa driver.
2021-09-02 13:13:20 -04:00
Feng Chen a1c9039eae Add input/output location 2021-09-02 23:34:51 +08:00
bunnei 59cf0848c7 Merge pull request #6900 from ameerj/attr-reorder
structured_control_flow: Add DemoteCombinationPass
2021-09-01 17:36:26 -07:00
german77 fab34850ae common/logging: Add missing include 2021-09-01 19:13:33 -05:00
ameerj 668d936dd2 emit_glsl_warp: Fix shuffle ops for 64-thread warp sizes 2021-08-31 16:11:25 -04:00
ameerj 9302524b8c emit_glsl_warp: Fix ballot related ops for 64-thread warp sizes 2021-08-31 16:11:25 -04:00
ameerj c7568d61d2 emit_spirv_warp: Fix shuffle ops for 64-thread warp sizes 2021-08-31 13:40:39 -04:00
ameerj 1bb5fb7e26 emit_spirv_warp: Fix ballot related ops for 64-thread warp sizes 2021-08-31 13:40:12 -04:00
bunnei f59299a696 Merge pull request #6897 from FernandoS27/pineapple-does-not-belong-in-pizza
Project <tentative title>: Rework Garbage Collection.
2021-08-31 09:11:21 -07:00
Feng Chen b86a4caa20 Add colorfront and txtcoord support 2021-09-01 00:07:25 +08:00
bunnei fb109913cb Merge pull request #6928 from ameerj/spirv-get-frontface
emit_spirv_context_get_set: Fix Get FrontFace return value
2021-08-30 18:16:31 -07:00
bunnei dc2d6d0c6b Merge pull request #6879 from ameerj/decoder-assert
vk_blit_screen: Fix non-accelerated texture size calculation
2021-08-30 15:24:04 -07:00
ameerj 8485bb3dcb structured_control_flow: Skip reordering nested demote branches.
Nested demote branches add complexity with combining the condition if it has not been initialized yet. Skip them for the time being.
2021-08-30 11:46:25 -04:00
ameerj e9a8e011f6 structured_control_flow: Conditionally invoke demote reorder pass
This is only needed on select drivers when a fragment shader discards/demotes.
2021-08-30 11:46:24 -04:00
Fernando Sahmkow 133f72c3f4 Garbage Collection: Make it more agressive on high priority mode. 2021-08-29 18:57:17 +02:00
Fernando Sahmkow 129bcd1b85 Garbage Collection: Adress Feedback. 2021-08-29 18:19:53 +02:00
bunnei c7662fd962 Merge pull request #6905 from Morph1984/nifm-misc
nifm/network_interface: Cleanup and populate fields in GetCurrentNetworkProfile
2021-08-29 00:04:58 -07:00
ameerj 584fc3cb71 vulkan_device: Enable VK_KHR_swapchain_mutable_format if available
Silences validation errors when creating sRGB image views of linear swapchain images
2021-08-29 02:03:36 -04:00
ameerj cc38b85948 vk_swapchain: Prefer linear swapchain format when presenting sRGB images
Fixes broken sRGB when presenting from a secondary GPU.
2021-08-29 02:03:35 -04:00
bunnei 02a663b4d2 Merge pull request #6921 from ameerj/vp9-unused
vp9_types: Remove unusued VP9 info struct members
2021-08-28 22:20:09 -07:00
Morph e729e010ca Merge pull request #6927 from german77/ngct
ngct: Stub NGCT:U service
2021-08-28 23:03:29 -04:00
Fernando Sahmkow 9a785765d8 Garbage Collection: enable as default, eliminate option. 2021-08-28 17:55:37 +02:00
Fernando Sahmkow 7d22f79cf0 VideoCore: Rework Garbage Collection. 2021-08-28 17:54:12 +02:00
ameerj 8c687b3a91 structured_control_flow: Add DemoteCombinationPass
Some drivers misread data when demotes are interleaved in the program. This moves demote branches to be checked at the end of the program.
Fixes "wireframe" issue in Pokemon SwSh on some drivers
2021-08-28 11:35:25 -04:00
german77 b036d9df7d ngct: Stub NGCT:U service 2021-08-27 14:15:34 -05:00
Morph 88fa692ae6 Revert "logging: Display backtrace on crash" 2021-08-27 04:01:22 -04:00
Morph 43f7dc615e service: nifm: Populate fields in GetCurrentNetworkProfile
Populates the current_address, subnet_mask, and gateway fields from the selected network interface.
2021-08-27 02:10:59 -04:00
Morph 40e406f9d1 service: nifm: Cleanup GetCurrentIpConfigInfo 2021-08-27 02:10:58 -04:00
Morph b755cdbd57 network_interface: Cleanup code 2021-08-27 02:10:58 -04:00
Morph 2d685e5a51 network_interface: Replace default return value with std::nullopt 2021-08-27 02:10:58 -04:00
ameerj 9b41b19766 emit_spirv_context_get_set: Fix Get FrontFace return value
The IR expects GetAttribute to return an F32 value. This case was returning a U32 instead.
2021-08-26 21:37:34 -04:00
bunnei 4ef01eb41e Merge pull request #6870 from yzct12345/trace-back-stack-back-stack-back
logging: Display backtrace on crash
2021-08-26 17:41:14 -07:00
bunnei 5e600cba3a Revert "kernel: Various improvements to scheduler" 2021-08-25 20:59:28 -07:00
ameerj 8b0a45defd vp9_types: Minor refactor of VP9 info structs. 2021-08-25 21:42:43 -04:00
ameerj 01ac464999 vp9_types: Remove unused Vp9PictureInfo members 2021-08-25 21:29:22 -04:00
Fernando S 33f28f1cd5 Merge pull request #6919 from ameerj/vk-int8-capability
vulkan_device: Add a check for int8 support
2021-08-25 23:46:08 +02:00
Ameer J ef8eb0cb28 Merge pull request #6894 from FernandoS27/bunneis-left-ear
GPU_MemoryManger: Fix GetSubmappedRange.
2021-08-25 16:50:03 -04:00
ameerj 56cabe631b vulkan_device: Add a check for int8 support
Silences validation errors when shaders use int8 without specifying its support to the API
2021-08-24 21:22:41 -04:00
ameerj 0debad63cc logging: Fix log filter during initialization
The log filter was being ignored on initialization due to the logging instance being initialized before the config instance, so the log filter was set to its default value.

This fixes that oversight, along with using descriptive exceptions instead of abort() calls.
2021-08-24 01:32:38 -04:00
Ameer J b53a87b6b4 Merge pull request #6878 from BreadFish64/optimize-GetHostThreadID
kernel: Optimize GetHostThreadID
2021-08-24 00:01:13 -04:00
bunnei 98c2b7a750 Merge pull request #6912 from lioncash/plural
CMakeLists: Ensure proper numerusform tags are generated for pluralized translations
2021-08-23 16:40:31 -07:00
bunnei f3931fe2b5 Merge pull request #6869 from yzct12345/shiny-logs-in-the-fireplace
logging: Simplify and make thread-safe
2021-08-22 20:40:18 -07:00
Lioncash 8efa6d4b74 CMakeLists: Ensure proper numerusform tags are generated for pluralized translations
If we don't set an explicit source and target language for the base
english translation, then we'll generate an incorrect number of
<numerusform> tags (which Transifex doesn't like).
2021-08-22 11:52:37 -04:00
Morph d10148b4aa settings: Amend language_index maximum setting range
The maximum is now 17 with the addition of Brazilian Portuguese
2021-08-21 09:43:15 -04:00
ameerj 64369cceca vk_rasterizer: Only clear depth and stencil buffers when set in attachment aspect mask
Silences validation errors for clearing the depth/stencil buffers of framebuffer attachments that were not specified to have depth/stencil usage.
2021-08-21 02:37:15 -04:00
Ameer J 9cff53ec7c Merge pull request #6888 from v1993/patch-3
video_core: eliminate constant ternary
2021-08-21 00:16:18 -04:00
bunnei 018c64c976 Merge pull request #6877 from MerryMage/dyn-ignore-asserts
dynarmic: Update and enable DYNARMIC_IGNORE_ASSERTS
2021-08-19 15:53:14 -07:00
Mai M de6eeaa67a Merge pull request #6887 from v1993/patch-2
SPIR-V: Merge two ifs in EmitGetAttribute
2021-08-19 17:16:37 -04:00
Mai M 7578fdd63b Merge pull request #6886 from Morph1984/error-code-64
applet_error: Fix 64-bit error code conversion
2021-08-19 17:15:49 -04:00
Fernando Sahmkow c01e168072 GPU_MemoryManger: Fix GetSubmappedRange. 2021-08-19 22:57:22 +02:00
Valeri e8314deee0 Replace QPoint with QPointF where applicable
Previously, floats were implicitly cast to integers
2021-08-19 23:16:58 +03:00
Valeri 35c40cf0aa qt_software_keyboard: fix copy-paste error 2021-08-19 22:17:15 +03:00
Valeri 42b0e8cadf video_core: eliminate constant ternary
`via_header_index` is already checked above, so it would never be true in this branch
2021-08-19 21:22:05 +03:00
Morph 1c1292b13c applet_error: Fix 64-bit error code conversion 2021-08-19 13:16:48 -04:00
Valeri 1510efac15 SPIR-V: Merge two ifs in EmitGetAttribute 2021-08-19 20:13:46 +03:00
Valeri 6a1ad26160 Fix crash in logging in CreateStrayLayer
It was trying to log value of layer_id which is specifically known not to exist, potentially leading to segfault. Log display_id instead.
2021-08-19 19:33:07 +03:00
Valeri 190e12a072 Fix check is thread current in GetThreadContext
Misplaced break made it only check for the first core.
2021-08-19 16:46:30 +03:00
bunnei 7a90ad5238 Merge pull request #6832 from bunnei/scheduler-improvements
kernel: Various improvements to scheduler
2021-08-18 15:42:46 -07:00
ameerj 681b194e24 h264: Lower max_num_ref_frames
GPU decoding seems to be more picky when it comes to the maximum number of reference frames.
2021-08-16 14:40:53 -04:00
ameerj 82906e26a5 configure_graphics: Add GPU nvdec decoding as an option
Some system configurations may see visual regressions or lower performance using GPU decoding compared to CPU decoding. This setting provides the option for users to specify their decoding preference.

Co-Authored-By: yzct12345 <87620833+yzct12345@users.noreply.github.com>
2021-08-16 14:40:53 -04:00
ameerj 7cd52be8c4 codec: Improve libav memory alloc and cleanup 2021-08-16 14:40:53 -04:00
ameerj 5fd82a4ec1 codec: Fallback to CPU decoding if no compatible GPU format is found 2021-08-16 14:40:53 -04:00
lat9nq 3714fd580f cmake: Add VDPAU and NVDEC support to FFmpeg
Adds {h264_,vp9_}{nvdec,vdpau} hwaccels.
2021-08-16 14:40:52 -04:00
ameerj 899cf73819 vk_blit_screen: Fix non-accelerated texture size calculation
Addresses the potential OOB access in UnswizzleTexture.
2021-08-16 14:28:10 -04:00
Fernando S 81f7914b19 Merge pull request #6863 from spholz/fix-lan-play
Fix LAN Play
2021-08-16 17:10:00 +02:00
BreadFish64 8c4f818e77 kernel: Optimize GetHostThreadID 2021-08-16 07:30:23 -05:00
Sönke Holz 12499a34e6 network_interface: correct formatting 2021-08-16 12:18:19 +02:00
spholz 9701ec5ddf network_interface: fix mingw-w64 build 2021-08-16 12:06:35 +02:00
Sönke Holz 363236e2c6 network: retrieve subnet mask and gateway info 2021-08-16 10:32:25 +02:00
Merry 891e19ef4c xbyak: Update include path 2021-08-15 19:26:38 +01:00
bunnei 3376aeb9bd Merge pull request #6861 from yzct12345/const-mempy-is-all-the-speed
decoders: Optimize memcpy for the other functions
2021-08-15 02:38:12 -07:00
bunnei b2f859f47c core: hle: kernel: Disable dispatch count tracking on single core.
- This would have limited value, and would be a mess to handle properly.
2021-08-14 02:14:19 -07:00
yzct12345 156754e476 threadsafe_queue: Fix deadlock
This fixes a lost wakeup in SPSCQueue. If the reader is in just the right position, the writer's notification will be lost and this will be a problem if the writer then does something to wait on the reader.

This was discovered to affect my upcoming stacktrace PR. I don't think any performance decrease will be noticeable because an uncontended mutex is smart enough to skip the syscall. This PR might also resolve some rare deadlocks but I don't know of any examples.
2021-08-13 19:22:51 +00:00
yzct12345 133e23fe1c logging: Display backtrace on crash
This implements backtraces so we don't have to tell users how to use gdb anymore.

This prints a backtrace after abort or segfault is detected. It also fixes the log getting cut off with the last line containing only a bracket. This change lets us know what caused a crash not just what happened the few seconds before it.

I only know how to add support for Linux with GCC. Also this doesn't work outside of C/C++ such as in dynarmic or certain parts of graphics drivers. The good thing is that it'll try and just crash again but the stack frames are still there so the core dump will work just like before.
2021-08-13 18:58:35 +00:00
yzct12345 aee8cc20ea logging: Simplify and make thread-safe
This simplifies the logging system.

This also fixes some lost messages on startup.

The simplification is simple. I removed unused functions and moved most things in the .h to the .cpp. I replaced the unnecessary linked list with its contents laid out as three member variables. Anything that went through the linked list now directly accesses the backends. Generic functions are replaced with those for each specific use case and there aren't many. This change increases coupling but we gain back more KISS and encapsulation.

With those changes it was easy to make it thread-safe. I just removed the mutex and turned a boolean atomic. I was planning to use this thread-safety in my next PR about stacktraces. It was actually async-signal-safety at first but I ended up using a different approach. Anyway getting rid of the linked list is important for that because have the list of backends constantly changing complicates things.
2021-08-13 18:39:45 +00:00
Sönke Holz 66bc5a27ba configuration: fix mingw-w64 build 2021-08-13 12:39:14 +02:00
spholz 9826ea72b2 network: don't use reinterpret_cast in GetAvailableNetworkInterfaces 2021-08-13 11:58:34 +02:00
Sönke Holz 8c9ce19145 network: fix mingw-w64 build
The header "combaseapi.h" of mingw-w64 defines "interface" as "struct".
2021-08-13 11:23:50 +02:00
Sönke Holz da59702a7d network: don't use assert to check if no network interfaces are returned 2021-08-13 11:21:34 +02:00
bunnei 5364981133 Merge pull request #6862 from german77/badsdl
input_common: Disable sdl raw input mode
2021-08-12 21:14:26 -07:00
Sönke Holz cce5a6db3b configuration: move network_interface include to source file 2021-08-13 02:48:39 +02:00
Sönke Holz b8b4170dd6 network: use Common::BitCast instead of std::bit_cast 2021-08-13 01:28:14 +02:00
Sönke Holz 8e6aa553c0 network: narrow down scope of "result" in win32 code for
GetAvailableNetworkInterfaces
2021-08-13 00:37:03 +02:00
Sönke Holz 90a97c43c7 configuration: use tr instead of QStringLiteral for "None" item in
network interface combobox
2021-08-13 00:34:04 +02:00
Sönke Holz a7e514f3db network: use explicit bool conversions in GetAvailableNetworkInterfaces 2021-08-13 00:31:33 +02:00
Sönke Holz 052fb4ec7e network: initialize ip_addr in GetHostIPv4Address() 2021-08-13 00:28:44 +02:00
Sönke Holz 4e840ab505 nifm: use operator*() instead of .value() to get value of std::optional 2021-08-13 00:24:33 +02:00
Sönke Holz 4262dc09d7 nifm: treat a missing host IP address as a non-critical error 2021-08-13 00:21:54 +02:00
spholz 4c093074b9 Merge branch 'yuzu-emu:master' into fix-lan-play 2021-08-12 22:27:17 +02:00
Sönke Holz d5e4ac4b29 network: correct formatting in network.cpp and network_interface.cpp 2021-08-12 22:15:48 +02:00
spholz bef7cbbe41 configuration: add option to select network interface
This commit renames the "Services" tab to "Network" and adds a combobox that allows the user to select the network interface that yuzu should use. This new setting is now used to get the local IP address in Network::GetHostIPv4Address. This prevents yuzu from selecting the wrong network interface and thus using the wrong IP address. The return type of Network::GetHostIPv4Adress has also been changed.
2021-08-12 21:32:53 +02:00
bunnei 1b274368b1 Merge pull request #6838 from ameerj/sws-align
vic: Specify sws_scale height stride.
2021-08-12 11:28:33 -07:00
german77 134a2c23ac input_common: Disable sdl raw input mode 2021-08-12 13:17:07 -05:00
ameerj f885866fba codec: Replace deprecated av_init_packet usage 2021-08-12 01:28:01 -04:00
ameerj 561fd5f7a4 nvdec: Implement GPU accelerated decoding for all platforms
Supplements the VAAPI intel gpu decoder by implementing the D3D11VA decoder for Windows, and CUVID/VDPAU for Nvidia and AMD on drivers linux respectively.
2021-08-12 01:28:01 -04:00
yzct12345 4f7ee3d7c6 decoders: Templates allow memcpy optimizations 2021-08-12 04:45:25 +00:00
lat9nq 6ebd0fe021 settings: Fix MSVC issues
According to https://stackoverflow.com/questions/469508, we run into a
MSVC bug (since VS 2005) when using diamond inheritance for
RangedSetting.

This explicitly implements those functions in RangedSetting. GetValue is
implemented as just calling the inherited version. The explicit
converson operator is reimplemented. I opted for this over ignoring the
warning with a pragma since this specifies the inherited behavior, and I
have now less faith in MSVC to pick the right one.

In addition, we mark destructors as virtual to silence what I believe is
a fair MSVC compilation error.
2021-08-11 17:12:14 -04:00
bunnei 8212eb9900 Merge pull request #6776 from lat9nq/ranged-settings
settings: Implement settings ranges
2021-08-10 21:19:01 -07:00
Fernando S 254526c3d2 Merge pull request #6820 from yzct12345/split-cache
texture_cache: Split out template definitions
2021-08-10 12:23:05 +02:00
Ameer J 6f2c0e3ae0 Merge pull request #6837 from german77/no-pause-screenshot
main: Avoid stopping emulation when taking a screenshot
2021-08-09 23:49:48 -04:00
ameerj 8236b4f4d7 vic: Specify sws_scale height stride.
Silences a sws_scale runtime warning about unaligned strides.
2021-08-09 23:24:16 -04:00
bunnei ea4923218a Merge pull request #6823 from yzct12345/memory-cleanup
memory: Clean up code
2021-08-09 17:09:56 -07:00
bunnei 9cc4c9e0b6 Merge pull request #6839 from ameerj/frame-cap-positon
configure_general: Swap positions of speed limit and frame limit options
2021-08-09 12:32:07 -07:00
Mai M d49016380e Merge pull request #6844 from ameerj/vp9-empty-frame
vp9: Ensure the first frame is complete
2021-08-08 19:02:39 -04:00
Fernando Sahmkow f76d1a1dae yuzu-cmd/CMakeLists: Correct attribution for this function. 2021-08-08 20:24:53 +02:00
ameerj 4cd45cf374 vp9: Ensure the first frame is complete
Silences a runtime error due to the first frame missing the frame data, and being set to hidden despite being a key-frame.
2021-08-08 13:49:00 -04:00
yzct12345 3c7d3363c1 texture_cache: Address ameerj's review 2021-08-08 11:02:51 +00:00
Fernando S d107b31b66 Merge pull request #6834 from K0bin/buffer-image-granularity
Respect Vulkan bufferImageGranularity
2021-08-08 11:57:40 +02:00
bunnei 0db9964080 Merge pull request #6698 from german77/SDL_QoL
input_common: Improve SDL joystick and hide toggle option
2021-08-08 02:44:42 -07:00
bunnei 0c5acc8913 Merge pull request #6817 from gidoly/patch-1
Add description to fast gpu time option
2021-08-08 01:11:47 -07:00
ameerj 24e2e4288e configure_general: Swap positions of speed limit and frame limit options 2021-08-08 01:00:40 -04:00
german77 32e0572a68 input_common: Improve SDL joystick and hide toggle option 2021-08-07 23:11:23 -05:00
bunnei 551b61a46e Merge pull request #6827 from Morph1984/uuid-hash
common: uuid: Add hash function for UUID
2021-08-07 17:18:46 -07:00
Rodrigo Locatti 84bdc6969f input_common: Fix data race on GC implementation 2021-08-07 16:46:26 -05:00
german77 56090126ec main: Avoid stopping emulation when taking a screenshot 2021-08-07 15:45:29 -05:00
bunnei 7f907227dd Merge pull request #6830 from ameerj/nvdec-unimpld-codec
nvdec: Better logging for unimplemented codecs
2021-08-07 12:37:39 -07:00
bunnei 8d8a230257 core: hle: kernel: k_thread: Mark KScopedDisableDispatch as nodiscard. 2021-08-07 12:33:31 -07:00
bunnei 79c64bf1ee core: cpu_manager: Use invalid core_id on init and simplify shutdown. 2021-08-07 12:33:07 -07:00
bunnei 1b1b33993b core: hle: service: buffer_queue: Improve management of KEvent. 2021-08-07 12:18:48 -07:00
bunnei 1458629fc8 core: hle: kernel: k_auto_object: Add GetName method.
- Useful purely for debugging.
2021-08-07 12:18:48 -07:00
bunnei 8cbb66daf8 core: hle: service: nvflinger/vi: Improve management of KEvent. 2021-08-07 12:18:47 -07:00
bunnei 0cd7bf70a3 core: hle: kernel: DisableDispatch on suspend threads. 2021-08-07 12:18:47 -07:00
bunnei 19457823ea core: hle: kernel: k_scheduler: Improve DisableScheduling and EnableScheduling. 2021-08-07 12:18:47 -07:00
bunnei 62b84a3e96 core: cpu_manager: Use KScopedDisableDispatch. 2021-08-07 12:18:47 -07:00
bunnei 347e4d6ab8 core: hle: kernel: Use CurrentPhysicalCoreIndex as appropriate. 2021-08-07 12:18:47 -07:00
bunnei aedc599224 core: hle: kernel: k_scheduler: Remove unnecessary MakeCurrentProcess. 2021-08-07 12:18:47 -07:00
bunnei edba87b96d core: hle: kernel: k_scheduler: Improve ScheduleImpl. 2021-08-07 12:18:47 -07:00
bunnei 0d22a55e01 core: hle: kernel: k_scheduler: Improve Unload. 2021-08-07 12:18:47 -07:00
bunnei cba49de65b core: hle: kernel: k_process: DisableDispatch on main thread. 2021-08-07 12:18:47 -07:00
bunnei 92ef6e44ee core: hle: kernel: k_handle_table: Use KScopedDisableDispatch as necessary. 2021-08-07 12:18:47 -07:00
bunnei 9951f24bad core: hle: kernel: k_thread: Add KScopedDisableDispatch. 2021-08-07 12:18:47 -07:00
bunnei 43fcb97ef3 core: hle: kernel: Ensure idle threads are closed before destroying scheduler. 2021-08-07 12:18:47 -07:00
bunnei 951143ba57 core: hle: kernel: Reflect non-emulated threads as core 3. 2021-08-07 12:18:47 -07:00
bunnei b0cb5c830c core: cpu_manager: Use jthread. 2021-08-07 12:18:47 -07:00
Robin Kertels f8f27b6caf vulkan_memory_allocator: Respect bufferImageGranularity 2021-08-07 15:28:05 +02:00
bunnei f5bab36b38 Merge pull request #6795 from sankasan/cmd-remove-cursor-fullscreen
yuzu-cmd: hide mouse cursor when started fullscreen
2021-08-07 02:00:29 -07:00
bunnei 249bc8fdc9 Merge pull request #6815 from german77/ui_improvements
settings_ui: Add emulated joystick position dot to controller preview
2021-08-06 23:54:23 -07:00
ameerj f52a3de990 nvdec: Better logging for unimplemented codecs 2021-08-07 01:08:33 -04:00
bunnei 6bb6ae6dcb Merge pull request #6791 from ameerj/astc-opt
astc_decoder: Various performance and memory optimizations
2021-08-06 21:45:24 -07:00
yzct12345 b61be44dbc memory: Address lioncash's review 2021-08-07 03:03:21 +00:00
yzct12345 a21f46127b memory: Dedup Read and Write and fix logging bugs 2021-08-07 01:32:06 +00:00
yzct12345 0cef80ec92 texture_cache: Address ameerj's review 2021-08-07 01:27:47 +00:00
spholz b038a6deb4 Merge branch 'yuzu-emu:master' into fix-lan-play 2021-08-07 02:55:19 +02:00
Sönke Holz 47f72f9345 network: GetAndLogLastError: ignore Errno::AGAIN
If non-blocking sockets are used, they generate a lot of Errno::AGAIN errors when they didn't receive any data. These errors shouldn't be logged.
2021-08-07 02:54:25 +02:00
bunnei cb6d198101 Merge pull request #6799 from ameerj/vp9-fixes
nvdec: Fix VP9 reference frame refreshes
2021-08-06 17:46:46 -07:00
Sönke Holz 2c0d0e8af4 network: GetCurrentIpConfigInfo: return host IP address
Service::NIFM::IGeneralService::GetCurrentIpConfigInfo currently hardcodes 192.168.1.100 as the IP address, which prevents LAN play from working correctly.
2021-08-07 02:17:02 +02:00
ameerj 0c28433539 nvhost_nvdec_common: Remove BufferMap
This was mainly used to keep track of mapped buffers for later unmapping.  Since unmap is no longer implemented, this no longer seves a valuable purpose.
2021-08-06 20:11:12 -04:00
ameerj b34ded024c vp9: Cleanup unused variables
With reference frames refreshes fix, we no longer need to buffer two frames in advance.
We can also remove other unused or otherwise unneeded variables.
2021-08-06 20:08:11 -04:00
ameerj 27969c5943 vp9: Fix reference frame refreshes
This resolves the artifacting when decoding VP9 streams.
2021-08-06 20:08:08 -04:00
ameerj 7acf5d8bfd nvhost_nvdec_common: Stub UnmapBuffer Ioctl
Skip unmapping nvdec buffers to avoid breaking the continuity of the VP9 reference frame addresses, and the risk of invalidating data before the async GPU thread is done with it.
2021-08-06 20:06:30 -04:00
Sönke Holz 35b86fce87 network: fix fcntl cmds
F_SETFL/F_GETFL are the correct commands to set a socket to be non-blocking
2021-08-06 21:08:31 +02:00
bunnei 6c222a04a5 Merge pull request #6822 from yzct12345/clion-assert
assert: Avoid empty macros
2021-08-05 22:29:45 -07:00
Morph 93697805a7 common: uuid: Add hash function for UUID
Used when UUID is a key in an unordered_map. The hash is produced by XORing the high and low 64-bits of the UUID together.
2021-08-06 00:41:55 -04:00
yzct12345 7a421e7e33 memory: Clean up CopyBlock too 2021-08-05 21:09:08 +00:00
gidoly d5ab9ff29d Update configure_graphics_advanced.ui
add description too fast gpu time
2021-08-06 06:08:12 +09:00
yzct12345 e99a125e19 texture_cache: Don't change copyright year 2021-08-05 20:52:12 +00:00
yzct12345 4436e63616 texture_cache: Address ameerj's review 2021-08-05 20:46:24 +00:00
yzct12345 fa26e226de memory: Address lioncash's review 2021-08-05 20:29:43 +00:00
bunnei 1822aa11eb Merge pull request #6813 from Morph1984/hex-string-to-uuid
common: uuid: Add hex string to UUID constructor
2021-08-05 13:29:11 -07:00
yzct12345 cbe093e865 memory: Clean up code 2021-08-05 20:11:14 +00:00
yzct12345 dd9e7378dc assert: Verify formatting 2021-08-05 17:46:22 +00:00
yzct12345 3239e923cc assert: Avoid empty macros 2021-08-05 17:21:56 +00:00
yzct12345 e85149c507 texture_cache: Split templates out 2021-08-05 13:52:30 +00:00
Mai M 8a77638f5e Merge pull request #6819 from Morph1984/i-am-dumb
applet_swkbd: Include the null terminator in the buffer size calculation
2021-08-04 23:32:01 -04:00
Mai M 0b58e40e5e Merge pull request #6818 from Morph1984/hex-util-bug
hex_util: Fix incorrect array size in AsArray
2021-08-04 23:31:04 -04:00
Morph 0971b90782 applet_swkbd: Include the null terminator in the buffer size calculation
Some games may interpret the read string as a null-terminated string instead of just reading the string up to buffer_size.
2021-08-04 22:32:09 -04:00
Morph 8f488c60da hex_util: Fix incorrect array size in AsArray
Although this isn't used, this is a potential bug as HexStringToArray will perform an out-of-bounds read.
2021-08-04 22:16:29 -04:00
lat9nq 73acba8ddb config: Read connected setting for controllers
Currently yuzu will read the mapping but does not connect a controller
despite adding subsequent configurations for it. Read the `connected`
setting for now as a boolean like the Qt frontend.
2021-08-04 17:09:35 -04:00
german77 ff46d36f8e settings_ui: Add emulated joystick position dot to controller preview 2021-08-04 11:46:54 -05:00
Morph 6b2f133eef common: uuid: Add hex string to UUID constructor
This allows for easily converting a hex string into a Common::UUID, which is backed by a 128 bit unsigned integer.
2021-08-04 10:45:41 -04:00
yzct12345 e13e98d99d nvdec: Implement VA-API hardware video acceleration (#6713)
* nvdec: VA-API

* Verify formatting

* Forgot a semicolon for Windows

* Clarify comment about AV_PIX_FMT_NV12

* Fix assert log spam from missing negation

* vic: Remove forgotten debug code

* Address lioncash's review

* Mention VA-API is Intel/AMD

* Address v1993's review

* Hopefully fix CMakeLists style this time

* vic: Improve cache locality

* vic: Fix off-by-one error

* codec: Async

* codec: Forgot the GetValue()

* nvdec: Address ameerj's review

* codec: Fallback to CPU without VA-API support

* cmake: Address lat9nq's review

* cmake: Make VA-API optional

* vaapi: Multiple GPU

* Apply suggestions from code review

Co-authored-by: Ameer J <52414509+ameerj@users.noreply.github.com>

* nvdec: Address ameerj's review

* codec: Use anonymous instead of static

* nvdec: Remove enum and fix memory leak

* nvdec: Address ameerj's review

* codec: Remove preparation for threading

Co-authored-by: Ameer J <52414509+ameerj@users.noreply.github.com>
2021-08-03 23:43:11 -04:00
Morph b6b9030618 Merge pull request #6805 from lat9nq/fix-user-profiles
config: Only read/write current_user on global config
2021-08-02 23:58:41 -04:00
lat9nq 959f332e99 config: Only read/write current_user on global config 2021-08-02 18:29:24 -04:00
spholz e08a9d00e0 network: fix ternary operator in Socket::SendTo 2021-08-02 20:12:12 +02:00
yzct12345 46e4e6707f decoders: Optimize swizzle copy performance (#6790)
This makes UnswizzleTexture up to two times faster. It is the main bottleneck in NVDEC video decoding.
2021-08-02 11:18:58 -04:00
san e1d8000de7 yuzu-cmd: hide cursor when in fullscreen
Exposed the SDL_ShowCursor function to EmuWindow baseclass. When creating the window (GL or VK) in fullscreen it now automatically hides the cursor.
2021-08-01 21:46:13 +02:00
Malte Jürgens 4304984555 game_list: Make game list folder icons smaller (#6762)
Makes the default game list folder icons 48x48 by default instead of 64x64, and allows for selecting small (24x24) and large (72x72) icon sizes.
2021-08-01 12:59:36 -04:00
Morph 11a0033a66 service: set: Correct copy amount in GetAvailableLanguageCodes 2021-08-01 11:59:52 -04:00
Fernando S e930d1c13b Merge pull request #6720 from ameerj/vk-screenshot
renderer_vulkan: Implement screenshots
2021-08-01 13:31:33 +02:00
Ameer J 2361a8da8f Merge pull request #6765 from ReinUsesLisp/y-negate-vk
vk_rasterizer: Flip viewport on Y_NEGATE
2021-08-01 01:47:37 -04:00
ameerj bfb2325618 astc_decoder: Reduce workgroup size
This reduces the amount of over dispatching when there are odd dimensions (i.e. ASTC 8x5), which rarely evenly divide into 32x32.
2021-08-01 01:22:27 -04:00
ameerj 2ff4eb5def astc_decoder: Compute offset swizzles in-shader
Alleviates the dependency on the swizzle table and a uniform which is constant for all ASTC texture sizes.
2021-08-01 01:22:26 -04:00
ameerj 59ff9e51f2 astc_decoder: Make use of uvec4 for payload data 2021-07-31 22:28:04 -04:00
ameerj 8f9c7a4ba2 astc_decoder: Simplify Select2DPartition 2021-07-31 21:36:26 -04:00
ameerj 958ede1ed9 astc_decoder: Optimize the use EncodingData
This buffer was a list of EncodingData structures sorted by their bit length, with some duplication from the cpu decoder implementation.
We can take advantage of its sorted property to optimize its usage in the shader.

Thanks to wwylele for the optimization idea.
2021-07-31 21:36:26 -04:00
ameerj f4409c9db9 astc.h: Move data to cpp implementation
Moves leftover values that are no longer used by the gpu decoder back to the cpp implementation.
2021-07-31 21:26:42 -04:00
lat9nq 1f81d4415c settings: Use std::clamp where possible
Addresses PR review

Co-authored-by: PixelyIon <pixelyion@protonmail.com>
2021-07-31 17:20:12 -04:00
Morph 057a4a8a06 hle: api_version: Update HOS version to 12.1.0
Keeps us up to date with reporting the system version.
2021-07-31 14:39:49 -04:00
lat9nq 3314d63af4 settings: Remove unnecessary std::move usages
Addresses review feedback.

Co-authored-by: Mai M. <mathew1800@gmail.com>
2021-07-30 18:44:50 -04:00
bunnei 8177751c0e Merge pull request #6752 from Morph1984/pt-br
service: ns, set: Add PT_BR (Brazilian Portuguese)
2021-07-30 14:42:11 -07:00
bunnei 1e83edaf6b Merge pull request #6775 from lat9nq/cmd-remove-global-core
emu_window: Remove global system instance
2021-07-30 13:28:24 -07:00
bunnei 828d9370b2 Merge pull request #6759 from ReinUsesLisp/pipeline-statistics
renderer_vulkan: Add setting to log pipeline statistics
2021-07-30 11:18:52 -07:00
lat9nq 9194f2f342 settings: Fix function virtualization
Fixes a theoretical scenario where a Setting is using the BasicSetting's
GetValue function. In practice this probably only happens on yuzu-cmd,
where there is no need for a Setting's additional features. Need to fix
regardless.
2021-07-30 13:33:35 -04:00
lat9nq 62e78f36c7 settings: Implement setting ranges
Clamps the setting's values against the specified minimum and maximum
values.
2021-07-30 13:33:21 -04:00
lat9nq d15ff8a89b emu_window: Remove global system instance
It was just the one in emu_window_sdl2, but since _gl and _vk inherit
from it, they all needed adjustments.

Leaves just the one auto system& in main().
2021-07-30 10:43:58 -04:00
Morph ac09092898 applet_swkbd: Correct string buffer size calculation
The buffer size here does not include the initial 8 bytes.
2021-07-30 02:19:04 -04:00
Morph 743b6b53d9 configure_system: Add Brazilian Portuguese to the list of languages 2021-07-30 02:15:53 -04:00
Morph 2359f8283a service: set: Correct 4.0.0 max_entries to 0x40 (64) instead of 17 2021-07-30 02:15:53 -04:00
Morph 58a79102ae service: ns, set: Add PT_BR (Brazilian Portuguese) 2021-07-30 02:15:53 -04:00
Morph bef5d608a9 Merge pull request #6767 from ReinUsesLisp/fold-float-pack
shader: Fold UnpackFloat2x16 and PackFloat2x16
2021-07-30 02:07:52 -04:00
bunnei 9a7c2869d8 Merge pull request #6722 from ReinUsesLisp/xmad-opts
shader: Fold integer FMA from Nvidia's pattern
2021-07-29 18:45:37 -07:00
ReinUsesLisp ecc05bdcb6 shader: Fold UnpackFloat2x16 and PackFloat2x16
Simplifies the code a bit when possible. These instructions should be
no-ops codegen wise.
2021-07-29 21:22:52 -03:00
Ameer J f2b7818cf0 Merge pull request #6751 from Morph1984/languagecode
service: ns: Map ZH_TW and ZH_CN to Traditional/Simplified Chinese
2021-07-29 14:41:03 -04:00
bunnei 56a35a0886 Merge pull request #6742 from Morph1984/uuid
common: uuid: Return a lower-case hex string in Format
2021-07-29 09:37:15 -07:00
ReinUsesLisp 2eaec1b7ee vk_rasterizer: Flip viewport on Y_NEGATE
Matches OpenGL's behavior. I don't believe this register flips geometry,
but we have to try to match behavior on both backends.
2021-07-29 02:17:53 -03:00
ameerj 9629e74364 renderers: Add explicit invert_y bool to screenshot callback
OpenGL and Vulkan images render in different coordinate systems. This allows us to specify the coordinate system of the screenshot within each renderer
2021-07-28 21:46:08 -04:00
ameerj 6733ae9aab renderer_vulkan: Implement screenshots 2021-07-28 21:45:55 -04:00
ameerj 317f238e1d vk_blit_screen: Add public CreateFramebuffer method 2021-07-28 21:43:02 -04:00
ameerj 870a92bd78 vk_blit_screen: Make Draw method more generic
Allows specifying the framebuffer and render area dimensions, rather than being hard coded for the render window.
2021-07-28 21:37:30 -04:00
bunnei b1e3c13f5a Merge pull request #6760 from ReinUsesLisp/fp16-collect
shader: Mark ConvertF16F32 and ConvertF32F16 as fp16 instructions
2021-07-28 14:55:06 -07:00
bunnei a31bcb8371 Merge pull request #6758 from jbeich/fastmem
host_memory: enable fastmem on FreeBSD
2021-07-28 13:01:54 -07:00
bunnei 0821c4c02d Merge pull request #6700 from lat9nq/fullscreen-enum
general: Implement FullscreenMode enumeration
2021-07-28 11:36:42 -07:00
Morph 5b9d80faea Merge pull request #6671 from jls47/master
applets/web: Addressing QT Navigation issues in Linux
2021-07-27 22:46:27 -04:00
ReinUsesLisp d84b81fdfb shader: Mark ConvertF16F32 and ConvertF32F16 as fp16 instructions
Fixes instances where fp16 types are not declared on SPIR-V but they are
used. This shouldn't happen on master, as it's been uncovered by an
additional optimization pass.
2021-07-27 21:33:05 -03:00
ReinUsesLisp 482c1ec8e5 renderer_vulkan: Add setting to log pipeline statistics
Use VK_KHR_pipeline_executable_properties when enabled and available to
log statistics about the pipeline cache in a game.

For example, this is on Turing GPUs when generating a pipeline cache
from Super Smash Bros. Ultimate:

Average pipeline statistics
==========================================
Code size:       6433.167
Register count:    32.939

More advanced results could be presented, at the moment it's just an
average of all 3D and compute pipelines.
2021-07-27 21:29:24 -03:00
bunnei 4dfbd2579c Merge pull request #6749 from lioncash/rtarget
render_target: Add missing initializer for size extent
2021-07-27 17:28:53 -07:00
bunnei f2d0cb5498 Merge pull request #6730 from Morph1984/buf_to_stdstring
common: fs: fs_util: Add BufferToUTF8String
2021-07-27 15:50:54 -07:00
Jan Beich 471ddd0674 host_memory: Add workaround for FreeBSD 12
src/common/host_memory.cpp:360:14: error: use of undeclared identifier
      'memfd_create'
        fd = memfd_create("HostMemory", 0);
             ^
2021-07-27 20:15:23 +00:00
Jan Beich 112a8e017d host_memory: Enable Linux implementation on FreeBSD
HW.Memory <Critical> common/host_memory.cpp:HostMemory:492: Fastmem unavailable, falling back to VirtualBuffer for memory allocation
2021-07-27 20:09:43 +00:00
Rodrigo Locatti 100a39edb6 Merge pull request #6748 from lioncash/engine-init
video_core/engine: Consistently initialize rasterizer pointers
2021-07-27 16:17:20 -03:00
Rodrigo Locatti b944f2b0d3 Merge pull request #6744 from lioncash/exc
exception: Make constructors explicit
2021-07-27 16:11:17 -03:00
bunnei f55b0d994e Merge pull request #6745 from lioncash/copies
video_core: Remove some unused variables
2021-07-27 11:38:32 -07:00
jls47 20083ccd43 qt_web_browser: Fix lambda capture for HIDButton 2021-07-27 11:31:12 -04:00
jls47 85e29934fd qt_web_browser: Focus on the first link element
Focusing on the first link element fixes element navigation upon loading the web applet in games such as Super Mario Odyssey
2021-07-27 11:31:11 -04:00
Morph 6c7b6b7be0 service: ns: Remove unused ns_language header 2021-07-27 08:59:26 -04:00
Morph ae8a88d10c service: ns: Map ZH_TW and ZH_CN to Traditional/Simplified Chinese 2021-07-27 08:54:41 -04:00
Lioncash 2fa5f631c3 render_target: Add missing initializer for size extent
Everything else has a default constructor that does the straightforward
thing of initializing most members to a default value, except for the
size.

We explicitly initialize the size (and others, for consistency), to
prevent potential uninitialized reads from occurring. Particularly given
the largeish surface area that this struct is used in.
2021-07-27 07:41:21 -04:00
Lioncash 23ec5faf24 video_core/engine: Consistently initialize rasterizer pointers
Ensures all of the engines have consistent and deterministic
initialization of the rasterizer pointers.
2021-07-27 07:30:57 -04:00
Lioncash be66e2a272 vulkan_wrapper: Fix SetObjectName() always indicating objects as images
We should be using the passed in object type instead.
2021-07-27 07:19:15 -04:00
Lioncash dd25abba68 buffer_cache: Remove unused small_vector in CommitAsyncFlushesHigh()
Given this is non-trivial, the constructor is required to execute, so
this removes a bit of redundant codegen.
2021-07-27 06:24:44 -04:00
Lioncash ac3aa96ebc gl_shader_cache: Remove unused variable 2021-07-27 06:23:49 -04:00
Lioncash f902b4b167 vk_compute_pass: Remove unused captures
Resolves two compiler warnings.
2021-07-27 06:17:52 -04:00
Lioncash b5ce444508 exception: Make constructors explicit
Ensures that exception construction is always explicit.
2021-07-27 04:15:14 -04:00
Lioncash b650c38a31 exception: Make what() member function nodiscard 2021-07-27 04:14:32 -04:00
Lioncash d04bbd8207 exception: Narrow down specific header
We can use the <exception> header instead of pulling in all of the
exception-style classes.
2021-07-27 04:09:18 -04:00
Morph 10e072f490 common: fs: fs_util: Add BufferToUTF8String
Allows for direct conversion to std::string without having to convert std::u8string to std::string
2021-07-27 00:02:22 -04:00
Morph 881199e524 common: uuid: Return a lower-case hex string in Format 2021-07-26 23:54:59 -04:00
bunnei 08350d1744 Merge pull request #6696 from ameerj/speed-limit-rename
general: Rename "Frame Limit" references to "Speed Limit"
2021-07-26 18:51:00 -07:00
Rodrigo Locatti c1fc22249a Merge pull request #6741 from ReinUsesLisp/stream-remove
vk_stream_buffer: Remove unused stream buffer
2021-07-26 20:35:01 -03:00
Rodrigo Locatti 162759edf2 Merge pull request #6740 from K0bin/hvv-fallback
Handle allocation failure in Staging buffer
2021-07-26 20:34:44 -03:00
Robin Kertels 534c86587b vk_staging_buffer_pool: Fall back to host memory when allocation fails 2021-07-26 23:37:18 +02:00
Rodrigo Locatti 71077365ac Merge pull request #6728 from ReinUsesLisp/null-buffer-usage
vk_buffer_cache: Add transform feedback usage to null buffer
2021-07-26 18:30:45 -03:00
Rodrigo Locatti 2fffe98e5c Merge pull request #6729 from ReinUsesLisp/quad-indexed-barrier
vk_compute_pass: Fix pipeline barrier for indexed quads
2021-07-26 18:30:05 -03:00
ReinUsesLisp 5afcd587e3 vk_stream_buffer: Remove unused stream buffer
Remove unused file.
2021-07-26 18:19:53 -03:00
Rodrigo Locatti 4d2a527006 Merge pull request #6724 from lioncash/nodisc-shader
shader_recompiler: Remove unnecessary [[nodiscard]] instances
2021-07-26 16:35:21 -03:00
Rodrigo Locatti d424762d2c Merge pull request #6726 from lioncash/hguard
emit_spirv_instructions: Add missing header guard
2021-07-26 16:35:11 -03:00
Rodrigo Locatti b894ae1bd3 Merge pull request #6727 from lioncash/topology
emit_glasm: Fix LINESS_ADJACENCY typo in InputPrimitive()
2021-07-26 16:35:03 -03:00
Vamsi Krishna 713f960ce3 configure_graphics: reword GLASM option
Change wording to explain that GLASM is actually short for Assembly Shaders
2021-07-26 20:49:31 +05:30
Rodrigo Locatti 0da5a7170b Merge pull request #6723 from lioncash/shader
object_pool: Add missing return in Chunk move assignment operator
2021-07-26 06:01:21 -03:00
Rodrigo Locatti 1afb7b75cd Merge pull request #6725 from lioncash/control-token
control_flow: Fix duplicate switch case in OpcodeToken
2021-07-26 06:00:23 -03:00
ReinUsesLisp 8d86e9a9d7 vk_compute_pass: Fix pipeline barrier for indexed quads
Use an index buffer barrier instead of a vertex input read barrier.
2021-07-26 05:51:09 -03:00
ReinUsesLisp b53503b0fe vk_buffer_cache: Add transform feedback usage to null buffer
Fixes bad API usages on Vulkan.
2021-07-26 05:49:37 -03:00
Lioncash 00bd622334 emit_glasm: Fix LINESS_ADJACENCY typo in InputPrimitive()
This should be LINES_ADJACENCY
2021-07-26 04:44:56 -04:00
Lioncash 0692818106 emit_spirv_instructions: Add missing header guard 2021-07-26 04:28:35 -04:00
Lioncash 05201f4f88 shader_recompiler: Remove unnecessary [[nodiscard]] instances
[[nodiscard]] doesn't do anything on functions with a void return type
and causes superfluous warnings.
2021-07-26 04:23:59 -04:00
Lioncash 9d5aa3d65a control_flow: Fix duplicate switch case in OpcodeToken
This previously duplicated the case of the PBK case above it.
2021-07-26 04:16:34 -04:00
Lioncash 23da07e8e5 object_pool: Add missing return in Chunk move assignment operator
Prevents undefined behavior from occurring.
2021-07-26 04:01:05 -04:00
ReinUsesLisp 4f19303fe0 shader: Fold integer FMA from Nvidia's pattern
Fold shaders doing "a * b + c" on integers from the pattern generated by
Nvidia's GL compiler.

On a somewhat complex compute shader it reduces the code size by 16
instructions from 2 matches on Turing GPUs.

On Intel as extracted from KHR_pipeline_executable_properties:
Before the optimization:
```
Instruction Count: 2057
Basic Block Count: 45
Scratch Memory Size: 14752
Spill Count: 232
Fill Count: 261
SEND Count: 610
Cycle Count: 11325
```

After the optimization:
```
Instruction Count: 2046
Basic Block Count: 44
Scratch Memory Size: 13728
Spill Count: 219
Fill Count: 268
SEND Count: 604
Cycle Count: 11367
```
2021-07-26 04:58:02 -03:00
ReinUsesLisp c6e1483e17 shader: Use TryInstRecursive on XMAD multiply folding
Simplify a bit the logic.
2021-07-26 04:15:27 -03:00
ReinUsesLisp 222a6542ab shader: Add TryInstRecursive utility to values 2021-07-26 01:31:05 -03:00
bunnei eee75fe604 Merge pull request #6697 from ameerj/fps-cap
config, nvflinger: Add FPS cap setting
2021-07-25 16:23:44 -07:00
lat9nq 24b832dee9 Merge branch 'master' into fullscreen-enum 2021-07-25 15:31:33 -04:00
bunnei 4827595bb1 Merge pull request #6575 from FernandoS27/new_settings
Settings: Eliminate ASYNC & MULTICORE Toggles and add GPU Accuracy to  status bar
2021-07-25 11:45:45 -07:00
Morph fc99dce96e Merge pull request #6709 from ameerj/screenshot-path
main: Fix screenshot filepath construction
2021-07-25 14:41:38 -04:00
bunnei 0a328423e8 Merge pull request #6585 from ameerj/hades
Shader Decompiler Rewrite
2021-07-25 11:39:04 -07:00
ameerj 01b566101b main: Fix screenshot filepath construction
The screenshot directory path returned does not have a trailing directory separator character. This caused screenshots to be saved in the parent directory of the configured screenshot directory.

This fixes that behavior
2021-07-25 14:24:08 -04:00
bunnei 1c2599a130 Merge pull request #6699 from lat9nq/common-threads
common: Publically link to pthreads
2021-07-25 10:43:11 -07:00
bunnei c47035538f Merge pull request #6690 from ReinUsesLisp/dma-clear-fixups
buffer_cache: Misc fixups related to buffer clears
2021-07-24 01:27:50 -04:00
ameerj 2fef43b32a renderer_base: Removed redundant settings
use_framelimiter was not being used internally by the renderers.
set_background_color was always set to true as there is no toggle for the renderer background color, instead users directly choose the color of their choice.
2021-07-23 22:10:01 -04:00
ameerj aeff61a0cc general: Rename "Frame Limit" references to "Speed Limit"
This setting is best referred to as a speed limit, as it involves the limits of all timing based aspects of the emulator, not only framerate.
This allows us to differentiate it from the fps unlocker setting.
2021-07-23 22:10:01 -04:00
ameerj 8c0d6af843 config, nvflinger: Add FPS cap setting
Allows finer tuning of the FPS limit.
2021-07-23 22:04:36 -04:00
bunnei 3cc092849c Merge pull request #6551 from bunnei/improve-kernel-obj
Improve management of kernel objects
2021-07-23 21:23:56 -04:00
lat9nq f70155db64 configuration: Use combobox apply template where possible
We don't need to manually apply this setting now that a template can do
this for us.
2021-07-23 10:18:07 -04:00
lat9nq 4b02e2b489 general: Implement FullscreenMode enumeration
Prevents us from using an unclear 0 or 1 to describe the fullscreen
mode.
2021-07-23 10:14:37 -04:00
lat9nq 0ea70212af common: Publically link to pthreads
Common requires pthreads but does not refer to it when linking to other
modules. Fix this by linking to Threads where necessary.
2021-07-23 09:47:52 -04:00
ReinUsesLisp ba89444667 shader: Support out of bound local memory reads and immediate writes
Support ignoring immediate out of bound writes. Writing dynamically out
of bounds is not yet supported (e.g. R0+0x4).

Reading out of bounds yields zero. This is supported checking for the
size from the IR; if the input is immediate, the optimization passes
will drop it.
2021-07-22 21:51:41 -04:00
ReinUsesLisp 7efec6bce4 vulkan/blit_image: Commit descriptor sets within worker thread
Fixes race condition caused. The descriptor pool is not thread safe, so
we have to commit descriptor sets within the same thread.
2021-07-22 21:51:40 -04:00
ReinUsesLisp 6c7f6e1228 vulkan_device: Blacklist Volta and older from VK_KHR_push_descriptor
Causes crashes on Link's Awakening intro. It's hard to debug if it's our
fault due to bugs in validation layers.
2021-07-22 21:51:40 -04:00
ReinUsesLisp 4ae6c023df qt: Remove "experimental" from asynchronous shader building UI 2021-07-22 21:51:40 -04:00
ReinUsesLisp c29f2c9507 Revert "renderers: Disable async shader compilation"
This reverts commit 4a152767286717fa69bfc94846a124a366f70065.
2021-07-22 21:51:40 -04:00
ReinUsesLisp 8a74a2c895 opengl: Fix asynchronous shaders
Wait for shader to build before configuring it, and wait for the shader
to build before sharing it with other contexts.
2021-07-22 21:51:40 -04:00
ReinUsesLisp a97c0ccabd shader_environment: Receive cache version from outside
This allows us invalidating OpenGL and Vulkan separately in the future.
2021-07-22 21:51:40 -04:00
ReinUsesLisp 2e6acac647 cmake: Remove shader cache version 2021-07-22 21:51:40 -04:00
ameerj 3927809a63 shader: Fix disabled attribute default values 2021-07-22 21:51:40 -04:00
ameerj a7fe20e636 gl_device: Simplify GLASM setting logic 2021-07-22 21:51:40 -04:00
ameerj e6d3a301f2 glsl: Simplify FCMP emission 2021-07-22 21:51:40 -04:00
ameerj 4f3e869dd0 glsl: Update TessellationControl gl_in
Adheres to GL_ARB_separate_shader_objects requirements
2021-07-22 21:51:40 -04:00
ReinUsesLisp 4f84ef1f2b renderer_opengl: Use ARB_separate_shader_objects
Ensures that states set for a particular stage are not attached to other
stages which may not need them.
2021-07-22 21:51:40 -04:00
ameerj ffe72f8d37 shader: Implement ISETP.X 2021-07-22 21:51:40 -04:00
ReinUsesLisp 2321666580 shader: Avoid usage of C++20 ranges to build in clang 2021-07-22 21:51:40 -04:00
ameerj a23f05c215 glsl: Clamp shared mem size to GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 2021-07-22 21:51:40 -04:00
ReinUsesLisp ac0c2f8edc gl_shader_cache: Properly implement asynchronous shaders 2021-07-22 21:51:40 -04:00
lat9nq b557314001 shader_recompiler, video_core: Resolve clang errors
Silences the following warnings-turned-errors:
-Wsign-conversion
-Wunused-private-field
-Wbraced-scalar-init
-Wunused-variable

And some other errors
2021-07-22 21:51:40 -04:00
ameerj 779288c071 main: Update Shader Cache menu options
This change adds two new context menu items to remove either the OpenGL or the Vulkan shader caches individually, and the provides the option to remove all caches for the selected title.
This also changes the behavior of the open shader cache option. Now it creates the shader cache directory for the title if it does not yet exist.
2021-07-22 21:51:40 -04:00
ameerj 2cde6c5708 renderers: Fix clang formatting 2021-07-22 21:51:40 -04:00
ReinUsesLisp cdb3837085 shader: Manually convert from array<u32> to bitset instead of using bit_cast 2021-07-22 21:51:40 -04:00
ameerj e45e458b17 renderers: Disable async shader compilation
The current implementation is prone to causing graphical issues. Disable until a better solution is implemented.
2021-07-22 21:51:40 -04:00
ReinUsesLisp b654537f0f maxwell_to_vk: Add R16_SNORM 2021-07-22 21:51:40 -04:00
lat9nq df62bcd9cb configure_graphics: Mark SPIR-V as Experimental, Mesa only 2021-07-22 21:51:40 -04:00
ameerj f2f16e3a1d glsl: Fix tracking of info.uses_shadow_lod 2021-07-22 21:51:40 -04:00
ameerj 508e41777b shader: Ignore global memory ops on devices lacking int64 support 2021-07-22 21:51:40 -04:00
lat9nq 52f2fe7b52 vulkan_device: Add missing include algorithm 2021-07-22 21:51:40 -04:00
ameerj d965b7200a vulkan_device: Blacklist ampere devices from float16 math 2021-07-22 21:51:40 -04:00
ameerj d54c4880d1 dual_vertex_pass: Clang format 2021-07-22 21:51:40 -04:00
ameerj 472f9fcb18 gl_shader_cache: Fixes for async shaders 2021-07-22 21:51:40 -04:00
ReinUsesLisp e8d458a81d vulkan_device: Enable VK_EXT_extended_dynamic_state on RADV 21.2 onward 2021-07-22 21:51:40 -04:00
ReinUsesLisp ff35ef8ec1 emit_spirv: Workaround VK_KHR_shader_float_controls on fp16 Nvidia
Fix regression on Fire Emblem: Three Houses when using native fp16.
2021-07-22 21:51:40 -04:00
lat9nq 84bc5be7a1 configure_graphics: Re-order vulkan device populating 2021-07-22 21:51:40 -04:00
lat9nq c969f6e678 shader: GCC fmt 8.0.0 fixes 2021-07-22 21:51:40 -04:00
ameerj 79e317ad7d shader: Account for 33-bit IADD3 scenario 2021-07-22 21:51:40 -04:00
ReinUsesLisp 611797a7c6 shader: Only apply shift on register mode for IADD3 2021-07-22 21:51:39 -04:00
ReinUsesLisp 934b23ab85 vk_rasterizer: Workaround bug in VK_EXT_vertex_input_dynamic_state
Workaround potential bug on Nvidia's driver where only updating high
attributes leaves low attributes out dated.
2021-07-22 21:51:39 -04:00
ReinUsesLisp b48b4b0600 shader: Fix disabled and unwritten attributes and varyings 2021-07-22 21:51:39 -04:00
ameerj d77dc5919c glsl: Fix shared and local memory declarations
account for the fact that program.*memory_size is in units of bytes.
2021-07-22 21:51:39 -04:00
ameerj 33d21ac2db opengl: Implement LOP.CC
Used by MH:Rise
2021-07-22 21:51:39 -04:00
ReinUsesLisp 1c7c65087d vk_graphics_pipeline: Implement smooth lines 2021-07-22 21:51:39 -04:00
ReinUsesLisp bd0796d52f vk_graphics_pipeline: Implement line width 2021-07-22 21:51:39 -04:00
ReinUsesLisp 7dc8577529 spirv: Fix code emission when descriptor aliasing is unsupported
Fixes OpenGL.
2021-07-22 21:51:39 -04:00
lat9nq 5443d4bd9c video_core: Enable GL SPIR-V shaders 2021-07-22 21:51:39 -04:00
lat9nq ddd4720fe4 general: Add setting shader_backend
GLASM is getting good enough that we can move it out of advanced
graphics settings. This removes the setting `use_assembly_shaders`,
opting for a enum class `shader_backend`. This comes with the benefits
that it is extensible for additional shader backends besides GLSL and
GLASM, and this will work better with a QComboBox.

Qt removes the related assembly shader setting from the Advanced
Graphics section and places it as a new QComboBox in the API Settings
group. This will replace the Vulkan device selector when OpenGL is
selected.

Additionally, mark all of the custom anisotropic filtering settings as
"WILL BREAK THINGS", as that is the case with a select few games.
2021-07-22 21:51:39 -04:00
ameerj c446ada33e glsl: Declare local memory in main 2021-07-22 21:51:39 -04:00
ameerj 0810714e46 glsl: Add passthrough geometry shader support 2021-07-22 21:51:39 -04:00
ReinUsesLisp 41b2a991c4 shader: Use std::bit_cast instead of Common::BitCast for passthrough 2021-07-22 21:51:39 -04:00
ReinUsesLisp 362888dcb0 glasm: Add passthrough geometry shader support 2021-07-22 21:51:39 -04:00
ReinUsesLisp b1df436cef shader: Rework varyings and implement passthrough geometry shaders
Put all varyings into a single std::bitset with helpers to access it.

Implement passthrough geometry shaders using host's.
2021-07-22 21:51:39 -04:00
ReinUsesLisp 649c9cca0f vk_graphics_pipeline: Implement conservative rendering 2021-07-22 21:51:39 -04:00
ReinUsesLisp 6db3ba6542 shader: Only verify shader when graphics debugging is enabled 2021-07-22 21:51:39 -04:00
ReinUsesLisp c0705f79b8 shader: Unify shader stage types 2021-07-22 21:51:39 -04:00
lat9nq 0f092f17af lower_int64_to_int32: Add missing include 2021-07-22 21:51:39 -04:00
ReinUsesLisp 0a75c400e3 shader: Emulate 64-bit integers when not supported
Useful for mobile and Intel Xe devices.
2021-07-22 21:51:39 -04:00
ReinUsesLisp e3df2285ca shader: Add int64 to int32 lowering pass 2021-07-22 21:51:39 -04:00
ReinUsesLisp ba211323ab shader: Teach global memory base tracker to follow vectors 2021-07-22 21:51:39 -04:00
ReinUsesLisp f54fa4a1f5 shader: Add constant propagation to integer vectors 2021-07-22 21:51:39 -04:00
ameerj 99e8164b43 glsl: Better IAdd Overflow CC fix
This ensures the original operand values are not overwritten when being used in the overflow detection.
2021-07-22 21:51:39 -04:00
ReinUsesLisp f158fe9359 shader: Remove IAbs64 2021-07-22 21:51:39 -04:00
ameerj 516c17d4d3 glsl: Fix IADD CC 2021-07-22 21:51:39 -04:00
ameerj 58a052072c shader_recompiler: Fix IADD3 input partitioning 2021-07-22 21:51:39 -04:00
ReinUsesLisp 04c1dca457 shader: Move loop safety tests to code emission 2021-07-22 21:51:39 -04:00
ReinUsesLisp e57f54e582 gl_graphics_pipeline: Fix assembly shaders check for transform feedbacks 2021-07-22 21:51:39 -04:00
ameerj abade15f5e glsl: Remove frag color initialization 2021-07-22 21:51:39 -04:00
ameerj 1d99187d4c glasm: Implement SetAttribute ViewportMask 2021-07-22 21:51:39 -04:00
ReinUsesLisp 2cff04fab9 gl_graphics_pipeline: Inline hash and operator== key functions 2021-07-22 21:51:39 -04:00
ReinUsesLisp 97cfedab70 gl_shader_cache: Check previous pipeline before checking hash map
Port optimization from Vulkan.
2021-07-22 21:51:39 -04:00
ReinUsesLisp 40402f3947 gl_graphics_pipeline: Port optimizations from Vulkan pipelines 2021-07-22 21:51:39 -04:00
ameerj b79424c3bf emit_glsl_special: Skip initialization of frag_color0
Fixes rendering in Devil May Cry without regressing Ori and the Blind Forest.
2021-07-22 21:51:38 -04:00
ReinUsesLisp d633ec4ecc shader: Calibrate loop safety threshold 2021-07-22 21:51:38 -04:00
ReinUsesLisp 2cd96376b5 buffer_cache: Fix debugging leftover 2021-07-22 21:51:38 -04:00
Morph 6e8400f165 glsl: Add missing ; in EmitSetSampleMask
Fixes shader compilation in Okami HD
2021-07-22 21:51:38 -04:00
ReinUsesLisp b7cf8e0de4 buffer_cache: Fix size reductions not having in mind bind sizes
A buffer binding can change between shaders without changing the
shaders. This lead to outdated bindings on OpenGL.
2021-07-22 21:51:38 -04:00
ameerj 7d20cd7656 glsl: Fix output varying initialization when transform feedback is used 2021-07-22 21:51:38 -04:00
ameerj c7921c7812 shaders: Allow shader notify when async shaders is disabled 2021-07-22 21:51:38 -04:00
ameerj 633c54a202 texture_pass: Fix is_read image qualification
Atomic operations are considered to have both read and write access. This was not  being accounted for.
2021-07-22 21:51:38 -04:00
ReinUsesLisp 9c387a270b shader: Align constant buffer sizes to 16 bytes
WAR for AMD reading zeroes on uniform buffers of size 2.
2021-07-22 21:51:38 -04:00
ReinUsesLisp 10f91c42e2 spirv: Properly handle devices without int8 and int16 2021-07-22 21:51:38 -04:00
ReinUsesLisp fe5fc478e7 spirv: Handle small storage buffer loads on devices with no support 2021-07-22 21:51:38 -04:00
ReinUsesLisp b3bf0d4ebb vk_graphics_pipeline: Use VK_KHR_push_descriptor when available
~51% faster on Nvidia compared to previous method.
2021-07-22 21:51:38 -04:00
ameerj 45c91da369 glsl: Fix cbuf component indexing bug falback 2021-07-22 21:51:38 -04:00
ReinUsesLisp 16d28031e7 shader: Simplify MergeDualVertexPrograms 2021-07-22 21:51:38 -04:00
ReinUsesLisp c4a71824d5 shader: Properly manage attributes not written from previous stages 2021-07-22 21:51:38 -04:00
ReinUsesLisp ebd1146ea7 glsl: Only declare fragment outputs on fragment shaders 2021-07-22 21:51:38 -04:00
ReinUsesLisp 9389e71b12 shader: Split profile and runtime info headers 2021-07-22 21:51:38 -04:00
ReinUsesLisp 52be21495e shader: Add support for native 16-bit floats 2021-07-22 21:51:38 -04:00
ReinUsesLisp 41c634a7a9 shader: Rename maxwell/program.h to translate_program.h 2021-07-22 21:51:38 -04:00
ReinUsesLisp a9a5f5b535 vulkan_device: Blacklist VK_EXT_vertex_input_dynamic_state on Intel 2021-07-22 21:51:38 -04:00
ameerj 7a9b23ea70 glsl: Obey need_declared_frag_colors to declare and initialize all frag_color
Fixes Ori and the blind forest title screen
2021-07-22 21:51:38 -04:00
ameerj 1d2c13fd7b glsl: Address rest of feedback 2021-07-22 21:51:38 -04:00
ameerj 52bd1d7788 glsl: Move gl_Position/generic attribute initialization to EmitProlgue 2021-07-22 21:51:38 -04:00
ameerj bc50a9ef20 glsl: Conditionally use fine/coarse derivatives based on device support 2021-07-22 21:51:38 -04:00
ameerj 4e73fdbd0f glsl: Cleanup/Address feedback 2021-07-22 21:51:38 -04:00
ameerj 7e661303d5 gl_shader_cache: Implement async shaders 2021-07-22 21:51:38 -04:00
ameerj d344489b5b glsl: Add Shader_GLSL logging 2021-07-22 21:51:38 -04:00
ameerj c44b3f664d glsl: Add LoopSafety instructions 2021-07-22 21:51:38 -04:00
ameerj 50e1ced397 glsl: Conditionally add EXT_texture_shadow_lod 2021-07-22 21:51:38 -04:00
ameerj b33af69513 glsl: Add stubs for sparse queries and variable aoffi when not supported 2021-07-22 21:51:38 -04:00
ameerj 3e6f89f964 glsl: Implement legacy varyings 2021-07-22 21:51:38 -04:00
ameerj 18aae22ad2 gl_shader_cache: Remove const from pipeline source arguments 2021-07-22 21:51:38 -04:00
ameerj 07a59e1404 gl_shader_cache: Move OGL shader compilation to the respective Pipeline constructor 2021-07-22 21:51:38 -04:00
ameerj 67cc50be47 glsl: Minor cleanup 2021-07-22 21:51:38 -04:00
ameerj 5e9b073176 glsl: Fix Cbuf getters for F32 type 2021-07-22 21:51:38 -04:00
ameerj 152f718017 glsl: Add immediate index oob checking for Cbuf getters 2021-07-22 21:51:38 -04:00
ameerj 163ce47cb1 glsl: Refactor GetCbuf functions to reduce code duplication 2021-07-22 21:51:38 -04:00
ameerj 7bf5c1164e glsl: Address more feedback. Implement indexed texture reads 2021-07-22 21:51:38 -04:00
ameerj 73278ba985 glsl: Remove Signed Integer variables 2021-07-22 21:51:38 -04:00
ameerj 5d2cd1551f glsl: Address Rodrigo's feedback 2021-07-22 21:51:38 -04:00
ameerj 8ab7780015 glsl: Reorganize backend code, remove unneeded [[maybe_unused]] 2021-07-22 21:51:37 -04:00
ameerj b247baab26 glsl: Implement SampleId and SetSampleMask
plus some minor refactoring of implementations
2021-07-22 21:51:37 -04:00
ameerj a2f864493b glsl: Add gl_PerVertex in for GS 2021-07-22 21:51:37 -04:00
ameerj 5eb36b0913 glsl: Use existing tracking for enabling EXT_shader_image_load_formatted 2021-07-22 21:51:37 -04:00
ameerj 42ac60591e glsl: Enable early fragment tests 2021-07-22 21:51:37 -04:00
ameerj 3ad05ecd4e gl_rasterizer: Add texture fetch barrier for fragments
Fixes flicker seen in XC2
2021-07-22 21:51:37 -04:00
ameerj 95aedb5258 glsl: Implement more attribute getters and setters 2021-07-22 21:51:37 -04:00
ameerj 656de6639c glsl: Implement fswzadd
and wip nv thread shuffle impl
2021-07-22 21:51:37 -04:00
ameerj ccd4becb79 glsl: Implement indexed attribute loads 2021-07-22 21:51:37 -04:00
ameerj 819ae85298 glsl: Conditionally add GL_ARB_sparse_texture2 2021-07-22 21:51:37 -04:00
ameerj c800b9bf92 glsl: Rebase fixes 2021-07-22 21:51:37 -04:00
ameerj 5292962d7e glsl: Conditionally use GL_EXT_shader_image_load_formatted
Fix for SULD.D
2021-07-22 21:51:37 -04:00
ameerj 6e4ed00e8d glsl: Remove output generic indexing for geometry stage 2021-07-22 21:51:37 -04:00
ameerj 3319879b23 glsl: Allow dynamic tracking of variable allocation 2021-07-22 21:51:37 -04:00
ameerj 1017c12427 glsl: Implement barriers 2021-07-22 21:51:37 -04:00
ameerj b3a46a3746 glsl: Implement image atomics and set layer
along with some more cleanup/oversight fixes
2021-07-22 21:51:37 -04:00
ameerj d01344c008 glsl: Fix image gather logic 2021-07-22 21:51:37 -04:00
ameerj fd55ca9828 glsl: Add cbuf access workaround for devices with component indexing bug 2021-07-22 21:51:37 -04:00
ameerj 8c9d420fa5 glsl: Use textureGrad fallback when EXT_texture_shadow_lod is unsupported 2021-07-22 21:51:37 -04:00
ameerj f56a276e79 emit_glsl_image: Use immediate offsets when possible 2021-07-22 21:51:37 -04:00
ameerj 8894af7c06 glsl: Fix <32-bit SSBO writes
and more cleanup
2021-07-22 21:51:37 -04:00
ameerj 4534294b7b glsl: Cleanup and address feedback 2021-07-22 21:51:37 -04:00
ameerj bef3820fb0 glsl: Refactor Global memory functions 2021-07-22 21:51:37 -04:00
ameerj dfa7abe1e7 glsl: Increase NUM_VARS that can be allocated
needed for HW:AoC.
2021-07-22 21:51:37 -04:00
ameerj 2e8da9d3be glsl: Implement Load/WriteGlobal
along with some other misc changes and fixes
2021-07-22 21:51:37 -04:00
ameerj d19a49485a glsl: Implement Images 2021-07-22 21:51:37 -04:00
ameerj 0c162d8b17 glsl: skip gl_ViewportIndex write if device does not support it 2021-07-22 21:51:37 -04:00
ameerj f54240823c glsl: Implement transform feedback 2021-07-22 21:51:37 -04:00
ameerj 922ea01123 glsl: Yet another gl_ViewportIndex fix attempt 2021-07-22 21:51:37 -04:00
ameerj 1736a7e162 glsl: Add gl_ViewportIndex out attribute 2021-07-22 21:51:37 -04:00
lat9nq 503159f29b emit_glsl_context_get_set: Remove unused function 2021-07-22 21:51:37 -04:00
ameerj 363e228778 glsl: Fix precise variable declaration
and add some more separation in the shader for better debugability when dumped
2021-07-22 21:51:37 -04:00
ameerj e866cece98 glsl: Implement tessellation shaders 2021-07-22 21:51:37 -04:00
ameerj 5c73bf453c glsl: Implement ImageGradient and other texture function variants 2021-07-22 21:51:37 -04:00
ameerj 8d8c104d4f glsl: Fix atomic SSBO offsets
and implement misc getters
2021-07-22 21:51:37 -04:00
ameerj 7374a8bf1d glsl: Implement geometry shaders 2021-07-22 21:51:37 -04:00
ameerj 43426d170c glsl: Use NotImplemented macro with function name output 2021-07-22 21:51:37 -04:00
ameerj aa06d8fa05 glsl: Implement gl_ViewportIndex
SSBU now working
2021-07-22 21:51:37 -04:00
ameerj badacf0a7e glsl: SHFL fix and prefer shift operations over divide in glsl shader 2021-07-22 21:51:37 -04:00
ameerj 00105f0615 glsl: Implement precise fp variable allocation 2021-07-22 21:51:37 -04:00
ameerj 1cc3be2135 HACK glsl: Write defaults to unused generic attributes 2021-07-22 21:51:37 -04:00
ameerj 12b9b923e1 glsl: Fix ssbo indexing and name shadowing between shader stages 2021-07-22 21:51:37 -04:00
ameerj c6615e9d05 glsl: implement set clip distance
and missed a diff in emit_glsl relating to var alloc ref counting
2021-07-22 21:51:37 -04:00
ameerj 33f63cdc22 glsl: Rework var alloc to not assign unused results 2021-07-22 21:51:37 -04:00
ameerj 8185a5ab34 glsl: Rework variable allocator to allow for variable reuse 2021-07-22 21:51:37 -04:00
ameerj 748e56e8a2 glsl: Fix ATOM and implement ATOMS 2021-07-22 21:51:37 -04:00
ameerj f91616b31a glsl: Use gl_SubGroupInvocationARB 2021-07-22 21:51:36 -04:00
ameerj ee44e94932 glsl: Implement VOTE for subgroup size potentially larger 2021-07-22 21:51:36 -04:00
ameerj 5a3864d8c4 glsl: Implement VOTE 2021-07-22 21:51:36 -04:00
ameerj 1e59e72a48 glsl: Implement ST{LS} 2021-07-22 21:51:36 -04:00
ameerj d7213c862e glsl: Implement more instructions used by SMO 2021-07-22 21:51:36 -04:00
ameerj 3795c56db6 glsl: Implement more instructions used by SMO 2021-07-22 21:51:36 -04:00
ameerj 26649eb889 glsl: Fix GetAttribute return values
fixes font rendering issues as these were used to index into the ssbos
2021-07-22 21:51:36 -04:00
ameerj 8a7d7d16c8 glsl: minor cleanup 2021-07-22 21:51:36 -04:00
ameerj 0ac1a68a36 glsl: Fix and implement rest of cbuf access 2021-07-22 21:51:36 -04:00
ameerj 0b8e65125a glsl: Implement TXQ and other misc changes 2021-07-22 21:51:36 -04:00
ameerj 5a4af6cf14 glsl: TLD4 implementation 2021-07-22 21:51:36 -04:00
ameerj 81c2595a33 glsl: Implement TLD instruction 2021-07-22 21:51:36 -04:00
ameerj db039e6271 glsl: Implement TEXS 2021-07-22 21:51:36 -04:00
ameerj b3253f6f44 glsl: Cleanup texture functions 2021-07-22 21:51:36 -04:00
lat9nq fc7edccbc1 shader_recompiler: GCC fixes 2021-07-22 21:51:36 -04:00
ameerj 08935e289f glsl: Implement TEX depth functions 2021-07-22 21:51:36 -04:00
ameerj b055e4a91e glsl: Implement TEX ImageSample functions 2021-07-22 21:51:36 -04:00
ameerj 8c9c79a8c6 glsl: Rework Shuffle emit instructions to align with SPIR-V 2021-07-22 21:51:36 -04:00
ameerj a68609b4f8 glsl: Better Storage access and wip warps 2021-07-22 21:51:36 -04:00
ameerj a28096cb70 glsl: Fix integer conversions, implement clamp CC 2021-07-22 21:51:36 -04:00
ameerj fa06331601 glsl: Implement IADD CC 2021-07-22 21:51:36 -04:00
ameerj 54778aa10a glsl: SSBO access fixes and wip SampleExplicitLod implementation. 2021-07-22 21:51:36 -04:00
ameerj 72974388fb glsl: WIP var forward declaration
to fix Loop control flow.
2021-07-22 21:51:36 -04:00
ameerj c797a0c5a5 glsl: Fix bindings, add some CC ops 2021-07-22 21:51:36 -04:00
ameerj e6a0f0f384 glsl: remove unused headers 2021-07-22 21:51:36 -04:00
ameerj b96d76fa7e glsl: Implement derivatives and YDirection
plus some other misc additions/changed
2021-07-22 21:51:36 -04:00
ameerj ac6135774f glsl: Fix non-immediate buffer access
and many other misc implementations
2021-07-22 21:51:36 -04:00
ameerj 2328b0b2a8 glsl: textures wip 2021-07-22 21:51:36 -04:00
ameerj 32328acc39 glsl: Implement some attribute getters and setters 2021-07-22 21:51:36 -04:00
ameerj c8b2a5a4f3 glsl: Track S32 atomics 2021-07-22 21:51:36 -04:00
ameerj ee45d46f9e glsl: Update phi node management 2021-07-22 21:51:36 -04:00
ameerj 4eb02b106f glsl: Fix floating point compare ops
Logic for ordered/unordered ops was wrong.
2021-07-22 21:51:36 -04:00
ameerj ce2ddb7d69 glsl: Query GL Device for FP16 extension support 2021-07-22 21:51:36 -04:00
ameerj 1d88049eaf glsl: Simply FP storage atomics 2021-07-22 21:51:36 -04:00
ameerj 0adc9d2fc1 glsl: F16x2 storage atomics 2021-07-22 21:51:36 -04:00
ameerj 5fa21197b9 glsl: Revert ssbo aliasing. Storage Atomics impl 2021-07-22 21:51:36 -04:00
ameerj 3d950a8d18 glsl: implement phi nodes 2021-07-22 21:51:36 -04:00
ameerj 659eecb295 glsl: Wip storage atomic ops 2021-07-22 21:51:36 -04:00
ameerj b3fce08191 glsl: Implement FCMP 2021-07-22 21:51:36 -04:00
ameerj 7febd59ce1 glsl: Add a more robust fp formatter 2021-07-22 21:51:36 -04:00
ameerj bf40d10805 glsl: More FP fixes 2021-07-22 21:51:36 -04:00
ameerj d7656077bf glsl: FP function fixes 2021-07-22 21:51:36 -04:00
ameerj 30f47ec831 glsl: More FP instructions/fixes 2021-07-22 21:51:36 -04:00
ameerj 1dae770c9d glsl: Add many FP32/64 instructions 2021-07-22 21:51:36 -04:00
ReinUsesLisp fc7cb28bc7 glsl: Fixup build issues 2021-07-22 21:51:36 -04:00
ameerj 1df4541247 glsl: Implement more Integer ops 2021-07-22 21:51:36 -04:00
ameerj fc36d45a97 glsl: Implement BF* 2021-07-22 21:51:36 -04:00
ameerj eea0726cd5 glsl: Implement a few Integer instructions 2021-07-22 21:51:36 -04:00
ameerj 0c315dae67 glsl: Use std::string_view for Emit function args. 2021-07-22 21:51:35 -04:00
ameerj b2cd8e4588 glsl: Pass IR::Inst& to Emit functions 2021-07-22 21:51:35 -04:00
ameerj c01220d25a glsl: INeg and IAdd negate tests 2021-07-22 21:51:35 -04:00
ameerj 6ee142d3e4 glsl: Reusable typed variables. IADD32 2021-07-22 21:51:35 -04:00
ameerj 690e6a79c7 glsl: Fix program linking and cbuf 2021-07-22 21:51:35 -04:00
ameerj 3355c467e0 glsl: Fix "reg" allocing
based on glasm with some tweaks
2021-07-22 21:51:35 -04:00
ameerj fda83fe3c5 glsl: Initial backend 2021-07-22 21:51:35 -04:00
ReinUsesLisp 04fed81921 spirv: Reduce log severity of mismatching denorm rules 2021-07-22 21:51:35 -04:00
ReinUsesLisp 574a99b9b3 shader: Fix loop safety to SSA pass 2021-07-22 21:51:35 -04:00
ReinUsesLisp eb7925b421 vk_rasterizer: Exit render passes on fragment barriers 2021-07-22 21:51:35 -04:00
Rodrigo Locatti 0ce45868ca vk_graphics_pipeline: Fix path with no VK_EXT_extended_dynamic_state 2021-07-22 21:51:35 -04:00
ReinUsesLisp ee69b7aa59 buffer_cache: Invalidate fast buffers on compute 2021-07-22 21:51:35 -04:00
ReinUsesLisp f40daa777e shader: Add logging 2021-07-22 21:51:35 -04:00
lat9nq 3a70b6c79b shader: Add shader loop safety check settings
Also add a setting for enable Nsight Aftermath.
2021-07-22 21:51:35 -04:00
ReinUsesLisp a56f9f4322 shader: Comment why the array component is not read in TMML 2021-07-22 21:51:35 -04:00
ReinUsesLisp 59a989f149 vulkan_device: Enable VK_EXT_vertex_input_dynamic_state 2021-07-22 21:51:35 -04:00
ReinUsesLisp cefa403eba vk_pipeline_cache: Skip cached pipelines with different dynamic state 2021-07-22 21:51:35 -04:00
ameerj 87a78640d7 main: Fix Open Transferable Shader Cache context item
Opens the new shader cache directory location for the specified title, if it exists.
2021-07-22 21:51:35 -04:00
ameerj 4c1067ef1c tmml: Remove index component from coords vec
The lod query functions exposed by the rendering API's do not make use of the texturearray layer indexing.
2021-07-22 21:51:35 -04:00
ReinUsesLisp 1805ba1763 vulkan: Add VK_EXT_vertex_input_dynamic_state support
Reduces the number of total pipelines generated on Vulkan.
Tested on Super Smash Bros. Ultimate.
2021-07-22 21:51:35 -04:00
ReinUsesLisp 8fae35f767 shader: Reorder shader cache directories 2021-07-22 21:51:35 -04:00
ReinUsesLisp 2e99f9ce1b vk_rasterizer: Implement first index 2021-07-22 21:51:35 -04:00
ReinUsesLisp 969f76707c vulkan: Use VK_EXT_provoking_vertex when available 2021-07-22 21:51:35 -04:00
ameerj 60b33bdc9f spirv/convert: Catch more signed operations oversights
The sign bit on integers of size < 32 was not properly preserved in casts
2021-07-22 21:51:35 -04:00
ReinUsesLisp 4fedf2c20a spirv/convert: Catch more broken signed operations on Nvidia OpenGL
BitCast U32 to S32 before converting to float on drivers with broken
signed operations.
2021-07-22 21:51:35 -04:00
ameerj 6e65f16895 gl_buffer_cache: Use unorm internal formats for snorm texture buffer views
Fixes black textures in UE4 games
2021-07-22 21:51:35 -04:00
ReinUsesLisp 09c4a71dd4 shader_environment: Fix local memory size calculations 2021-07-22 21:51:35 -04:00
ReinUsesLisp 5292190c8d buffer_cache: Fix copy based uniform bindings tracking 2021-07-22 21:51:35 -04:00
ameerj 1bbecac1d2 shader_environment: Add shader_local_memory_crs_size to local memory size
Fixes DOOM 2016 missing local memory
2021-07-22 21:51:35 -04:00
ReinUsesLisp 8393ea343f gl_texture_cache: Create image storage views
Fixes SULD.D tests.
2021-07-22 21:51:35 -04:00
ReinUsesLisp 0b6f8eea5a gl_shader_util: Move shader utility code to a separate file 2021-07-22 21:51:35 -04:00
ReinUsesLisp ca6dbc7c49 gl_shader_cache: Store workers in shader cache object 2021-07-22 21:51:35 -04:00
ReinUsesLisp b420b97025 vk_pipeline_cache,shader_notify: Add shader notifications 2021-07-22 21:51:35 -04:00
ReinUsesLisp 1dccf005e1 vk_pipeline_cache: Add asynchronous shaders 2021-07-22 21:51:35 -04:00
ReinUsesLisp 420ec60284 vk_rasterizer: Flush work on clear and dispatches 2021-07-22 21:51:34 -04:00
FernandoS27 72c3d368cf DMA: Restrict optimised path for BlockToLinear further. 2021-07-22 21:51:34 -04:00
ReinUsesLisp 41737ccae4 vk_swapchain: Handle outdated swapchains
Fixes pixelated presentation on Intel devices.
2021-07-22 21:51:34 -04:00
FernandoS27 be4d1c9b95 shader: Fix VertexA Shaders. 2021-07-22 21:51:34 -04:00
ReinUsesLisp 64dfb4220f shader: Add 2D and 3D variants to SUATOM and SURED
Used by Claybook.
2021-07-22 21:51:34 -04:00
ReinUsesLisp 73fb56fe7e vk_buffer_cache: Handle null texture buffers
Fixes a crash on Age of Calamity cutscenes.
2021-07-22 21:51:34 -04:00
ReinUsesLisp 11fab60557 nsight_aftermath_tracker: Fix SPIR-V module writes 2021-07-22 21:51:34 -04:00
ReinUsesLisp 99e3490f64 vk_pipeline_cache: Set support_derivative_control to true 2021-07-22 21:51:34 -04:00
ReinUsesLisp 1dd4302fac shader: Avoid CPU side undefined behavior on I2F 2021-07-22 21:51:34 -04:00
ReinUsesLisp 5fa6d7a3b9 glasm: Use ARB_derivative_control conditionally 2021-07-22 21:51:34 -04:00
ReinUsesLisp 535fb4e6b5 buffer_cache: Reduce uniform buffer size from shader usage
Increases performance significantly on certain titles.
2021-07-22 21:51:34 -04:00
ReinUsesLisp 914bc0deb9 transform_feedback: Read buffer stride from index instead of layout 2021-07-22 21:51:34 -04:00
ReinUsesLisp bbc537fec0 fixed_pipeline_state: Use regular for loop instead of ranges for perf
MSVC generates better code for it.
2021-07-22 21:51:34 -04:00
ReinUsesLisp 5593b029d4 vk_swapchain: Avoid recreating the swapchain on each frame
Recreate only when requested (or sRGB is changed) instead of tracking
the frontend's size. That size is still used as a hint.
2021-07-22 21:51:34 -04:00
lat9nq 6e9eab2c32 emit_glasm_context_get_set: Remove unused variable 2021-07-22 21:51:34 -04:00
ReinUsesLisp 34d1a2ffe5 shader,glasm: Implement legacy texcoord loads 2021-07-22 21:51:34 -04:00
ReinUsesLisp b9a0a742fa glasm: Implement legacy varyings 2021-07-22 21:51:34 -04:00
ReinUsesLisp bebebf3fa8 shader: Track legacy varyings 2021-07-22 21:51:34 -04:00
ReinUsesLisp 4744a21bd4 shader: Add support for "negative" and unaligned offsets
"Negative" offsets don't exist. They are shown as such due to a bug in
nvdisasm.

Unaligned offsets have been proved to read the aligned offset. For
example, when reading an U32, if the offset is 6, the offset read will
be 4.
2021-07-22 21:51:34 -04:00
ReinUsesLisp e3aedea124 shader: Implement ISCADD32I 2021-07-22 21:51:34 -04:00
ReinUsesLisp d27dbec3e6 spirv: Fix output generics with components 2021-07-22 21:51:34 -04:00
ReinUsesLisp ccea376e34 vulkan: Conditionally use shaderInt16
Add support for Polaris AMD devices.
2021-07-22 21:51:34 -04:00
ReinUsesLisp 7207ef07f4 vulkan: Enable depth bounds and use it conditionally
Intel devices pre-Xe don't support this.
2021-07-22 21:51:34 -04:00
ReinUsesLisp e7bf692f9e vk_buffer_cache: Add transform feedback usage to buffers 2021-07-22 21:51:34 -04:00
ReinUsesLisp 9750e0410b opengl: Declare fragment outputs even if they are not used
Fixes Ori and the Blind Forest's menu on GLASM. For some reason
(probably high level optimizations) it is not sanitized on SPIR-V for
OpenGL. Vulkan is unaffected by this change.
2021-07-22 21:51:34 -04:00
ReinUsesLisp ebfbb5e09f buffer_cache: Mark uniform buffers as dirty if any enable bit changes 2021-07-22 21:51:34 -04:00
ReinUsesLisp 142d4f3f6e shader: Always initialize up reference in structure control flow
Fixes ubsan issue.
2021-07-22 21:51:34 -04:00
ReinUsesLisp ae786ee784 vulkan_device: Enable float64 and int64 conditionally
Add Intel Xe support.
2021-07-22 21:51:34 -04:00
ReinUsesLisp 6e475617d5 shader: Fix ImageWrite indexing 2021-07-22 21:51:34 -04:00
ReinUsesLisp f7508aa014 spirv: Fix image and image buffer descriptor index usage 2021-07-22 21:51:34 -04:00
ReinUsesLisp bd96e0a436 glasm: Fix immediate texture coordinate 2021-07-22 21:51:34 -04:00
ReinUsesLisp 74df00415a shader: Clang-format secondary textures 2021-07-22 21:51:34 -04:00
ReinUsesLisp f19403bafa shader: Fix secondary textures 2021-07-22 21:51:34 -04:00
ameerj 6bb1f54fbb shader: Adhere to disk shader cache setting 2021-07-22 21:51:34 -04:00
ReinUsesLisp 8ea552e64e shader: Fix TMML queries 2021-07-22 21:51:34 -04:00
ReinUsesLisp ca3e927e35 shader: Fix FSwizzleAdd folding when going through phi nodes 2021-07-22 21:51:34 -04:00
ReinUsesLisp 7ad72d78dd shader/exception: Fix compilation errors on gcc 2021-07-22 21:51:34 -04:00
ReinUsesLisp 1a02dee23a glasm: Reduce reg allocation leaks from an exception to a log 2021-07-22 21:51:34 -04:00
ReinUsesLisp 60e44af24d texture_cache: Reduce invalid image/sampler error severity 2021-07-22 21:51:34 -04:00
ReinUsesLisp 672930b6c8 shader: Handle host exceptions 2021-07-22 21:51:34 -04:00
ReinUsesLisp 50e491f101 glasm: Use integer lod for TXQ 2021-07-22 21:51:33 -04:00
ReinUsesLisp e3d10ba821 glasm: Prepare XFB from state instead of global registers 2021-07-22 21:51:33 -04:00
ReinUsesLisp 5339775f96 glasm: Fix global memory fallbacks 2021-07-22 21:51:33 -04:00
ReinUsesLisp 0ca75be20a Revert "glasm: Skip phi moves on undefined instructions"
Causes regressions on Bowser's Fury.
2021-07-22 21:51:33 -04:00
ReinUsesLisp e607d856c2 glasm: Remove unintentional '\n' on Undef32 2021-07-22 21:51:33 -04:00
ReinUsesLisp df14567fcc glasm: Use storage buffers instead of global memory when possible 2021-07-22 21:51:33 -04:00
ReinUsesLisp ec19b0d7eb glasm: Implement Y direction 2021-07-22 21:51:33 -04:00
ReinUsesLisp 459e3b17e6 glasm: Skip phi moves on undefined instructions 2021-07-22 21:51:33 -04:00
ReinUsesLisp 91a375b557 glasm: Implement undef instructions 2021-07-22 21:51:33 -04:00
ReinUsesLisp 93b8943fae glasm: Fix global memory callbacks 2021-07-22 21:51:33 -04:00
ReinUsesLisp 58b5083052 gl_shader_cache: Add disk shader cache 2021-07-22 21:51:33 -04:00
ReinUsesLisp 205bf15e71 video_core,shader: Clang-format fixes 2021-07-22 21:51:33 -04:00
ReinUsesLisp ddb24146b6 gl_shader_cache: Rename Program abstractions into Pipeline 2021-07-22 21:51:33 -04:00
ReinUsesLisp 3e5b0c116d glasm: Release phi node registers after they are no longer needed 2021-07-22 21:51:33 -04:00
ReinUsesLisp d284ce48e2 glasm: Remove unintentionally committed fmt::prints 2021-07-22 21:51:33 -04:00
ReinUsesLisp 8d77a943cc glasm: Fix INeg32 on negative immediates 2021-07-22 21:51:33 -04:00
ReinUsesLisp 42a91d4366 glasm: Remove unnecessary value types 2021-07-22 21:51:33 -04:00
ReinUsesLisp 6bf6015548 glasm: Throw when there are register leaks 2021-07-22 21:51:33 -04:00
ReinUsesLisp 143db4b112 glasm: Catch more register leaks
Add support for null registers. These are used when an instruction has
no usages.

This comes handy when an instruction is only used for its CC value, with
the caveat of having to invalidate all pseudo-instructions before
defining the instruction itself in the register allocator. This commits
changes this.

Workaround a bug on Nvidia's condition codes conditional execution using
branches.
2021-07-22 21:51:33 -04:00
ReinUsesLisp a5ce5f4a65 glasm: Fix usage counting on phi nodes 2021-07-22 21:51:33 -04:00
ReinUsesLisp 921b6b48be gl_shader_cache: Do not flip tessellation on OpenGL 2021-07-22 21:51:33 -04:00
ReinUsesLisp 548871e127 gl_graphics_program: Fix texture buffer bindings 2021-07-22 21:51:33 -04:00
ReinUsesLisp 09ad2b5994 glasm: Implement global memory fallbacks 2021-07-22 21:51:33 -04:00
ReinUsesLisp 46edc93371 glasm: Implement int64 add and subtract 2021-07-22 21:51:33 -04:00
lat9nq 90e2710052 emit_glasm_context_get_set: Remove unused variable 2021-07-22 21:51:33 -04:00
ReinUsesLisp e9a5390a92 glasm: Implement indirect attribute loads 2021-07-22 21:51:33 -04:00
ReinUsesLisp 2e2d1986b1 glasm: Implement image atomics 2021-07-22 21:51:33 -04:00
ReinUsesLisp 9a2176f883 glasm: Reorder unreachable image atomic insts
Reorder them to the bottom of the file for readability.
2021-07-22 21:51:33 -04:00
ReinUsesLisp 26ba81b9bf glasm: Implement gl_Layer stores 2021-07-22 21:51:33 -04:00
ReinUsesLisp dd41025472 glasm: Implement SampleId 2021-07-22 21:51:33 -04:00
ReinUsesLisp 5f9dd18113 glasm: Implement IsHelperInvocation 2021-07-22 21:51:33 -04:00
ReinUsesLisp b0b43d2a66 glasm: Fix EmitVertex's optimization 2021-07-22 21:51:33 -04:00
ReinUsesLisp 712afb51d4 gl_shader_cache: Conditionally use viewport mask 2021-07-22 21:51:33 -04:00
ReinUsesLisp 94d3b4d7e3 gl_shader_cache,glasm: Conditionally use typeless image reads extension 2021-07-22 21:51:33 -04:00
ReinUsesLisp 8aa7240b7f gl_shader_cache: Improve GLASM error print logic 2021-07-22 21:51:33 -04:00
ReinUsesLisp 16c95ab56d glasm: Implement forced early Z 2021-07-22 21:51:33 -04:00
ReinUsesLisp 220e679fdf glasm: Set transform feedback state 2021-07-22 21:51:33 -04:00
ReinUsesLisp 06ae1bff4b video_core: Abstract transform feedback translation utility 2021-07-22 21:51:33 -04:00
ReinUsesLisp 9960abf482 glasm: Simplify patch reads 2021-07-22 21:51:33 -04:00
ReinUsesLisp 8499797b68 glasm: Fix output patch reads
With this, Luigi's Mansion's sand renders properly.
2021-07-22 21:51:33 -04:00
ReinUsesLisp c45503bcb7 gl_shader_cache: Pass shader runtime information 2021-07-22 21:51:33 -04:00
ReinUsesLisp 9452fe2dc6 shader: Split profile and runtime information in separate structs 2021-07-22 21:51:33 -04:00
ameerj 22f261e954 emit_glasm_context_get_and_set.cpp: Add missing semicolons 2021-07-22 21:51:33 -04:00
ReinUsesLisp 83ff44531b glasm: Fix patch attribute declarations 2021-07-22 21:51:33 -04:00
ameerj 68fb25a223 glasm: Implement FSWZADD 2021-07-22 21:51:33 -04:00
ReinUsesLisp 8fa82725d1 glasm: Implement PrimitiveId attribute read 2021-07-22 21:51:33 -04:00
ReinUsesLisp 62f0368ce4 glasm: Implement clip distance stores 2021-07-22 21:51:32 -04:00
ReinUsesLisp 7d0baaa1c9 glasm: Fix tessellation input attributes 2021-07-22 21:51:32 -04:00
ReinUsesLisp 35db68e859 glasm: Add missing semicolon on tesscoord reading 2021-07-22 21:51:32 -04:00
ReinUsesLisp 53705226c6 glasm: Fix tessellation headers 2021-07-22 21:51:32 -04:00
ReinUsesLisp e8289a4e5f glasm: Add tessellation shader declarations 2021-07-22 21:51:32 -04:00
ReinUsesLisp 539a4ef59c glasm: Implement TessellationEvaluationPoint 2021-07-22 21:51:32 -04:00
ReinUsesLisp d4bc962012 gl_shader_manager: Zero initialize current assembly programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp bde1749606 gl_shader_manager: Remove unintentionally committed #pragma 2021-07-22 21:51:32 -04:00
ReinUsesLisp 2e5002f0bf glasm: Implement patch memory 2021-07-22 21:51:32 -04:00
ReinUsesLisp deb47706e9 glasm: Fix InvocationId declaration 2021-07-22 21:51:32 -04:00
ReinUsesLisp 24e3128420 glasm: Implement InvocationId 2021-07-22 21:51:32 -04:00
ReinUsesLisp 8db0554dc6 glasm: Optimize EmitVertex into EMIT 2021-07-22 21:51:32 -04:00
ReinUsesLisp 2268a150ce glasm: Implement geometry shader attribute reads 2021-07-22 21:51:32 -04:00
ReinUsesLisp 2c0780b9fa glasm: Properly declare attributes on geometry programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp 1efc77e510 glasm: Declare geometry program headers 2021-07-22 21:51:32 -04:00
ReinUsesLisp 1ec230efae renderer_opengl: State track compute assembly programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp e21983ce24 renderer_opengl: State track assembly programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp bbc4c8e6b6 glasm: Fix potential aliasing bug on cube array samples 2021-07-22 21:51:32 -04:00
ReinUsesLisp ea029df649 glasm: Implement ImageWrite 2021-07-22 21:51:32 -04:00
ReinUsesLisp 96d2dd78b0 glasm: Implement ImageRead 2021-07-22 21:51:32 -04:00
ReinUsesLisp 1426ed05b0 glasm: Implement EmitVertex and EndPrimitive 2021-07-22 21:51:32 -04:00
ReinUsesLisp 9c318fe58b glasm: Implement ImageGradient 2021-07-22 21:51:32 -04:00
ReinUsesLisp d95e33ac44 glasm: Implement 64-bit shifts 2021-07-22 21:51:32 -04:00
ReinUsesLisp 65e81c75e9 glasm: Implement barriers 2021-07-22 21:51:32 -04:00
ReinUsesLisp e63efa1b56 glasm: Fix compute stage name 2021-07-22 21:51:32 -04:00
ReinUsesLisp e59778c5e5 glasm: Fix phi instruction types 2021-07-22 21:51:32 -04:00
ReinUsesLisp 6493d900ce glasm: Implement PREC on relevant instructions 2021-07-22 21:51:32 -04:00
ReinUsesLisp 601f7bfd00 glasm: Implement stores to gl_ViewportIndex 2021-07-22 21:51:32 -04:00
ReinUsesLisp 0f180aaaa8 glasm: Implement gl_PointSize stores 2021-07-22 21:51:32 -04:00
ReinUsesLisp 05bd52b119 glasm: Implement gl_PointCoord 2021-07-22 21:51:32 -04:00
ReinUsesLisp 9dfad89884 glasm: Implement ImageQueryLod 2021-07-22 21:51:32 -04:00
ReinUsesLisp 1e64cbd23a glasm: Implement ImageFetch 2021-07-22 21:51:32 -04:00
ameerj a9a9dddd34 glasm: Implement IADD.CC 2021-07-22 21:51:32 -04:00
ReinUsesLisp abcdcde851 glasm: Implement BFE.CC 2021-07-22 21:51:32 -04:00
ReinUsesLisp cfa232a5a5 glasm: Implement SelectU1 2021-07-22 21:51:32 -04:00
ReinUsesLisp 5d24aadff0 HACK: Bind stages before and after bindings
Works around a bug where program parameters are only applied to the
current stage, and this one wasn't bound at the moment.

Affects all SSBO usages on GLASM.
2021-07-22 21:51:32 -04:00
ReinUsesLisp 089e3a82b3 glasm: Implement gl_WorkGroupID 2021-07-22 21:51:32 -04:00
ReinUsesLisp 50dda4164a glasm: Implement TXQ and improve texture info reads 2021-07-22 21:51:32 -04:00
ReinUsesLisp bf1ad74e8a glasm: Implement gl_FrongFacing attribute 2021-07-22 21:51:32 -04:00
ReinUsesLisp 0c82ee3444 glasm: Support textures used in more than one stage 2021-07-22 21:51:32 -04:00
ReinUsesLisp e4835094aa glasm: Implement textureGather instructions 2021-07-22 21:51:32 -04:00
ReinUsesLisp 98b4463dbb glasm: Implement gl_FragDepth and gl_SampleMask stores 2021-07-22 21:51:32 -04:00
ReinUsesLisp c455c92d76 glasm: Do not alias ConditionRef for now
Immediate condition refs where not handled correctly. Just move the
value for now.
2021-07-22 21:51:32 -04:00
ReinUsesLisp 5c6dc51c69 shader: Read branch conditions from an instruction
Fixes the identity removal pass.
2021-07-22 21:51:32 -04:00
ReinUsesLisp 43bca14217 glasm: Implement InstanceId and VertexId 2021-07-22 21:51:31 -04:00
ReinUsesLisp 7c24546332 glasm: Add missing return value on move assignment 2021-07-22 21:51:31 -04:00
ReinUsesLisp 64039f6f4b glasm: Fix aliased bitcasts ref counting 2021-07-22 21:51:31 -04:00
ReinUsesLisp 03fc0f42c6 glasm: Remove unintentional comma on vector insert 2021-07-22 21:51:31 -04:00
ReinUsesLisp 0b3a3f35e8 glasm: Implement TEX and TEXS instructions
Remove lod clamp from texture instructions with lod, as this is not
needed (nor supported).
2021-07-22 21:51:31 -04:00
ReinUsesLisp 3d82b30141 glasm: Add support for non-2D texture samples 2021-07-22 21:51:31 -04:00
ReinUsesLisp 9ddbdd90e1 glasm: Reorder unreachable image instructions to the bottom 2021-07-22 21:51:31 -04:00
ReinUsesLisp 771490ebac glasm: Add support for texture offsets 2021-07-22 21:51:31 -04:00
ReinUsesLisp 009721f477 glasm: Improve texture sampling instructions 2021-07-22 21:51:31 -04:00
ReinUsesLisp 22fb9cc538 emit_glasm: Enable ARB_draw_buffers when needed 2021-07-22 21:51:31 -04:00
ReinUsesLisp 059e91d5da emit_glasm: Add support for reading position attributes 2021-07-22 21:51:31 -04:00
lat9nq 69210028b4 shader_recompiler: GCC fixes
Fixes members of unnamed union not being accessible, and one function
without a declaration.
2021-07-22 21:51:31 -04:00
ameerj be403ea956 glasm: Implement rest of shared mem 2021-07-22 21:51:31 -04:00
ReinUsesLisp e45e4d02d3 opengl: Initial (broken) support to GLASM shaders 2021-07-22 21:51:31 -04:00
ReinUsesLisp f2ab3993eb shader: Use a non-trivial dummy to construct ASL node union 2021-07-22 21:51:31 -04:00
ReinUsesLisp 6be1db8873 emit_spirv: Jump to loop body with local variable
Silence unused variable warning
2021-07-22 21:51:31 -04:00
ReinUsesLisp 87c847ddc3 glasm: Implement derivative instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 6a524ebac6 glasm: Initial (broken) implementation of TEX on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp b31edad7a9 glasm: Implement some graphics instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 58cf7baaea glasm: Add Void type to GLASM values 2021-07-22 21:51:31 -04:00
ReinUsesLisp 6758e3d946 glasm: Add graphics specific shader declarations to GLASM 2021-07-22 21:51:31 -04:00
ameerj d0c4cca02d glasm: Implement local memory for glasm 2021-07-22 21:51:31 -04:00
ReinUsesLisp cb344497a7 emit_spirv: Add missing block in case 2021-07-22 21:51:31 -04:00
ReinUsesLisp f2ae32fa76 glasm: Initial implementation of phi nodes on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 55a293a9c8 glasm: Write result to scalar on integer comparison instructions 2021-07-22 21:51:31 -04:00
ReinUsesLisp ffdaa42529 glasm: Declare NV_shader_thread_group when needed 2021-07-22 21:51:31 -04:00
ReinUsesLisp f132d214a1 vk_update_descriptor: Properly initialize payload on the update descriptor queue 2021-07-22 21:51:31 -04:00
ReinUsesLisp 03f6d424ce glasm: Rework control flow introducing a syntax list
This commit regresses VertexA shaders, their transformation pass has to
be adapted to the new control flow.
2021-07-22 21:51:31 -04:00
ameerj 8a556b49cf glasm: Implement Storage atomics
StorageAtomicExchangeU64 is failing test seemingly due to failure storing 64-bit
result into the register
2021-07-22 21:51:31 -04:00
ReinUsesLisp 8331e533f4 glasm: Ensure reg alloc order across compilers on GLASM
Use a struct constructor to serialize register allocation arguments to
ensure registers are allocated in the same order regardless of the
compiler used.

The A and B functions can be called in any order when passed as
arguments to "foo":

  foo(A(), B())

But the order is guaranteed for curly-braced constructor calls in
classes:

  Foo{A(), B()}

Use this to get consistent behavior.
2021-07-22 21:51:31 -04:00
ReinUsesLisp d9a11b2388 glasm: Enable unintentionally disabled register aliasing on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 3e7dbc81f5 glasm: Review all GLASM insts to be aware of register aliasing 2021-07-22 21:51:31 -04:00
ReinUsesLisp 7273fcab95 glasm: Implement shuffle and vote instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 3e0e8c952d glasm: Add MUFU instructions to GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 8a77a1426b glasm: Implement IAbs64 and INeg64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp cef625a9b2 shader: Add floating-point rounding to I2F 2021-07-22 21:51:31 -04:00
ReinUsesLisp 00a7d4add9 glasm: Properly clamp Fp64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp cfff5bad59 glasm: Fix register allocation when moving immediate on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp c5055cade9 glasm: Implement SelectU64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 56b7f92b56 glasm: Fix clamps so the min value has priority on NAN on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp b5b5006016 glasm: Fix moving U64 immediates to registers in GLASM 2021-07-22 21:51:31 -04:00
ameerj 55801889e1 glasm: Implement storage atomic ops 2021-07-22 21:51:31 -04:00
ReinUsesLisp cbac486530 glasm: Add conversion instructions to GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp db3a10b384 glasm: Add fp min/max insts and fix store for fp64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 763b4a8b16 glasm: Add logical instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp 1f320a9d79 glasm: Remove duplicated Fp64 pack instructions on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 06bd9acf07 glasm: Remove unnecesary new white space on Clamp GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 45be6d11cc glasm: Add floating-point comparisons on GLASM 2021-07-22 21:51:30 -04:00
ameerj fd6393cb14 emit_glasm: Implement more integer alu ops 2021-07-22 21:51:30 -04:00
ameerj c13b6d8f86 glasm: Reimplement bitwise ops and BFI/BFE 2021-07-22 21:51:30 -04:00
ReinUsesLisp fc009ca296 glasm: Initial GLASM fp64 support 2021-07-22 21:51:30 -04:00
ReinUsesLisp 8de3f88656 glasm: Implement GLASM fp16 packing and move bitwise insns 2021-07-22 21:51:30 -04:00
ReinUsesLisp de15d41257 glasm: Remove unused functions left from rebase 2021-07-22 21:51:30 -04:00
ReinUsesLisp 7101c374c7 glasm: Specify namespace when using FormatTo 2021-07-22 21:51:30 -04:00
ReinUsesLisp 8d20355a93 glasm: Implement more GLASM composite instructions 2021-07-22 21:51:30 -04:00
ReinUsesLisp d5c0c34383 vk_pipeline_cache: Enable int8 and int16 types on Vulkan 2021-07-22 21:51:30 -04:00
ReinUsesLisp 04ed27a997 glasm: Make GLASM aware of types 2021-07-22 21:51:30 -04:00
ameerj 94ee083286 glasm: Use CMP.S for Select32
also fixes ADD and SUB to use U modifier
2021-07-22 21:51:30 -04:00
ameerj b27f30fa2e glasm: Implement more logical ops 2021-07-22 21:51:30 -04:00
ameerj 779ff6918b glasm: Implement BFI, BFE
Along with implementations of common instructions along the way
2021-07-22 21:51:30 -04:00
ReinUsesLisp 9d7312e780 glasm: Use BitField instead of C bitfields 2021-07-22 21:51:30 -04:00
ReinUsesLisp fdd87ffdb7 glasm: Remove unused argument in identity instructions on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 33a769ea26 gl_rasterizer: Flush L2 caches before glFlush on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp 826796b51f glasm: Initial GLASM compute implementation for testing 2021-07-22 21:51:30 -04:00
ReinUsesLisp 6c0a696179 glasm: Implement basic GLASM instructions 2021-07-22 21:51:30 -04:00
ReinUsesLisp 03f17ebc43 glasm: Changes to GLASM register allocator and emit context 2021-07-22 21:51:30 -04:00
ReinUsesLisp 99ae172ef2 vk_scheduler: Use locks instead of SPSC a queue
This tries to fix a data race where we'd wait forever for the GPU.
2021-07-22 21:51:30 -04:00
ReinUsesLisp 3fca53bce8 vk_query_cache: Wait before reading queries 2021-07-22 21:51:30 -04:00
ReinUsesLisp dbe29b8bb6 vk_master_semaphore: Use fetch_add to increase master semaphore tick 2021-07-22 21:51:30 -04:00
ReinUsesLisp d9b9c10f32 glasm: Add GLASM backend infrastructure 2021-07-22 21:51:30 -04:00
ameerj a739b6933e shader: ISET.X implementation 2021-07-22 21:51:30 -04:00
ReinUsesLisp 947a36e79e gl_shader_cache: Remove code unintentionally committed 2021-07-22 21:51:30 -04:00
ReinUsesLisp 75adb54e79 shader: Fixup SPIR-V emit header namespaces 2021-07-22 21:51:30 -04:00
ReinUsesLisp 055db41f19 Move SPIR-V emission functions to their own header 2021-07-22 21:51:30 -04:00
FernandoS27 007a11014c shader: Optimize NVN Fallthrough 2021-07-22 21:51:30 -04:00
FernandoS27 fb20effc51 shader: Stub SR_AFFINITY 2021-07-22 21:51:30 -04:00
ameerj 455872a4af shader: Implement Int32 SUATOM/SURED 2021-07-22 21:51:30 -04:00
ReinUsesLisp 5ca5988c63 shader: Initial OpenGL implementation 2021-07-22 21:51:30 -04:00
ReinUsesLisp 5ad12292a6 spirv: Be aware of NAN unaware drivers 2021-07-22 21:51:30 -04:00
ReinUsesLisp 21a5bd332c spirv: Add SSBO read fallbacks when no aliasing is available 2021-07-22 21:51:29 -04:00
ReinUsesLisp 1922cbb84c spirv: Add OpKill fallback to demote 2021-07-22 21:51:29 -04:00
ReinUsesLisp d2e6291c0e spirv: Do not enable ShaderLayer
This is enabled by an extension instead of the capability.
2021-07-22 21:51:29 -04:00
ReinUsesLisp b2fe282ad3 spirv: Enable DemoteToHelperInvocationEXT only when supported 2021-07-22 21:51:29 -04:00
ReinUsesLisp 2ee532c9bc spirv: Use OriginLowerLeft when requested 2021-07-22 21:51:29 -04:00
ReinUsesLisp f6c09c27b1 spirv: Only add image operands mask when needed 2021-07-22 21:51:29 -04:00
ReinUsesLisp 59668831b7 spirv: Workaround image unsigned offset bug
Workaround bug on Nvidia's OpenGL SPIR-V compiler when using unsigned
texture offsets.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 4a76786740 spirv: Add int8 and int16 capabilities only when supported 2021-07-22 21:51:29 -04:00
ReinUsesLisp 8accb076ee spirv: Add integer clamping workarounds
Workaround more bugs on Nvidia's OpenGL SPIR-V compiler.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 55ff0ab463 spirv: Implement int8 and int16 conversion fallbacks 2021-07-22 21:51:29 -04:00
ReinUsesLisp 884a937022 spirv: Support OpenGL uniform buffers and change bindings 2021-07-22 21:51:29 -04:00
ReinUsesLisp 2bdce72c92 spirv: Desambiguate descriptor names
Worksaround a bug on Nvidia's OpenGL SPIR-V compiler where names are
used for name matching.
2021-07-22 21:51:29 -04:00
ReinUsesLisp bfb08e709c shader: Add OpenGL shader profile options 2021-07-22 21:51:29 -04:00
ReinUsesLisp 4c5f8d123d shader: Remove shader util 2021-07-22 21:51:29 -04:00
FernandoS27 6aff9b4476 shader: Address feedback 2021-07-22 21:51:29 -04:00
FernandoS27 a2fac91c47 shader: Implement VertexA stage 2021-07-22 21:51:29 -04:00
FernandoS27 cb0587f841 shader: Implement delegation of Exit to dispatcher on CFG 2021-07-22 21:51:29 -04:00
ReinUsesLisp 806c5a3739 vk_graphics_pipeline: Fix texture buffer descriptors 2021-07-22 21:51:29 -04:00
ameerj 031e91e7e5 shader: Fix IADD3.CC 2021-07-22 21:51:29 -04:00
ReinUsesLisp b62b8f2e84 vk_scheduler: Allow command submission on worker thread
This changes how Scheduler::Flush works. It queues the current command
buffer to be sent to the GPU but does not do it immediately. The Vulkan
worker thread takes care of that. Users will have to use
Scheduler::Flush + Scheduler::WaitWorker to get the previous behavior.

Scheduler::Finish is unchanged.

To avoid waiting on work never queued, Scheduler::Wait sends the current
command buffer if that's what the caller wants to wait.
2021-07-22 21:51:29 -04:00
ReinUsesLisp eb7ef12b95 vk_compute_pass: Fix -Wshadow warning 2021-07-22 21:51:29 -04:00
ReinUsesLisp ed6c131c92 shader: Move pipeline cache logic to separate files
Move code to separate files to be able to reuse it from OpenGL. This
greatly simplifies the pipeline cache logic on Vulkan.

Transform feedback state is not yet abstracted and it's still
intrusively stored inside vk_pipeline_cache. It will be moved when
needed on OpenGL.
2021-07-22 21:51:29 -04:00
ReinUsesLisp fd502a4d43 vulkan: Defer descriptor set work to the Vulkan thread
Move descriptor lookup and update code to a separate thread. Delaying
this removes work from the main GPU thread and allows creating
descriptor layouts on another thread. This reduces a bit the workload
of the main thread when new pipelines are encountered.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 896a4fe9b5 vulkan: Rework descriptor allocation algorithm
Create multiple descriptor pools on demand. There are some degrees of
freedom what is considered a compatible pool to avoid wasting large
pools on small descriptors.
2021-07-22 21:51:29 -04:00
ReinUsesLisp a3b025c6a4 vk_graphics_pipeline: Generate specialized pipeline config functions and improve code 2021-07-22 21:51:29 -04:00
ReinUsesLisp 565d922014 shader: Accelerate pipeline transitions and use dirty flags for shaders 2021-07-22 21:51:29 -04:00
ameerj 90ff800962 shader: Fix BFE s32 undefined check
Our unit tests were hitting this exception.
2021-07-22 21:51:29 -04:00
ReinUsesLisp ecd481a0ca vk_compute_pipeline: Fix index comparison oversight on compute texture buffers 2021-07-22 21:51:29 -04:00
ReinUsesLisp 1f54f1ff26 shader: Fix error checking in bitfieldExtract and implement bitfieldInsert folding 2021-07-22 21:51:29 -04:00
ReinUsesLisp d835906b9f vulkan_device: Require shaderClipDistance and shaderCullDistance features 2021-07-22 21:51:29 -04:00
ReinUsesLisp 1f47476089 vk_graphics_pipeline: Guard against non-tessellation pipelines using patches 2021-07-22 21:51:29 -04:00
ReinUsesLisp e37ec2790d shader: Fix storage type when reading patches on tess control 2021-07-22 21:51:29 -04:00
ReinUsesLisp c8b0377a67 shader: Fix VMNMX selector B 2021-07-22 21:51:29 -04:00
Rodrigo Locatti 72b10edd15 shader: Fix bugs and build issues on GCC 2021-07-22 21:51:29 -04:00
ReinUsesLisp fa439cb6df shader: Fix render targets with null attachments 2021-07-22 21:51:29 -04:00
ReinUsesLisp 763adf56a6 shader: Increase the maximum number of storage buffers
Compute shaders spill uniform buffers on storage buffers, increasing the
expected number.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 1d861a6e90 shader: Remove identity removal pass for better build times 2021-07-22 21:51:29 -04:00
ReinUsesLisp 4eec191801 shader: Add more strict validation the pass 2021-07-22 21:51:29 -04:00
ReinUsesLisp 21d50bd9bd shader: Fix forward referencing identity instructions when inserting phi 2021-07-22 21:51:29 -04:00
ReinUsesLisp 3c80ebf1e2 shader: Remove invalidated blocks in dead code elimination pass 2021-07-22 21:51:29 -04:00
ReinUsesLisp 12d7acf707 shader: Add missing UndoUse case for GetSparseFromOp 2021-07-22 21:51:29 -04:00
ReinUsesLisp 9b691a28d8 shader: Require dual source blending 2021-07-22 21:51:29 -04:00
ReinUsesLisp 04e042d3b3 shader: Simplify code in opcodes.h to fix Intellisense
Avoid using std::array to fix Intellisense not properly compiling this
code and disabling itself on all files that include it.

While we are at it, change the code to use u8 instead of size_t for the
number of instructions in an opcode.
2021-07-22 21:51:29 -04:00
ReinUsesLisp 052317e748 shader: Implement indexed textures 2021-07-22 21:51:28 -04:00
ameerj 3089fb1e2a shader: Refactor atomic_operations_global_memory 2021-07-22 21:51:28 -04:00
ameerj 8202ace3e9 shader: add missing include guard in half_floating_point_helper.h 2021-07-22 21:51:28 -04:00
ReinUsesLisp 172942911a shader: Fix gcc warnings 2021-07-22 21:51:28 -04:00
ReinUsesLisp 16a869571e shader: Inline common Value getters 2021-07-22 21:51:28 -04:00
ReinUsesLisp 9f5c43dd53 shader: Intrusively store in a block if it's sealed or not 2021-07-22 21:51:28 -04:00
ReinUsesLisp fecb87ebc8 cmake: Link to common in shader_recompiler 2021-07-22 21:51:28 -04:00
ReinUsesLisp 3c1229a7c5 shader: Improve goto removal algorithm complexity
Find sibling node containing a nephew searching from the nephew itself
instead of the uncle.
2021-07-22 21:51:28 -04:00
ReinUsesLisp 1a44a5cafa shader: Use memset to reset instruction arguments 2021-07-22 21:51:28 -04:00
ReinUsesLisp 9edc2bd70f shader: Inline common Value functions into the header 2021-07-22 21:51:28 -04:00
ReinUsesLisp 6236b611cf shader: Move microinstruction header to the value header 2021-07-22 21:51:28 -04:00
ReinUsesLisp 7769517fc0 shader: Move siblings check to a separate function and comment them out 2021-07-22 21:51:28 -04:00
ReinUsesLisp 7bf134b294 shader: Intrusively store register values in block for SSA pass 2021-07-22 21:51:28 -04:00
ReinUsesLisp 3a39124359 shader: Inline common Opcode and Inst functions 2021-07-22 21:51:28 -04:00
ReinUsesLisp b6bd6a5bce shader: Inline common IR::Block methods 2021-07-22 21:51:28 -04:00
ReinUsesLisp 8d1327bf78 shader: Use a small_vector for phi blocks 2021-07-22 21:51:28 -04:00
ReinUsesLisp c44139cda0 shader: Calculate number of arguments in an opcode at compile time 2021-07-22 21:51:28 -04:00
ReinUsesLisp 7066f9ef7b shader: Implement D3D samplers 2021-07-22 21:51:28 -04:00
ReinUsesLisp 5c187201ec shader: Add constant propagation for arithmetic right shifts 2021-07-22 21:51:28 -04:00
ReinUsesLisp 56aae7efcf shader: Simplify code for local memory 2021-07-22 21:51:28 -04:00
ReinUsesLisp e54171c1a9 shader: Add NVN storage buffer fallbacks
When we can't track the SSBO origin of a global memory instruction,
leave it as a global memory operation and assume these pointers are in
the NVN storage buffer slots, then apply a linear search in the shader's
runtime.
2021-07-22 21:51:28 -04:00
ReinUsesLisp eb7a932952 spirv: Fix ViewportMask 2021-07-22 21:51:28 -04:00
ameerj 688c89590c spirv: Replace Constant/ConstantComposite with Const helper 2021-07-22 21:51:28 -04:00
FernandoS27 4a97dd4483 shader: Address feedback 2021-07-22 21:51:28 -04:00
FernandoS27 b85c9d8e84 shader: Implement F2F (Imm) 2021-07-22 21:51:28 -04:00
FernandoS27 fbb642f433 shader: Implement IADD3.CC/.X 2021-07-22 21:51:28 -04:00
FernandoS27 f1a3f449d6 shader: Address feedback 2021-07-22 21:51:28 -04:00
FernandoS27 2f01c7fb62 shader: Add coarse derivatives 2021-07-22 21:51:28 -04:00
FernandoS27 b1e325f317 shader: Implement fine derivates constant propagation 2021-07-22 21:51:28 -04:00
FernandoS27 6c60109967 shader: Implement SR_Y_DIRECTION 2021-07-22 21:51:28 -04:00
ReinUsesLisp 99e6cd3916 shader: Fix Phi node types 2021-07-22 21:51:28 -04:00