summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp10
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.h8
-rw-r--r--src/video_core/renderer_opengl/gl_rasterizer.cpp5
3 files changed, 14 insertions, 9 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index 3ce61c5cd..fb3aedd07 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -33,8 +33,8 @@ OGLBuffer CreateBuffer(std::size_t size, GLenum usage) {
33CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr) 33CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr)
34 : RasterizerCacheObject{host_ptr}, host_ptr{host_ptr}, cpu_addr{cpu_addr} {} 34 : RasterizerCacheObject{host_ptr}, host_ptr{host_ptr}, cpu_addr{cpu_addr} {}
35 35
36OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size) 36OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, Core::System& system, std::size_t size)
37 : RasterizerCache{rasterizer}, stream_buffer(size, true) {} 37 : RasterizerCache{rasterizer}, system{system}, stream_buffer(size, true) {}
38 38
39OGLBufferCache::~OGLBufferCache() = default; 39OGLBufferCache::~OGLBufferCache() = default;
40 40
@@ -53,7 +53,7 @@ OGLBufferCache::BufferInfo OGLBufferCache::UploadMemory(GPUVAddr gpu_addr, std::
53 bool is_written) { 53 bool is_written) {
54 std::lock_guard lock{mutex}; 54 std::lock_guard lock{mutex};
55 55
56 auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager(); 56 auto& memory_manager = system.GPU().MemoryManager();
57 const auto host_ptr{memory_manager.GetPointer(gpu_addr)}; 57 const auto host_ptr{memory_manager.GetPointer(gpu_addr)};
58 const auto cache_addr{ToCacheAddr(host_ptr)}; 58 const auto cache_addr{ToCacheAddr(host_ptr)};
59 if (!host_ptr) { 59 if (!host_ptr) {
@@ -119,7 +119,7 @@ OGLBufferCache::BufferInfo OGLBufferCache::StreamBufferUpload(const void* raw_po
119OGLBufferCache::BufferInfo OGLBufferCache::FixedBufferUpload(GPUVAddr gpu_addr, u8* host_ptr, 119OGLBufferCache::BufferInfo OGLBufferCache::FixedBufferUpload(GPUVAddr gpu_addr, u8* host_ptr,
120 std::size_t size, bool internalize, 120 std::size_t size, bool internalize,
121 bool is_written) { 121 bool is_written) {
122 auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager(); 122 auto& memory_manager = system.GPU().MemoryManager();
123 const auto cpu_addr = *memory_manager.GpuToCpuAddress(gpu_addr); 123 const auto cpu_addr = *memory_manager.GpuToCpuAddress(gpu_addr);
124 auto entry = GetUncachedBuffer(cpu_addr, host_ptr); 124 auto entry = GetUncachedBuffer(cpu_addr, host_ptr);
125 entry->SetSize(size); 125 entry->SetSize(size);
@@ -161,7 +161,7 @@ void OGLBufferCache::GrowBuffer(std::shared_ptr<CachedBufferEntry>& entry, std::
161} 161}
162 162
163std::shared_ptr<CachedBufferEntry> OGLBufferCache::GetUncachedBuffer(VAddr cpu_addr, u8* host_ptr) { 163std::shared_ptr<CachedBufferEntry> OGLBufferCache::GetUncachedBuffer(VAddr cpu_addr, u8* host_ptr) {
164 if (auto entry = TryGetReservedBuffer(host_ptr); entry) { 164 if (auto entry = TryGetReservedBuffer(host_ptr)) {
165 return entry; 165 return entry;
166 } 166 }
167 return std::make_shared<CachedBufferEntry>(cpu_addr, host_ptr); 167 return std::make_shared<CachedBufferEntry>(cpu_addr, host_ptr);
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.h b/src/video_core/renderer_opengl/gl_buffer_cache.h
index 4267a5067..19d643e41 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.h
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.h
@@ -17,6 +17,10 @@
17#include "video_core/renderer_opengl/gl_resource_manager.h" 17#include "video_core/renderer_opengl/gl_resource_manager.h"
18#include "video_core/renderer_opengl/gl_stream_buffer.h" 18#include "video_core/renderer_opengl/gl_stream_buffer.h"
19 19
20namespace Core {
21class System;
22}
23
20namespace OpenGL { 24namespace OpenGL {
21 25
22class RasterizerOpenGL; 26class RasterizerOpenGL;
@@ -79,7 +83,7 @@ class OGLBufferCache final : public RasterizerCache<std::shared_ptr<CachedBuffer
79 using BufferInfo = std::pair<GLuint, GLintptr>; 83 using BufferInfo = std::pair<GLuint, GLintptr>;
80 84
81public: 85public:
82 explicit OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size); 86 explicit OGLBufferCache(RasterizerOpenGL& rasterizer, Core::System& system, std::size_t size);
83 ~OGLBufferCache(); 87 ~OGLBufferCache();
84 88
85 void Unregister(const std::shared_ptr<CachedBufferEntry>& entry) override; 89 void Unregister(const std::shared_ptr<CachedBufferEntry>& entry) override;
@@ -116,6 +120,8 @@ private:
116 120
117 void AlignBuffer(std::size_t alignment); 121 void AlignBuffer(std::size_t alignment);
118 122
123 Core::System& system;
124
119 u8* buffer_ptr = nullptr; 125 u8* buffer_ptr = nullptr;
120 GLintptr buffer_offset = 0; 126 GLintptr buffer_offset = 0;
121 GLintptr buffer_offset_base = 0; 127 GLintptr buffer_offset_base = 0;
diff --git a/src/video_core/renderer_opengl/gl_rasterizer.cpp b/src/video_core/renderer_opengl/gl_rasterizer.cpp
index d1790f24f..35ba84235 100644
--- a/src/video_core/renderer_opengl/gl_rasterizer.cpp
+++ b/src/video_core/renderer_opengl/gl_rasterizer.cpp
@@ -83,9 +83,8 @@ struct DrawParameters {
83 83
84RasterizerOpenGL::RasterizerOpenGL(Core::System& system, Core::Frontend::EmuWindow& emu_window, 84RasterizerOpenGL::RasterizerOpenGL(Core::System& system, Core::Frontend::EmuWindow& emu_window,
85 ScreenInfo& info) 85 ScreenInfo& info)
86 : texture_cache{system, *this, device}, 86 : texture_cache{system, *this, device}, shader_cache{*this, system, emu_window, device},
87 shader_cache{*this, system, emu_window, device}, system{system}, screen_info{info}, 87 system{system}, screen_info{info}, buffer_cache{*this, system, STREAM_BUFFER_SIZE} {
88 buffer_cache(*this, STREAM_BUFFER_SIZE) {
89 OpenGLState::ApplyDefaultState(); 88 OpenGLState::ApplyDefaultState();
90 89
91 shader_program_manager = std::make_unique<GLShader::ProgramManager>(); 90 shader_program_manager = std::make_unique<GLShader::ProgramManager>();