externals: Add vma and initialize it
video_core: Move vma implementation to library
This commit is contained in:
		
							
								
								
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitmodules
									
									
									
									
										vendored
									
									
								
							| @@ -55,3 +55,6 @@ | |||||||
| [submodule "tzdb_to_nx"] | [submodule "tzdb_to_nx"] | ||||||
| 	path = externals/nx_tzdb/tzdb_to_nx | 	path = externals/nx_tzdb/tzdb_to_nx | ||||||
| 	url = https://github.com/lat9nq/tzdb_to_nx.git | 	url = https://github.com/lat9nq/tzdb_to_nx.git | ||||||
|  | [submodule "externals/vma/vma"] | ||||||
|  | 	path = externals/vma/vma | ||||||
|  | 	url = https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator | ||||||
|   | |||||||
							
								
								
									
										5
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										5
									
								
								externals/CMakeLists.txt
									
									
									
									
										vendored
									
									
								
							| @@ -143,6 +143,11 @@ endif() | |||||||
| # TZDB (Time Zone Database) | # TZDB (Time Zone Database) | ||||||
| add_subdirectory(nx_tzdb) | add_subdirectory(nx_tzdb) | ||||||
|  |  | ||||||
|  | # VMA | ||||||
|  | add_library(vma vma/vma.cpp) | ||||||
|  | target_include_directories(vma PUBLIC ./vma/vma/include) | ||||||
|  | target_link_libraries(vma PRIVATE Vulkan::Headers) | ||||||
|  |  | ||||||
| if (NOT TARGET LLVM::Demangle) | if (NOT TARGET LLVM::Demangle) | ||||||
|     add_library(demangle demangle/ItaniumDemangle.cpp) |     add_library(demangle demangle/ItaniumDemangle.cpp) | ||||||
|     target_include_directories(demangle PUBLIC ./demangle) |     target_include_directories(demangle PUBLIC ./demangle) | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								externals/vma/vma
									
									
									
									
										vendored
									
									
										Submodule
									
								
							
							
								
								
								
								
								
							
						
						
									
										1
									
								
								externals/vma/vma
									
									
									
									
										vendored
									
									
										Submodule
									
								
							 Submodule externals/vma/vma added at 0aa3989b8f
									
								
							
							
								
								
									
										5
									
								
								externals/vma/vma.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								externals/vma/vma.cpp
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,5 @@ | |||||||
|  | // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | ||||||
|  | // SPDX-License-Identifier: GPL-2.0-or-later | ||||||
|  |  | ||||||
|  | #define VMA_IMPLEMENTATION | ||||||
|  | #include <vk_mem_alloc.h> | ||||||
| @@ -291,7 +291,7 @@ target_link_options(video_core PRIVATE ${FFmpeg_LDFLAGS}) | |||||||
|  |  | ||||||
| add_dependencies(video_core host_shaders) | add_dependencies(video_core host_shaders) | ||||||
| target_include_directories(video_core PRIVATE ${HOST_SHADERS_INCLUDE}) | target_include_directories(video_core PRIVATE ${HOST_SHADERS_INCLUDE}) | ||||||
| target_link_libraries(video_core PRIVATE sirit Vulkan::Headers) | target_link_libraries(video_core PRIVATE sirit Vulkan::Headers vma) | ||||||
|  |  | ||||||
| if (ENABLE_NSIGHT_AFTERMATH) | if (ENABLE_NSIGHT_AFTERMATH) | ||||||
|     if (NOT DEFINED ENV{NSIGHT_AFTERMATH_SDK}) |     if (NOT DEFINED ENV{NSIGHT_AFTERMATH_SDK}) | ||||||
|   | |||||||
| @@ -22,6 +22,10 @@ | |||||||
| #include <adrenotools/bcenabler.h> | #include <adrenotools/bcenabler.h> | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  | #define VMA_STATIC_VULKAN_FUNCTIONS 0 | ||||||
|  | #define VMA_DYNAMIC_VULKAN_FUNCTIONS 1 | ||||||
|  | #include <vk_mem_alloc.h> | ||||||
|  |  | ||||||
| namespace Vulkan { | namespace Vulkan { | ||||||
| using namespace Common::Literals; | using namespace Common::Literals; | ||||||
| namespace { | namespace { | ||||||
| @@ -592,9 +596,26 @@ Device::Device(VkInstance instance_, vk::PhysicalDevice physical_, VkSurfaceKHR | |||||||
|  |  | ||||||
|     graphics_queue = logical.GetQueue(graphics_family); |     graphics_queue = logical.GetQueue(graphics_family); | ||||||
|     present_queue = logical.GetQueue(present_family); |     present_queue = logical.GetQueue(present_family); | ||||||
|  |  | ||||||
|  |     const VmaVulkanFunctions functions = { | ||||||
|  |         .vkGetInstanceProcAddr = dld.vkGetInstanceProcAddr, | ||||||
|  |         .vkGetDeviceProcAddr = dld.vkGetDeviceProcAddr, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     const VmaAllocatorCreateInfo allocator_info = { | ||||||
|  |         .physicalDevice = physical, | ||||||
|  |         .device = *logical, | ||||||
|  |         .pVulkanFunctions = &functions, | ||||||
|  |         .instance = instance, | ||||||
|  |         .vulkanApiVersion = VK_API_VERSION_1_1, | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     vk::Check(vmaCreateAllocator(&allocator_info, &allocator)); | ||||||
| } | } | ||||||
|  |  | ||||||
| Device::~Device() = default; | Device::~Device() { | ||||||
|  |     vmaDestroyAllocator(allocator); | ||||||
|  | } | ||||||
|  |  | ||||||
| VkFormat Device::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage, | VkFormat Device::GetSupportedFormat(VkFormat wanted_format, VkFormatFeatureFlags wanted_usage, | ||||||
|                                     FormatType format_type) const { |                                     FormatType format_type) const { | ||||||
|   | |||||||
| @@ -13,6 +13,8 @@ | |||||||
| #include "common/settings.h" | #include "common/settings.h" | ||||||
| #include "video_core/vulkan_common/vulkan_wrapper.h" | #include "video_core/vulkan_common/vulkan_wrapper.h" | ||||||
|  |  | ||||||
|  | VK_DEFINE_HANDLE(VmaAllocator) | ||||||
|  |  | ||||||
| // Define all features which may be used by the implementation here. | // Define all features which may be used by the implementation here. | ||||||
| // Vulkan version in the macro describes the minimum version required for feature availability. | // Vulkan version in the macro describes the minimum version required for feature availability. | ||||||
| // If the Vulkan version is lower than the required version, the named extension is required. | // If the Vulkan version is lower than the required version, the named extension is required. | ||||||
| @@ -618,6 +620,7 @@ private: | |||||||
|  |  | ||||||
| private: | private: | ||||||
|     VkInstance instance;         ///< Vulkan instance. |     VkInstance instance;         ///< Vulkan instance. | ||||||
|  |     VmaAllocator allocator;      ///< VMA allocator. | ||||||
|     vk::DeviceDispatch dld;      ///< Device function pointers. |     vk::DeviceDispatch dld;      ///< Device function pointers. | ||||||
|     vk::PhysicalDevice physical; ///< Physical device. |     vk::PhysicalDevice physical; ///< Physical device. | ||||||
|     vk::Device logical;          ///< Logical device. |     vk::Device logical;          ///< Logical device. | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user