aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
AgeCommit message (Collapse)Author
2021-02-13buffer_cache: Skip cache on small uploads on VulkanReinUsesLisp
Ports from OpenGL the optimization to skip small 3D uniform buffer uploads. This will take advantage of the previously introduced stream buffer. Fixes instances where the staging buffer offset was being ignored.
2021-02-13vk_staging_buffer_pool: Add stream buffer for small uploadsReinUsesLisp
This uses a ring buffer similar to OpenGL's stream buffer for small uploads. This stops us from allocating several small buffers, reducing memory fragmentation and cache locality. It uses dedicated allocations when possible.
2021-02-13vulkan_device: Enable robustBufferAccessReinUsesLisp
Fix regression on Pascal on Animal Crossing: New Horizons, fixing a validation error.
2021-02-13video_core: Reimplement the buffer cacheReinUsesLisp
Reimplement the buffer cache using cached bindings and page level granularity for modification tracking. This also drops the usage of shared pointers and virtual functions from the cache. - Bindings are cached, allowing to skip work when the game changes few bits between draws. - OpenGL Assembly shaders no longer copy when a region has been modified from the GPU to emulate constant buffers, instead GL_EXT_memory_object is used to alias sub-buffers within the same allocation. - OpenGL Assembly shaders stream constant buffer data using glProgramBufferParametersIuivNV, from NV_parameter_buffer_object. In theory this should save one hash table resolve inside the driver compared to glBufferSubData. - A new OpenGL stream buffer is implemented based on fences for drivers that are not Nvidia's proprietary, due to their low performance on partial glBufferSubData calls synchronized with 3D rendering (that some games use a lot). - Most optimizations are shared between APIs now, allowing Vulkan to cache more bindings than before, skipping unnecesarry work. This commit adds the necessary infrastructure to use Vulkan object from OpenGL. Overall, it improves performance and fixes some bugs present on the old cache. There are still some edge cases hit by some games that harm performance on some vendors, this are planned to be fixed in later commits.
2021-02-13vulkan_common: Expose interop and headless devicesReinUsesLisp
2021-02-13vulkan_common: Make interop extensions mandatoryReinUsesLisp
2021-02-13vulkan_device: Enable robust buffersReinUsesLisp
2021-02-13vulkan_device: Use designated initializers for featuresReinUsesLisp
2021-02-13vulkan_wrapper: Add memory barrier pipeline barrier helperReinUsesLisp
2021-02-13vulkan_device: Fix formatting of constantsReinUsesLisp
2021-02-13vulkan_wrapper: Add interop functionsReinUsesLisp
2021-02-13vulkan_instance: Initialize Vulkan instance in a separate threadReinUsesLisp
Workaround an issue on Nvidia where creating a Vulkan instance from an active OpenGL thread disables threaded optimization on the driver. This optimization is important to have good performance on Nvidia OpenGL.
2021-02-13vulkan_wrapper: Pull Windows symbolsReinUsesLisp
2021-02-13gpu: Report renderer errors with exceptionsReinUsesLisp
Instead of using a two step initialization to report errors, initialize the GPU renderer and rasterizer on the constructor and report errors through std::runtime_error.
2021-02-13buffer_base: Add support for cached CPU writesReinUsesLisp
Some games usually write memory pages currently used by the GPU, causing rendering issues (e.g. flashing geometry and shadows on Link's Awakening). To workaround this issue, Guest CPU writes are delayed until the command buffer finishes processing, but the pages are updated immediately. The overall behavior is: - CPU writes are cached until they are flushed, they update the page state, but don't change the modification state. Cached writes stop pages from being flushed, in case games have meaningful data in it. - Command processing writes (e.g. push constants) update the page state and are marked to the command processor as dirty. They don't remove the state of cached writes.
2021-02-09Merge pull request #5900 from lioncash/unused-funcbunnei
video_core: Remove unused functions and variables
2021-02-09gl_rasterizer: Remove unused variablesLioncash
Resolves warnings on clang 12
2021-02-09texture_cache/util: Remove unused functionsLioncash
Silences a few warnings on clang 12.
2021-02-08Merge pull request #5880 from lat9nq/ffmpeg-externalAmeer J
cmake: FFmpeg linking rework
2021-02-07Merge pull request #5888 from Morph1984/ogl-4.6Rodrigo Locatti
renderer_opengl: Update OpenGL backend version requirement to 4.6
2021-02-08video_core: Delete mortonChloe Marcec
moron.h & morton.cpp are not used anywhere and are just empty files
2021-02-07renderer_opengl: Update OpenGL backend version requirement to 4.6Morph
2021-02-05Address reviewer commentslat9nq
2021-02-05CMake: Port citra-emu/citra FindFFmpeg.cmakelat9nq
Also renames related CMake variables to match both the Find*FFmpeg* and variables defined within the file. Fixes odd errors produced by the old FindFFmpeg. Citra's FindFFmpeg is slightly modified here: adds Citra's copyright at the beginning, renames FFmpeg_INCLUDES to FFmpeg_INCLUDE_DIR, disables a few components in _FFmpeg_ALL_COMPONENTS, and adds the missing avutil component to the comment above.
2021-02-05CMake: Implement YUZU_USE_BUNDLED_FFMPEGlat9nq
For Linux, instructs CMake to use the FFmpeg submodule in externals. This is HEAVILY based on our usage of the late Unicorn. Minimal change to MSVC as it uses the yuzu-emu/ext-windows-bin. MinGW now targets the same ext-windows-bin libraries as MSVC for FFmpeg. Adds FFMPEG_LIBRARIES to WIN32 and simplifies video_core/CMakeLists.txt a bit.
2021-02-01video_core: host_shaders: Don't pass --quiet to glslangValidator if unavailablelat9nq
Prevents CMake from calling `glslangValidator` with `--quiet` when it is not available, i.e. on older downstream versions from Ubuntu.
2021-01-29Merge pull request #5795 from ReinUsesLisp/bytes-to-map-endbunnei
video_core/memory_manager: Add BytesToMapEnd
2021-01-28Merge pull request #5836 from ReinUsesLisp/unaligned-constr-schedLC
vk_scheduler: Fix unaligned placement new expressions
2021-01-27vk_scheduler: Fix unaligned placement new expressionsReinUsesLisp
We were accidentaly creating an object in an unaligned memory address. Fix this by manually aligning the offset.
2021-01-27Merge pull request #5786 from ReinUsesLisp/glsl-cbufbunnei
gl_shader_decompiler: Fix constant buffer size calculation
2021-01-27vulkan_device: Blacklist Intel from float16 math (#5798)Rodrigo Locatti
Astral Chain crashes Intel's SPIR-V compiler when using fp16. Disable this while the vendor works on a fix.
2021-01-27Merge pull request #5778 from ReinUsesLisp/shader-dirbunnei
renderer_opengl: Avoid precompiled cache and force NV GL cache directory
2021-01-24Merge pull request #5785 from ReinUsesLisp/buffer-dmabunnei
video_core/memory_manager: Flush destination buffer on CopyBlock
2021-01-25Revert "Start of Integer flags implementation"ReinUsesLisp
This reverts #4713. The implementation in that PR is not accurate. It does not reflect the behavior seen in hardware.
2021-01-24vk_graphics_pipeline: Fix narrowing conversion on MSVCReinUsesLisp
2021-01-24Merge pull request #5807 from ReinUsesLisp/vc-warningsLC
video_core: Silence the remaining gcc warnings and enforce them
2021-01-24Merge pull request #5363 from ReinUsesLisp/vk-image-usageRodrigo Locatti
vk_texture_cache: Support image store on sRGB images with VkImageViewUsageCreateInfo
2021-01-24vk_texture_cache: Support image store on sRGB images with ↵ReinUsesLisp
VkImageViewUsageCreateInfo Vulkan 1.0 didn't support creating sRGB image views on an ABGR8 VkImage with storage usage bits. VK_KHR_maintenance2 addressed this allowing to reduce the usage bits on a VkImageView. To allow image store on non-sRGB image views when the VkImage is created with sRGB, always create VkImages without sRGB and add the sRGB format on the view.
2021-01-24vulkan_device: Lift VK_EXT_extended_dynamic_state blacklist on RDNAReinUsesLisp
It seems to be safe to use this on new drivers.
2021-01-24cmake: Enforce -Warray-bounds and -Wmissing-field-initializers globallyReinUsesLisp
2021-01-24Merge pull request #5796 from ReinUsesLisp/vertex-a-bypass-vkbunnei
vk_pipeline_cache: Properly bypass VertexA shaders
2021-01-24host_shaders/cmake: Pass --quiet to glslang to keep it quietReinUsesLisp
Silences noisy builds on toolchains.
2021-01-24video_core/cmake: Enforce -Warray-bounds and -Wmissing-field-initializersReinUsesLisp
2021-01-24video_core: Silence -Wmissing-field-initializers warningsReinUsesLisp
2021-01-24maxwell_3d: Silence array bounds warningsReinUsesLisp
2021-01-24maxwell_to_vk: Silence -Wextra warnings about using different enum typesReinUsesLisp
2021-01-23shader_ir: Fix comment typoLevi Behunin
2021-01-23video_core/cmake: Properly generate fatal errors on AftermathReinUsesLisp
Fix "message(ERROR ..." to "message(FATAL_ERROR ..." to properly stop cmake when Nsight Aftermath can't be configured.
2021-01-23nsight_aftermath_tracker: Fix build issues when enabledReinUsesLisp
Fixes a bunch of build errors when Nsight Aftermath is properly enabled.
2021-01-23vk_pipeline_cache: Properly bypass VertexA shadersReinUsesLisp
The VertexA stage is not yet implemented, but Vulkan is adding its descriptors, causing a discrepancy in the pushed descriptors and the template. This generally ends up in a driver side crash. Bypass the VertexA stage for now.