Commit graph

870 commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
ameerj
fb14820c86 shader: Fix IADD3.CC 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
50eb03382e shader: Fix error checking in bitfieldExtract and implement bitfieldInsert folding 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
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
ReinUsesLisp
aece958c2b shader: Add missing UndoUse case for GetSparseFromOp 2021-07-22 21:51:29 -04:00
ReinUsesLisp
21e3382830 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
d10cf55353 shader: Implement indexed textures 2021-07-22 21:51:28 -04:00
ameerj
7a9dc78398 shader: Refactor atomic_operations_global_memory 2021-07-22 21:51:28 -04:00
ameerj
427951d6fe shader: add missing include guard in half_floating_point_helper.h 2021-07-22 21:51:28 -04:00
ReinUsesLisp
c8f9772d65 shader: Fix gcc warnings 2021-07-22 21:51:28 -04:00
ReinUsesLisp
75dee55486 shader: Inline common Value getters 2021-07-22 21:51:28 -04:00
ReinUsesLisp
23182fa59c shader: Intrusively store in a block if it's sealed or not 2021-07-22 21:51:28 -04:00
ReinUsesLisp
eed6da55b8 cmake: Link to common in shader_recompiler 2021-07-22 21:51:28 -04:00
ReinUsesLisp
cc0fcd1b8d 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
f66851e376 shader: Use memset to reset instruction arguments 2021-07-22 21:51:28 -04:00
ReinUsesLisp
c84bbd9e44 shader: Inline common Value functions into the header 2021-07-22 21:51:28 -04:00
ReinUsesLisp
050e81500c shader: Move microinstruction header to the value header 2021-07-22 21:51:28 -04:00
ReinUsesLisp
e4d1122082 shader: Move siblings check to a separate function and comment them out 2021-07-22 21:51:28 -04:00
ReinUsesLisp
4209828646 shader: Intrusively store register values in block for SSA pass 2021-07-22 21:51:28 -04:00
ReinUsesLisp
6944cabb89 shader: Inline common Opcode and Inst functions 2021-07-22 21:51:28 -04:00
ReinUsesLisp
4bbe530337 shader: Inline common IR::Block methods 2021-07-22 21:51:28 -04:00
ReinUsesLisp
24cc298660 shader: Use a small_vector for phi blocks 2021-07-22 21:51:28 -04:00
ReinUsesLisp
79c2e43fcd shader: Calculate number of arguments in an opcode at compile time 2021-07-22 21:51:28 -04:00
ReinUsesLisp
dd860b684c shader: Implement D3D samplers 2021-07-22 21:51:28 -04:00
ReinUsesLisp
a8d46a5eae shader: Add constant propagation for arithmetic right shifts 2021-07-22 21:51:28 -04:00
ReinUsesLisp
469f8bb857 shader: Simplify code for local memory 2021-07-22 21:51:28 -04:00
ReinUsesLisp
7018e524f5 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
6325601947 spirv: Fix ViewportMask 2021-07-22 21:51:28 -04:00
ameerj
5b8afed871 spirv: Replace Constant/ConstantComposite with Const helper 2021-07-22 21:51:28 -04:00
FernandoS27
2999028976 shader: Address feedback 2021-07-22 21:51:28 -04:00
FernandoS27
881b33da3b shader: Implement F2F (Imm) 2021-07-22 21:51:28 -04:00
FernandoS27
21a878237b shader: Implement IADD3.CC/.X 2021-07-22 21:51:28 -04:00
FernandoS27
f69d0b91ff shader: Address feedback 2021-07-22 21:51:28 -04:00
FernandoS27
080857b60e shader: Add coarse derivatives 2021-07-22 21:51:28 -04:00
FernandoS27
04c459fc8d shader: Implement fine derivates constant propagation 2021-07-22 21:51:28 -04:00
FernandoS27
f18a6dd1bd shader: Implement SR_Y_DIRECTION 2021-07-22 21:51:28 -04:00
ReinUsesLisp
50f8007172 shader: Fix Phi node types 2021-07-22 21:51:28 -04:00
ReinUsesLisp
0a0818c025 shader: Fix memory barriers 2021-07-22 21:51:28 -04:00
ReinUsesLisp
c9e4609d87 spirv: Fix implicit lod type 2021-07-22 21:51:28 -04:00
ReinUsesLisp
7cfa403683 spirv: Use explicit lods outside of fragment shaders 2021-07-22 21:51:28 -04:00
ReinUsesLisp
dbbd4b5496 spirv: Use ConstOffset instead of Offset when possible 2021-07-22 21:51:28 -04:00
ameerj
be431f5ed0 shader: Implement BFE and BFI CC
Fix two bugs in BFI.
2021-07-22 21:51:28 -04:00
ReinUsesLisp
80940b1706 shader: Implement SampleMask 2021-07-22 21:51:28 -04:00
ReinUsesLisp
95815a3883 shader: Implement PIXLD.MY_INDEX 2021-07-22 21:51:28 -04:00
ReinUsesLisp
f3473c5143 spirv: Bitcast non-F32 output attributes to their type before store 2021-07-22 21:51:28 -04:00
ReinUsesLisp
e3514bcd6b spirv: Implement ViewportMask with NV_viewport_array2 2021-07-22 21:51:28 -04:00
ReinUsesLisp
4657cf78fd spirv: Bitcast non-F32 attributes to F32 2021-07-22 21:51:27 -04:00
ReinUsesLisp
b0f1255c8c shader: Implement PrimitiveId 2021-07-22 21:51:27 -04:00
ReinUsesLisp
183855e396 shader: Implement tessellation shaders, polygon mode and invocation id 2021-07-22 21:51:27 -04:00
ReinUsesLisp
34519d3fc6 shader: Mark atomic instructions as writes 2021-07-22 21:51:27 -04:00
ReinUsesLisp
416e1b7441 spirv: Implement image buffers 2021-07-22 21:51:27 -04:00
ReinUsesLisp
d8ec99dada spirv: Implement Layer stores 2021-07-22 21:51:27 -04:00
FernandoS27
ab3831f6cb spirv: Fix alpha test 2021-07-22 21:51:27 -04:00
ameerj
6f4a1c8dcf spirv: Fix non-atomic 64-bit store 2021-07-22 21:51:27 -04:00
ameerj
6c512f4bff spirv: Implement alpha test 2021-07-22 21:51:27 -04:00
ReinUsesLisp
b126987c59 shader: Implement transform feedbacks and define file format 2021-07-22 21:51:27 -04:00
ReinUsesLisp
a83579b50a shader: Implement early Z tests 2021-07-22 21:51:27 -04:00
ReinUsesLisp
09165ae189 shader: Document and relax cache control on surface instructions 2021-07-22 21:51:27 -04:00
ReinUsesLisp
fa75b9b062 spirv: Rework storage buffers and shader memory 2021-07-22 21:51:27 -04:00
ReinUsesLisp
c070991def shader: Fix fixed pipeline point size on geometry shaders 2021-07-22 21:51:27 -04:00
ReinUsesLisp
2597cee85b shader: Add constant propagation for *&^| binary operations 2021-07-22 21:51:27 -04:00
ReinUsesLisp
f263760c5a shader: Implement geometry shaders 2021-07-22 21:51:27 -04:00
ReinUsesLisp
a6cef71cc0 shader: Implement OUT 2021-07-22 21:51:27 -04:00
lat9nq
dd3432d357 internal_stage_buffer_entry_read: Remove pragma optimize off 2021-07-22 21:51:27 -04:00
ReinUsesLisp
4b0172f6de shader: Stub SR_INVOCATION_INFO 2021-07-22 21:51:27 -04:00
ReinUsesLisp
f712084147 shader: Stub ISBERD 2021-07-22 21:51:27 -04:00
ReinUsesLisp
2516829e4c shader: Fix CC in I2I 2021-07-22 21:51:27 -04:00
ReinUsesLisp
23b8714732 spirv: Define StorageImageWriteWithoutFormat capability when used 2021-07-22 21:51:27 -04:00
ReinUsesLisp
415c7e46ed shader: Simplify FLO and throw on CC 2021-07-22 21:51:27 -04:00
ReinUsesLisp
dfd5341d71 shader: Mark blocks with no end branch as unreachable 2021-07-22 21:51:27 -04:00
ReinUsesLisp
2ed80f6b1e shader: Implement LOP CC 2021-07-22 21:51:27 -04:00
ReinUsesLisp
5c61e860e4 shader: Implement SR_THREAD_KILL 2021-07-22 21:51:27 -04:00
ReinUsesLisp
c9337a4ae4 shader: Apply sign bit in FCMP (imm) 2021-07-22 21:51:27 -04:00
ameerj
3db2b3effa shader: Implement ATOM/S and RED 2021-07-22 21:51:27 -04:00
ReinUsesLisp
106764a6d5 spirv: Move phi node patching to a separate function 2021-07-22 21:51:27 -04:00
ReinUsesLisp
ab543f1821 spirv: Guard against typeless image reads on unsupported devices 2021-07-22 21:51:27 -04:00
ReinUsesLisp
9280cd649a shader: Move LaneId to the warp emission file and fix AMD 2021-07-22 21:51:27 -04:00
ReinUsesLisp
2e71e4c5c0 spirv: Fix forward declarations on phi nodes 2021-07-22 21:51:27 -04:00
ReinUsesLisp
d404b871d5 shader: Mark ImageWrite with side effects 2021-07-22 21:51:27 -04:00
FernandoS27
1be6705408 shader: Implement CC for ISET, FSET, PSET, CSET, and DSET
Throw when other instructions are missing CC.
2021-07-22 21:51:27 -04:00
ReinUsesLisp
8cea39b5a6 shader: Remove outdated comment in F2I 2021-07-22 21:51:27 -04:00
ReinUsesLisp
7cb2ab3585 shader: Implement SULD and SUST 2021-07-22 21:51:26 -04:00
ReinUsesLisp
094da34456 shader: Fix Windows build issues 2021-07-22 21:51:26 -04:00
lat9nq
5bfcafa0a2 shader: Address feedback + clang format 2021-07-22 21:51:26 -04:00
lat9nq
0bb85f6a75 shader_recompiler,video_core: Cleanup some GCC and Clang errors
Mostly fixing unused *, implicit conversion, braced scalar init,
fpermissive, and some others.

Some Clang errors likely remain in video_core, and std::ranges is still
a pertinent issue in shader_recompiler

shader_recompiler: cmake: Force bracket depth to 1024 on Clang
Increases the maximum fold expression depth

thread_worker: Include condition_variable

Don't use list initializers in control flow

Co-authored-by: ReinUsesLisp <reinuseslisp@airmail.cc>
2021-07-22 21:51:26 -04:00
ReinUsesLisp
5cd3d00167 shader: Fix FCMP immediate variant 2021-07-22 21:51:26 -04:00
ReinUsesLisp
233e39bb7b shader: Fix dangling labels 2021-07-22 21:51:26 -04:00
ReinUsesLisp
e9a91bc5cc shader: Interact texture buffers with buffer cache 2021-07-22 21:51:26 -04:00
ReinUsesLisp
56b92bd89c shader: Fix F2I 2021-07-22 21:51:26 -04:00
ReinUsesLisp
ef88552224 shader: Fix TextureGrad 2021-07-22 21:51:26 -04:00
ReinUsesLisp
1f3eb601ac shader: Implement texture buffers 2021-07-22 21:51:26 -04:00
FernandoS27
dcaf0e9150 shader: Address feedback 2021-07-22 21:51:26 -04:00
FernandoS27
73cb17f41b shader: Implement indexed Position and ClipDistances 2021-07-22 21:51:26 -04:00
FernandoS27
1d51803169 shader: Implement indexed attributes 2021-07-22 21:51:26 -04:00
FernandoS27
0df7e509db shader: Implement AL2P 2021-07-22 21:51:26 -04:00
FernandoS27
20ba0ea0a9 shader: Fix BRX tracking 2021-07-22 21:51:26 -04:00
ReinUsesLisp
417fb5d385 shader: Move recursive SSA rewrite to the heap 2021-07-22 21:51:26 -04:00
FernandoS27
72daa2a039 shader: Fix ShadowCube declaration type, set number of pipeline threads based on hardware 2021-07-22 21:51:26 -04:00
ReinUsesLisp
9e6fe430bd shader: Fix splits on blocks using indirect branches 2021-07-22 21:51:26 -04:00
ReinUsesLisp
ffca21487f shader: Eliminate orphan blocks more efficiently 2021-07-22 21:51:26 -04:00
ReinUsesLisp
da6cf2632c shader: Add subgroup masks 2021-07-22 21:51:26 -04:00
ReinUsesLisp
fc93bc2abd shader: Implement BAR and fix memory barriers 2021-07-22 21:51:26 -04:00
ReinUsesLisp
85795de99f shader: Abstract breadth searches and use the abstraction 2021-07-22 21:51:26 -04:00
ReinUsesLisp
3f594dd86b shader: Reimplement GetCbufU64 as GetCbufU32x2
It may generate better code on some compilers and it's easier to handle.
2021-07-22 21:51:26 -04:00
ReinUsesLisp
0b26f2b90e shader: Remove unused header in VOTE 2021-07-22 21:51:26 -04:00
ReinUsesLisp
9a342f5605 shader: Rework global memory tracking to use breadth-first search 2021-07-22 21:51:26 -04:00
ReinUsesLisp
c4aab5c40e shader: Fix fp16 merge when using native fp16 2021-07-22 21:51:26 -04:00
ReinUsesLisp
ca7ebdc471 shader: Fix FADD32I 2021-07-22 21:51:26 -04:00
FernandoS27
e7700aad18 shader: Fix undetected bug from review 2021-07-22 21:51:26 -04:00
FernandoS27
ed6a1b1a3d shader: Address feedback 2021-07-22 21:51:26 -04:00
FernandoS27
80df541a08 shader: "Implement" NOP 2021-07-22 21:51:26 -04:00
FernandoS27
baec84247f shader: Address Feedback 2021-07-22 21:51:26 -04:00
FernandoS27
45d547af11 shader: Implement SR_LaneId 2021-07-22 21:51:26 -04:00
FernandoS27
595806fb1c shader: Fix shared memory on cool drivers 2021-07-22 21:51:26 -04:00
FernandoS27
655f7a570a shader: Implement MEMBAR 2021-07-22 21:51:26 -04:00
FernandoS27
ecb30c9072 shader: Improve VOTE.VTG stub 2021-07-22 21:51:25 -04:00
FernandoS27
12f5f32098 shader: Mark SSBOs as written when they are 2021-07-22 21:51:25 -04:00
FernandoS27
d819ba4489 shader: Implement ViewportIndex 2021-07-22 21:51:25 -04:00
FernandoS27
fd496d0401 shader: Stub TLD4's PTP when it isn't constant 2021-07-22 21:51:25 -04:00
FernandoS27
5ed8f24384 shader: Stub VOTE.VTG 2021-07-22 21:51:25 -04:00
FernandoS27
bee8188799 shader: Fold composite extract 2021-07-22 21:51:25 -04:00
FernandoS27
c3bace756f shader: Fold comparisons and Pack/Unpack16 2021-07-22 21:51:25 -04:00
ReinUsesLisp
b4a5e767d0 shader: Fix branches to visited virtual blocks 2021-07-22 21:51:25 -04:00
ReinUsesLisp
f1dd743731 shader: Fix dependency on identity removal pass 2021-07-22 21:51:25 -04:00
ReinUsesLisp
5f22cd89e2 shader: Fix constant propagation to use reverse post order 2021-07-22 21:51:25 -04:00
ReinUsesLisp
eaafd53cfe shader: Implement LDG .U.128 as .128 2021-07-22 21:51:25 -04:00
ReinUsesLisp
c826220733 shader: Unroll "using enum" for opcode declarations 2021-07-22 21:51:25 -04:00
ReinUsesLisp
09e1927b70 spirv: Remove unnecesary variable for clip distances 2021-07-22 21:51:25 -04:00
FernandoS27
0c4cf3b9eb shader: Implement ClipDistance 2021-07-22 21:51:25 -04:00
FernandoS27
67afdaf566 shader: Fix TXD 2021-07-22 21:51:25 -04:00
FernandoS27
4d0d29fc20 shader: Address feedback 2021-07-22 21:51:25 -04:00
ReinUsesLisp
cb6fc03e55 shader: Always pass a lod for TexelFetch 2021-07-22 21:51:25 -04:00
FernandoS27
630273b629 shader: Implement TXD 2021-07-22 21:51:25 -04:00
FernandoS27
d5bfc63088 shader: Implement ImageGradient 2021-07-22 21:51:25 -04:00
FernandoS27
be3e94ae55 shader: Implement TMML partially 2021-07-22 21:51:25 -04:00
FernandoS27
613b48c4a2 shader,spirv: Implement ImageQueryLod. 2021-07-22 21:51:25 -04:00
FernandoS27
2c276ec6eb shader: Implement TLDS 2021-07-22 21:51:25 -04:00
FernandoS27
dc1a9a3bed shader: Implement TLD 2021-07-22 21:51:25 -04:00
ReinUsesLisp
7a1c14269e spirv: Add fixed pipeline point size 2021-07-22 21:51:25 -04:00
FernandoS27
9d7422d967 shader: Add PointCoord attribute 2021-07-22 21:51:25 -04:00
ameerj
b7589fe115 shader: Add PointSize attribute 2021-07-22 21:51:25 -04:00
ReinUsesLisp
514a6b07ee shader: Store type of phi nodes in flags
This is needed because pseudo-instructions where invalidated.
2021-07-22 21:51:25 -04:00
ReinUsesLisp
b0d5572abf shader: Fix indirect branches to scheduler instructions 2021-07-22 21:51:25 -04:00
ReinUsesLisp
55b960a20f spirv: Fix default output attribute initialization 2021-07-22 21:51:25 -04:00
ReinUsesLisp
12783f8105 shader: Add missing new lines 2021-07-22 21:51:25 -04:00
ameerj
6c51f49632 shader: Implement FSWZADD 2021-07-22 21:51:25 -04:00
FernandoS27
34aba9627a shader: Implement BRX 2021-07-22 21:51:25 -04:00
ReinUsesLisp
39a379632e shader: Fix alignment checks on RZ 2021-07-22 21:51:25 -04:00
ameerj
73af0d2e0d shader: Implement I2I CC 2021-07-22 21:51:25 -04:00
ameerj
dbc1e5cde7 shader: Implement I2I SAT 2021-07-22 21:51:25 -04:00
ameerj
cd9f75e223 shader: Fix ISCADD logic for PO/CC 2021-07-22 21:51:25 -04:00
ReinUsesLisp
e860870dd2 shader: Implement LDS, STS, LDL, and STS and use SPIR-V 1.4 when available 2021-07-22 21:51:25 -04:00
ameerj
84298ce191 shader: Implement ISCADD CC 2021-07-22 21:51:24 -04:00
ameerj
51475e21ba shader: Implement VMAD, VMNMX, VSETP 2021-07-22 21:51:24 -04:00
ReinUsesLisp
0e1b213fa7 shader: Add missing I2I exception when CC is used 2021-07-22 21:51:24 -04:00
ReinUsesLisp
dbd882ddeb shader: Better interpolation and disabled attributes support 2021-07-22 21:51:24 -04:00
ReinUsesLisp
675a82416d spirv: Remove dependencies on Environment when generating SPIR-V 2021-07-22 21:51:24 -04:00
ReinUsesLisp
f0031babeb shader: Implement front face 2021-07-22 21:51:24 -04:00
ReinUsesLisp
a806b29cb9 shader: Fix structured control flow on KIL instructions
This could potentially leave unvisited blocks, leading to illegal phi
nodes.
2021-07-22 21:51:24 -04:00
FernandoS27
cdf0cc3869 shader: Fix TXQ 2021-07-22 21:51:24 -04:00
ReinUsesLisp
17063d16a3 shader: Implement TXQ and fix FragDepth 2021-07-22 21:51:24 -04:00
ReinUsesLisp
d9c5bd9509 shader: Refactor PTP and other minor changes 2021-07-22 21:51:24 -04:00
FernandoS27
b5db38f50e shader: Add IR opcode for ImageFetch 2021-07-22 21:51:24 -04:00
FernandoS27
742d11c2ad shader: Implement TLD4.PTP 2021-07-22 21:51:24 -04:00
FernandoS27
981eb6f43b shader: Fix Array Indices in TEX/TLD4 2021-07-22 21:51:24 -04:00
FernandoS27
f5672777c8 shader: Implement FragDepth 2021-07-22 21:51:24 -04:00
FernandoS27
fda0835300 shader: Implement TLD4S. 2021-07-22 21:51:24 -04:00
FernandoS27
c7c518e280 shader: Implement TLD4 and TLD4_B 2021-07-22 21:51:24 -04:00
ameerj
32c5483beb shader: Implement SHFL 2021-07-22 21:51:24 -04:00
ReinUsesLisp
49e87ea8ab shader: Track first bindless argument instead of the instruction itself 2021-07-22 21:51:24 -04:00
ReinUsesLisp
d3dad6b632 shader: Properly insert Prologue instruction 2021-07-22 21:51:24 -04:00
ReinUsesLisp
83a283fa86 shader: Minor style nits 2021-07-22 21:51:24 -04:00
FernandoS27
8cb9443cb9 shader: Fix F2I 2021-07-22 21:51:24 -04:00
ReinUsesLisp
68a9505d8a shader: Implement NDC [-1, 1], attribute types and default varying initialization 2021-07-22 21:51:24 -04:00
ReinUsesLisp
1d2db78398 shader: Fix use-after-free bug in object_pool 2021-07-22 21:51:24 -04:00
ameerj
3d07cef009 shader: Implement VOTE 2021-07-22 21:51:24 -04:00
ReinUsesLisp
a8d8fd40f7 shader: Fix TEX mask 2021-07-22 21:51:24 -04:00
ReinUsesLisp
c63cf4fa2e vk_pipeline_cache: Add pipeline cache 2021-07-22 21:51:24 -04:00
ReinUsesLisp
2be5c7eff4 shader: Fold interpolation multiplications 2021-07-22 21:51:24 -04:00
ReinUsesLisp
96b7ced6ec shader: Better but still partial interpolation support 2021-07-22 21:51:24 -04:00
ameerj
e4e1cc11b8 shader: Implement DMNMX, DSET, DSETP 2021-07-22 21:51:24 -04:00
FernandoS27
56be556eee shader: Implement FADD32I 2021-07-22 21:51:24 -04:00
FernandoS27
a62f04efab shader: Implement F2F 2021-07-22 21:51:24 -04:00
ReinUsesLisp
8b3b9c3371 shader: Add missing fp64 usage flags 2021-07-22 21:51:24 -04:00
ameerj
c858b8ba97 shader: Implement DMUL and DFMA
Also add a missing const on DADD
2021-07-22 21:51:24 -04:00
ameerj
112b8f00f0 shader: Add FP64 register load/store helpers 2021-07-22 21:51:24 -04:00
ReinUsesLisp
a77e764726 shader: Add support for fp16 comparisons and misc fixes 2021-07-22 21:51:24 -04:00
FernandoS27
27fb97377e shader: Fix floating point comparison for FP16 2021-07-22 21:51:23 -04:00
FernandoS27
e10d9c1b8e shader: Implement HSETP2 2021-07-22 21:51:23 -04:00
FernandoS27
9e213fd861 shader: Implement HSET2 2021-07-22 21:51:23 -04:00
FernandoS27
ed6cd3c94a shader: Implement HMUL2 2021-07-22 21:51:23 -04:00
FernandoS27
28dff6a629 shader: Implement HFMA2 2021-07-22 21:51:23 -04:00
ReinUsesLisp
76c8a962ac spirv: Implement VertexId and InstanceId, refactor code 2021-07-22 21:51:23 -04:00
FernandoS27
e802512d8e shader: Refactor half floating instructions 2021-07-22 21:51:23 -04:00
ReinUsesLisp
f91859efd2 shader: Implement I2F 2021-07-22 21:51:23 -04:00
ReinUsesLisp
c97d03efb9 shader: Implement ISCADD (imm) 2021-07-22 21:51:23 -04:00
ReinUsesLisp
eeb1efa2d2 shader: Implement LOP32I 2021-07-22 21:51:23 -04:00
ReinUsesLisp
260743f371 shader: Add partial rasterizer integration 2021-07-22 21:51:23 -04:00
ameerj
72990df7ba shader: Implement DADD 2021-07-22 21:51:23 -04:00
ameerj
3b7fd3ad0f shader: Implement CSET and CSETP 2021-07-22 21:51:23 -04:00
ReinUsesLisp
32b6c63485 shader: Reorder phi nodes when redefined as undefined opcodes 2021-07-22 21:51:23 -04:00
ReinUsesLisp
8dd0acfaeb shader: Fix instruction transitions in and out of Phi 2021-07-22 21:51:23 -04:00
ameerj
fa2f6e38f4 shader: Implement FSET and FSETP
Also fix oversight with adding SignedZeroInfNanPreserve execution mode.
2021-07-22 21:51:23 -04:00
ReinUsesLisp
17a82b56d7 shader: Implement TEXS 2021-07-22 21:51:23 -04:00
ReinUsesLisp
71f96fa636 shader: Implement CAL inlining function calls 2021-07-22 21:51:23 -04:00
ameerj
b9f7bf4472 spirv: Add SignedZeroInfNanPreserve logic 2021-07-22 21:51:23 -04:00
ameerj
8d470c2e63 shader: Implement FMNMX
And add a const in FCMP
2021-07-22 21:51:23 -04:00
ReinUsesLisp
2d422b2498 shader: Fix rebase issue 2021-07-22 21:51:23 -04:00
ameerj
ba8c1d2eb4 shader: Implement FCMP
still need to configure some settings for NV denorm flush and intel NaN
2021-07-22 21:51:23 -04:00
ReinUsesLisp
3a63fa0477 shader: Partial implementation of LDC 2021-07-22 21:51:23 -04:00
ReinUsesLisp
ab46371247 shader: Initial support for textures and TEX 2021-07-22 21:51:23 -04:00
ameerj
7d6ba5b984 shader: Implement R2P 2021-07-22 21:51:23 -04:00
ameerj
924f0a9149 shader: Implement SHF 2021-07-22 21:51:23 -04:00
ameerj
5465cb1561 shader: Implement LEA 2021-07-22 21:51:23 -04:00
ReinUsesLisp
d1edc16ba8 shader: Deduplicate HADD2 code 2021-07-22 21:51:23 -04:00
ameerj
81f72471e8 shader: Implement I2I 2021-07-22 21:51:23 -04:00
ReinUsesLisp
4006929c98 shader: Implement HADD2 2021-07-22 21:51:23 -04:00
ameerj
980cafdc27 shader: Implement LOP and LOP3 2021-07-22 21:51:23 -04:00
ameerj
382cba94ed shader: Implement IADD3 2021-07-22 21:51:23 -04:00
ameerj
c2155f04d4 shader: Implement PSETP 2021-07-22 21:51:23 -04:00
ameerj
ce9b116cfe Implement PSET, refactor common comparison funcs 2021-07-22 21:51:23 -04:00
ameerj
103b9da4f7 shader: Implement FLO 2021-07-22 21:51:23 -04:00
ameerj
e038928616 shader: Implement ISET, add common_funcs 2021-07-22 21:51:23 -04:00
ameerj
bec7d3111d shader: Make IMNMX, SHR, SEL stylistically more consistent 2021-07-22 21:51:22 -04:00
ameerj
bce0b1dcca shader: Implement ICMP 2021-07-22 21:51:22 -04:00
ameerj
20390c0548 shader: Implement IMNMX 2021-07-22 21:51:22 -04:00
ameerj
08a9e95905 shader: Implement BFI 2021-07-22 21:51:22 -04:00
ameerj
34ac9b4d7e shader: Implement BFE 2021-07-22 21:51:22 -04:00
ameerj
a8c41c50d3 shader: Implement POPC 2021-07-22 21:51:22 -04:00
ameerj
cc55d28949 shader: Implement SHR 2021-07-22 21:51:22 -04:00
ameerj
8810c88b7e shader: Implement SEL 2021-07-22 21:51:22 -04:00
ReinUsesLisp
726625cf50 spirv: Move phi arguments emit to a separate function 2021-07-22 21:51:22 -04:00
ReinUsesLisp
3bc857f2f3 shader: Avoid infinite recursion when tracking global memory 2021-07-22 21:51:22 -04:00
ReinUsesLisp
622d676202 shader: Fix conditional execution of exit instructions 2021-07-22 21:51:22 -04:00
ReinUsesLisp
7496bbf758 spirv: Add support for self-referencing phi nodes 2021-07-22 21:51:22 -04:00
ReinUsesLisp
e87a502da2 shader: Fix control flow 2021-07-22 21:51:22 -04:00
ReinUsesLisp
9d6a98d950 shader: Implement more of XMAD and FFMA32I and fix XMAD.CBCC 2021-07-22 21:51:22 -04:00
ReinUsesLisp
e44752ddc8 shader: FMUL, select, RRO, and MUFU fixes 2021-07-22 21:51:22 -04:00
ReinUsesLisp
18a766b362 shader: Fix MOV(reg), add SHL variants and emit neg and abs instructions 2021-07-22 21:51:22 -04:00
ReinUsesLisp
274897dfd5 spirv: Fixes and Intel specific workarounds 2021-07-22 21:51:22 -04:00
ReinUsesLisp
704c6f353f shader: Rename, implement FADD.SAT and P2R (imm) 2021-07-22 21:51:22 -04:00
ReinUsesLisp
e2bc05b17d shader: Add denorm flush support 2021-07-22 21:51:22 -04:00
ReinUsesLisp
6db69990da spirv: Add lower fp16 to fp32 pass 2021-07-22 21:51:22 -04:00
ReinUsesLisp
85cce78583 shader: Primitive Vulkan integration 2021-07-22 21:51:22 -04:00
ReinUsesLisp
58914796c0 shader: Add XMAD multiplication folding optimization 2021-07-22 21:51:22 -04:00
ReinUsesLisp
4b438f94cf shader: Simplify ISCADD 2021-07-22 21:51:22 -04:00
ReinUsesLisp
3633e43377 shader: Add utility to resolve identities on a value 2021-07-22 21:51:22 -04:00
ReinUsesLisp
3a59fffaa1 spirv: Implement EmitIdentity 2021-07-22 21:51:22 -04:00
ReinUsesLisp
b5d7279d87 spirv: Initial bindings support 2021-07-22 21:51:22 -04:00
ReinUsesLisp
d5d468cf2c shader: Improve object pool 2021-07-22 21:51:22 -04:00
ReinUsesLisp
1c0b8bca5e shader: Fix tracking 2021-07-22 21:51:22 -04:00
ReinUsesLisp
1b0cf2309c shader: Add support for forward declarations 2021-07-22 21:51:22 -04:00
ReinUsesLisp
cbfb7d182a shader: Support SSA loops on IR 2021-07-22 21:51:22 -04:00
ReinUsesLisp
8af9297f09 shader: Misc fixes 2021-07-22 21:51:22 -04:00
ReinUsesLisp
9170200a11 shader: Initial implementation of an AST 2021-07-22 21:51:22 -04:00
ReinUsesLisp
2930dccecc spirv: Initial SPIR-V support 2021-07-22 21:51:22 -04:00
ReinUsesLisp
6dafb08f52 shader: Better constant folding 2021-07-22 21:51:22 -04:00
ReinUsesLisp
da8096e6e3 shader: Properly store phi on Inst 2021-07-22 21:51:21 -04:00
ReinUsesLisp
16cb00c521 shader: Add pools and rename files 2021-07-22 21:51:21 -04:00
ReinUsesLisp
be94ee88d2 shader: Make typed IR 2021-07-22 21:51:21 -04:00
ReinUsesLisp
dc04a50ac2 shader: Remove illegal character in SSA pass 2021-07-22 21:51:21 -04:00
ReinUsesLisp
e81739493a shader: Constant propagation and global memory to storage buffer 2021-07-22 21:51:21 -04:00
ReinUsesLisp
d24a16045f shader: Initial instruction support 2021-07-22 21:51:21 -04:00
ReinUsesLisp
6c4cc0cd06 shader: SSA and dominance 2021-07-22 21:51:21 -04:00
ReinUsesLisp
2d48a7b4d0 shader: Initial recompiler work 2021-07-22 21:51:21 -04:00