summaryrefslogtreecommitdiff
path: root/src/video_core/renderer_vulkan
diff options
context:
space:
mode:
authorGravatar bunnei2019-11-28 11:43:17 -0500
committerGravatar GitHub2019-11-28 11:43:17 -0500
commite3ee017e91ef4d713f1af8cb60c5157e40d43f18 (patch)
treee0a5b47cac1d548599b8ceba7f71b40746fe6b48 /src/video_core/renderer_vulkan
parentMerge pull request #3171 from lioncash/internal-link (diff)
parentcore/memory; Migrate over SetCurrentPageTable() to the Memory class (diff)
downloadyuzu-e3ee017e91ef4d713f1af8cb60c5157e40d43f18.tar.gz
yuzu-e3ee017e91ef4d713f1af8cb60c5157e40d43f18.tar.xz
yuzu-e3ee017e91ef4d713f1af8cb60c5157e40d43f18.zip
Merge pull request #3169 from lioncash/memory
core/memory: Deglobalize memory management code
Diffstat (limited to 'src/video_core/renderer_vulkan')
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.cpp10
-rw-r--r--src/video_core/renderer_vulkan/vk_buffer_cache.h7
2 files changed, 12 insertions, 5 deletions
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
index d2e9f4031..46da81aaa 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.cpp
@@ -24,9 +24,11 @@ CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, std::size_t size, u64 offse
24 alignment{alignment} {} 24 alignment{alignment} {}
25 25
26VKBufferCache::VKBufferCache(Tegra::MemoryManager& tegra_memory_manager, 26VKBufferCache::VKBufferCache(Tegra::MemoryManager& tegra_memory_manager,
27 Memory::Memory& cpu_memory_,
27 VideoCore::RasterizerInterface& rasterizer, const VKDevice& device, 28 VideoCore::RasterizerInterface& rasterizer, const VKDevice& device,
28 VKMemoryManager& memory_manager, VKScheduler& scheduler, u64 size) 29 VKMemoryManager& memory_manager, VKScheduler& scheduler, u64 size)
29 : RasterizerCache{rasterizer}, tegra_memory_manager{tegra_memory_manager} { 30 : RasterizerCache{rasterizer}, tegra_memory_manager{tegra_memory_manager}, cpu_memory{
31 cpu_memory_} {
30 const auto usage = vk::BufferUsageFlagBits::eVertexBuffer | 32 const auto usage = vk::BufferUsageFlagBits::eVertexBuffer |
31 vk::BufferUsageFlagBits::eIndexBuffer | 33 vk::BufferUsageFlagBits::eIndexBuffer |
32 vk::BufferUsageFlagBits::eUniformBuffer; 34 vk::BufferUsageFlagBits::eUniformBuffer;
@@ -48,9 +50,9 @@ u64 VKBufferCache::UploadMemory(GPUVAddr gpu_addr, std::size_t size, u64 alignme
48 // TODO: Figure out which size is the best for given games. 50 // TODO: Figure out which size is the best for given games.
49 cache &= size >= 2048; 51 cache &= size >= 2048;
50 52
51 const auto& host_ptr{Memory::GetPointer(*cpu_addr)}; 53 u8* const host_ptr{cpu_memory.GetPointer(*cpu_addr)};
52 if (cache) { 54 if (cache) {
53 auto entry = TryGet(host_ptr); 55 const auto entry = TryGet(host_ptr);
54 if (entry) { 56 if (entry) {
55 if (entry->GetSize() >= size && entry->GetAlignment() == alignment) { 57 if (entry->GetSize() >= size && entry->GetAlignment() == alignment) {
56 return entry->GetOffset(); 58 return entry->GetOffset();
@@ -62,7 +64,7 @@ u64 VKBufferCache::UploadMemory(GPUVAddr gpu_addr, std::size_t size, u64 alignme
62 AlignBuffer(alignment); 64 AlignBuffer(alignment);
63 const u64 uploaded_offset = buffer_offset; 65 const u64 uploaded_offset = buffer_offset;
64 66
65 if (!host_ptr) { 67 if (host_ptr == nullptr) {
66 return uploaded_offset; 68 return uploaded_offset;
67 } 69 }
68 70
diff --git a/src/video_core/renderer_vulkan/vk_buffer_cache.h b/src/video_core/renderer_vulkan/vk_buffer_cache.h
index 49f13bcdc..daa8ccf66 100644
--- a/src/video_core/renderer_vulkan/vk_buffer_cache.h
+++ b/src/video_core/renderer_vulkan/vk_buffer_cache.h
@@ -13,6 +13,10 @@
13#include "video_core/renderer_vulkan/declarations.h" 13#include "video_core/renderer_vulkan/declarations.h"
14#include "video_core/renderer_vulkan/vk_scheduler.h" 14#include "video_core/renderer_vulkan/vk_scheduler.h"
15 15
16namespace Memory {
17class Memory;
18}
19
16namespace Tegra { 20namespace Tegra {
17class MemoryManager; 21class MemoryManager;
18} 22}
@@ -58,7 +62,7 @@ private:
58 62
59class VKBufferCache final : public RasterizerCache<std::shared_ptr<CachedBufferEntry>> { 63class VKBufferCache final : public RasterizerCache<std::shared_ptr<CachedBufferEntry>> {
60public: 64public:
61 explicit VKBufferCache(Tegra::MemoryManager& tegra_memory_manager, 65 explicit VKBufferCache(Tegra::MemoryManager& tegra_memory_manager, Memory::Memory& cpu_memory_,
62 VideoCore::RasterizerInterface& rasterizer, const VKDevice& device, 66 VideoCore::RasterizerInterface& rasterizer, const VKDevice& device,
63 VKMemoryManager& memory_manager, VKScheduler& scheduler, u64 size); 67 VKMemoryManager& memory_manager, VKScheduler& scheduler, u64 size);
64 ~VKBufferCache(); 68 ~VKBufferCache();
@@ -92,6 +96,7 @@ private:
92 void AlignBuffer(std::size_t alignment); 96 void AlignBuffer(std::size_t alignment);
93 97
94 Tegra::MemoryManager& tegra_memory_manager; 98 Tegra::MemoryManager& tegra_memory_manager;
99 Memory::Memory& cpu_memory;
95 100
96 std::unique_ptr<VKStreamBuffer> stream_buffer; 101 std::unique_ptr<VKStreamBuffer> stream_buffer;
97 vk::Buffer buffer_handle; 102 vk::Buffer buffer_handle;