Commit graph

2272 commits

Author SHA1 Message Date
gdk
400ed2d96d Add minimal pipeline layouts that only contains used bindings
They are used by helper shaders, the intention is avoiding needing to recompile the shaders (from GLSL to SPIR-V) if the bindings changes on the translated guest shaders
2022-06-17 22:47:04 +01:00
gdk
38ecf0f117 Remove old CompileShader methods from the Vulkan backend 2022-06-17 22:47:03 +01:00
gdk
b6764620be Support multisample texture copy with automatic resolve on Vulkan 2022-06-17 22:47:03 +01:00
gdk
572759a4ac Combine non-buffer with buffer image descriptor sets 2022-06-17 22:47:03 +01:00
Emmanuel Hansen
8a1bdf1f1e Add support for avalonia (#6)
* add avalonia support

* only lock around skia flush

* addressed review

* cleanup

* add fallback size if avalonia attempts to render but the window size is 0. read desktop scale after enabling dpi check

* fix getting window handle on linux. skip render is size is 0
2022-06-17 22:47:03 +01:00
riperiperi
2000070330 Flush queries on attachment change rather than program change
Occlusion queries are usually used in a depth only pass so the attachments changing is a better indication of the query block ending.

Write mask changes are also considered since some games do depth only pass by setting 0 write mask on all the colour targets.
2022-06-17 22:47:03 +01:00
riperiperi
d4b9a6378f Bounds check on bitmap add. 2022-06-17 22:47:02 +01:00
gdk
1fac9dc29b If MultiViewport is not supported, do not try to set more than one viewport/scissor 2022-06-17 22:47:02 +01:00
gdk
74a8f37f8d Do not require null descriptors support 2022-06-17 22:47:02 +01:00
gdk
c832f55618 Fix inverse viewport transform vector type on SPIR-V 2022-06-17 22:47:02 +01:00
riperiperi
281f16aa36 Fix dependency 2022-06-17 22:47:02 +01:00
riperiperi
6ba93addf7 Fix BCn 4/5 conversion, GetTextureTarget
BCn 4/5 could generate invalid data when a line's size in bytes was not divisible by 4, which both backends expect.

GetTextureTarget was not creating a view with the replacement format.
2022-06-17 22:47:02 +01:00
gdk
782a0c4e93 Add support for BC6 and BC7 decompression, decompress all BC formats if they are not supported by the host 2022-06-17 22:47:02 +01:00
riperiperi
65cecb0c2f Fix headless build 2022-06-17 22:47:01 +01:00
riperiperi
d2cef41c5b Fix Avalonia Rebase
Vulkan is currently not available on Avalonia, but the build does work and you can use opengl.
2022-06-17 22:47:01 +01:00
riperiperi
52050e4d48 Fix gl_FragCoord.z transformation
FragCoord.z is always in 0-1, even when the real depth range is -1 to 1. Turns out the only bug was geo and tess stage outputs.

Fixes Pokemon Sword/Shield, possibly others.
2022-06-17 22:47:01 +01:00
riperiperi
f636810c6c Check for transform feedback query support
Sometimes transform feedback is supported without the query type.
2022-06-17 22:47:01 +01:00
riperiperi
d4ccb6b895 Return of the Vector Indexing Bug
One day, everyone will get this right.
2022-06-17 22:47:00 +01:00
riperiperi
9f0feb8879 Don't create query pools for unsupported query types 2022-06-17 22:47:00 +01:00
riperiperi
5a6a70e3d5 Fix typo 2022-06-17 22:47:00 +01:00
riperiperi
182c95a588 Vulkan/SPIR-V support for viewport inverse 2022-06-17 22:47:00 +01:00
riperiperi
884ee76d7c Update guest cache to v1.1 (due to specialization state changes)
This will explode your shader cache from earlier vulkan build, but it must be done. 😔
2022-06-17 22:47:00 +01:00
riperiperi
f21761555c Add Gl StencilOp enum values to Vulkan 2022-06-17 22:47:00 +01:00
riperiperi
a34efcd398 Remove gl_FragDepth scaling
This is always 0-1; the other two issues were causing the problems. Fixes regression with Xenoblade.
2022-06-17 22:47:00 +01:00
riperiperi
c3951877f7 Geometry Shader index count from ThreadsPerInputPrimitive
Generally fixes SPIR-V emitting too many triangles, may change games in OpenGL
2022-06-17 22:46:59 +01:00
riperiperi
8097480b02 Improvements to -1 to 1 depth mode.
- Transformation is only applied on the last stage in the vertex pipeline.
- Should fix some issues with geometry and tessellation (hopefully)
- Reading back FragCoord Z on fragment will transform back to -1 to 1.
2022-06-17 22:46:59 +01:00
gdk
daaa7fda11 Do not report R4G4 format as supported on Vulkan
It was causing mario head to become white on Super Mario 64 (???)
2022-06-17 22:46:59 +01:00
gdk
2e53b2e0e8 Add texture recompression support (disabled for now)
It recompresses ASTC textures into BC7, which might reduce VRAM usage significantly on games that uses ASTC textures
2022-06-17 22:46:59 +01:00
riperiperi
646be812ed Report 32 bit query result on AMD windows (smo issue) 2022-06-17 22:46:59 +01:00
gdk
7838a45772 Add barrier before use of some modified images 2022-06-17 22:46:56 +01:00
gdk
2852ddf510 Fix A1B5G5R5 texture format and support R4G4 on Vulkan 2022-06-17 22:46:06 +01:00
gdk
39467f7062 Consolidate UpdateDepthMode and GetDepthMode implementation 2022-06-17 22:46:05 +01:00
gdk
dd54eb4be1 Geometry shader passthrough emulation 2022-06-17 22:46:05 +01:00
gdk
2713703d45 Do not clear unbound framebuffer color attachments 2022-06-17 22:46:05 +01:00
gdk
de87ed3edc Fix backbuffer not being cleared and scissor not being re-enabled on OpenGL 2022-06-17 22:46:05 +01:00
gdk
6543531db8 No need to pack the shader binaries if shader cache is disabled 2022-06-17 22:46:05 +01:00
gdk
fd2e53fdc6 Raise textures limit to 64 on Vulkan 2022-06-17 22:46:05 +01:00
gdk
efa2868825 Remove unused PipelineConverter format variable (was causing IOR) 2022-06-17 22:46:04 +01:00
gdk
d6b1ba09bc _unit0Sampler should be set only for binding 0 2022-06-17 22:46:04 +01:00
gdk
dd915ae67b Allow null samplers on OpenGL backend 2022-06-17 22:46:04 +01:00
riperiperi
dc0a00f93c Fix pipeline state saving before it is updated.
This should fix a few warnings and potential stutters due to bad pipeline states being saved in the cache. You may need to clear your guest cache.
2022-06-17 22:46:04 +01:00
gdk
c95cdc853e Enable shader cache on Vulkan and implement MultiplyHighS32/U32 on SPIR-V (missed those before) 2022-06-17 22:45:57 +01:00
gdk
2121f69b1c We don't need to recompile shaders if alpha test state changed but alpha test is disabled 2022-06-17 22:45:03 +01:00
gdk
5670022e27 Only enable ShaderFloat64 if the GPU supports it 2022-06-17 22:45:03 +01:00
gdk
1edc85c26e Check if the subgroup size is supported before passing a explicit size 2022-06-17 22:45:03 +01:00
gdk
4f086b0ec9 Shader specialization for new Vulkan required state (fixes remaining alpha test issues, vertex stretching on AMD on Crash Bandicoot, etc) 2022-06-17 22:45:00 +01:00
gdk
4648e37a31 Use ClampToEdge for Clamp sampler address mode on Vulkan (fixes Hollow Knight)
Clamp is unsupported on Vulkan, but ClampToEdge behaves almost the same. ClampToBorder on the other hand (which was being used before) is pretty different
2022-06-17 22:42:59 +01:00
gdk
7c32e4a3fe Add missing barriers around CmdFillBuffer (fixes Monster Hunter Rise flickering on NVIDIA) 2022-06-17 22:42:58 +01:00
gdk
80d72504d4 Take componentMask and scissor into account when clearing framebuffer attachments 2022-06-17 22:42:58 +01:00
gdk
746eded2cf Use explicit subgroup size if we can (might fix some block flickering on AMD) 2022-06-17 22:42:57 +01:00