Commit Graph

17487 Commits

Author SHA1 Message Date
lat9nq
09d6cc9943
Merge branch 'master' into fullscreen-enum 2021-07-25 15:31:33 -04:00
bunnei
7e272d3cd8
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
b5c3cb8763
Merge pull request #6709 from ameerj/screenshot-path
main: Fix screenshot filepath construction
2021-07-25 14:41:38 -04:00
bunnei
98b26b6e12
Merge pull request #6585 from ameerj/hades
Shader Decompiler Rewrite
2021-07-25 11:39:04 -07:00
ameerj
9dd35b7b66 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
c2aaf51370
Merge pull request #6699 from lat9nq/common-threads
common: Publically link to pthreads
2021-07-25 10:43:11 -07:00
bunnei
84b9c42642
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
c80ae87b4e 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
9dfbc9bdce 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
2c6e274b39 config, nvflinger: Add FPS cap setting
Allows finer tuning of the FPS limit.
2021-07-23 22:04:36 -04:00
bunnei
2656020608
Merge pull request #6551 from bunnei/improve-kernel-obj
Improve management of kernel objects
2021-07-23 21:23:56 -04:00
lat9nq
d8b00fd863 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
b11c81cc13 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
eb61824ea5 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
7f13104c17 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
a55ff22900 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
f6796cad9c 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
a741513e65 qt: Remove "experimental" from asynchronous shader building UI 2021-07-22 21:51:40 -04:00
ReinUsesLisp
3c6d440015 Revert "renderers: Disable async shader compilation"
This reverts commit 4a152767286717fa69bfc94846a124a366f70065.
2021-07-22 21:51:40 -04:00
ReinUsesLisp
8381490a04 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
258f35515d 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
4a82450c81 cmake: Remove shader cache version 2021-07-22 21:51:40 -04:00
ameerj
56478bc9ac shader: Fix disabled attribute default values 2021-07-22 21:51:40 -04:00
ameerj
c9528282d9 gl_device: Simplify GLASM setting logic 2021-07-22 21:51:40 -04:00
ameerj
56c30dd9e0 glsl: Simplify FCMP emission 2021-07-22 21:51:40 -04:00
ameerj
79d2684261 glsl: Update TessellationControl gl_in
Adheres to GL_ARB_separate_shader_objects requirements
2021-07-22 21:51:40 -04:00
ReinUsesLisp
e1ed218b41 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
fc7bed21b5 shader: Implement ISETP.X 2021-07-22 21:51:40 -04:00
ReinUsesLisp
bf2956d77a shader: Avoid usage of C++20 ranges to build in clang 2021-07-22 21:51:40 -04:00
ameerj
94af0a00f6 glsl: Clamp shared mem size to GL_MAX_COMPUTE_SHARED_MEMORY_SIZE 2021-07-22 21:51:40 -04:00
ReinUsesLisp
8c166c68d4 gl_shader_cache: Properly implement asynchronous shaders 2021-07-22 21:51:40 -04:00
lat9nq
49946cf780 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
4e4b8775b5 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
41493fbe89 renderers: Fix clang formatting 2021-07-22 21:51:40 -04:00
ReinUsesLisp
2235a51b5d shader: Manually convert from array<u32> to bitset instead of using bit_cast 2021-07-22 21:51:40 -04:00
ameerj
8390286a89 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
be54aad1c4 maxwell_to_vk: Add R16_SNORM 2021-07-22 21:51:40 -04:00
lat9nq
18fb9bdfa8 configure_graphics: Mark SPIR-V as Experimental, Mesa only 2021-07-22 21:51:40 -04:00
ameerj
41c6cb70f9 glsl: Fix tracking of info.uses_shadow_lod 2021-07-22 21:51:40 -04:00
ameerj
11f04f1022 shader: Ignore global memory ops on devices lacking int64 support 2021-07-22 21:51:40 -04:00
lat9nq
55233c2861 vulkan_device: Add missing include algorithm 2021-07-22 21:51:40 -04:00
ameerj
7277d7fe96 vulkan_device: Blacklist ampere devices from float16 math 2021-07-22 21:51:40 -04:00
ameerj
57f222c56e dual_vertex_pass: Clang format 2021-07-22 21:51:40 -04:00
ameerj
dbee32d302 gl_shader_cache: Fixes for async shaders 2021-07-22 21:51:40 -04:00
ReinUsesLisp
57171b23f9 vulkan_device: Enable VK_EXT_extended_dynamic_state on RADV 21.2 onward 2021-07-22 21:51:40 -04:00
ReinUsesLisp
8722668b3c 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
1b27a2b597 configure_graphics: Re-order vulkan device populating 2021-07-22 21:51:40 -04:00
lat9nq
2e5af95541 shader: GCC fmt 8.0.0 fixes 2021-07-22 21:51:40 -04:00
ameerj
b9069c7891 shader: Account for 33-bit IADD3 scenario 2021-07-22 21:51:40 -04:00
ReinUsesLisp
b21bf79bd2 shader: Only apply shift on register mode for IADD3 2021-07-22 21:51:39 -04:00
ReinUsesLisp
fba6bd92d4 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
5643a909bc shader: Fix disabled and unwritten attributes and varyings 2021-07-22 21:51:39 -04:00
ameerj
65daec8b75 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
8289eb108f opengl: Implement LOP.CC
Used by MH:Rise
2021-07-22 21:51:39 -04:00
ReinUsesLisp
f94f0be521 vk_graphics_pipeline: Implement smooth lines 2021-07-22 21:51:39 -04:00
ReinUsesLisp
57a8921e01 vk_graphics_pipeline: Implement line width 2021-07-22 21:51:39 -04:00
ReinUsesLisp
5b2b0634a1 spirv: Fix code emission when descriptor aliasing is unsupported
Fixes OpenGL.
2021-07-22 21:51:39 -04:00
lat9nq
fb9b1787f8 video_core: Enable GL SPIR-V shaders 2021-07-22 21:51:39 -04:00
lat9nq
1152d66ddd 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
00fa09dc45 glsl: Declare local memory in main 2021-07-22 21:51:39 -04:00
ameerj
f7352411f0 glsl: Add passthrough geometry shader support 2021-07-22 21:51:39 -04:00
ReinUsesLisp
8612b5fec5 shader: Use std::bit_cast instead of Common::BitCast for passthrough 2021-07-22 21:51:39 -04:00
ReinUsesLisp
8a3427a4c8 glasm: Add passthrough geometry shader support 2021-07-22 21:51:39 -04:00
ReinUsesLisp
7dafa96ab5 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
4f052a1f39 vk_graphics_pipeline: Implement conservative rendering 2021-07-22 21:51:39 -04:00
ReinUsesLisp
ecd6b4356b shader: Only verify shader when graphics debugging is enabled 2021-07-22 21:51:39 -04:00
ReinUsesLisp
395bed3a0a shader: Unify shader stage types 2021-07-22 21:51:39 -04:00
lat9nq
257d2aab74 lower_int64_to_int32: Add missing include 2021-07-22 21:51:39 -04:00
ReinUsesLisp
fb166b5ff4 shader: Emulate 64-bit integers when not supported
Useful for mobile and Intel Xe devices.
2021-07-22 21:51:39 -04:00
ReinUsesLisp
d8d5501459 shader: Add int64 to int32 lowering pass 2021-07-22 21:51:39 -04:00
ReinUsesLisp
04ef2160f9 shader: Teach global memory base tracker to follow vectors 2021-07-22 21:51:39 -04:00
ReinUsesLisp
97e80dda55 shader: Add constant propagation to integer vectors 2021-07-22 21:51:39 -04:00
ameerj
27ca8a0e13 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
4397053d5c shader: Remove IAbs64 2021-07-22 21:51:39 -04:00
ameerj
bc6e399ae3 glsl: Fix IADD CC 2021-07-22 21:51:39 -04:00
ameerj
a7536825df shader_recompiler: Fix IADD3 input partitioning 2021-07-22 21:51:39 -04:00
ReinUsesLisp
808ef97a08 shader: Move loop safety tests to code emission 2021-07-22 21:51:39 -04:00
ReinUsesLisp
3877918e96 gl_graphics_pipeline: Fix assembly shaders check for transform feedbacks 2021-07-22 21:51:39 -04:00
ameerj
cbce9ddd4a glsl: Remove frag color initialization 2021-07-22 21:51:39 -04:00
ameerj
3a2dd1b483 glasm: Implement SetAttribute ViewportMask 2021-07-22 21:51:39 -04:00
ReinUsesLisp
9bd0531384 gl_graphics_pipeline: Inline hash and operator== key functions 2021-07-22 21:51:39 -04:00
ReinUsesLisp
f5db8c7440 gl_shader_cache: Check previous pipeline before checking hash map
Port optimization from Vulkan.
2021-07-22 21:51:39 -04:00
ReinUsesLisp
218dedca1f gl_graphics_pipeline: Port optimizations from Vulkan pipelines 2021-07-22 21:51:39 -04:00
ameerj
1c648f176c 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
1d182fc0f5 shader: Calibrate loop safety threshold 2021-07-22 21:51:38 -04:00
ReinUsesLisp
df9b7e18f5 buffer_cache: Fix debugging leftover 2021-07-22 21:51:38 -04:00
Morph
cfbc85839d glsl: Add missing ; in EmitSetSampleMask
Fixes shader compilation in Okami HD
2021-07-22 21:51:38 -04:00
ReinUsesLisp
838d7e4ca5 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
9e066dcb15 glsl: Fix output varying initialization when transform feedback is used 2021-07-22 21:51:38 -04:00
ameerj
fcff19e0fa shaders: Allow shader notify when async shaders is disabled 2021-07-22 21:51:38 -04:00
ameerj
a0365217f5 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
0cd08b3e72 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
59fead3a47 spirv: Properly handle devices without int8 and int16 2021-07-22 21:51:38 -04:00
ReinUsesLisp
b5e78607ad spirv: Handle small storage buffer loads on devices with no support 2021-07-22 21:51:38 -04:00
ReinUsesLisp
ca67077ca8 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
ccbd24fe00 glsl: Fix cbuf component indexing bug falback 2021-07-22 21:51:38 -04:00
ReinUsesLisp
1091995f8e shader: Simplify MergeDualVertexPrograms 2021-07-22 21:51:38 -04:00
ReinUsesLisp
374eeda1a3 shader: Properly manage attributes not written from previous stages 2021-07-22 21:51:38 -04:00
ReinUsesLisp
892b8aa2ad glsl: Only declare fragment outputs on fragment shaders 2021-07-22 21:51:38 -04:00
ReinUsesLisp
0ffea97e2e shader: Split profile and runtime info headers 2021-07-22 21:51:38 -04:00
ReinUsesLisp
cbbca26d18 shader: Add support for native 16-bit floats 2021-07-22 21:51:38 -04:00
ReinUsesLisp
376aa94819 shader: Rename maxwell/program.h to translate_program.h 2021-07-22 21:51:38 -04:00
ReinUsesLisp
69f9b97e7e vulkan_device: Blacklist VK_EXT_vertex_input_dynamic_state on Intel 2021-07-22 21:51:38 -04:00
ameerj
12ef06ba8b 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
d36f667bc0 glsl: Address rest of feedback 2021-07-22 21:51:38 -04:00
ameerj
c5dfa0b630 glsl: Move gl_Position/generic attribute initialization to EmitProlgue 2021-07-22 21:51:38 -04:00
ameerj
3b339fbbf6 glsl: Conditionally use fine/coarse derivatives based on device support 2021-07-22 21:51:38 -04:00
ameerj
6eea88d614 glsl: Cleanup/Address feedback 2021-07-22 21:51:38 -04:00
ameerj
74f683787e gl_shader_cache: Implement async shaders 2021-07-22 21:51:38 -04:00
ameerj
ae4e452759 glsl: Add Shader_GLSL logging 2021-07-22 21:51:38 -04:00
ameerj
6c6a451d6a glsl: Add LoopSafety instructions 2021-07-22 21:51:38 -04:00
ameerj
a0d0704aff glsl: Conditionally add EXT_texture_shadow_lod 2021-07-22 21:51:38 -04:00
ameerj
5e7b2b9661 glsl: Add stubs for sparse queries and variable aoffi when not supported 2021-07-22 21:51:38 -04:00
ameerj
6aa1bf7b6f glsl: Implement legacy varyings 2021-07-22 21:51:38 -04:00
ameerj
ff3de0fb6b gl_shader_cache: Remove const from pipeline source arguments 2021-07-22 21:51:38 -04:00
ameerj
413eb6983f gl_shader_cache: Move OGL shader compilation to the respective Pipeline constructor 2021-07-22 21:51:38 -04:00
ameerj
39c29664f9 glsl: Minor cleanup 2021-07-22 21:51:38 -04:00
ameerj
427a2596a1 glsl: Fix Cbuf getters for F32 type 2021-07-22 21:51:38 -04:00
ameerj
7c82f20b52 glsl: Add immediate index oob checking for Cbuf getters 2021-07-22 21:51:38 -04:00
ameerj
84c86e03cd glsl: Refactor GetCbuf functions to reduce code duplication 2021-07-22 21:51:38 -04:00
ameerj
e81c73a874 glsl: Address more feedback. Implement indexed texture reads 2021-07-22 21:51:38 -04:00
ameerj
7d89a82a48 glsl: Remove Signed Integer variables 2021-07-22 21:51:38 -04:00
ameerj
4759db28d0 glsl: Address Rodrigo's feedback 2021-07-22 21:51:38 -04:00
ameerj
85399e119d glsl: Reorganize backend code, remove unneeded [[maybe_unused]] 2021-07-22 21:51:37 -04:00
ameerj
e7c8f8911f glsl: Implement SampleId and SetSampleMask
plus some minor refactoring of implementations
2021-07-22 21:51:37 -04:00
ameerj
d1a68f7997 glsl: Add gl_PerVertex in for GS 2021-07-22 21:51:37 -04:00
ameerj
a926695234 glsl: Use existing tracking for enabling EXT_shader_image_load_formatted 2021-07-22 21:51:37 -04:00
ameerj
14bd73db36 glsl: Enable early fragment tests 2021-07-22 21:51:37 -04:00
ameerj
6650c4799d gl_rasterizer: Add texture fetch barrier for fragments
Fixes flicker seen in XC2
2021-07-22 21:51:37 -04:00
ameerj
3f31a547e0 glsl: Implement more attribute getters and setters 2021-07-22 21:51:37 -04:00
ameerj
8bb8bbf4ae glsl: Implement fswzadd
and wip nv thread shuffle impl
2021-07-22 21:51:37 -04:00
ameerj
c542204113 glsl: Implement indexed attribute loads 2021-07-22 21:51:37 -04:00
ameerj
2a504b4765 glsl: Conditionally add GL_ARB_sparse_texture2 2021-07-22 21:51:37 -04:00
ameerj
970fc39d98 glsl: Rebase fixes 2021-07-22 21:51:37 -04:00
ameerj
fc0db612ab glsl: Conditionally use GL_EXT_shader_image_load_formatted
Fix for SULD.D
2021-07-22 21:51:37 -04:00
ameerj
fb839061fb glsl: Remove output generic indexing for geometry stage 2021-07-22 21:51:37 -04:00
ameerj
258106038e glsl: Allow dynamic tracking of variable allocation 2021-07-22 21:51:37 -04:00
ameerj
465903468e glsl: Implement barriers 2021-07-22 21:51:37 -04:00
ameerj
421847cf1e glsl: Implement image atomics and set layer
along with some more cleanup/oversight fixes
2021-07-22 21:51:37 -04:00
ameerj
d41aef03c7 glsl: Fix image gather logic 2021-07-22 21:51:37 -04:00
ameerj
35e78d558d glsl: Add cbuf access workaround for devices with component indexing bug 2021-07-22 21:51:37 -04:00
ameerj
747b8556a4 glsl: Use textureGrad fallback when EXT_texture_shadow_lod is unsupported 2021-07-22 21:51:37 -04:00
ameerj
d12f2b8ccf emit_glsl_image: Use immediate offsets when possible 2021-07-22 21:51:37 -04:00
ameerj
0a0b0a73d8 glsl: Fix <32-bit SSBO writes
and more cleanup
2021-07-22 21:51:37 -04:00
ameerj
34fdb6471d glsl: Cleanup and address feedback 2021-07-22 21:51:37 -04:00
ameerj
5355568a2d glsl: Refactor Global memory functions 2021-07-22 21:51:37 -04:00
ameerj
a68fabf6d5 glsl: Increase NUM_VARS that can be allocated
needed for HW:AoC.
2021-07-22 21:51:37 -04:00
ameerj
8d8ce24f20 glsl: Implement Load/WriteGlobal
along with some other misc changes and fixes
2021-07-22 21:51:37 -04:00
ameerj
af9696059c glsl: Implement Images 2021-07-22 21:51:37 -04:00
ameerj
6577a63d36 glsl: skip gl_ViewportIndex write if device does not support it 2021-07-22 21:51:37 -04:00
ameerj
f4799e8fa1 glsl: Implement transform feedback 2021-07-22 21:51:37 -04:00
ameerj
31147ffe69 glsl: Yet another gl_ViewportIndex fix attempt 2021-07-22 21:51:37 -04:00
ameerj
9f3970f837 glsl: Add gl_ViewportIndex out attribute 2021-07-22 21:51:37 -04:00
lat9nq
fc29de7d5b emit_glsl_context_get_set: Remove unused function 2021-07-22 21:51:37 -04:00
ameerj
59576b82a8 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
8c684b3e23 glsl: Implement tessellation shaders 2021-07-22 21:51:37 -04:00
ameerj
c7d085b505 glsl: Implement ImageGradient and other texture function variants 2021-07-22 21:51:37 -04:00
ameerj
68d075d1e8 glsl: Fix atomic SSBO offsets
and implement misc getters
2021-07-22 21:51:37 -04:00
ameerj
19247ba4fa glsl: Implement geometry shaders 2021-07-22 21:51:37 -04:00
ameerj
df53046d68 glsl: Use NotImplemented macro with function name output 2021-07-22 21:51:37 -04:00
ameerj
3a024b3026 glsl: Implement gl_ViewportIndex
SSBU now working
2021-07-22 21:51:37 -04:00
ameerj
b7561226ed glsl: SHFL fix and prefer shift operations over divide in glsl shader 2021-07-22 21:51:37 -04:00
ameerj
e10366974e glsl: Implement precise fp variable allocation 2021-07-22 21:51:37 -04:00
ameerj
14bfb4719a HACK glsl: Write defaults to unused generic attributes 2021-07-22 21:51:37 -04:00
ameerj
4b5a4ea72e glsl: Fix ssbo indexing and name shadowing between shader stages 2021-07-22 21:51:37 -04:00
ameerj
8ec0028e68 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
9f3ffb996b glsl: Rework var alloc to not assign unused results 2021-07-22 21:51:37 -04:00
ameerj
1269a0cf8b glsl: Rework variable allocator to allow for variable reuse 2021-07-22 21:51:37 -04:00
ameerj
9ccbd74991 glsl: Fix ATOM and implement ATOMS 2021-07-22 21:51:37 -04:00
ameerj
68ef3803bf glsl: Use gl_SubGroupInvocationARB 2021-07-22 21:51:36 -04:00
ameerj
e35ffbbeb0 glsl: Implement VOTE for subgroup size potentially larger 2021-07-22 21:51:36 -04:00
ameerj
770b754afd glsl: Implement VOTE 2021-07-22 21:51:36 -04:00
ameerj
181a4ffdc4 glsl: Implement ST{LS} 2021-07-22 21:51:36 -04:00
ameerj
57d354b02c glsl: Implement more instructions used by SMO 2021-07-22 21:51:36 -04:00
ameerj
7df0815117 glsl: Implement more instructions used by SMO 2021-07-22 21:51:36 -04:00
ameerj
80eec85867 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
1542f31e79 glsl: minor cleanup 2021-07-22 21:51:36 -04:00
ameerj
005eecffcd glsl: Fix and implement rest of cbuf access 2021-07-22 21:51:36 -04:00
ameerj
3047eb6688 glsl: Implement TXQ and other misc changes 2021-07-22 21:51:36 -04:00
ameerj
5fd92780b2 glsl: TLD4 implementation 2021-07-22 21:51:36 -04:00
ameerj
697eacd095 glsl: Implement TLD instruction 2021-07-22 21:51:36 -04:00
ameerj
e4ba755705 glsl: Implement TEXS 2021-07-22 21:51:36 -04:00
ameerj
59a692e9ed glsl: Cleanup texture functions 2021-07-22 21:51:36 -04:00
lat9nq
c9a25855bc shader_recompiler: GCC fixes 2021-07-22 21:51:36 -04:00
ameerj
7619b7d427 glsl: Implement TEX depth functions 2021-07-22 21:51:36 -04:00
ameerj
55e0211a5e glsl: Implement TEX ImageSample functions 2021-07-22 21:51:36 -04:00
ameerj
b98de76ea8 glsl: Rework Shuffle emit instructions to align with SPIR-V 2021-07-22 21:51:36 -04:00
ameerj
8ba814efb2 glsl: Better Storage access and wip warps 2021-07-22 21:51:36 -04:00
ameerj
86d4a05cec glsl: Fix integer conversions, implement clamp CC 2021-07-22 21:51:36 -04:00
ameerj
21797efa54 glsl: Implement IADD CC 2021-07-22 21:51:36 -04:00
ameerj
453cd25da5 glsl: SSBO access fixes and wip SampleExplicitLod implementation. 2021-07-22 21:51:36 -04:00
ameerj
f6bbc76336 glsl: WIP var forward declaration
to fix Loop control flow.
2021-07-22 21:51:36 -04:00
ameerj
2a71333716 glsl: Fix bindings, add some CC ops 2021-07-22 21:51:36 -04:00
ameerj
6674637853 glsl: remove unused headers 2021-07-22 21:51:36 -04:00
ameerj
a752ec88d0 glsl: Implement derivatives and YDirection
plus some other misc additions/changed
2021-07-22 21:51:36 -04:00
ameerj
ed14d31f66 glsl: Fix non-immediate buffer access
and many other misc implementations
2021-07-22 21:51:36 -04:00
ameerj
d171083d53 glsl: textures wip 2021-07-22 21:51:36 -04:00
ameerj
3d086e6130 glsl: Implement some attribute getters and setters 2021-07-22 21:51:36 -04:00
ameerj
5399906c26 glsl: Track S32 atomics 2021-07-22 21:51:36 -04:00
ameerj
b95716e543 glsl: Update phi node management 2021-07-22 21:51:36 -04:00
ameerj
67f881e714 glsl: Fix floating point compare ops
Logic for ordered/unordered ops was wrong.
2021-07-22 21:51:36 -04:00
ameerj
bd24fa9713 glsl: Query GL Device for FP16 extension support 2021-07-22 21:51:36 -04:00
ameerj
3482df1176 glsl: Simply FP storage atomics 2021-07-22 21:51:36 -04:00
ameerj
9cc1b8a873 glsl: F16x2 storage atomics 2021-07-22 21:51:36 -04:00
ameerj
11ba190462 glsl: Revert ssbo aliasing. Storage Atomics impl 2021-07-22 21:51:36 -04:00
ameerj
e99d01ff53 glsl: implement phi nodes 2021-07-22 21:51:36 -04:00
ameerj
3d9ecbe998 glsl: Wip storage atomic ops 2021-07-22 21:51:36 -04:00
ameerj
df793fc049 glsl: Implement FCMP 2021-07-22 21:51:36 -04:00
ameerj
cdde730219 glsl: Add a more robust fp formatter 2021-07-22 21:51:36 -04:00
ameerj
ac7b0ebcb7 glsl: More FP fixes 2021-07-22 21:51:36 -04:00
ameerj
3064bde415 glsl: FP function fixes 2021-07-22 21:51:36 -04:00
ameerj
65c6f73e43 glsl: More FP instructions/fixes 2021-07-22 21:51:36 -04:00
ameerj
5e9095ef22 glsl: Add many FP32/64 instructions 2021-07-22 21:51:36 -04:00
ReinUsesLisp
53667ddd4e glsl: Fixup build issues 2021-07-22 21:51:36 -04:00
ameerj
ef7bd53f18 glsl: Implement more Integer ops 2021-07-22 21:51:36 -04:00
ameerj
266a3d60e3 glsl: Implement BF* 2021-07-22 21:51:36 -04:00
ameerj
0f40b0e61c glsl: Implement a few Integer instructions 2021-07-22 21:51:36 -04:00
ameerj
fb75d122a2 glsl: Use std::string_view for Emit function args. 2021-07-22 21:51:35 -04:00
ameerj
115c162b9a glsl: Pass IR::Inst& to Emit functions 2021-07-22 21:51:35 -04:00
ameerj
78f5eb90d7 glsl: INeg and IAdd negate tests 2021-07-22 21:51:35 -04:00
ameerj
e221baccdd glsl: Reusable typed variables. IADD32 2021-07-22 21:51:35 -04:00
ameerj
faf4cd72c5 glsl: Fix program linking and cbuf 2021-07-22 21:51:35 -04:00
ameerj
64337f004d glsl: Fix "reg" allocing
based on glasm with some tweaks
2021-07-22 21:51:35 -04:00
ameerj
eaff1030de glsl: Initial backend 2021-07-22 21:51:35 -04:00
ReinUsesLisp
3d822faea1 spirv: Reduce log severity of mismatching denorm rules 2021-07-22 21:51:35 -04:00
ReinUsesLisp
7ac55c2a75 shader: Fix loop safety to SSA pass 2021-07-22 21:51:35 -04:00
ReinUsesLisp
8fb2048934 vk_rasterizer: Exit render passes on fragment barriers 2021-07-22 21:51:35 -04:00
Rodrigo Locatti
dbf7cb9f90 vk_graphics_pipeline: Fix path with no VK_EXT_extended_dynamic_state 2021-07-22 21:51:35 -04:00
ReinUsesLisp
94e751f415 buffer_cache: Invalidate fast buffers on compute 2021-07-22 21:51:35 -04:00
ReinUsesLisp
61cd7dd301 shader: Add logging 2021-07-22 21:51:35 -04:00
lat9nq
373f75d944 shader: Add shader loop safety check settings
Also add a setting for enable Nsight Aftermath.
2021-07-22 21:51:35 -04:00
ReinUsesLisp
487057b8d2 shader: Comment why the array component is not read in TMML 2021-07-22 21:51:35 -04:00
ReinUsesLisp
ba3bdf1d41 vulkan_device: Enable VK_EXT_vertex_input_dynamic_state 2021-07-22 21:51:35 -04:00
ReinUsesLisp
41cca8b8ad vk_pipeline_cache: Skip cached pipelines with different dynamic state 2021-07-22 21:51:35 -04:00
ameerj
5445799260 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
3c125d4134 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
ea038d6653 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
cb78a1b494 shader: Reorder shader cache directories 2021-07-22 21:51:35 -04:00
ReinUsesLisp
3025b2f605 vk_rasterizer: Implement first index 2021-07-22 21:51:35 -04:00
ReinUsesLisp
d554778311 vulkan: Use VK_EXT_provoking_vertex when available 2021-07-22 21:51:35 -04:00
ameerj
d52bacf6f0 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
8554a644df 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
cd8427367e 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
5befc0bf87 shader_environment: Fix local memory size calculations 2021-07-22 21:51:35 -04:00
ReinUsesLisp
60a96c49e5 buffer_cache: Fix copy based uniform bindings tracking 2021-07-22 21:51:35 -04:00
ameerj
15bdd27cac 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
7eaa74ad23 gl_texture_cache: Create image storage views
Fixes SULD.D tests.
2021-07-22 21:51:35 -04:00
ReinUsesLisp
b1ed64ac18 gl_shader_util: Move shader utility code to a separate file 2021-07-22 21:51:35 -04:00
ReinUsesLisp
12fe7210d2 gl_shader_cache: Store workers in shader cache object 2021-07-22 21:51:35 -04:00
ReinUsesLisp
cffd4716c5 vk_pipeline_cache,shader_notify: Add shader notifications 2021-07-22 21:51:35 -04:00
ReinUsesLisp
48aad8dc05 vk_pipeline_cache: Add asynchronous shaders 2021-07-22 21:51:35 -04:00
ReinUsesLisp
2a0aeaa3d2 vk_rasterizer: Flush work on clear and dispatches 2021-07-22 21:51:34 -04:00
FernandoS27
c736b9ffab DMA: Restrict optimised path for BlockToLinear further. 2021-07-22 21:51:34 -04:00
ReinUsesLisp
f45f7b5c2a vk_swapchain: Handle outdated swapchains
Fixes pixelated presentation on Intel devices.
2021-07-22 21:51:34 -04:00
FernandoS27
562af30181 shader: Fix VertexA Shaders. 2021-07-22 21:51:34 -04:00
ReinUsesLisp
ec9a78885e shader: Add 2D and 3D variants to SUATOM and SURED
Used by Claybook.
2021-07-22 21:51:34 -04:00
ReinUsesLisp
b02c78b276 vk_buffer_cache: Handle null texture buffers
Fixes a crash on Age of Calamity cutscenes.
2021-07-22 21:51:34 -04:00
ReinUsesLisp
8f099af6a8 nsight_aftermath_tracker: Fix SPIR-V module writes 2021-07-22 21:51:34 -04:00
ReinUsesLisp
8c954fcaee vk_pipeline_cache: Set support_derivative_control to true 2021-07-22 21:51:34 -04:00
ReinUsesLisp
4f8b68fb04 shader: Avoid CPU side undefined behavior on I2F 2021-07-22 21:51:34 -04:00
ReinUsesLisp
79f2fe1a39 glasm: Use ARB_derivative_control conditionally 2021-07-22 21:51:34 -04:00
ReinUsesLisp
4a2361a1e2 buffer_cache: Reduce uniform buffer size from shader usage
Increases performance significantly on certain titles.
2021-07-22 21:51:34 -04:00
ReinUsesLisp
e57ee3b7fd transform_feedback: Read buffer stride from index instead of layout 2021-07-22 21:51:34 -04:00
ReinUsesLisp
46bd362d0d 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
d26271b014 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
22f0c4f002 emit_glasm_context_get_set: Remove unused variable 2021-07-22 21:51:34 -04:00
ReinUsesLisp
5539b13c5a shader,glasm: Implement legacy texcoord loads 2021-07-22 21:51:34 -04:00
ReinUsesLisp
cf9f88e5a7 glasm: Implement legacy varyings 2021-07-22 21:51:34 -04:00
ReinUsesLisp
ac0f5d2ab6 shader: Track legacy varyings 2021-07-22 21:51:34 -04:00
ReinUsesLisp
05d41fa9b7 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
5d170de0b5 shader: Implement ISCADD32I 2021-07-22 21:51:34 -04:00
ReinUsesLisp
adc43297c5 spirv: Fix output generics with components 2021-07-22 21:51:34 -04:00
ReinUsesLisp
1148a4eac7 vulkan: Conditionally use shaderInt16
Add support for Polaris AMD devices.
2021-07-22 21:51:34 -04:00
ReinUsesLisp
77372443c3 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
c44b16124f vk_buffer_cache: Add transform feedback usage to buffers 2021-07-22 21:51:34 -04:00
ReinUsesLisp
916ca74324 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
a7e9756671 buffer_cache: Mark uniform buffers as dirty if any enable bit changes 2021-07-22 21:51:34 -04:00
ReinUsesLisp
329dea217d shader: Always initialize up reference in structure control flow
Fixes ubsan issue.
2021-07-22 21:51:34 -04:00
ReinUsesLisp
99f2c31b64 vulkan_device: Enable float64 and int64 conditionally
Add Intel Xe support.
2021-07-22 21:51:34 -04:00
ReinUsesLisp
d093522fac shader: Fix ImageWrite indexing 2021-07-22 21:51:34 -04:00
ReinUsesLisp
d738ad4d0b spirv: Fix image and image buffer descriptor index usage 2021-07-22 21:51:34 -04:00
ReinUsesLisp
eb8464cb3d glasm: Fix immediate texture coordinate 2021-07-22 21:51:34 -04:00
ReinUsesLisp
457dda69cc shader: Clang-format secondary textures 2021-07-22 21:51:34 -04:00
ReinUsesLisp
627161c38e shader: Fix secondary textures 2021-07-22 21:51:34 -04:00
ameerj
dd39b87b0c shader: Adhere to disk shader cache setting 2021-07-22 21:51:34 -04:00
ReinUsesLisp
b659212dbd shader: Fix TMML queries 2021-07-22 21:51:34 -04:00
ReinUsesLisp
fbf5cdcba0 shader: Fix FSwizzleAdd folding when going through phi nodes 2021-07-22 21:51:34 -04:00
ReinUsesLisp
871c9f1ced shader/exception: Fix compilation errors on gcc 2021-07-22 21:51:34 -04:00
ReinUsesLisp
b6c087496b glasm: Reduce reg allocation leaks from an exception to a log 2021-07-22 21:51:34 -04:00
ReinUsesLisp
56d4a9ebde texture_cache: Reduce invalid image/sampler error severity 2021-07-22 21:51:34 -04:00
ReinUsesLisp
b7764c3a79 shader: Handle host exceptions 2021-07-22 21:51:34 -04:00
ReinUsesLisp
83db7abae6 glasm: Use integer lod for TXQ 2021-07-22 21:51:33 -04:00
ReinUsesLisp
3b595fe8b2 glasm: Prepare XFB from state instead of global registers 2021-07-22 21:51:33 -04:00
ReinUsesLisp
e240a62017 glasm: Fix global memory fallbacks 2021-07-22 21:51:33 -04:00
ReinUsesLisp
8f3043c3cf Revert "glasm: Skip phi moves on undefined instructions"
Causes regressions on Bowser's Fury.
2021-07-22 21:51:33 -04:00
ReinUsesLisp
2aa30353b7 glasm: Remove unintentional '\n' on Undef32 2021-07-22 21:51:33 -04:00
ReinUsesLisp
adb591a757 glasm: Use storage buffers instead of global memory when possible 2021-07-22 21:51:33 -04:00
ReinUsesLisp
f58f79c85d glasm: Implement Y direction 2021-07-22 21:51:33 -04:00
ReinUsesLisp
586c785366 glasm: Skip phi moves on undefined instructions 2021-07-22 21:51:33 -04:00
ReinUsesLisp
b9c8814ea9 glasm: Implement undef instructions 2021-07-22 21:51:33 -04:00
ReinUsesLisp
8763cc1ff7 glasm: Fix global memory callbacks 2021-07-22 21:51:33 -04:00
ReinUsesLisp
a41b2ed391 gl_shader_cache: Add disk shader cache 2021-07-22 21:51:33 -04:00
ReinUsesLisp
a49532c8eb video_core,shader: Clang-format fixes 2021-07-22 21:51:33 -04:00
ReinUsesLisp
eacf18cce9 gl_shader_cache: Rename Program abstractions into Pipeline 2021-07-22 21:51:33 -04:00
ReinUsesLisp
48aafe0961 glasm: Release phi node registers after they are no longer needed 2021-07-22 21:51:33 -04:00
ReinUsesLisp
77ee733c3a glasm: Remove unintentionally committed fmt::prints 2021-07-22 21:51:33 -04:00
ReinUsesLisp
70c9281fbf glasm: Fix INeg32 on negative immediates 2021-07-22 21:51:33 -04:00
ReinUsesLisp
75fd0079db glasm: Remove unnecessary value types 2021-07-22 21:51:33 -04:00
ReinUsesLisp
379b305b4b glasm: Throw when there are register leaks 2021-07-22 21:51:33 -04:00
ReinUsesLisp
ca05a13c62 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
9fbfe7d676 glasm: Fix usage counting on phi nodes 2021-07-22 21:51:33 -04:00
ReinUsesLisp
4017928213 gl_shader_cache: Do not flip tessellation on OpenGL 2021-07-22 21:51:33 -04:00
ReinUsesLisp
80884e3270 gl_graphics_program: Fix texture buffer bindings 2021-07-22 21:51:33 -04:00
ReinUsesLisp
c721767bcc glasm: Implement global memory fallbacks 2021-07-22 21:51:33 -04:00
ReinUsesLisp
0794273870 glasm: Implement int64 add and subtract 2021-07-22 21:51:33 -04:00
lat9nq
7fdf0d7d33 emit_glasm_context_get_set: Remove unused variable 2021-07-22 21:51:33 -04:00
ReinUsesLisp
e30d4fa976 glasm: Implement indirect attribute loads 2021-07-22 21:51:33 -04:00
ReinUsesLisp
c8414e686f glasm: Implement image atomics 2021-07-22 21:51:33 -04:00
ReinUsesLisp
3a7ca6a7db 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
e565eb361a glasm: Implement gl_Layer stores 2021-07-22 21:51:33 -04:00
ReinUsesLisp
89e341d56a glasm: Implement SampleId 2021-07-22 21:51:33 -04:00
ReinUsesLisp
77d8c44b68 glasm: Implement IsHelperInvocation 2021-07-22 21:51:33 -04:00
ReinUsesLisp
ddf601919f glasm: Fix EmitVertex's optimization 2021-07-22 21:51:33 -04:00
ReinUsesLisp
1bccb43cbe gl_shader_cache: Conditionally use viewport mask 2021-07-22 21:51:33 -04:00
ReinUsesLisp
c31521512f gl_shader_cache,glasm: Conditionally use typeless image reads extension 2021-07-22 21:51:33 -04:00
ReinUsesLisp
df406246d9 gl_shader_cache: Improve GLASM error print logic 2021-07-22 21:51:33 -04:00
ReinUsesLisp
84feabac88 glasm: Implement forced early Z 2021-07-22 21:51:33 -04:00
ReinUsesLisp
6bc54e12a0 glasm: Set transform feedback state 2021-07-22 21:51:33 -04:00
ReinUsesLisp
69b910e9e7 video_core: Abstract transform feedback translation utility 2021-07-22 21:51:33 -04:00
ReinUsesLisp
7dadb2bef3 glasm: Simplify patch reads 2021-07-22 21:51:33 -04:00
ReinUsesLisp
b382f57b28 glasm: Fix output patch reads
With this, Luigi's Mansion's sand renders properly.
2021-07-22 21:51:33 -04:00
ReinUsesLisp
c07cc9d6a5 gl_shader_cache: Pass shader runtime information 2021-07-22 21:51:33 -04:00
ReinUsesLisp
9e7b6622c2 shader: Split profile and runtime information in separate structs 2021-07-22 21:51:33 -04:00
ameerj
eb15667905 emit_glasm_context_get_and_set.cpp: Add missing semicolons 2021-07-22 21:51:33 -04:00
ReinUsesLisp
781a87175c glasm: Fix patch attribute declarations 2021-07-22 21:51:33 -04:00
ameerj
36d040da70 glasm: Implement FSWZADD 2021-07-22 21:51:33 -04:00
ReinUsesLisp
3da7b98d37 glasm: Implement PrimitiveId attribute read 2021-07-22 21:51:33 -04:00
ReinUsesLisp
394b96a2fe glasm: Implement clip distance stores 2021-07-22 21:51:32 -04:00
ReinUsesLisp
a5d978e91e glasm: Fix tessellation input attributes 2021-07-22 21:51:32 -04:00
ReinUsesLisp
0d7d85c81e glasm: Add missing semicolon on tesscoord reading 2021-07-22 21:51:32 -04:00
ReinUsesLisp
48d4e26326 glasm: Fix tessellation headers 2021-07-22 21:51:32 -04:00
ReinUsesLisp
9ec2303ad6 glasm: Add tessellation shader declarations 2021-07-22 21:51:32 -04:00
ReinUsesLisp
2913ca811e glasm: Implement TessellationEvaluationPoint 2021-07-22 21:51:32 -04:00
ReinUsesLisp
54decced92 gl_shader_manager: Zero initialize current assembly programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp
c0e4074721 gl_shader_manager: Remove unintentionally committed #pragma 2021-07-22 21:51:32 -04:00
ReinUsesLisp
a569ac418e glasm: Implement patch memory 2021-07-22 21:51:32 -04:00
ReinUsesLisp
164b8c1ec5 glasm: Fix InvocationId declaration 2021-07-22 21:51:32 -04:00
ReinUsesLisp
d5db96386d glasm: Implement InvocationId 2021-07-22 21:51:32 -04:00
ReinUsesLisp
679e7146a7 glasm: Optimize EmitVertex into EMIT 2021-07-22 21:51:32 -04:00
ReinUsesLisp
79929be833 glasm: Implement geometry shader attribute reads 2021-07-22 21:51:32 -04:00
ReinUsesLisp
83cef0426b glasm: Properly declare attributes on geometry programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp
fad139a3e6 glasm: Declare geometry program headers 2021-07-22 21:51:32 -04:00
ReinUsesLisp
690b1841e6 renderer_opengl: State track compute assembly programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp
c5ca4fe451 renderer_opengl: State track assembly programs 2021-07-22 21:51:32 -04:00
ReinUsesLisp
0a54291c9c glasm: Fix potential aliasing bug on cube array samples 2021-07-22 21:51:32 -04:00
ReinUsesLisp
8fdb00a2b5 glasm: Implement ImageWrite 2021-07-22 21:51:32 -04:00
ReinUsesLisp
dadd192b30 glasm: Implement ImageRead 2021-07-22 21:51:32 -04:00
ReinUsesLisp
3d0ffc6ad0 glasm: Implement EmitVertex and EndPrimitive 2021-07-22 21:51:32 -04:00
ReinUsesLisp
f79cbbf814 glasm: Implement ImageGradient 2021-07-22 21:51:32 -04:00
ReinUsesLisp
291f220be3 glasm: Implement 64-bit shifts 2021-07-22 21:51:32 -04:00
ReinUsesLisp
d957b3a8fe glasm: Implement barriers 2021-07-22 21:51:32 -04:00
ReinUsesLisp
b60b3fa113 glasm: Fix compute stage name 2021-07-22 21:51:32 -04:00
ReinUsesLisp
96962c1d3c glasm: Fix phi instruction types 2021-07-22 21:51:32 -04:00
ReinUsesLisp
91a3c2c1c0 glasm: Implement PREC on relevant instructions 2021-07-22 21:51:32 -04:00
ReinUsesLisp
accad56ee7 glasm: Implement stores to gl_ViewportIndex 2021-07-22 21:51:32 -04:00
ReinUsesLisp
2494dbe183 glasm: Implement gl_PointSize stores 2021-07-22 21:51:32 -04:00
ReinUsesLisp
9415c435fc glasm: Implement gl_PointCoord 2021-07-22 21:51:32 -04:00
ReinUsesLisp
12dcb9fcc2 glasm: Implement ImageQueryLod 2021-07-22 21:51:32 -04:00
ReinUsesLisp
4a22942f45 glasm: Implement ImageFetch 2021-07-22 21:51:32 -04:00
ameerj
3777592ada glasm: Implement IADD.CC 2021-07-22 21:51:32 -04:00
ReinUsesLisp
98ed8ff103 glasm: Implement BFE.CC 2021-07-22 21:51:32 -04:00
ReinUsesLisp
2e0d56da7e glasm: Implement SelectU1 2021-07-22 21:51:32 -04:00
ReinUsesLisp
85fc7e584e 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
e8ed904805 glasm: Implement gl_WorkGroupID 2021-07-22 21:51:32 -04:00
ReinUsesLisp
0a42277a4f glasm: Implement TXQ and improve texture info reads 2021-07-22 21:51:32 -04:00
ReinUsesLisp
c560bf99c2 glasm: Implement gl_FrongFacing attribute 2021-07-22 21:51:32 -04:00
ReinUsesLisp
8b7d5912d6 glasm: Support textures used in more than one stage 2021-07-22 21:51:32 -04:00
ReinUsesLisp
3d3ed53511 glasm: Implement textureGather instructions 2021-07-22 21:51:32 -04:00
ReinUsesLisp
0fa421f82f glasm: Implement gl_FragDepth and gl_SampleMask stores 2021-07-22 21:51:32 -04:00
ReinUsesLisp
1ee7f8b943 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
9bb3e008c9 shader: Read branch conditions from an instruction
Fixes the identity removal pass.
2021-07-22 21:51:32 -04:00
ReinUsesLisp
4bad415bca glasm: Implement InstanceId and VertexId 2021-07-22 21:51:31 -04:00
ReinUsesLisp
afcb140185 glasm: Add missing return value on move assignment 2021-07-22 21:51:31 -04:00
ReinUsesLisp
fb3ba62b3a glasm: Fix aliased bitcasts ref counting 2021-07-22 21:51:31 -04:00
ReinUsesLisp
f1b334b9f9 glasm: Remove unintentional comma on vector insert 2021-07-22 21:51:31 -04:00
ReinUsesLisp
ec6fc5fe78 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
c42a6143a5 glasm: Add support for non-2D texture samples 2021-07-22 21:51:31 -04:00
ReinUsesLisp
bee9fb0563 glasm: Reorder unreachable image instructions to the bottom 2021-07-22 21:51:31 -04:00
ReinUsesLisp
e6b4d461d2 glasm: Add support for texture offsets 2021-07-22 21:51:31 -04:00
ReinUsesLisp
bf2949df10 glasm: Improve texture sampling instructions 2021-07-22 21:51:31 -04:00
ReinUsesLisp
db2f0f4108 emit_glasm: Enable ARB_draw_buffers when needed 2021-07-22 21:51:31 -04:00
ReinUsesLisp
3c06293e20 emit_glasm: Add support for reading position attributes 2021-07-22 21:51:31 -04:00
lat9nq
f7a2340205 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
d4f9c798d6 glasm: Implement rest of shared mem 2021-07-22 21:51:31 -04:00
ReinUsesLisp
258f2dec1b opengl: Initial (broken) support to GLASM shaders 2021-07-22 21:51:31 -04:00
ReinUsesLisp
776ab3ea12 shader: Use a non-trivial dummy to construct ASL node union 2021-07-22 21:51:31 -04:00
ReinUsesLisp
38e7b8c805 emit_spirv: Jump to loop body with local variable
Silence unused variable warning
2021-07-22 21:51:31 -04:00
ReinUsesLisp
464f13fe0b glasm: Implement derivative instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
9fb2ea08e8 glasm: Initial (broken) implementation of TEX on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
1f3446b47e glasm: Implement some graphics instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
31d402ee74 glasm: Add Void type to GLASM values 2021-07-22 21:51:31 -04:00
ReinUsesLisp
3764750339 glasm: Add graphics specific shader declarations to GLASM 2021-07-22 21:51:31 -04:00
ameerj
057dee4856 glasm: Implement local memory for glasm 2021-07-22 21:51:31 -04:00
ReinUsesLisp
ab5dbe7c29 emit_spirv: Add missing block in case 2021-07-22 21:51:31 -04:00
ReinUsesLisp
bf5e48ffe4 glasm: Initial implementation of phi nodes on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
0f88fb5d72 glasm: Write result to scalar on integer comparison instructions 2021-07-22 21:51:31 -04:00
ReinUsesLisp
d4385c34e3 glasm: Declare NV_shader_thread_group when needed 2021-07-22 21:51:31 -04:00
ReinUsesLisp
568d813eea vk_update_descriptor: Properly initialize payload on the update descriptor queue 2021-07-22 21:51:31 -04:00
ReinUsesLisp
d54d7de40e 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
7ff5851608 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
8c81a20ace 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
c917290497 glasm: Enable unintentionally disabled register aliasing on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
70fbede213 glasm: Review all GLASM insts to be aware of register aliasing 2021-07-22 21:51:31 -04:00
ReinUsesLisp
c4fd6b55bc glasm: Implement shuffle and vote instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
decda4a2c7 glasm: Add MUFU instructions to GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
5b18a12df2 glasm: Implement IAbs64 and INeg64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
3b6a632237 shader: Add floating-point rounding to I2F 2021-07-22 21:51:31 -04:00
ReinUsesLisp
3f00a2ad3f glasm: Properly clamp Fp64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
deda89372f glasm: Fix register allocation when moving immediate on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
0839e46736 glasm: Implement SelectU64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
6237300e36 glasm: Fix clamps so the min value has priority on NAN on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
8eb72ff0dc glasm: Fix moving U64 immediates to registers in GLASM 2021-07-22 21:51:31 -04:00
ameerj
80813b1d14 glasm: Implement storage atomic ops 2021-07-22 21:51:31 -04:00
ReinUsesLisp
ad61b47f80 glasm: Add conversion instructions to GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
7703d65f23 glasm: Add fp min/max insts and fix store for fp64 on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
43a448d98d glasm: Add logical instructions on GLASM 2021-07-22 21:51:31 -04:00
ReinUsesLisp
99352741af glasm: Remove duplicated Fp64 pack instructions on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp
45ef62d3ba glasm: Remove unnecesary new white space on Clamp GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp
b4953e79ee glasm: Add floating-point comparisons on GLASM 2021-07-22 21:51:30 -04:00
ameerj
6705f56029 emit_glasm: Implement more integer alu ops 2021-07-22 21:51:30 -04:00
ameerj
3e10709091 glasm: Reimplement bitwise ops and BFI/BFE 2021-07-22 21:51:30 -04:00
ReinUsesLisp
4502595bc2 glasm: Initial GLASM fp64 support 2021-07-22 21:51:30 -04:00
ReinUsesLisp
9f851e3832 glasm: Implement GLASM fp16 packing and move bitwise insns 2021-07-22 21:51:30 -04:00
ReinUsesLisp
4de65fbff4 glasm: Remove unused functions left from rebase 2021-07-22 21:51:30 -04:00
ReinUsesLisp
6358b0d0c1 glasm: Specify namespace when using FormatTo 2021-07-22 21:51:30 -04:00
ReinUsesLisp
939dab7120 glasm: Implement more GLASM composite instructions 2021-07-22 21:51:30 -04:00
ReinUsesLisp
01e18581b9 vk_pipeline_cache: Enable int8 and int16 types on Vulkan 2021-07-22 21:51:30 -04:00
ReinUsesLisp
1c9307969c glasm: Make GLASM aware of types 2021-07-22 21:51:30 -04:00
ameerj
934d300246 glasm: Use CMP.S for Select32
also fixes ADD and SUB to use U modifier
2021-07-22 21:51:30 -04:00
ameerj
68cc445b8e glasm: Implement more logical ops 2021-07-22 21:51:30 -04:00
ameerj
941c6dc740 glasm: Implement BFI, BFE
Along with implementations of common instructions along the way
2021-07-22 21:51:30 -04:00
ReinUsesLisp
3e841f6441 glasm: Use BitField instead of C bitfields 2021-07-22 21:51:30 -04:00
ReinUsesLisp
2b04b4d27f glasm: Remove unused argument in identity instructions on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp
dc02cb92e4 gl_rasterizer: Flush L2 caches before glFlush on GLASM 2021-07-22 21:51:30 -04:00
ReinUsesLisp
2c81ad8311 glasm: Initial GLASM compute implementation for testing 2021-07-22 21:51:30 -04:00
ReinUsesLisp
6fd190d1ae glasm: Implement basic GLASM instructions 2021-07-22 21:51:30 -04:00
ReinUsesLisp
c1ba685d9c glasm: Changes to GLASM register allocator and emit context 2021-07-22 21:51:30 -04:00
ReinUsesLisp
36f1586267 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
56c47951c5 vk_query_cache: Wait before reading queries 2021-07-22 21:51:30 -04:00
ReinUsesLisp
a515036604 vk_master_semaphore: Use fetch_add to increase master semaphore tick 2021-07-22 21:51:30 -04:00
ReinUsesLisp
b10cf64c48 glasm: Add GLASM backend infrastructure 2021-07-22 21:51:30 -04:00
ameerj
09dc23f971 shader: ISET.X implementation 2021-07-22 21:51:30 -04:00
ReinUsesLisp
bfa47539f6 gl_shader_cache: Remove code unintentionally committed 2021-07-22 21:51:30 -04:00
ReinUsesLisp
b725db8709 shader: Fixup SPIR-V emit header namespaces 2021-07-22 21:51:30 -04:00
ReinUsesLisp
bed090807a Move SPIR-V emission functions to their own header 2021-07-22 21:51:30 -04:00
FernandoS27
ee61ec2c39 shader: Optimize NVN Fallthrough 2021-07-22 21:51:30 -04:00
FernandoS27
153a77efee shader: Stub SR_AFFINITY 2021-07-22 21:51:30 -04:00
ameerj
7ecc6de56a shader: Implement Int32 SUATOM/SURED 2021-07-22 21:51:30 -04:00
ReinUsesLisp
d621e96d0d shader: Initial OpenGL implementation 2021-07-22 21:51:30 -04:00
ReinUsesLisp
850b08a16c spirv: Be aware of NAN unaware drivers 2021-07-22 21:51:30 -04:00
ReinUsesLisp
fde47152d9 spirv: Add SSBO read fallbacks when no aliasing is available 2021-07-22 21:51:29 -04:00
ReinUsesLisp
fd913bceaf spirv: Add OpKill fallback to demote 2021-07-22 21:51:29 -04:00
ReinUsesLisp
d2a0f9d7ad spirv: Do not enable ShaderLayer
This is enabled by an extension instead of the capability.
2021-07-22 21:51:29 -04:00
ReinUsesLisp
2b434b74af spirv: Enable DemoteToHelperInvocationEXT only when supported 2021-07-22 21:51:29 -04:00
ReinUsesLisp
cfd873275d spirv: Use OriginLowerLeft when requested 2021-07-22 21:51:29 -04:00
ReinUsesLisp
bafe9e35a9 spirv: Only add image operands mask when needed 2021-07-22 21:51:29 -04:00
ReinUsesLisp
d2e811db2e 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
4ead714910 spirv: Add int8 and int16 capabilities only when supported 2021-07-22 21:51:29 -04:00
ReinUsesLisp
33bebc3412 spirv: Add integer clamping workarounds
Workaround more bugs on Nvidia's OpenGL SPIR-V compiler.
2021-07-22 21:51:29 -04:00
ReinUsesLisp
7b03b97118 spirv: Implement int8 and int16 conversion fallbacks 2021-07-22 21:51:29 -04:00
ReinUsesLisp
48a17298d7 spirv: Support OpenGL uniform buffers and change bindings 2021-07-22 21:51:29 -04:00
ReinUsesLisp
d5d6778ba5 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
a46d91b1ef shader: Add OpenGL shader profile options 2021-07-22 21:51:29 -04:00
ReinUsesLisp
028f0033bd shader: Remove shader util 2021-07-22 21:51:29 -04:00
FernandoS27
c49d56c931 shader: Address feedback 2021-07-22 21:51:29 -04:00
FernandoS27
b541f5e5e3 shader: Implement VertexA stage 2021-07-22 21:51:29 -04:00
FernandoS27
da936d6ad8 shader: Implement delegation of Exit to dispatcher on CFG 2021-07-22 21:51:29 -04:00
ReinUsesLisp
f4b82b8dd7 vk_graphics_pipeline: Fix texture buffer descriptors 2021-07-22 21:51:29 -04:00
ameerj
fb14820c86 shader: Fix IADD3.CC 2021-07-22 21:51:29 -04:00
ReinUsesLisp
53acdda772 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
c5425b38c1 vk_compute_pass: Fix -Wshadow warning 2021-07-22 21:51:29 -04:00
ReinUsesLisp
025b20f96a 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
ac8835659e 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
2f3c3dfc10 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
5ed871398b vk_graphics_pipeline: Generate specialized pipeline config functions and improve code 2021-07-22 21:51:29 -04:00
ReinUsesLisp
f4ace63957 shader: Accelerate pipeline transitions and use dirty flags for shaders 2021-07-22 21:51:29 -04:00
ameerj
20e86fd615 shader: Fix BFE s32 undefined check
Our unit tests were hitting this exception.
2021-07-22 21:51:29 -04:00
ReinUsesLisp
8fda599a31 vk_compute_pipeline: Fix index comparison oversight on compute texture buffers 2021-07-22 21:51:29 -04:00
ReinUsesLisp
50eb03382e shader: Fix error checking in bitfieldExtract and implement bitfieldInsert folding 2021-07-22 21:51:29 -04:00
ReinUsesLisp
0c0ee9d897 vulkan_device: Require shaderClipDistance and shaderCullDistance features 2021-07-22 21:51:29 -04:00
ReinUsesLisp
5b1b06f11e vk_graphics_pipeline: Guard against non-tessellation pipelines using patches 2021-07-22 21:51:29 -04:00
ReinUsesLisp
57464e3b72 shader: Fix storage type when reading patches on tess control 2021-07-22 21:51:29 -04:00
ReinUsesLisp
d2b54c6e42 shader: Fix VMNMX selector B 2021-07-22 21:51:29 -04:00
Rodrigo Locatti
2dc86372c7 shader: Fix bugs and build issues on GCC 2021-07-22 21:51:29 -04:00
ReinUsesLisp
7a1f296cda shader: Fix render targets with null attachments 2021-07-22 21:51:29 -04:00
ReinUsesLisp
155be4a8d3 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
fe25f42403 shader: Remove identity removal pass for better build times 2021-07-22 21:51:29 -04:00
ReinUsesLisp
0c7230a606 shader: Add more strict validation the pass 2021-07-22 21:51:29 -04:00
ReinUsesLisp
25949b864c shader: Fix forward referencing identity instructions when inserting phi 2021-07-22 21:51:29 -04:00
ReinUsesLisp
92a01984e6 shader: Remove invalidated blocks in dead code elimination pass 2021-07-22 21:51:29 -04:00