Commit graph

121 commits

Author SHA1 Message Date
gdk
3aa5397bad SPIR-V: Fix another case of wrong field index 2022-06-17 22:42:56 +01:00
gdk
670431f4fa SPIR-V: Fix field index for scale count 2022-06-17 22:42:56 +01:00
gdk
0b27b3e470 SPIR-V: Resolution scale support and fix TextureSample multisample with LOD bug 2022-06-17 22:42:55 +01:00
gdk
f18e7aa779 SPIR-V: Implement StoreShader8/16 and StoreStorage8/16 2022-06-17 22:42:55 +01:00
gdk
3b444f0ea3 SPIR-V: Geometry shader passthrough support 2022-06-17 22:42:54 +01:00
gdk
cacc9c7da4 SPIR-V: Implement tessellation support 2022-06-17 22:42:54 +01:00
gdk
070996ad6d Ignore unsupported attributes rather than throwing (matches current GLSL behaviour) 2022-06-17 22:42:54 +01:00
gdk
d5e2cc2f9b SPIR-V: Constant buffer indexing support 2022-06-17 22:42:54 +01:00
gdk
1448136c3d SPIR-V: Implement LogicalExclusiveOr 2022-06-17 22:42:53 +01:00
gdk
324d0528d3 SPIR-V: Fix TextureSize for MS and Buffer sampler types 2022-06-17 22:42:53 +01:00
gdk
95d5a50042 SPIR-V: Implement attribute indexing and StoreAttribute 2022-06-17 22:42:53 +01:00
gdk
2ef7622126 SPIR-V: Fix SwizzleAdd and some validation errors 2022-06-17 22:42:52 +01:00
riperiperi
7882c0498b SPIR-V: Only use input attribute type for input attributes
Output vertex attributes should always be of type float.
2022-06-17 22:42:48 +01:00
riperiperi
cbeb40934f SPIR-V: Don't OpReturn if we already OpExit'ed
Fixes spir-v parse failure and stack smashing in RADV (obviously you still need bolist)
2022-06-17 22:42:48 +01:00
riperiperi
c1517e5ee3 SPIR-V: Use ConstantComposite for Texture Offset Vector
Fixes a bunch of freezes with SPIR-V on AMD hardware, and validation errors. Note: Obviously assumes input offsets are constant, which they currently are.
2022-06-17 22:42:48 +01:00
riperiperi
2d6642d605 SPIR-V: Only add FSI exec mode if used. 2022-06-17 22:42:47 +01:00
gdk
1ab42e9ce8 SPIR-V: Implement SwizzleAdd, add missing Triangles ExecutionMode for geometry shaders, remove SamplerType field from TextureMeta 2022-06-17 22:42:44 +01:00
gdk
c260ef7b0a SPIR-V: Add early fragment tests support 2022-06-17 22:42:44 +01:00
gdk
387333454b SPIR-V: Fragment shader interlock support (and image coherency) 2022-06-17 22:42:44 +01:00
gdk
f51f9e90d4 SPIR-V: Transform feedback support 2022-06-17 22:42:44 +01:00
riperiperi
dd718fbe97 Pool Spv.Generator resources, cache delegates, spv opts
- Pools for Instructions and LiteralIntegers. Can be passed in when creating the generator module.
  - NewInstruction is called instead of new Instruction()
  - Ryujinx SpirvGenerator passes in some pools that are static. The idea is for these to be shared between threads eventually.
- Estimate code size when creating the output MemoryStream
- LiteralInteger pools using ThreadStatic pools that are initialized before and after creation... not sure of a better way since the way these are created is via implicit cast.

Also, cache delegates for Spv.Generator for functions that are passed around to GenerateBinary etc, since passing the function raw creates a delegate on each call.

TODO: update python spv cs generator to make the coregrammar with NewInstruction and the `params` overloads.
2022-06-17 22:42:43 +01:00
gdk
301ddec36f SPIR-V: Use correct binding number on storage buffers array 2022-06-17 22:42:43 +01:00
gdk
e1d73cc560 SPIR-V: Geometry shader support 2022-06-17 22:42:42 +01:00
gdk
3c949309e5 SPIR-V: Implement LoopContinue IR instruction 2022-06-17 22:42:41 +01:00
gdk
aa0913838d SPIR-V: Set DepthReplacing execution mode when FragDepth is modified 2022-06-17 22:42:40 +01:00
gdk
97b179696b SPIR-V: Fix ImageQuerySizeLod 2022-06-17 22:42:40 +01:00
gdk
a2e4b4b6d8 SPIR-V: Functions must always end with a return 2022-06-17 22:42:40 +01:00
gdk
7347642c05 More instructions + fixes on SPIR-V backend 2022-06-17 22:42:40 +01:00
gdk
52249e50dd Fix transform feedback on Intel, gl_Position feedback and clears to inexistent depth buffers 2022-06-17 22:42:38 +01:00
gdk
9a95c3c3bc Update Spv.Generator 2022-06-17 22:42:35 +01:00
riperiperi
393d0a6134 Update findMSB/findLSB to match master's instruction enum 2022-06-17 22:42:34 +01:00
gdk
616f14c46d Fix rebase build break 2022-06-17 22:42:32 +01:00
gdk
fa24c41d32 Fix some tessellation related issues (still doesn't work?) 2022-06-17 22:42:32 +01:00
gdkchan
c6fbaf844e No need to initialize attributes on the SPIR-V backend anymore 2022-06-17 22:42:31 +01:00
gdkchan
4513e8b226 WIP Vulkan implementation 2022-06-17 22:42:30 +01:00
riperiperi
43b4b34376
Implement Viewport Transform Disable (#3328)
* Initial implementation (no specialization)

* Use specialization

* Fix render scale, increase code gen version

* Revert accidental change

* Address Feedback
2022-05-12 10:47:13 -03:00
gdkchan
e44a43c7e1
Implement VMAD shader instruction and improve InvocationInfo and ISBERD handling (#3251)
* Implement VMAD shader instruction and improve InvocationInfo and ISBERD handling

* Shader cache version bump

* Fix typo
2022-04-08 12:42:39 +02:00
gdkchan
04bd87ed5a
Fix shader textureSize with multisample and buffer textures (#3240)
* Fix shader textureSize with multisample and buffer textures

* Replace out param with tuple return value
2022-04-04 14:43:58 -03:00
gdkchan
f861f0bca2
Fix missing geometry shader passthrough inputs (#3106)
* Fix missing geometry shader passthrough inputs

* Shader cache version bump
2022-02-11 19:52:20 +01:00
gdkchan
7e967d796c
Stop using glTransformFeedbackVaryings and use explicit layout on the shader (#3012)
* Stop using glTransformFeedbackVarying and use explicit layout on the shader

* This is no longer needed

* Shader cache version bump

* Fix gl_PerVertex output for tessellation control shaders
2022-01-21 12:35:21 -03:00
riperiperi
79adba4402
Add support for render scale to vertex stage. (#2763)
* Add support for render scale to vertex stage.

Occasionally games read off textureSize on the vertex stage to inform the fragment shader what size a texture is without querying in there. Scales were not present in the vertex shader to correct the sizes, so games were providing the raw upscaled texture size to the fragment shader, which was incorrect.

One downside is that the fragment and vertex support buffer description must be identical, so the full size scales array must be defined when used. I don't think this will have an impact though. Another is that the fragment texture count must be updated when vertex shader textures are used. I'd like to correct this so that the update is folded into the update for the scales.

Also cleans up a bunch of things, like it making no sense to call CommitRenderScale for each stage.

Fixes render scale causing a weird offset bloom in Super Mario Party and Clubhouse Games. Clubhouse Games still has a pixelated look in a number of its games due to something else it does in the shader.

* Split out support buffer update, lazy updates.

* Commit support buffer before compute dispatch

* Remove unnecessary qualifier.

* Address Feedback
2022-01-08 14:48:48 -03:00
gdkchan
650cc41c02
Implement remaining shader double-precision instructions (#2845)
* Implement remaining shader double-precision instructions

* Shader cache version bump
2021-12-08 17:54:12 -03:00
gdkchan
acc0b0f313
Fix FLO.SH shader instruction with a input of 0 (#2876)
* Fix FLO.SH shader instruction with a input of 0

* Shader cache version bump
2021-12-05 13:25:05 +01:00
gdkchan
b9d83cc97e
Fix shader integer from/to double conversion (#2831) 2021-11-14 21:37:07 -03:00
gdkchan
b7a1544e8b
Fix InvocationInfo on geometry shader and bindless default integer const (#2822)
* Fix InvocationInfo on geometry shader and bindless default integer const

* Shader cache version bump

* Consistency for the default value
2021-11-08 11:39:30 -03:00
gdkchan
99445dd0a6
Add support for fragment shader interlock (#2768)
* Support coherent images

* Add support for fragment shader interlock

* Change to tree based match approach

* Refactor + check for branch targets and external registers

* Make detection more robust

* Use Intel fragment shader ordering if interlock is not available, use nothing if both are not available

* Remove unused field
2021-10-28 19:53:12 -03:00
gdkchan
63f1663fa9
Fix shader 8-bit and 16-bit STS/STG (#2741)
* Fix 8 and 16-bit STG

* Fix 8 and 16-bit STS

* Shader cache version bump
2021-10-18 20:24:15 -03:00
riperiperi
052deebf26
Another workaround for NVIDIA driver 496.13 shader bug (#2750)
* Another workaround for NVIDIA driver 496.13 shader bug

This might work better than the other one. Give this a test to see if it fixes/doesn't fix issues with the other one.

The problem seems to be when any variable assignment happens with a negation. `temp_1 = -temp_0;` seems to trigger weird behaviour, but `temp_1 = 0.0 - temp_0;` does not. This also might to extend towards integer types?

* Update cache version

* Add disclaimer comment

* Wording
2021-10-18 20:04:06 -03:00
gdkchan
d512ce122c
Initial tessellation shader support (#2534)
* Initial tessellation shader support

* Nits

* Re-arrange built-in table

* This is not needed anymore

* PR feedback
2021-10-18 18:38:04 -03:00
gdkchan
a7109c767b
Rewrite shader decoding stage (#2698)
* Rewrite shader decoding stage

* Fix P2R constant buffer encoding

* Fix PSET/PSETP

* PR feedback

* Log unimplemented shader instructions

* Implement NOP

* Remove using

* PR feedback
2021-10-12 22:35:31 +02:00