Commit Graph

9666 Commits

Author SHA1 Message Date
4868c361e7 renderer_vulkan: Bump vertex buffer size
* So software shaders don't crash
2022-12-25 22:23:46 +02:00
0c30dbf33e renderer_vulkan: Add more microprofile targets 2022-12-25 22:23:46 +02:00
53370e81e2 renderer_vulkan: Improve StreamBuffer API and use it in TextureRuntime
* Also use separate upload and download buffers optimized for write and readback respectively. This gives a huge 20+ FPS boost in most games which were bottlenecked by slow reads
2022-12-25 22:23:46 +02:00
b3fb260c84 renderer_vulkan: Fix allocation caching bug 2022-12-25 22:23:46 +02:00
599ca7caf7 renderer_opengl: Port scaled upload/download code from vulkan 2022-12-25 22:23:46 +02:00
abc0fd5e7b renderer_vulkan: Include algorithm in vk_common
* Appears to be a bug in vulkan-hpp
2022-12-25 22:23:46 +02:00
309b25d201 renderer_vulkan: Use linear filtering when possible
* Fixes blocky artifacts in Samus Returns
2022-12-25 22:23:46 +02:00
9ac7ef20b0 renderer_vulkan: Abstract descriptor management
* The pipeline cache was starting to get cluttered
2022-12-25 22:23:46 +02:00
ebade3594d renderer_vulkan: Bump descriptor set allocation limit 2022-12-25 22:23:46 +02:00
dca159d79f renderer_vulkan: Fix storage descriptor binding and respect color mask
* RGBA8 surfaces now expose an additional R32Uint view used for storage descriptors. The format is guaranteed by the spec to support atomic loads/stores. This requires the mutable flag which incurs a performance cost, but might be better than breaking the current renderpass each draw when rendering shadows, especially on mobile

* Color mask is also implemented which fixes Street Fighter and Monster Hunter Stories
2022-12-25 22:23:46 +02:00
7007d5822a renderer_vulkan: Implement depth uploads with blit 2022-12-25 22:23:46 +02:00
6f0fdf037f renderer_vulkan: Use intermediate copy when framebuffer is used both as attachment and shader input 2022-12-25 22:23:46 +02:00
58621b0eb6 renderer_vulkan: Respect disk shader option 2022-12-25 22:23:46 +02:00
e8eef5c586 renderer_vulkan: Fix staging buffer size 2022-12-25 22:23:46 +02:00
2b37997a95 renderer_vulkan: Catch and log more runtime errors
* Also add the ability to enable command buffer dumping which is very useful
2022-12-25 22:23:15 +02:00
558062efd7 renderer_vulkan: Batch allocate descriptor sets
* Less driver calls should lead to better performance
2022-12-25 22:20:22 +02:00
5e880a4f26 renderer_vulkan: Emulate border color if possible 2022-12-25 22:20:22 +02:00
238956f773 renderer_vulkan: Implement scaled uploads and downloads
* This commit includes large changes to have textures are handling. Instead of using ImageAlloc, Surface is used instead which provides multiple benefits: automatic recycling on destruction and ability to use the TextureRuntime interface to simplify operations

* Layout tracking is also implemented which allows transitioning of individual mip levels without errors

* This fixes graphical errors in multiple games which relied on framebuffer uploads
2022-12-25 22:20:22 +02:00
a5351bc596 renderer_vulkan: Fix renderpass issues
* The cache didn't take into account the framebuffer and render area used, so if these changed the renderpass wouldn't restart. This caused graphical bugs in Pokemon X/Y
2022-12-25 22:20:22 +02:00
5b6e99b194 renderer_vulkan: Update stencil compare mask 2022-12-25 22:20:22 +02:00
3f3b4a2802 citra_qt: Fix graphics api indicator alignment 2022-12-25 22:20:22 +02:00
c19e8d36c9 renderer_opengl: Fix OpenGLES issues
* Always request a 4.4 context until I figure out how to get Qt to cooperate

* Use RGBA for BGR since the converted table will do that conversion
2022-12-25 22:20:22 +02:00
2ec31f404b renderer_vulkan: Report perf stats 2022-12-25 22:20:21 +02:00
28a2805450 renderer_vulkan: Better error handling 2022-12-25 22:20:21 +02:00
2601a1df6c renderer_vulkan: Allow direct allocation of images 2022-12-25 22:19:26 +02:00
96d5bb553b renderer_vulkan: Fix incorrect depth format detection
* Intel iGPUs don't support blit on all depth/stencil formats which caused issues since the runtime checks for this while the renderpass cache does not
2022-12-25 22:19:26 +02:00
b4d0f442c8 renderer_vulkan: Actually minize state changes
* Keep track of the current state and only update it when needed. Previously games would set the same state over and over cluttering renderdoc logs
2022-12-25 22:19:25 +02:00
2a68cab7d6 renderer_vulkan: Fix broken sync without timeline semaphores 2022-12-25 22:19:25 +02:00
009d73fdf6 renderer_vulkan: Allocate descriptor sets during reinterpretation 2022-12-25 22:19:25 +02:00
42af22f8fd renderer_vulkan: Enable logic ops and fix swapchain resizing 2022-12-25 22:19:25 +02:00
b85d15b035 renderer_vulkan: Clear stencil with renderpass
* Fixes outline retension in pokemon games
2022-12-25 22:19:25 +02:00
130e376c0c renderer_vulkan: Fix pipeline cache crashes 2022-12-25 22:19:25 +02:00
f884986257 renderer_vulkan: Optimize tiled format convertion + fix vertex buffer alignment
* Integrate format convertion to the morton copy function, removing the need for an intermediate copy and convertion pass. This should be beneficial for performance especially since most games use tiled textures

* Also bump vertex buffer size to avoid crashes with hardware shaders and provide correct offset on normal draws which fixes glitches in pokemon Y

* Reduce the local group size to 8 in the D24S8 compute shader which fixes graphical issues in the afformentioned pokemon games at native resolution

* Set LOD to 0 instead of 0.25 to fix another glitch in pokemon y
2022-12-25 22:19:25 +02:00
e23dc3efb1 renderer_opengl: Fix broken texture copy
* Resolves graphical bugs in Professor Layton vs Ace Attorney when using OpenGL
2022-12-25 22:19:25 +02:00
dd5e95d7c6 renderer_vulkan: Pipeline cache fixes
* Delete cache file if found invalid

* Name it after the vendor/device ids so each physical devices gets a separate cache
2022-12-25 22:19:25 +02:00
b72289eadd video_core: Fix renderpass cache bug and introduce RGBA -> BGR converter 2022-12-25 22:19:25 +02:00
7a5d4f03da renderer_opengl: Specify precision in compute shader and add RGB5A1 converter
* Fixes OpenGLES crash
2022-12-25 22:19:25 +02:00
18fa277c71 renderer_vulkan: Complete hardware shader support
* With these changes all commercial games I tested work fine and get a massive performance boost
2022-12-25 22:19:25 +02:00
73cc764091 renderer_vulkan: Begin hardware shader support
* Still experimental and works only with homebrew
2022-12-25 22:19:25 +02:00
9dea514d45 citra: Fix build issues with MinGW and MSVC 2022-12-25 22:19:25 +02:00
0bfaa035b9 renderer_vulkan: Fix warnings and cleanup 2022-12-25 22:19:06 +02:00
85df778785 code: Run clang-format 2022-12-25 22:19:06 +02:00
e54a92c252 code: Address build issues 2022-12-25 22:18:04 +02:00
9145d4cec8 video_core: Re-implement format reinterpretation
* Same as before but D24S8 to RGBA8 is switched to a compute shader which should provide better throughput and is much simpler to implement in Vulkan
2022-12-25 22:18:04 +02:00
c611592db6 citra_qt: Add physical device selection dialog 2022-12-25 22:18:04 +02:00
6aba809da8 renderer_opengl: Unbind unused framebuffer targets
* Fixes graphical glitches in many games for some reason
2022-12-25 22:12:42 +02:00
f0449d79fd renderer_opengl: Emulate texture copy with blit for now 2022-12-25 22:12:42 +02:00
33481ada7f renderer_opengl: Address buffer overflow 2022-12-25 22:12:42 +02:00
67195974e7 video_core: Small code improvements 2022-12-25 22:12:42 +02:00
70c2376fd0 renderer_vulkan: Don't sample from mipmaps when using texture cubes
* Mipmaps for texture cubes are unimplemented in the rasterizer cache, so sampling from mipmaps will return nothing
2022-12-25 22:12:42 +02:00