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
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
ameerj
3927809a63
shader: Fix disabled attribute default values
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
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
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
ReinUsesLisp
cdb3837085
shader: Manually convert from array<u32> to bitset instead of using bit_cast
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
ameerj
d54c4880d1
dual_vertex_pass: Clang format
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
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
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
7dc8577529
spirv: Fix code emission when descriptor aliasing is unsupported
...
Fixes OpenGL.
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
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
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
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
Morph
6e8400f165
glsl: Add missing ; in EmitSetSampleMask
...
Fixes shader compilation in Okami HD
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
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