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
adc43297c5
spirv: Fix output generics with components
2021-07-22 21:51:34 -04:00
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
d738ad4d0b
spirv: Fix image and image buffer descriptor index usage
2021-07-22 21:51:34 -04:00
9e7b6622c2
shader: Split profile and runtime information in separate structs
2021-07-22 21:51:33 -04:00
9bb3e008c9
shader: Read branch conditions from an instruction
...
Fixes the identity removal pass.
2021-07-22 21:51:32 -04:00
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
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
38e7b8c805
emit_spirv: Jump to loop body with local variable
...
Silence unused variable warning
2021-07-22 21:51:31 -04:00
ab5dbe7c29
emit_spirv: Add missing block in case
2021-07-22 21:51:31 -04:00
bf5e48ffe4
glasm: Initial implementation of phi nodes on GLASM
2021-07-22 21:51:31 -04:00
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
c4fd6b55bc
glasm: Implement shuffle and vote instructions on GLASM
2021-07-22 21:51:31 -04:00
b725db8709
shader: Fixup SPIR-V emit header namespaces
2021-07-22 21:51:30 -04:00
bed090807a
Move SPIR-V emission functions to their own header
2021-07-22 21:51:30 -04:00
ee61ec2c39
shader: Optimize NVN Fallthrough
2021-07-22 21:51:30 -04:00
7ecc6de56a
shader: Implement Int32 SUATOM/SURED
2021-07-22 21:51:30 -04:00
850b08a16c
spirv: Be aware of NAN unaware drivers
2021-07-22 21:51:30 -04:00
fde47152d9
spirv: Add SSBO read fallbacks when no aliasing is available
2021-07-22 21:51:29 -04:00
fd913bceaf
spirv: Add OpKill fallback to demote
2021-07-22 21:51:29 -04:00
d2a0f9d7ad
spirv: Do not enable ShaderLayer
...
This is enabled by an extension instead of the capability.
2021-07-22 21:51:29 -04:00
2b434b74af
spirv: Enable DemoteToHelperInvocationEXT only when supported
2021-07-22 21:51:29 -04:00
cfd873275d
spirv: Use OriginLowerLeft when requested
2021-07-22 21:51:29 -04:00
bafe9e35a9
spirv: Only add image operands mask when needed
2021-07-22 21:51:29 -04:00
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
4ead714910
spirv: Add int8 and int16 capabilities only when supported
2021-07-22 21:51:29 -04:00
33bebc3412
spirv: Add integer clamping workarounds
...
Workaround more bugs on Nvidia's OpenGL SPIR-V compiler.
2021-07-22 21:51:29 -04:00
7b03b97118
spirv: Implement int8 and int16 conversion fallbacks
2021-07-22 21:51:29 -04:00
48a17298d7
spirv: Support OpenGL uniform buffers and change bindings
2021-07-22 21:51:29 -04:00
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
b541f5e5e3
shader: Implement VertexA stage
2021-07-22 21:51:29 -04:00
57464e3b72
shader: Fix storage type when reading patches on tess control
2021-07-22 21:51:29 -04:00
d10cf55353
shader: Implement indexed textures
2021-07-22 21:51:28 -04:00
050e81500c
shader: Move microinstruction header to the value header
2021-07-22 21:51:28 -04:00
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
6325601947
spirv: Fix ViewportMask
2021-07-22 21:51:28 -04:00
5b8afed871
spirv: Replace Constant/ConstantComposite with Const helper
2021-07-22 21:51:28 -04:00
f69d0b91ff
shader: Address feedback
2021-07-22 21:51:28 -04:00
080857b60e
shader: Add coarse derivatives
2021-07-22 21:51:28 -04:00
04c459fc8d
shader: Implement fine derivates constant propagation
2021-07-22 21:51:28 -04:00
f18a6dd1bd
shader: Implement SR_Y_DIRECTION
2021-07-22 21:51:28 -04:00
0a0818c025
shader: Fix memory barriers
2021-07-22 21:51:28 -04:00
c9e4609d87
spirv: Fix implicit lod type
2021-07-22 21:51:28 -04:00
7cfa403683
spirv: Use explicit lods outside of fragment shaders
2021-07-22 21:51:28 -04:00
dbbd4b5496
spirv: Use ConstOffset instead of Offset when possible
2021-07-22 21:51:28 -04:00
be431f5ed0
shader: Implement BFE and BFI CC
...
Fix two bugs in BFI.
2021-07-22 21:51:28 -04:00
80940b1706
shader: Implement SampleMask
2021-07-22 21:51:28 -04:00
95815a3883
shader: Implement PIXLD.MY_INDEX
2021-07-22 21:51:28 -04:00
f3473c5143
spirv: Bitcast non-F32 output attributes to their type before store
2021-07-22 21:51:28 -04:00
e3514bcd6b
spirv: Implement ViewportMask with NV_viewport_array2
2021-07-22 21:51:28 -04:00