1
0
Fork 0
forked from suyu/suyu

gl_buffer_cache: Remove global system getters

This commit is contained in:
ReinUsesLisp 2019-06-14 19:58:16 -03:00
parent 02ab844934
commit 2bcae41a73
3 changed files with 14 additions and 9 deletions

View file

@ -33,8 +33,8 @@ OGLBuffer CreateBuffer(std::size_t size, GLenum usage) {
CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr) CachedBufferEntry::CachedBufferEntry(VAddr cpu_addr, u8* host_ptr)
: RasterizerCacheObject{host_ptr}, host_ptr{host_ptr}, cpu_addr{cpu_addr} {} : RasterizerCacheObject{host_ptr}, host_ptr{host_ptr}, cpu_addr{cpu_addr} {}
OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size) OGLBufferCache::OGLBufferCache(RasterizerOpenGL& rasterizer, Core::System& system, std::size_t size)
: RasterizerCache{rasterizer}, stream_buffer(size, true) {} : RasterizerCache{rasterizer}, system{system}, stream_buffer(size, true) {}
OGLBufferCache::~OGLBufferCache() = default; OGLBufferCache::~OGLBufferCache() = default;
@ -53,7 +53,7 @@ OGLBufferCache::BufferInfo OGLBufferCache::UploadMemory(GPUVAddr gpu_addr, std::
bool is_written) { bool is_written) {
std::lock_guard lock{mutex}; std::lock_guard lock{mutex};
auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager(); auto& memory_manager = system.GPU().MemoryManager();
const auto host_ptr{memory_manager.GetPointer(gpu_addr)}; const auto host_ptr{memory_manager.GetPointer(gpu_addr)};
const auto cache_addr{ToCacheAddr(host_ptr)}; const auto cache_addr{ToCacheAddr(host_ptr)};
if (!host_ptr) { if (!host_ptr) {
@ -119,7 +119,7 @@ OGLBufferCache::BufferInfo OGLBufferCache::StreamBufferUpload(const void* raw_po
OGLBufferCache::BufferInfo OGLBufferCache::FixedBufferUpload(GPUVAddr gpu_addr, u8* host_ptr, OGLBufferCache::BufferInfo OGLBufferCache::FixedBufferUpload(GPUVAddr gpu_addr, u8* host_ptr,
std::size_t size, bool internalize, std::size_t size, bool internalize,
bool is_written) { bool is_written) {
auto& memory_manager = Core::System::GetInstance().GPU().MemoryManager(); auto& memory_manager = system.GPU().MemoryManager();
const auto cpu_addr = *memory_manager.GpuToCpuAddress(gpu_addr); const auto cpu_addr = *memory_manager.GpuToCpuAddress(gpu_addr);
auto entry = GetUncachedBuffer(cpu_addr, host_ptr); auto entry = GetUncachedBuffer(cpu_addr, host_ptr);
entry->SetSize(size); entry->SetSize(size);
@ -161,7 +161,7 @@ void OGLBufferCache::GrowBuffer(std::shared_ptr<CachedBufferEntry>& entry, std::
} }
std::shared_ptr<CachedBufferEntry> OGLBufferCache::GetUncachedBuffer(VAddr cpu_addr, u8* host_ptr) { std::shared_ptr<CachedBufferEntry> OGLBufferCache::GetUncachedBuffer(VAddr cpu_addr, u8* host_ptr) {
if (auto entry = TryGetReservedBuffer(host_ptr); entry) { if (auto entry = TryGetReservedBuffer(host_ptr)) {
return entry; return entry;
} }
return std::make_shared<CachedBufferEntry>(cpu_addr, host_ptr); return std::make_shared<CachedBufferEntry>(cpu_addr, host_ptr);

View file

@ -17,6 +17,10 @@
#include "video_core/renderer_opengl/gl_resource_manager.h" #include "video_core/renderer_opengl/gl_resource_manager.h"
#include "video_core/renderer_opengl/gl_stream_buffer.h" #include "video_core/renderer_opengl/gl_stream_buffer.h"
namespace Core {
class System;
}
namespace OpenGL { namespace OpenGL {
class RasterizerOpenGL; class RasterizerOpenGL;
@ -79,7 +83,7 @@ class OGLBufferCache final : public RasterizerCache<std::shared_ptr<CachedBuffer
using BufferInfo = std::pair<GLuint, GLintptr>; using BufferInfo = std::pair<GLuint, GLintptr>;
public: public:
explicit OGLBufferCache(RasterizerOpenGL& rasterizer, std::size_t size); explicit OGLBufferCache(RasterizerOpenGL& rasterizer, Core::System& system, std::size_t size);
~OGLBufferCache(); ~OGLBufferCache();
void Unregister(const std::shared_ptr<CachedBufferEntry>& entry) override; void Unregister(const std::shared_ptr<CachedBufferEntry>& entry) override;
@ -116,6 +120,8 @@ private:
void AlignBuffer(std::size_t alignment); void AlignBuffer(std::size_t alignment);
Core::System& system;
u8* buffer_ptr = nullptr; u8* buffer_ptr = nullptr;
GLintptr buffer_offset = 0; GLintptr buffer_offset = 0;
GLintptr buffer_offset_base = 0; GLintptr buffer_offset_base = 0;

View file

@ -83,9 +83,8 @@ struct DrawParameters {
RasterizerOpenGL::RasterizerOpenGL(Core::System& system, Core::Frontend::EmuWindow& emu_window, RasterizerOpenGL::RasterizerOpenGL(Core::System& system, Core::Frontend::EmuWindow& emu_window,
ScreenInfo& info) ScreenInfo& info)
: texture_cache{system, *this, device}, : texture_cache{system, *this, device}, shader_cache{*this, system, emu_window, device},
shader_cache{*this, system, emu_window, device}, system{system}, screen_info{info}, system{system}, screen_info{info}, buffer_cache{*this, system, STREAM_BUFFER_SIZE} {
buffer_cache(*this, STREAM_BUFFER_SIZE) {
OpenGLState::ApplyDefaultState(); OpenGLState::ApplyDefaultState();
shader_program_manager = std::make_unique<GLShader::ProgramManager>(); shader_program_manager = std::make_unique<GLShader::ProgramManager>();