* 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.
* Add a staging buffer to each texture. This is suboptimal since it
causes many small allocations, will only be here until I implement
a global staging buffer with memory tracking
* Make the task scheduler accept generic functions which allows for more
powerful resource control
* The old manager class had unnecessary complexity and Dolphin specific stuff
that we didn't need. So this commit completely rewrites the class to make the
implementation simpler and more robust. It does three things:
1. Make use of Vulkan timeline semaphores
2. Remove submission thread
3. Rename VKCommandManager to VKTaskScheduler
* In addition remove Unique handles from textures and buffers and give the
responsibility of their deletion to the scheduler.
* This commit implements the Vulkan swapchain required for presenting
images to the screen. Currently it's not complete as the API will
be finalized in the next subsequent commits.
* This commits continues to improve the backend code and starts work
on replacing the old OpenGLState class with a better one suited for
Vulkan. Instance creation is also finally done. The only thing left
before working with the rasterizer is the command buffer manager.
* These first few commits are mostly code dumps until the renderer interface
is finalized. This commits adds some basic Vulkan objects like textures, buffers,
sampler and translates some simpler OpenGL stuff to Vulkan.
* In addition a simple resource cache is implemented that handles recycling
of samplers, renderpasses and also stores the constant descriptor layout infos.
I've added all the resources I could deduce being used in shaders though
I might be missing something. I'm still divided though on whether the resource
cache should also handle pipelines.
* This is the basic skeleton of the new Citra Vulkan renderer. It's based on
vulkan-hpp and my own wrapper library which I wrote for my some of my projects.
Currently it doesn't even compile and the code is less than adequate.