diff options
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.cpp | 10 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_buffer_cache.h | 8 | ||||
| -rw-r--r-- | src/video_core/renderer_opengl/gl_rasterizer.cpp | 5 |
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) { | |||
| 33 | CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr) | 33 | CachedBufferEntry::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 | ||
| 36 | OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size) | 36 | OGLBufferCache::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 | ||
| 39 | OGLBufferCache::~OGLBufferCache() = default; | 39 | OGLBufferCache::~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 | |||
| 119 | OGLBufferCache::BufferInfo OGLBufferCache::FixedBufferUpload(GPUVAddr gpu_addr, u8* host_ptr, | 119 | OGLBufferCache::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 | ||
| 163 | std::shared_ptr<CachedBufferEntry> OGLBufferCache::GetUncachedBuffer(VAddr cpu_addr, u8* host_ptr) { | 163 | std::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 | ||
| 20 | namespace Core { | ||
| 21 | class System; | ||
| 22 | } | ||
| 23 | |||
| 20 | namespace OpenGL { | 24 | namespace OpenGL { |
| 21 | 25 | ||
| 22 | class RasterizerOpenGL; | 26 | class 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 | ||
| 81 | public: | 85 | public: |
| 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 | ||
| 84 | RasterizerOpenGL::RasterizerOpenGL(Core::System& system, Core::Frontend::EmuWindow& emu_window, | 84 | RasterizerOpenGL::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>(); |