Commit graph

2277 commits

Author SHA1 Message Date
gdk
d31360e7da Implement GPU selector and expose texture recompression on the UI and config 2022-06-17 22:47:04 +01:00
riperiperi
c98b61ade8 Use RobustBufferAccess on NVIDIA gpus
Avoids the SMO waterfall triangle on older NVIDIA gpus.
2022-06-17 22:47:04 +01:00
riperiperi
db5a1a6aa6 Workaround RADV crash
Enabling the descriptor indexing extension, even if it is not used, forces the radv driver to use "bolist".
2022-06-17 22:47:04 +01:00
gdk
378b3147b7 Remove pre-compiled shaderc binary for Windows as its no longer needed by default 2022-06-17 22:47:04 +01:00
gdk
c07abe4ec0 Pre-compile helper shader as SPIR-V, and some fixes 2022-06-17 22:47:04 +01:00
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