summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar GPUCode2023-05-24 20:32:12 +0300
committerGravatar GPUCode2023-06-18 12:45:18 +0300
commitc60eed36b7439a7921ea5e86e1300e96e30c8f8a (patch)
tree7cd7275eb350ebbbe02361c56ee7895a55c7a54b /src
parentexternals: Add vma and initialize it (diff)
downloadyuzu-c60eed36b7439a7921ea5e86e1300e96e30c8f8a.tar.gz
yuzu-c60eed36b7439a7921ea5e86e1300e96e30c8f8a.tar.xz
yuzu-c60eed36b7439a7921ea5e86e1300e96e30c8f8a.zip
memory_allocator: Remove OpenGL interop
* Appears to be unused atm
Diffstat (limited to 'src')
-rw-r--r--src/video_core/renderer_vulkan/renderer_vulkan.cpp4
-rw-r--r--src/video_core/renderer_vulkan/vk_turbo_mode.cpp2
-rw-r--r--src/video_core/vulkan_common/vulkan_memory_allocator.cpp58
-rw-r--r--src/video_core/vulkan_common/vulkan_memory_allocator.h11
4 files changed, 8 insertions, 67 deletions
diff --git a/src/video_core/renderer_vulkan/renderer_vulkan.cpp b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
index 77128c6e2..5bae8d24f 100644
--- a/src/video_core/renderer_vulkan/renderer_vulkan.cpp
+++ b/src/video_core/renderer_vulkan/renderer_vulkan.cpp
@@ -89,8 +89,8 @@ RendererVulkan::RendererVulkan(Core::TelemetrySession& telemetry_session_,
89 Settings::values.renderer_debug.GetValue())), 89 Settings::values.renderer_debug.GetValue())),
90 debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr), 90 debug_callback(Settings::values.renderer_debug ? CreateDebugCallback(instance) : nullptr),
91 surface(CreateSurface(instance, render_window.GetWindowInfo())), 91 surface(CreateSurface(instance, render_window.GetWindowInfo())),
92 device(CreateDevice(instance, dld, *surface)), memory_allocator(device, false), 92 device(CreateDevice(instance, dld, *surface)), memory_allocator(device), state_tracker(),
93 state_tracker(), scheduler(device, state_tracker), 93 scheduler(device, state_tracker),
94 swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width, 94 swapchain(*surface, device, scheduler, render_window.GetFramebufferLayout().width,
95 render_window.GetFramebufferLayout().height, false), 95 render_window.GetFramebufferLayout().height, false),
96 present_manager(instance, render_window, device, memory_allocator, scheduler, swapchain, 96 present_manager(instance, render_window, device, memory_allocator, scheduler, swapchain,
diff --git a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp
index a802d3c49..6417d7e31 100644
--- a/src/video_core/renderer_vulkan/vk_turbo_mode.cpp
+++ b/src/video_core/renderer_vulkan/vk_turbo_mode.cpp
@@ -18,7 +18,7 @@ using namespace Common::Literals;
18 18
19TurboMode::TurboMode(const vk::Instance& instance, const vk::InstanceDispatch& dld) 19TurboMode::TurboMode(const vk::Instance& instance, const vk::InstanceDispatch& dld)
20#ifndef ANDROID 20#ifndef ANDROID
21 : m_device{CreateDevice(instance, dld, VK_NULL_HANDLE)}, m_allocator{m_device, false} 21 : m_device{CreateDevice(instance, dld, VK_NULL_HANDLE)}, m_allocator{m_device}
22#endif 22#endif
23{ 23{
24 { 24 {
diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
index e28a556f8..f87c99603 100644
--- a/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
+++ b/src/video_core/vulkan_common/vulkan_memory_allocator.cpp
@@ -6,8 +6,6 @@
6#include <optional> 6#include <optional>
7#include <vector> 7#include <vector>
8 8
9#include <glad/glad.h>
10
11#include "common/alignment.h" 9#include "common/alignment.h"
12#include "common/assert.h" 10#include "common/assert.h"
13#include "common/common_types.h" 11#include "common/common_types.h"
@@ -54,17 +52,6 @@ struct Range {
54 return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT; 52 return VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
55} 53}
56 54
57constexpr VkExportMemoryAllocateInfo EXPORT_ALLOCATE_INFO{
58 .sType = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO,
59 .pNext = nullptr,
60#ifdef _WIN32
61 .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_WIN32_BIT,
62#elif __unix__
63 .handleTypes = VK_EXTERNAL_MEMORY_HANDLE_TYPE_OPAQUE_FD_BIT,
64#else
65 .handleTypes = 0,
66#endif
67};
68} // Anonymous namespace 55} // Anonymous namespace
69 56
70class MemoryAllocation { 57class MemoryAllocation {
@@ -74,14 +61,6 @@ public:
74 : allocator{allocator_}, memory{std::move(memory_)}, allocation_size{allocation_size_}, 61 : allocator{allocator_}, memory{std::move(memory_)}, allocation_size{allocation_size_},
75 property_flags{properties}, shifted_memory_type{1U << type} {} 62 property_flags{properties}, shifted_memory_type{1U << type} {}
76 63
77#if defined(_WIN32) || defined(__unix__)
78 ~MemoryAllocation() {
79 if (owning_opengl_handle != 0) {
80 glDeleteMemoryObjectsEXT(1, &owning_opengl_handle);
81 }
82 }
83#endif
84
85 MemoryAllocation& operator=(const MemoryAllocation&) = delete; 64 MemoryAllocation& operator=(const MemoryAllocation&) = delete;
86 MemoryAllocation(const MemoryAllocation&) = delete; 65 MemoryAllocation(const MemoryAllocation&) = delete;
87 66
@@ -120,31 +99,6 @@ public:
120 return memory_mapped_span; 99 return memory_mapped_span;
121 } 100 }
122 101
123#ifdef _WIN32
124 [[nodiscard]] u32 ExportOpenGLHandle() {
125 if (!owning_opengl_handle) {
126 glCreateMemoryObjectsEXT(1, &owning_opengl_handle);
127 glImportMemoryWin32HandleEXT(owning_opengl_handle, allocation_size,
128 GL_HANDLE_TYPE_OPAQUE_WIN32_EXT,
129 memory.GetMemoryWin32HandleKHR());
130 }
131 return owning_opengl_handle;
132 }
133#elif __unix__
134 [[nodiscard]] u32 ExportOpenGLHandle() {
135 if (!owning_opengl_handle) {
136 glCreateMemoryObjectsEXT(1, &owning_opengl_handle);
137 glImportMemoryFdEXT(owning_opengl_handle, allocation_size, GL_HANDLE_TYPE_OPAQUE_FD_EXT,
138 memory.GetMemoryFdKHR());
139 }
140 return owning_opengl_handle;
141 }
142#else
143 [[nodiscard]] u32 ExportOpenGLHandle() {
144 return 0;
145 }
146#endif
147
148 /// Returns whether this allocation is compatible with the arguments. 102 /// Returns whether this allocation is compatible with the arguments.
149 [[nodiscard]] bool IsCompatible(VkMemoryPropertyFlags flags, u32 type_mask) const { 103 [[nodiscard]] bool IsCompatible(VkMemoryPropertyFlags flags, u32 type_mask) const {
150 return (flags & property_flags) == flags && (type_mask & shifted_memory_type) != 0; 104 return (flags & property_flags) == flags && (type_mask & shifted_memory_type) != 0;
@@ -182,9 +136,6 @@ private:
182 const u32 shifted_memory_type; ///< Shifted Vulkan memory type. 136 const u32 shifted_memory_type; ///< Shifted Vulkan memory type.
183 std::vector<Range> commits; ///< All commit ranges done from this allocation. 137 std::vector<Range> commits; ///< All commit ranges done from this allocation.
184 std::span<u8> memory_mapped_span; ///< Memory mapped span. Empty if not queried before. 138 std::span<u8> memory_mapped_span; ///< Memory mapped span. Empty if not queried before.
185#if defined(_WIN32) || defined(__unix__)
186 u32 owning_opengl_handle{}; ///< Owning OpenGL memory object handle.
187#endif
188}; 139};
189 140
190MemoryCommit::MemoryCommit(MemoryAllocation* allocation_, VkDeviceMemory memory_, u64 begin_, 141MemoryCommit::MemoryCommit(MemoryAllocation* allocation_, VkDeviceMemory memory_, u64 begin_,
@@ -216,19 +167,14 @@ std::span<u8> MemoryCommit::Map() {
216 return span; 167 return span;
217} 168}
218 169
219u32 MemoryCommit::ExportOpenGLHandle() const {
220 return allocation->ExportOpenGLHandle();
221}
222
223void MemoryCommit::Release() { 170void MemoryCommit::Release() {
224 if (allocation) { 171 if (allocation) {
225 allocation->Free(begin); 172 allocation->Free(begin);
226 } 173 }
227} 174}
228 175
229MemoryAllocator::MemoryAllocator(const Device& device_, bool export_allocations_) 176MemoryAllocator::MemoryAllocator(const Device& device_)
230 : device{device_}, properties{device_.GetPhysical().GetMemoryProperties().memoryProperties}, 177 : device{device_}, properties{device_.GetPhysical().GetMemoryProperties().memoryProperties},
231 export_allocations{export_allocations_},
232 buffer_image_granularity{ 178 buffer_image_granularity{
233 device_.GetPhysical().GetProperties().limits.bufferImageGranularity} {} 179 device_.GetPhysical().GetProperties().limits.bufferImageGranularity} {}
234 180
@@ -271,7 +217,7 @@ bool MemoryAllocator::TryAllocMemory(VkMemoryPropertyFlags flags, u32 type_mask,
271 const u32 type = FindType(flags, type_mask).value(); 217 const u32 type = FindType(flags, type_mask).value();
272 vk::DeviceMemory memory = device.GetLogical().TryAllocateMemory({ 218 vk::DeviceMemory memory = device.GetLogical().TryAllocateMemory({
273 .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO, 219 .sType = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO,
274 .pNext = export_allocations ? &EXPORT_ALLOCATE_INFO : nullptr, 220 .pNext = nullptr,
275 .allocationSize = size, 221 .allocationSize = size,
276 .memoryTypeIndex = type, 222 .memoryTypeIndex = type,
277 }); 223 });
diff --git a/src/video_core/vulkan_common/vulkan_memory_allocator.h b/src/video_core/vulkan_common/vulkan_memory_allocator.h
index a5bff03fe..494f30f51 100644
--- a/src/video_core/vulkan_common/vulkan_memory_allocator.h
+++ b/src/video_core/vulkan_common/vulkan_memory_allocator.h
@@ -41,9 +41,6 @@ public:
41 /// It will map the backing allocation if it hasn't been mapped before. 41 /// It will map the backing allocation if it hasn't been mapped before.
42 std::span<u8> Map(); 42 std::span<u8> Map();
43 43
44 /// Returns an non-owning OpenGL handle, creating one if it doesn't exist.
45 u32 ExportOpenGLHandle() const;
46
47 /// Returns the Vulkan memory handler. 44 /// Returns the Vulkan memory handler.
48 VkDeviceMemory Memory() const { 45 VkDeviceMemory Memory() const {
49 return memory; 46 return memory;
@@ -74,11 +71,10 @@ public:
74 * Construct memory allocator 71 * Construct memory allocator
75 * 72 *
76 * @param device_ Device to allocate from 73 * @param device_ Device to allocate from
77 * @param export_allocations_ True when allocations have to be exported
78 * 74 *
79 * @throw vk::Exception on failure 75 * @throw vk::Exception on failure
80 */ 76 */
81 explicit MemoryAllocator(const Device& device_, bool export_allocations_); 77 explicit MemoryAllocator(const Device& device_);
82 ~MemoryAllocator(); 78 ~MemoryAllocator();
83 79
84 MemoryAllocator& operator=(const MemoryAllocator&) = delete; 80 MemoryAllocator& operator=(const MemoryAllocator&) = delete;
@@ -117,9 +113,8 @@ private:
117 /// Returns index to the fastest memory type compatible with the passed requirements. 113 /// Returns index to the fastest memory type compatible with the passed requirements.
118 std::optional<u32> FindType(VkMemoryPropertyFlags flags, u32 type_mask) const; 114 std::optional<u32> FindType(VkMemoryPropertyFlags flags, u32 type_mask) const;
119 115
120 const Device& device; ///< Device handle. 116 const Device& device; ///< Device handle.
121 const VkPhysicalDeviceMemoryProperties properties; ///< Physical device properties. 117 const VkPhysicalDeviceMemoryProperties properties; ///< Physical device properties.
122 const bool export_allocations; ///< True when memory allocations have to be exported.
123 std::vector<std::unique_ptr<MemoryAllocation>> allocations; ///< Current allocations. 118 std::vector<std::unique_ptr<MemoryAllocation>> allocations; ///< Current allocations.
124 VkDeviceSize buffer_image_granularity; // The granularity for adjacent offsets between buffers 119 VkDeviceSize buffer_image_granularity; // The granularity for adjacent offsets between buffers
125 // and optimal images 120 // and optimal images