Commit Graph

9219 Commits

Author SHA1 Message Date
5cad914b73 vcpkg: Fine tune required ffmpeg dependecies 2022-07-16 16:35:46 +03:00
d865780291 vcpkg: Dont't build Qt from source
* Currently vcpkg has no mechanism of consistently handling prebuilt
  libraries. This means that large libraries like Qt need special
  treatment
2022-07-16 16:32:51 +03:00
60f0269569 core: Replace boost::optional with std::optional 2022-07-16 15:10:22 +03:00
ceadee0358 renderer_vulkan: Fix swapchain creation on Win32 2022-07-15 21:34:36 +03:00
a9b96789d7 Core: Port Exclusive memory impl from yuzu 2022-07-15 20:14:15 +03:00
79379f21a4 Common: Add CPU feature detection for ARM64 2022-07-15 20:13:27 +03:00
0e98fb3780 dynarmic: Update dynarmic to upstream
* 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.
2022-07-15 20:06:51 +03:00
d373d74804 vk_shader_gen: Switch shader compiler to glslang
* 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.
2022-07-15 19:02:41 +03:00
a9436e01ca tests: Update test suite for Catch2 3.0.1 2022-07-15 17:17:18 +03:00
e7a6af73c1 renderer_vulkan: Fix type in Win32 surface creation 2022-07-15 16:43:54 +03:00
9850c23a03 cmake: Adjust link libraries to vcpkg produced targets 2022-07-15 16:43:51 +03:00
55e5c4edc9 logging: adapt to changes in fmt 8.1 2022-07-15 16:10:12 +03:00
f990a842da vcpkg: Enable all glad extensions 2022-07-15 08:48:30 +03:00
b5e4ec35e3 Introduce vcpkg for dependency management
* 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.
2022-07-14 18:42:33 +03:00
b1b61683f2 renderer_vulkan: Fix surface creation 2022-07-04 11:54:01 +03:00
bbb4f1b040 renderer_vulkan: Fix broken synchronization
* The GPU was always 1 tick ahead, making all wait operations nops.
2022-07-03 23:51:19 +03:00
5f942fb4c9 renderer_vulkan: Drop dependency on Vulkan-SDK
* Dynamically fetch vulkan function pointers and checkout Vulkan-Headers.
This way we are not tied by the installed SDK version
2022-07-03 20:38:46 +03:00
7c72060662 renderer_vulkan: Drop VK prefix
* All the classes are in the Vulkan namespace, thus making it superfluous
2022-07-03 16:47:59 +03:00
5b918cb535 renderer_vulkan: Cleanup unused functions in renderer 2022-07-03 16:44:23 +03:00
61932f9a6c renderer_vulkan: Include Vulkan memory allocator 2022-07-03 16:39:23 +03:00
8a2cc15cd1 Fix some C++ 20 warnings 2022-06-24 10:37:22 +03:00
18cc68c687 renderer_vulkan: Fix mipmap generation 2022-06-19 12:44:44 +03:00
69bde2b13b renderer_vulkan: Fix culling related issues 2022-06-19 00:09:02 +03:00
816a846cfb renderer_vulkan: Fix texture allocation and destruction logic 2022-06-18 15:04:15 +03:00
4dd4f2170d renderer_vulkan: 2D shapes demo fully functional now 2022-06-16 17:48:03 +03:00
0eff9ad215 renderer_vulkan: Surface fills and dual screen rendering working 2022-06-16 11:51:23 +03:00
d4b88ac158 renderer_vulkan: Texture management fixes 2022-06-15 22:34:02 +03:00
ed9000d0ec renderer_vulkan: Fix many validation errors 2022-06-14 14:29:52 +03:00
a657ef33e6 More fixes 2022-06-13 16:34:19 +03:00
87db7a6888 Successful build 2022-06-12 18:06:00 +03:00
ba6795b6cc Refactor Vulkan state and pipeline builders 2022-06-08 00:41:19 +03:00
a6fc19d7d9 renderer_vulkan: Initial rasterizer cache vulkan port 2022-05-30 08:03:49 +03:00
06cecba63f renderer_vulkan: Include pipeline builder class and finish VulanState 2022-05-20 11:02:25 +03:00
0d0712f7d7 renderer_vulkan: Add very basic pipeline and shader cache 2022-05-14 18:31:03 +03:00
72340c5685 renderer_vulkan: Port rasterizer to Vulkan
* This is a massive code dump so I'm not going to even attempt to explain what changed
2022-05-13 19:16:53 +03:00
1f967b4770 renderer_vulkan: Refactor VulkanState class and switch to dynamic rendering
* Dynamic rendering gives us no performance loss on desktop while removing the need
to cache and manager many renderpass and framebuffer objects
2022-05-06 22:26:57 +03:00
5858bd3116 renderer_vulkan: Drop vk_pipeline.h/cpp 2022-05-05 17:00:50 +03:00
ab9b84f721 renderer_vulkan: General cleanups
* 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
2022-05-05 16:55:33 +03:00
f6988d4a8e vulkan: Add Vulkan memory allocator 2022-05-05 14:56:34 +03:00
bc440ce6a3 renderer_vulkan: Rewrite and rename command buffer manager class
* 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.
2022-05-02 20:27:22 +03:00
b6099d5504 common: Implement Common::Event with Common::Flag
* Ports the following commit from dolphin: dolphin-emu/dolphin@48bd9040
2022-04-30 22:32:47 +03:00
6b3767f1b7 renderer_vulkan: Port Vulkan command buffer manager from Dolphin
* In addition to the new command buffer manager this commit
also ports changes to the synchronization objects.
2022-04-30 22:28:37 +03:00
4151fad10b vk_texture: Implement non-owning texture
* Swapchain images must not be destroyed since their cleanup is handled automatically.
2022-04-30 18:58:16 +03:00
2ec7f37d69 renderer_vulkan: Add vulkan swapchain class
* 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.
2022-04-30 15:50:38 +03:00
47e48617d5 renderer_vulkan: Implement vulkan instance creation and state manager
* 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.
2022-04-30 13:36:30 +03:00
98332af610 renderer_vulkan: Improve texture interface and add framebuffer support 2022-04-28 19:37:55 +03:00
84f97fc77e renderer_vulkan: Implement basic utility classes
*  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.
2022-04-28 18:14:13 +03:00
c89434627a CMake: Bump source to C++ 20
* We can use shiny new std::span, wow
2022-04-26 21:25:39 +03:00
32bab7d1ba video_core: Initial Vulkan renderer dump
* 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.
2022-04-26 21:20:31 +03:00
593b0b2d8f Add svcGetSystemInfo 0x20000 to get citra information (#5955) 2022-04-14 19:58:44 +05:30