Vulkan validation layers complain about WaR hazards since the VS range overlaps with the FS range when the buffer is invalidated. To solve this, split them into separate buffers
* Manifest mode is very convient but doesn't provide the flexibility we
need. The main issue is that there is no way to conditionally install
libraries. To bypass this we can invoke vcpkg directly using a helper
function vcpkg_add_package that installs the library when invoked.
* Citra's fork of dynarmic is getting old quite fast and accumulating
technical debt which gets harder and harder to account for as time
goes on. So to have the access to the latest and greatest features we
need to use the upstream version which yuzu also uses. This requires
some extra patches which are contained in the following commits.
* shaderc is notoriously hard to link to and often causes link errors.
glslang seems to work better and is a smaller library overall so
that's a win for the backend.
* Manually including libraries into the project while a perfectly acceptable solution
leads to slow updates and large maintainance costs. To address this
shortcoming we are introducing a package manager namely vcpkg into the
codebase to handle the download and build of most external dependencies. Conan
was also considered but vcpkg was chosen due to the centralized nature
of the project. To achieve the integration the CMake configuration has
been altered but not by much:
1. Packages handled by vcpkg have been moved from
externals/CMakeLists.txt to the root one to make them available to
all subdirectories.
2. In addition now find_package is used in accordance to the vcpkg
recommendations.
3. All libraries built by vcpkg have been updated to their latest
available version, except for Qt because our codebase isn't
compatible with Qt 6.0 yet.
Currently there are build issues caused by the fmtlib upgrade.
Another question is how to handle large libraries like Qt, Boost and
SDL2 which will be addressed in a later commit.