Commit graph

263 commits

Author SHA1 Message Date
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
d738ad4d0b spirv: Fix image and image buffer descriptor index usage 2021-07-22 21:51:34 -04:00
ReinUsesLisp
9e7b6622c2 shader: Split profile and runtime information in separate structs 2021-07-22 21:51:33 -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
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
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
ReinUsesLisp
38e7b8c805 emit_spirv: Jump to loop body with local variable
Silence unused variable warning
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
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
ReinUsesLisp
c4fd6b55bc glasm: Implement shuffle and vote instructions on GLASM 2021-07-22 21:51:31 -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
ameerj
7ecc6de56a shader: Implement Int32 SUATOM/SURED 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
FernandoS27
b541f5e5e3 shader: Implement VertexA stage 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
d10cf55353 shader: Implement indexed textures 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
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
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
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
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
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
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
ReinUsesLisp
23b8714732 spirv: Define StorageImageWriteWithoutFormat capability when used 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
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
7cb2ab3585 shader: Implement SULD and SUST 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
e9a91bc5cc shader: Interact texture buffers with buffer cache 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
72daa2a039 shader: Fix ShadowCube declaration type, set number of pipeline threads based on hardware 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
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
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
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
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
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
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
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
55b960a20f spirv: Fix default output attribute initialization 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
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
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
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
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
f5672777c8 shader: Implement FragDepth 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
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
ameerj
3d07cef009 shader: Implement VOTE 2021-07-22 21:51:24 -04:00
ameerj
e4e1cc11b8 shader: Implement DMNMX, DSET, DSETP 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
ReinUsesLisp
76c8a962ac spirv: Implement VertexId and InstanceId, refactor code 2021-07-22 21:51:23 -04:00
ReinUsesLisp
f91859efd2 shader: Implement I2F 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
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
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
4006929c98 shader: Implement HADD2 2021-07-22 21:51:23 -04:00
ameerj
103b9da4f7 shader: Implement FLO 2021-07-22 21:51:23 -04:00
ameerj
20390c0548 shader: Implement IMNMX 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
ReinUsesLisp
726625cf50 spirv: Move phi arguments emit to a separate function 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
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